VPWS with FAT-PW
Load vpws.fat.pw.init.cfg
#IOS-XE (R1-R6, CE1,8)
config replace flash:vpws.fat.pw.init.cfg
Configure a VPWS between CE1 and CE8. Enable FAT-PW so that traffic is load balanced in the core using the multiple available ECMP paths between R1 and R6.
CE1 and CE8 are already pre-configured with multiple IP addresses for testing. Configure load balancing for both SRC/DST IP.
Answer
#R1
int gi4
no ip address
service instance 1 eth
encapsulation default
exit
!
template type pseudowire FAT
encapsulation mpls
load-balance flow ip src-dst-ip
load-balance flow-label both
!
l2vpn xconnect context CE1_CE8
member gi4 service-instance 1
member 6.6.6.6 18 template FAT
#R6
int gi6
no ip address
service instance 1 eth
encapsulation default
exit
!
template type pseudowire FAT
encapsulation mpls
load-balance flow ip src-dst-ip
load-balance flow-label both
!
l2vpn xconnect context CE1_CE8
member gi6 service-instance 1
member 1.1.1.1 18 template FAT
Explanation
The FAT-PW feature (Flow-aware Transport for Pseudowires) enables proper per-flow load balancing in the MPLS core. When this feature is enabled, the router adds an additional label at the bottom of the stack that identifies a flow. The egress PE simply discards this label. Its only purpose is to force LSRs to properly keep all flows in the same ECMP path.
Without this feature, all traffic would take the same single path. This is because all traffic in the pseudowire will have the same bottom service label. When MPLS is used, P routers use the bottom label for the ECMP hash. This allows a P router to not need to inspect upper layer headers such as the L3 src/dst IP.
Negotiation of the FAT-PW feature requires LDP, because both routers must agree that they will receive a “bogus” bottom label that must be discarded.
To enable FAT-PW we must define the load balancing method, and then enable the flow-label in either one or both directions.
template type pseudowire name
load-balance flow [ethernet|ip] [dst-mac|src-mac|src-dst-mac|dst-ip|src-ip|src-dst-ip]
load-balance flow-label both|receive|transmit
We can see that the flow label is negotioated in the LDP mapping message for FEC128:

We can also verify this on the CLI:

We can see that traffic sourced from CE1 now has three labels as it leaves R1. The bottom label is the flow label.

Note that this can also be enabled on IOS-XR using:
l2vpn
pw-class FAT
encapsulation mpls
load-balancing
flow-label both
Further Reading
Nick Russo, SPv4 Guide, pg. 1582
Last updated