M: Hongjun Ni <hongjun.ni@intel.com>
F: src/vnet/vxlan-gpe/
-VNET VXLAN-GBP
-I: vxlan-gbp
-M: Mohsin Kazmi <sykazmi@cisco.com>
-M: Neale Ranns <neale@graphiant.com>
-F: src/vnet/vxlan-gbp/
-
VNET IPIP
I: ipip
Y: src/vnet/ipip/FEATURE.yaml
M: Dave Barach <vpp@barachs.net>
F: src/plugins/builtinurl/
-Plugin - Group Based Policy (GBP)
-I: gbp
-M: Neale Ranns <neale@graphiant.com>
-F: src/plugins/gbp/
-
Plugin - GTPU
I: gtpu
M: Hongjun Ni <hongjun.ni@intel.com>
M: Neale Ranns <neale@graphiant.com>
F: src/plugins/svs/
-Plugin - LAN Emulation
-I: l2e
-M: Neale Ranns <neale@graphiant.com>
-F: src/plugins/l2e/
-
Plugin - IPv6 Connection Tracker
I: ct6
M: Dave Barach <vpp@barachs.net>
list(APPEND VNET_API_FILES mpls/mpls.api)
-##############################################################################
-# Tunnel protocol: vxlan-gbp
-##############################################################################
-list(APPEND VNET_SOURCES
- vxlan-gbp/decap.c
- vxlan-gbp/encap.c
- vxlan-gbp/vxlan_gbp_api.c
- vxlan-gbp/vxlan_gbp.c
- vxlan-gbp/vxlan_gbp_packet.c
-)
-
-list (APPEND VNET_MULTIARCH_SOURCES
- vxlan-gbp/decap.c
- vxlan-gbp/encap.c
-)
-
-list(APPEND VNET_HEADERS
- vxlan-gbp/vxlan_gbp.h
- vxlan-gbp/vxlan_gbp_packet.h
- vxlan-gbp/vxlan_gbp_error.def
-)
-
-list(APPEND VNET_API_FILES vxlan-gbp/vxlan_gbp.api)
-
##############################################################################
# Tunnel protocol: vxlan-gpe
##############################################################################
* unless some other feature is inserted before uu_flood
*/
if (vnet_buffer (b0)->l2.feature_bitmap &
- (L2INPUT_FEAT_UU_FLOOD |
- L2INPUT_FEAT_UU_FWD | L2INPUT_FEAT_GBP_FWD))
+ (L2INPUT_FEAT_UU_FLOOD | L2INPUT_FEAT_UU_FWD))
{
*next0 = vnet_l2_feature_next (b0, msm->feat_next_node_index,
L2INPUT_FEAT_FWD);
_(ARP_UFWD, "l2-uu-fwd") \
_(ARP_TERM, "arp-term-l2bd") \
_(UU_FLOOD, "l2-flood") \
- _(GBP_FWD, "gbp-fwd") \
_(UU_FWD, "l2-uu-fwd") \
_(FWD, "l2-fwd") \
_(RW, "l2-rw") \
_(LEARN, "l2-learn") \
- _(L2_EMULATION, "l2-emulation") \
- _(GBP_LEARN, "gbp-learn-l2") \
- _(GBP_LPM_ANON_CLASSIFY, "l2-gbp-lpm-anon-classify") \
- _(GBP_NULL_CLASSIFY, "gbp-null-classify") \
- _(GBP_SRC_CLASSIFY, "gbp-src-classify") \
- _(GBP_LPM_CLASSIFY, "l2-gbp-lpm-classify") \
_(VTR, "l2-input-vtr") \
_(L2_IP_QOS_RECORD, "l2-ip-qos-record") \
_(VPATH, "vpath-input-l2") \
u8 protocol = ((ip6_header_t *) l3h0)->protocol;
/* Disable bridge forwarding (flooding will execute instead if not xconnect) */
- feat_mask &= ~(L2INPUT_FEAT_FWD |
- L2INPUT_FEAT_UU_FLOOD |
- L2INPUT_FEAT_UU_FWD | L2INPUT_FEAT_GBP_FWD);
+ feat_mask &=
+ ~(L2INPUT_FEAT_FWD | L2INPUT_FEAT_UU_FLOOD | L2INPUT_FEAT_UU_FWD);
if (ethertype != ETHERNET_TYPE_ARP)
feat_mask &= ~(L2INPUT_FEAT_ARP_UFWD);
#define foreach_l2output_feat \
_(OUTPUT, "interface-output") \
_(SPAN, "span-l2-output") \
- _(GBP_POLICY_LPM, "gbp-policy-lpm") \
- _(GBP_POLICY_PORT, "gbp-policy-port") \
- _(GBP_POLICY_MAC, "gbp-policy-mac") \
_(CFM, "feature-bitmap-drop") \
_(QOS, "feature-bitmap-drop") \
_(ACL, "l2-output-acl") \
+bind_layers(UDP, VXLAN, dport=4790) # RFC standard vxlan-gpe port
bind_layers(UDP, VXLAN, dport=6633) # New IANA assigned port for use with NSH
bind_layers(UDP, VXLAN, dport=8472) # Linux implementation port
-+bind_layers(UDP, VXLAN, dport=48879) # RFC standard vxlan-gbp port
bind_layers(VXLAN, Ether, {'flags': 0x8})
+++ /dev/null
-diff --git a/scapy/layers/vxlan.py b/scapy/layers/vxlan.py
-index 03c3a5a..ee30f28 100644
---- a/scapy/layers/vxlan.py
-+++ b/scapy/layers/vxlan.py
-@@ -69,6 +69,7 @@ bind_layers(UDP, VXLAN, dport=4789) # RFC standard vxlan port
- bind_layers(UDP, VXLAN, dport=4790) # RFC standard vxlan-gpe port
- bind_layers(UDP, VXLAN, dport=6633) # New IANA assigned port for use with NSH
- bind_layers(UDP, VXLAN, dport=8472) # Linux implementation port
-+bind_layers(UDP, VXLAN, dport=48879) # iVXLAN port
- bind_layers(UDP, VXLAN, sport=4789)
- bind_layers(UDP, VXLAN, sport=4790)
- bind_layers(UDP, VXLAN, sport=6633)
sub_if_on_pg3.remove_vpp_config()
sub_if_on_pg2.remove_vpp_config()
- def test_l2_emulation(self):
- """ L2 Emulation """
-
- #
- # non distinct L3 packets, in the tag/non-tag combos
- #
- pkt_no_tag = (Ether(src=self.pg0.remote_mac,
- dst=self.pg1.remote_mac) /
- IP(src="2.2.2.2",
- dst="1.1.1.1") /
- UDP(sport=1234, dport=1234) /
- Raw(b'\xa5' * 100))
- pkt_to_tag = (Ether(src=self.pg0.remote_mac,
- dst=self.pg2.remote_mac) /
- IP(src="2.2.2.2",
- dst="1.1.1.2") /
- UDP(sport=1234, dport=1234) /
- Raw(b'\xa5' * 100))
- pkt_from_tag = (Ether(src=self.pg3.remote_mac,
- dst=self.pg2.remote_mac) /
- Dot1Q(vlan=93) /
- IP(src="2.2.2.2",
- dst="1.1.1.1") /
- UDP(sport=1234, dport=1234) /
- Raw(b'\xa5' * 100))
- pkt_from_to_tag = (Ether(src=self.pg3.remote_mac,
- dst=self.pg2.remote_mac) /
- Dot1Q(vlan=93) /
- IP(src="2.2.2.2",
- dst="1.1.1.2") /
- UDP(sport=1234, dport=1234) /
- Raw(b'\xa5' * 100))
- pkt_bcast = (Ether(src=self.pg0.remote_mac,
- dst="ff:ff:ff:ff:ff:ff") /
- IP(src="2.2.2.2",
- dst="255.255.255.255") /
- UDP(sport=1234, dport=1234) /
- Raw(b'\xa5' * 100))
-
- #
- # A couple of sub-interfaces for tags
- #
- sub_if_on_pg2 = VppDot1QSubint(self, self.pg2, 92)
- sub_if_on_pg3 = VppDot1QSubint(self, self.pg3, 93)
- sub_if_on_pg2.admin_up()
- sub_if_on_pg3.admin_up()
-
- #
- # Put all the interfaces into a new bridge domain
- #
- self.vapi.sw_interface_set_l2_bridge(
- rx_sw_if_index=self.pg0.sw_if_index, bd_id=1)
- self.vapi.sw_interface_set_l2_bridge(
- rx_sw_if_index=self.pg1.sw_if_index, bd_id=1)
- self.vapi.sw_interface_set_l2_bridge(
- rx_sw_if_index=sub_if_on_pg2.sw_if_index, bd_id=1)
- self.vapi.sw_interface_set_l2_bridge(
- rx_sw_if_index=sub_if_on_pg3.sw_if_index, bd_id=1)
- self.vapi.l2_interface_vlan_tag_rewrite(
- sw_if_index=sub_if_on_pg2.sw_if_index, vtr_op=L2_VTR_OP.L2_POP_1,
- push_dot1q=92)
- self.vapi.l2_interface_vlan_tag_rewrite(
- sw_if_index=sub_if_on_pg3.sw_if_index, vtr_op=L2_VTR_OP.L2_POP_1,
- push_dot1q=93)
-
- #
- # Disable UU flooding, learning and ARP termination. makes this test
- # easier as unicast packets are dropped if not extracted.
- #
- self.vapi.bridge_flags(bd_id=1, is_set=0,
- flags=(1 << 0) | (1 << 3) | (1 << 4))
-
- #
- # Add a DVR route to steer traffic at L3
- #
- route_1 = VppIpRoute(
- self, "1.1.1.1", 32,
- [VppRoutePath("0.0.0.0",
- self.pg1.sw_if_index,
- type=FibPathType.FIB_PATH_TYPE_DVR)])
- route_2 = VppIpRoute(
- self, "1.1.1.2", 32,
- [VppRoutePath("0.0.0.0",
- sub_if_on_pg2.sw_if_index,
- type=FibPathType.FIB_PATH_TYPE_DVR)])
- route_1.add_vpp_config()
- route_2.add_vpp_config()
-
- #
- # packets are dropped because bridge does not flood unknown unicast
- #
- self.send_and_assert_no_replies(self.pg0, pkt_no_tag)
-
- #
- # Enable L3 extraction on pgs
- #
- self.vapi.l2_emulation(self.pg0.sw_if_index)
- self.vapi.l2_emulation(self.pg1.sw_if_index)
- self.vapi.l2_emulation(sub_if_on_pg2.sw_if_index)
- self.vapi.l2_emulation(sub_if_on_pg3.sw_if_index)
-
- #
- # now we expect the packet forward according to the DVR route
- #
- rx = self.send_and_expect(self.pg0, pkt_no_tag * NUM_PKTS, self.pg1)
- self.assert_same_mac_addr(pkt_no_tag, rx)
- self.assert_has_no_tag(rx)
-
- rx = self.send_and_expect(self.pg0, pkt_to_tag * NUM_PKTS, self.pg2)
- self.assert_same_mac_addr(pkt_to_tag, rx)
- self.assert_has_vlan_tag(92, rx)
-
- rx = self.send_and_expect(self.pg3, pkt_from_tag * NUM_PKTS, self.pg1)
- self.assert_same_mac_addr(pkt_from_tag, rx)
- self.assert_has_no_tag(rx)
-
- rx = self.send_and_expect(self.pg3,
- pkt_from_to_tag * NUM_PKTS,
- self.pg2)
- self.assert_same_mac_addr(pkt_from_tag, rx)
- self.assert_has_vlan_tag(92, rx)
-
- #
- # but broadcast packets are still flooded
- #
- self.send_and_expect(self.pg0, pkt_bcast * 33, self.pg2)
-
- #
- # cleanup
- #
- self.vapi.l2_emulation(self.pg0.sw_if_index,
- enable=0)
- self.vapi.l2_emulation(self.pg1.sw_if_index,
- enable=0)
- self.vapi.l2_emulation(sub_if_on_pg2.sw_if_index,
- enable=0)
- self.vapi.l2_emulation(sub_if_on_pg3.sw_if_index,
- enable=0)
-
- self.vapi.sw_interface_set_l2_bridge(
- rx_sw_if_index=self.pg0.sw_if_index, bd_id=1, enable=0)
- self.vapi.sw_interface_set_l2_bridge(
- rx_sw_if_index=self.pg1.sw_if_index, bd_id=1, enable=0)
- self.vapi.sw_interface_set_l2_bridge(
- rx_sw_if_index=sub_if_on_pg2.sw_if_index, bd_id=1, enable=0)
- self.vapi.sw_interface_set_l2_bridge(
- rx_sw_if_index=sub_if_on_pg3.sw_if_index, bd_id=1, enable=0)
-
- route_1.remove_vpp_config()
- route_2.remove_vpp_config()
- sub_if_on_pg3.remove_vpp_config()
- sub_if_on_pg2.remove_vpp_config()
-
if __name__ == '__main__':
unittest.main(testRunner=VppTestRunner)
'is_ip6': is_ip6
}})
- def vxlan_gbp_tunnel_dump(self, sw_if_index=0xffffffff):
- return self.api(self.papi.vxlan_gbp_tunnel_dump,
- {'sw_if_index': sw_if_index})
-
def pppoe_add_del_session(
self,
client_ip,
return self.api(self.papi.punt_socket_deregister,
{'punt': reg})
- def gbp_endpoint_dump(self):
- """ GBP endpoint Dump """
- return self.api(self.papi.gbp_endpoint_dump, {})
-
- def gbp_recirc_dump(self):
- """ GBP recirc Dump """
- return self.api(self.papi.gbp_recirc_dump, {})
-
- def gbp_ext_itf_dump(self):
- """ GBP recirc Dump """
- return self.api(self.papi.gbp_ext_itf_dump, {})
-
- def gbp_subnet_dump(self):
- """ GBP Subnet Dump """
- return self.api(self.papi.gbp_subnet_dump, {})
-
- def gbp_contract_dump(self):
- """ GBP contract Dump """
- return self.api(self.papi.gbp_contract_dump, {})
-
- def gbp_vxlan_tunnel_dump(self):
- """ GBP VXLAN tunnel add/del """
- return self.api(self.papi.gbp_vxlan_tunnel_dump, {})
-
def igmp_enable_disable(self, sw_if_index, enable, host):
""" Enable/disable IGMP on a given interface """
return self.api(self.papi.igmp_enable_disable,