...
ECMP and LAG load balance is seen while varying GRE fields.
Packet format - Eth+MPLS[3]+IPv4+GRE Topmost label action - Pop and lookup Load balance profile: hw-module profile load-balance algorithm mpls-lsr-ler Linecard: Jericho/Jericho+ Platform: NCS5500 Image: 734 and above Trigger: None, issue is seen with above said packet.
None
Packet format - Eth+MPLS[2 or 3 labels]+IPv4+GRE Topmost label action - Pop and lookup Load balance profile: hw-module profile load-balance algorithm mpls-lsr-ler Platform: NCS5500 Linecard: Jericho/Jericho+ Image: 734 and above Trigger: None, issue is seen with above said packet. Impact of the issue: GRE parameters like (key, seq no) are considered as hash tuples for these flows and change in these parameters can result into traffic getting load balanced. Why is the issue seen for errata flows only: SWAN flows are MPLS partial termination (pop-and-lookup: pop the topmost label and do lookup on the label underneath to forward the packet) flows with typical packet format as EthoMPLS2/3oIPvx. 1. There is a limitation in Jericho asic documented in Section [19.3.6.3] of BCM88670-PG109, due to which for partial terminated MPLS label stack, CLB has unexpected behaviour and SLB should be used for load balancing. Due to this limitation, MPLS label stack is not considered for hash for these flows. 2. There is an errata in Jericho while doing partial MPLS termination, due to which the header offsets pointing to the different layers in the packet become corrupted and hence IP data can't be used for load balancing by CLB. Using CLB the device might end up picking data from wrong offset considering it as IP SIP/DIP or L4 and this could cause out of order delivery of packets. See errata 8837X-8867X-ER119 (EID#45: VTT Deletes Some of the MPLS Opportunistic Parsing Data). From the above explanation its clear that only SLB is used for load balancing of these errata flows. Note that due to issue 2, there was an out of order issue observed for SWAN flows. To handle this, a new load-balancing profile was developed called "mpls-lsr-ler" profile, using below 2 changes in r73x: CSCwc20095: BCM Errata EID#45 Flows in swan network: wrong LB for pop-and-lookup/forward operation CSCwb38601: Labeled flow gets load balanced when router performs pop-and-lookup/forward operation On Jericho, there are 2 blocks together used for hashing: CLB: - Less flexibility, takes data from fixed offset. - Uses forwarding header for hashing (FWD header, FWD header+1 etc.) SLB: - More programmable to accommodate different flows - 8 programs, 12 pre-selectors - Fixed offsets, per program Summary of "mpls-lsr-ler" profile change: - Disable CLB for all 2/3 MPLS packets with IPv4/IPv6 payloads. - Create SLB program to handle these flows based on flow info and program availability. Due to above mentioned errata 1 and 2, the header offsets are wrong for MPLS labels and IP start. The only correct offsets are L4 start or IP end. Hence all the errata flow programs are written to get the IP and L4 from L4 offset. Note that GRE is not considered as a separate header on Jericho, its considered as part of IP. For Eth+MPLS[2 or 3 labels]+IPv4+GRE packet the only correct offset is at IP end, which is GRE end. If none of the options in GRE header are used, it will be 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |C| |K|S| Reserved0 | Ver | Protocol Type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ This will be used as DIP and word above will be used as SIP (which is DIP for IPv4). Now, if Key field or Seq no is set, IP end will point to that and SIP/DIP will be taken backwards from that location. Is there a way to avoid? The only way to avoid this case is to remove non-L4 errata flows - This will result in poor entropy for no next header and GRE flows that don't use GRE fields. - Need to understand if the GRE fields are used for errata flows before any decision is made. The "mpls-lsr-ler" profile contains below programs: 0. Default Program 1. Errata Flow: EthoMPLS2/3oIPv4oL4 2. Errata Flow: EthoMPLS2/3oIPv4 3. Errata Flow: EthoMPLS2/3oIPv6oL4 4. Non-Errata Flow: EthoMPLS1/3oIPv4oL4 5. Non-Errata Flow: EthoMPLS1/3oIPv4 6. Non-Errata Flow: EthoMPLS1/3oIPv6oL4 7. Non-Errata Flow: EthoMPLS1/3oIPv6