summaryrefslogtreecommitdiffstats
path: root/src/vlibapi
AgeCommit message (Expand)AuthorFilesLines
2023-10-25lisp: fix missing symbol issueDamjan Marion1-1/+0
2023-07-07api: fix signed single bit fieldTianyu Li1-5/+5
2023-05-10api: clean up error messageDave Wallace1-2/+3
2023-01-27api: keep AddressSanitizer happyBenoît Ganne1-0/+1
2022-09-29api: deprecate vl_msg_api_set_handlersDamjan Marion2-34/+0
2022-09-26api: replace print functions wth formatDamjan Marion6-33/+56
2022-09-26api: keep api common code in vlibapiDamjan Marion3-9/+975
2022-08-17vlib: fix coverity 274744Andrew Yourtchenko1-1/+4
2022-05-19api: refactor api data storageDamjan Marion4-134/+132
2022-05-02vapi: support api clients within vpp processOle Troan1-0/+2
2022-04-08api: Do not assert of short message lengthsNeale Ranns1-1/+0
2022-04-05vppinfra: refactor address sanitizerDamjan Marion1-6/+6
2022-04-04vppinfra: make _vec_len() read-onlyDamjan Marion1-1/+1
2022-03-23api: better segregate client and server codeBenoît Ganne3-161/+5
2021-12-14api: verify message size on receiptKlement Sekera2-35/+71
2021-12-08api: improve REPLY_MACRO safetyKlement Sekera1-98/+123
2021-12-01api: add api macros for native endianMohsin Kazmi1-35/+289
2021-11-26api: add helper macros for native endianMohsin Kazmi1-0/+44
2021-10-18api: remove legacy pd msg handlersKlement Sekera3-46/+0
2021-10-18interface: add api test fileFilip Tehlar1-5/+8
2021-10-13docs: convert vpp doc md->rstNathan Skrzypczak2-352/+342
2021-09-28api: API trace improvementsFilip Tehlar3-108/+209
2021-09-27misc: move part of vpe apis to vlibmemoryFlorin Coras1-7/+3
2021-09-17build: use GNUInstallDirs install destinationsNick Brown1-1/+1
2021-07-29ip: add api test fileFilip Tehlar1-0/+13
2021-05-10api: fix crash in vl_msg_api_freewanghanlin1-1/+15
2021-03-19api: Avoid the usage of the freed registration by the API callsAndrew Yourtchenko1-0/+1
2021-02-07vppinfra: do not crash if format string is nullAndrew Yourtchenko1-4/+4
2021-02-04linux-cp: Linux Interface Mirroring for Control Plane IntegrationNeale Ranns1-27/+39
2020-10-24vrrp: asynchronous events on VR state changeMatthew Smith1-1/+2
2020-10-06feature: Add packet trace APIJon Loeliger1-0/+29
2020-08-25api: register endian handlers for reply messagesOle Troan1-1/+20
2020-07-16misc: add callback hooks and refactor pmcTom Seidenberg2-1/+21
2020-06-17docs: add more FEATURE.yaml documentationDave Barach1-0/+14
2020-06-15api: check id is valid for bounce checkingBenoît Ganne1-1/+1
2020-05-27api: make vpp api handlers endian independentOle Troan3-1/+43
2020-05-25api: add new stream message conventionOle Troan1-0/+37
2020-05-06docs: clean up make docs jobPaul Vinciguerra1-1/+2
2020-05-04misc: binary api fuzz test fixesDave Barach3-2/+28
2020-04-14vat: fix socket connectionDave Barach1-15/+15
2020-02-26api: add macro that zeros out api reply bufferPaul Vinciguerra1-0/+32
2020-02-26api: improve api string safetyJakub Grajciar2-13/+34
2019-12-17ip: Protocol Independent IP NeighborsNeale Ranns1-13/+4
2019-12-11api: Use vl_msg_push/pop_heapNathan Skrzypczak2-4/+18
2019-12-10api: pass api and client main to rx threadFlorin Coras1-0/+6
2019-12-10api: multiple connections per processDave Barach3-24/+41
2019-12-06api: avoid swapping vlib_rp before barrier syncFlorin Coras2-4/+19
2019-11-27misc: add address sanitizer heap instrumentationBenoît Ganne1-0/+20
2019-10-08api: add bapi thread handle to api main structure.IJsbrand Wijnands1-0/+3
2019-09-25api: split api generated filesOle Troan1-0/+15
p">) if not local_only: if not mcast_pkt: self.assertEqual(pkt[Ether].dst, self.pg0.remote_mac) else: self.assertEqual(pkt[Ether].dst, type(self).mcast_mac) # Verify VXLAN-GPE tunnel src IP is VPP_IP and dst IP is MY_IP. self.assertEqual(pkt[IP].src, self.pg0.local_ip4) if not local_only: if not mcast_pkt: self.assertEqual(pkt[IP].dst, self.pg0.remote_ip4) else: self.assertEqual(pkt[IP].dst, type(self).mcast_ip4) # Verify UDP destination port is VXLAN-GPE 4790, source UDP port # could be arbitrary. self.assertEqual(pkt[UDP].dport, self.dport) # Verify UDP checksum self.assert_udp_checksum_valid(pkt) # Verify VNI self.assertEqual(pkt[VXLAN].vni, vni) @classmethod def create_vxlan_gpe_flood_test_bd(cls, vni, n_ucast_tunnels, port): # Create 10 ucast vxlan tunnels under bd ip_range_start = 10 ip_range_end = ip_range_start + n_ucast_tunnels next_hop_address = cls.pg0.remote_ip4 for dest_ip4 in ip4_range(next_hop_address, ip_range_start, ip_range_end): # add host route so dest_ip4n will not be resolved rip = VppIpRoute( cls, dest_ip4, 32, [VppRoutePath(next_hop_address, INVALID_INDEX)], register=False, ) rip.add_vpp_config() r = VppVxlanGpeTunnel( cls, src_addr=cls.pg0.local_ip4, dst_addr=dest_ip4, src_port=port, dst_port=port, vni=vni, ) r.add_vpp_config() cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index, bd_id=vni) @classmethod def add_del_shared_mcast_dst_load(cls, port, is_add): """ add or del tunnels sharing the same mcast dst to test vxlan_gpe ref_count mechanism """ n_shared_dst_tunnels = 20 vni_start = 1000 vni_end = vni_start + n_shared_dst_tunnels for vni in range(vni_start, vni_end): r = VppVxlanGpeTunnel( cls, src_addr=cls.pg0.local_ip4, dst_addr=cls.mcast_ip4, src_port=port, dst_port=port, mcast_sw_if_index=1, vni=vni, ) if is_add: r.add_vpp_config() if r.sw_if_index == 0xFFFFFFFF: raise ValueError("bad sw_if_index: ~0") else: r.remove_vpp_config() @classmethod def add_shared_mcast_dst_load(cls, port): cls.add_del_shared_mcast_dst_load(port=port, is_add=1) @classmethod def del_shared_mcast_dst_load(cls, port): cls.add_del_shared_mcast_dst_load(port=port, is_add=0) @classmethod def add_del_mcast_tunnels_load(cls, port, is_add): """ add or del tunnels to test vxlan_gpe stability """ n_distinct_dst_tunnels = 20 ip_range_start = 10 ip_range_end = ip_range_start + n_distinct_dst_tunnels for dest_ip4 in ip4_range(cls.mcast_ip4, ip_range_start, ip_range_end): vni = int(dest_ip4.split(".")[3]) r = VppVxlanGpeTunnel( cls, src_addr=cls.pg0.local_ip4, dst_addr=dest_ip4, src_port=port, dst_port=port, mcast_sw_if_index=1, vni=vni, ) if is_add: r.add_vpp_config() else: r.remove_vpp_config() @classmethod def add_mcast_tunnels_load(cls, port): cls.add_del_mcast_tunnels_load(port=port, is_add=1) @classmethod def del_mcast_tunnels_load(cls, port): cls.add_del_mcast_tunnels_load(port=port, is_add=0) # Class method to start the VXLAN-GPE test case. # Overrides setUpClass method in VppTestCase class. # Python try..except statement is used to ensure that the tear down of # the class will be executed even if exception is raised. # @param cls The class pointer. @classmethod def setUpClass(cls): super(TestVxlanGpe, cls).setUpClass() try: cls.flags = 0x0C # Create 2 pg interfaces. cls.create_pg_interfaces(range(4)) for pg in cls.pg_interfaces: pg.admin_up() # Configure IPv4 addresses on VPP pg0. cls.pg0.config_ip4() # Resolve MAC address for VPP's IP address on pg0. cls.pg0.resolve_arp() # Our Multicast address cls.mcast_ip4 = "239.1.1.1" cls.mcast_mac = util.mcast_ip_to_mac(cls.mcast_ip4) except Exception: cls.tearDownClass() raise @classmethod def tearDownClass(cls): super(TestVxlanGpe, cls).tearDownClass() def setUp(self): super(TestVxlanGpe, self).setUp() def createVxLANInterfaces(self, port=4790): # Create VXLAN-GPE VTEP on VPP pg0, and put vxlan_gpe_tunnel0 # and pg1 into BD. self.dport = port self.single_tunnel_vni = 0xABCDE self.single_tunnel_bd = 11 r = VppVxlanGpeTunnel( self, src_addr=self.pg0.local_ip4, dst_addr=self.pg0.remote_ip4, src_port=port, dst_port=port, vni=self.single_tunnel_vni, ) r.add_vpp_config() self.vapi.sw_interface_set_l2_bridge( rx_sw_if_index=r.sw_if_index, bd_id=self.single_tunnel_bd ) self.vapi.sw_interface_set_l2_bridge( rx_sw_if_index=self.pg1.sw_if_index, bd_id=self.single_tunnel_bd ) # Setup vni 2 to test multicast flooding self.n_ucast_tunnels = 10 self.mcast_flood_bd = 12 self.create_vxlan_gpe_flood_test_bd( self.mcast_flood_bd, self.n_ucast_tunnels, self.dport ) r = VppVxlanGpeTunnel( self, src_addr=self.pg0.local_ip4, dst_addr=self.mcast_ip4, src_port=port, dst_port=port, mcast_sw_if_index=1, vni=self.mcast_flood_bd, ) r.add_vpp_config() self.vapi.sw_interface_set_l2_bridge( rx_sw_if_index=r.sw_if_index, bd_id=self.mcast_flood_bd ) self.vapi.sw_interface_set_l2_bridge( rx_sw_if_index=self.pg2.sw_if_index, bd_id=self.mcast_flood_bd ) # Add and delete mcast tunnels to check stability self.add_shared_mcast_dst_load(self.dport) self.add_mcast_tunnels_load(self.dport) self.del_shared_mcast_dst_load(self.dport) self.del_mcast_tunnels_load(self.dport) # Setup vni 3 to test unicast flooding self.ucast_flood_bd = 13 self.create_vxlan_gpe_flood_test_bd( self.ucast_flood_bd, self.n_ucast_tunnels, self.dport ) self.vapi.sw_interface_set_l2_bridge( rx_sw_if_index=self.pg3.sw_if_index, bd_id=self.ucast_flood_bd ) # Set scapy listen custom port for VxLAN bind_layers(UDP, VXLAN, dport=self.dport) """ Tests with default port (4790) """ def test_decap(self): """Decapsulation test from BridgeDoman """ self.createVxLANInterfaces() super(TestVxlanGpe, self).test_decap() def test_encap(self): """Encapsulation test from BridgeDoman """ self.createVxLANInterfaces() super(TestVxlanGpe, self).test_encap() def test_ucast_flood(self): """Unicast flood test from BridgeDoman """ self.createVxLANInterfaces() super(TestVxlanGpe, self).test_ucast_flood() """ Tests with custom port (1112) """ def test_decap_custom_port(self): """Decapsulation test custom port from BridgeDoman """ self.createVxLANInterfaces(1112) super(TestVxlanGpe, self).test_decap() def test_encap_custom_port(self): """Encapsulation test custom port from BridgeDoman """ self.createVxLANInterfaces(1112) super(TestVxlanGpe, self).test_encap() def test_ucast_flood_custom_port(self): """Unicast flood test custom port from BridgeDoman """ self.createVxLANInterfaces(1112) super(TestVxlanGpe, self).test_ucast_flood() @unittest.skip("test disabled for vxlan-gpe") def test_mcast_flood(self): """inherited from BridgeDomain""" pass @unittest.skip("test disabled for vxlan-gpe") def test_mcast_rcv(self): """inherited from BridgeDomain""" pass # Method to define VPP actions before tear down of the test case. # Overrides tearDown method in VppTestCase class. # @param self The object pointer. def tearDown(self): super(TestVxlanGpe, self).tearDown() def show_commands_at_teardown(self): self.logger.info(self.vapi.cli("show bridge-domain 11 detail")) self.logger.info(self.vapi.cli("show bridge-domain 12 detail")) self.logger.info(self.vapi.cli("show bridge-domain 13 detail")) self.logger.info(self.vapi.cli("show int")) self.logger.info(self.vapi.cli("show vxlan-gpe")) self.logger.info(self.vapi.cli("show trace")) if __name__ == "__main__": unittest.main(testRunner=VppTestRunner)