Broadcast, Unknown Unicast, and Multicast Packet Path
The following procedure steps through debugging the packet path for broadcast, unknown unicast, and multicast (BUM) traffic in Contrail Networking. In this example, the virtual machines (VMs) listed are in the same subnet 70.70.70.0/24.
The ToR Service Node (TSN) actively holds the contrail-tor-agent and is responsible for:
Acting as a receiver of all BUM traffic coming from the ToR switch.
Acting as DNS/DHCP responder for the BMS connected to the ToR switch.
Contrail Networking releases earlier than 5.x, used an Open vSwitch Database (OVSDB)-managed VXLAN environment.
Topology example for an OVSDB-managed VXLAN:
Top-of-Rack Switch 1 (ToR SW1) - 10.204.74.229 (lo0.0 = 1.1.1.229)
Top-of-Rack Switch 2 (ToR SW2) - 10.204.74.230 (lo0.0 = 1.1.1.230)
ToR Services Node 1 (TSN1) = 10.219.94.7
ToR Services Node 2 (TSN2) = 10.219.94.8
Controller1 = 10.219.94.4
Controller2 = 10.219.94.5
Controller3 = 10.219.94.6
Compute1 = 10.219.94.9
Compute2 = 19.219.94.18
Virtual Network (VN) = 70.70.70.0/24
Virtual Machine 1 (VM1) = 70.70.70.3 residing on Compute2
Virtual Machine 2 (VM2) = 70.70.70.5 residing on Compute1
Bare Metal Server 1 (BMS1) = 70.70.70.100
Bare Metal Server 2 (BMS2) = 70.70.70.101
Run the
set protocols ovsdb interfaces <interface>command to configure the physical interfaces that you want the OVSDB protocol to manage.Example:
set protocols ovsdb interfaces ge-0/0/46 set protocols ovsdb interfaces ge-0/0/90
The ToR interfaces from which the BMS hangs are marked as
ovsdb interfaces.View packets coming into these interfaces by displaying the
ovsdb mactable for the ToR switch.Example:
root@QFX5100-229> show ovsdb mac Logical Switch Name: Contrail-9ed1f70a-6eac-4cdb-837a-1579728fd9a1 Mac IP Encapsulation Vtep Address Address Address ff:ff:ff:ff:ff:ff 0.0.0.0 Vxlan over Ipv4 1.1.1.229 40:a6:77:d8:37:1d 0.0.0.0 Vxlan over Ipv4 1.1.1.229 02:3b:ce:56:61:98 0.0.0.0 Vxlan over Ipv4 10.219.94.18 02:53:89:c4:29:1c 0.0.0.0 Vxlan over Ipv4 10.219.94.18 02:72:e9:7a:cd:f5 0.0.0.0 Vxlan over Ipv4 10.219.94.9 02:75:a1:33:65:3c 0.0.0.0 Vxlan over Ipv4 10.219.94.9 ff:ff:ff:ff:ff:ff 0.0.0.0 Vxlan over Ipv4 10.219.94.7 {master:0}
The entry marked in red (
ff:ff:ff:ff:ff:ff:ff- broadcast route) indicates the next hop for a BUM packet coming into the ToR SW’sovsdb interface. In this case, VTEP address10.219.94.7is the next hop, which is TSN1. This changes based on which TSN has the activecontrail-tor-agentfor the ToR switch in question. With this, the BUM packet is forwarded to the TSN node in a VXLAN tunnel (local VTEP source interface is1.1.1.229and RVTEP source interface is10.219.94.7).The VXLAN encapsulated packet is sent with a VXLAN Network Identifier (VNI) that is predetermined by Contrail Networking when logical interfaces are created. For example, when
ge-0/0/46was configured as a logical port in Contrail Networking, the following configuration was committed on the ToR.Example:
set vlans Contrail-9ed1f70a-6eac-4cdb-837a-1579728fd9a1 interface ge-0/0/46.0 set vlans Contrail-9ed1f70a-6eac-4cdb-837a-1579728fd9a1 interface ge-0/0/90.0 set vlans Contrail-9ed1f70a-6eac-4cdb-837a-1579728fd9a1 vxlan vni 4As the VXLAN encapsulated packet arrives on the TSN node, let’s examine how the vRouter handles this packet.
Run
vxlan --dumpto dump the VXLAN table. The VXLAN table maps a network ID to a next hop.Example:
root@contrail61:~# vxlan --dump VXLAN Table VNID NextHop ---------------- 4 13In the example, next hop
13is programmed for VNI4.Run
nh --get <nh id>to display the next-hop details and determine the virtual routing and forwarding (VRF) associated.Example:
root@contrail61:~# nh --get 13 Id:13 Type:Vrf_Translate Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Vxlan, Vrf:1Run the following command to display all of the entries from the bridge table:
rt --dump <vrf id> --family bridge
Example:
root@contrail61:~# rt --dump 1 --family bridge Flags: L=Label Valid, Df=DHCP flood vRouter bridge table 0/1 Index DestMac Flags Label/VNID Nexthop 30780 0:1a:a0:e:30:26 - 1 57812 2:53:89:c4:29:1c LDf 17 15 70532 2:3b:ce:56:61:98 LDf 20 15 87024 2:72:e9:7a:cd:f5 LDf 17 14 97192 ff:ff:ff:ff:ff:ff LDf 4 24 121160 0:1a:a0:a:b4:87 - 1 225832 40:a6:77:d8:37:1d LDf 4 19 237084 0:11:a:6c:50:d4 Df - 3 244992 aa:bb:cc:dd:3e:f4 - 1 252916 0:0:5e:0:1:0 Df - 3 256476 2:75:a1:33:65:3c LDf 20 14
In the example bridge table, since we are tracing the BUM packet path, we need to examine the ff:ff:ff:ff:ff:ff:ff route by selecting the next hop programmed. In the example, it is 24. Note that a series of composite next hops are programmed.
Run
nh --get <nh id>to display the next-hop details.Example:
root@contrail61:~# nh --get 24 Id:24 Type:Composite Fmly:AF_BRIDGE Rid:0 Ref_cnt:4 Vrf:1 Flags:Valid, Multicast, L2, Sub NH(label): 20(0) 22(0) 21(0) Id:20 Type:Composite Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Tor, Sub NH(label): 19(4) Id:19 Type:Tunnel Fmly: AF_INET Rid:0 Ref_cnt:3 Vrf:0 Flags:Valid, Vxlan, Oif:0 Len:14 Flags Valid, Vxlan, Data:00 00 5e 00 01 21 00 11 0a 6c 50 d4 08 00 Vrf:0 Sip:10.219.94.7 Dip:1.1.1.229 << Source where the BUM Traffic came from. Id:22 Type:Composite Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Evpn, Sub NH(label): Id:21 Type:Composite Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Fabric, Sub NH(label): 15(4099) Id:15 Type:Tunnel Fmly: AF_INET Rid:0 Ref_cnt:6 Vrf:0 Flags:Valid, MPLSoGRE, Oif:0 Len:14 Flags Valid, MPLSoGRE, Data:f8 bc 12 33 43 31 00 11 0a 6c 50 d4 08 00 Vrf:0 Sip:10.219.94.7 Dip:10.219.94.18 << Compute node which has a VM in this VN.The multicast tree in the example shows that there are two Dynamic IPs (DIP)s. The DIP where the packet came from is ignored. Therefore, packet gets forwarded to DIP
10.219.94.18only.Run
vxlan --get <vnid>to examine what DIP10.219.94.18does with the incoming VXLAN encapsulated packet.Example:
root@contrail4:~# vxlan --get 4 VXLAN Table VNID NextHop ---------------- 4 20Run
nh --get <nh id>to display the next-hop details.Example:
root@contrail4:~# nh --get 20 Id:20 Type:Vrf_Translate Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Vxlan, Vrf:1Run the following command to display all of the entries from the bridge table:
rt --dump <vrf id> --family bridge
Example:
root@contrail4:~# rt --dump 1 --family bridge Flags: L=Label Valid, Df=DHCP flood vRouter bridge table 0/1 Index DestMac Flags Label/VNID Nexthop 57812 2:53:89:c4:29:1c - 15 70532 2:3b:ce:56:61:98 - 22 87024 2:72:e9:7a:cd:f5 LDf 17 25 97192 ff:ff:ff:ff:ff:ff LDf 4 50 112856 f8:bc:12:33:43:31 Df - 3 225832 40:a6:77:d8:37:1d LDf 4 18 252916 0:0:5e:0:1:0 Df - 3 256476 2:75:a1:33:65:3c LDf 20 25
In the example bridge table, since we are tracing the BUM packet path, we need to examine the ff:ff:ff:ff:ff:ff:ff route by selecting the next hop programmed. In the example, it is 50.
Run
nh --get <nh id>to display the next-hop details.Example:
root@contrail4:~# nh --get 50 Id:50 Type:Composite Fmly:AF_BRIDGE Rid:0 Ref_cnt:4 Vrf:1 Flags:Valid, Multicast, L2, Sub NH(label): 43(0) 49(0) Id:43 Type:Composite Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Fabric, Sub NH(label): 31(4612) 25(4617) Id:31 Type:Tunnel Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:0 Flags:Valid, MPLSoGRE, Oif:0 Len:14 Flags Valid, MPLSoGRE, Data:00 11 0a 6c 50 d4 f8 bc 12 33 43 31 08 00 Vrf:0 Sip:10.219.94.18 Dip:10.219.94.7 <<< Source where the BUM traffic came from. Id:25 Type:Tunnel Fmly: AF_INET Rid:0 Ref_cnt:2562 Vrf:0 Flags:Valid, MPLSoGRE, Oif:0 Len:14 Flags Valid, MPLSoGRE, Data:44 a8 42 3a 94 f4 f8 bc 12 33 43 31 08 00 Vrf:0 Sip:10.219.94.18 Dip:10.219.94.9 <<< Compute node which has a VM in this VN. Id:49 Type:Composite Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Encap, Sub NH(label): 14(0) 21(0) Id:14 Type:Encap Fmly:AF_BRIDGE Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, EncapFmly:0806 Oif:4 Len:14 Encap Data: 02 53 89 c4 29 1c 00 00 5e 00 01 00 08 00 Id:21 Type:Encap Fmly:AF_BRIDGE Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, EncapFmly:0806 Oif:3 Len:14 Encap Data: 02 3b ce 56 61 98 00 00 5e 00 01 00 08 00 <<< Local VM belonging to this VN that is an intended receiver of this multicast traffic.In the example, you only have to inspect DIP
10.219.94.9. The remaining endpoints are either local or the source where the BUM traffic came from. Now, let us examine, what DIP10.219.94.9does with the incoming VXLAN encapsulated packet.Run
vxlan --get <vnid>to examine what DIP10.219.94.9does with the incoming VXLAN encapsulated packet.Example:
root@contrail101:~# vxlan --get 4 VXLAN Table VNID NextHop ---------------- 4 20Run
nh --get <nh id>to display the next-hop details.Example:
root@contrail101:~# nh --get 20 Id:20 Type:Vrf_Translate Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Vxlan, Vrf:1Display the bridge table for the VRF by using the following command:
rt --dump <vrf id> --family bridge
Example:
root@contrail101:~# rt --dump 1 --family bridge Flags: L=Label Valid, Df=DHCP flood vRouter bridge table 0/1 Index DestMac Flags Label/VNID Nexthop 57812 2:53:89:c4:29:1c LDf 17 28 70532 2:3b:ce:56:61:98 LDf 20 28 87024 2:72:e9:7a:cd:f5 - 15 97192 ff:ff:ff:ff:ff:ff LDf 4 31 140744 44:a8:42:3a:94:f4 Df - 3 225832 40:a6:77:d8:37:1d LDf 4 24 252916 0:0:5e:0:1:0 Df - 3 256476 2:75:a1:33:65:3c - 22 Encap Data: f8 bc 12 33 43 31 44 a8 42 3a 94 f4 08 00
Run
nh --get <nh id>to display the next-hop details.Example:
root@contrail101:~# nh --get 31 Id:31 Type:Composite Fmly:AF_BRIDGE Rid:0 Ref_cnt:4 Vrf:1 Flags:Valid, Multicast, L2, Sub NH(label): 30(0) 36(0) Id:30 Type:Composite Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Fabric, Sub NH(label): 29(4612) 28(4099) Id:29 Type:Tunnel Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:0 Flags:Valid, MPLSoGRE, Oif:0 Len:14 Flags Valid, MPLSoGRE, Data:00 11 0a 6c 50 ac 44 a8 42 3a 94 f4 08 00 Vrf:0 Sip:10.219.94.9 Dip:10.219.94.8 << TSN2 in this topology that is managing a ToR with an end-point belonging to this VN. Id:28 Type:Tunnel Fmly: AF_INET Rid:0 Ref_cnt:2566 Vrf:0 Flags:Valid, MPLSoGRE, Oif:0 Len:14 Flags Valid, MPLSoGRE, Data:f8 bc 12 33 43 31 44 a8 42 3a 94 f4 08 00 Vrf:0 Sip:10.219.94.9 Dip:10.219.94.18 << Source where the BUM traffic came from. Id:36 Type:Composite Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Encap, Sub NH(label): 14(0) 21(0) Id:14 Type:Encap Fmly:AF_BRIDGE Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, EncapFmly:0806 Oif:3 Len:14 Encap Data: 02 72 e9 7a cd f5 00 00 5e 00 01 00 08 00 << local VM that is an intended receiver of this traffic as it is tagged to this VN Id:21 Type:Encap Fmly:AF_BRIDGE Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, EncapFmly:0806 Oif:4 Len:14 Encap Data: 02 75 a1 33 65 3c 00 00 5e 00 01 00 08 00 << Local VM that is an intended receiver of this traffic since it is tagged to this VN.From the above output, the only DIP that you have to further examine is
10.219.94.8. The remaining DIPs are either local or the source where the BUM traffic came from. Now, let’s examine what DIP10.219.94.8does with the incoming VXLAN encapsulated packet.Run
vxlan --get <vnid>to examine what DIP10.219.94.9does with the incoming VXLAN encapsulated packet.Example:
root@contrail66:~# vxlan --get 4 VXLAN Table VNID NextHop ---------------- 4 14Run
nh --get <nh id>to display the next-hop details.Example:
root@contrail66:~# nh --get 14 Id:14 Type:Vrf_Translate Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Vxlan, Vrf:1Display the bridge table for the VRF by using the following command:
rt --dump <vrf id> --family bridge
Example:
root@contrail66:~# rt --dump 1 --family bridge Flags: L=Label Valid, Df=DHCP flood vRouter bridge table 0/1 Index DestMac Flags Label/VNID Nexthop 30780 0:1a:a0:e:30:26 - 1 57812 2:53:89:c4:29:1c LDf 17 17 70532 2:3b:ce:56:61:98 LDf 20 17 87024 2:72:e9:7a:cd:f5 LDf 17 16 97192 ff:ff:ff:ff:ff:ff LDf 4 24 121160 0:1a:a0:a:b4:87 - 1 217208 0:11:a:6c:50:ac Df - 3 225832 40:a6:77:d8:37:1d LDf 4 20 244992 aa:bb:cc:dd:3e:f4 - 1 252916 0:0:5e:0:1:0 Df - 3 256476 2:75:a1:33:65:3c LDf 20 16
Run
nh --get <nh id>to display the next-hop details.Example:
root@contrail66:~# nh --get 24 Id:24 Type:Composite Fmly:AF_BRIDGE Rid:0 Ref_cnt:4 Vrf:1 Flags:Valid, Multicast, L2, Sub NH(label): 23(0) 25(0) 21(0) Id:23 Type:Composite Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Tor, Sub NH(label): 22(4) Id:22 Type:Tunnel Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:0 Flags:Valid, Vxlan, Oif:0 Len:14 Flags Valid, Vxlan, Data:00 00 5e 00 01 21 00 11 0a 6c 50 ac 08 00 Vrf:0 Sip:10.219.94.8 Dip:1.1.1.230 <<< Another ToR switch that has an end-point belonging to this VN. Id:25 Type:Composite Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Evpn, Sub NH(label): Id:21 Type:Composite Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Fabric, Sub NH(label): 16(4617) Id:16 Type:Tunnel Fmly: AF_INET Rid:0 Ref_cnt:6 Vrf:0 Flags:Valid, MPLSoGRE, Oif:0 Len:14 Flags Valid, MPLSoGRE, Data:44 a8 42 3a 94 f4 00 11 0a 6c 50 ac 08 00 Vrf:0 Sip:10.219.94.8 Dip:10.219.94.9 <<< Source where the BUM traffic came from.Now, you just have one DIP
1.1.1.230which is the ToR SW2 in the topology. This should also be present in the multicast tree as this ToR SW also has an end-point (which is BMS2) in the same VN (VNI=4) as the one we are tracing.
This completes all levels of forwarding and tracing the BUM packet from one ToR switch and is replicated to other intended receivers in the topology.
These multicast trees are programmed by the controllers that the TSN is connected to. If you want to inspect the controller’s memory and what eventually gets programmed on all TSN computes, enter the following introspect URL using your controller IP address:
http://<controller_ip>:8083/Snh_ShowMulticastManagerDetailReq?x=default-domain:admin:seventy-network:seventy-network.ermvpn.0