aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Expand)AuthorFilesLines
2023-08-09session: async rx event notificationsFlorin Coras23-629/+949
2023-08-09cnat: remove rwlock on tsNathan Skrzypczak7-61/+133
2023-08-09cnat: add ip/client bihashNathan Skrzypczak4-52/+68
2023-08-08tests: fix setting gcov flag for test-cov targetDave Wallace2-1/+2
2023-08-08cnat: flag to disable rsessionNathan Skrzypczak10-31/+54
2023-08-08docs:Improve the README of vpp docsyanlong1-49/+2
2023-08-08ipsec: add support for RFC-4543 ENCR_NULL_AUTH_AES_GMACBenoît Ganne16-48/+3347
2023-08-08vcl: Fix the ldp init checkGao Feng1-1/+5
2023-08-07vlib: support sibling node creation with vlib_register_node()Damjan Marion1-20/+54
2023-08-07vppinfra: add clib_file_get_resolved_basenameDamjan Marion8-46/+42
2023-08-07vppinfra: add vec_foreach_pointer macroDamjan Marion2-0/+5
2023-08-07vppinfra: add unformat_init_pathDamjan Marion4-49/+83
2023-08-07vcl: fix error state switch for VCL_STATE_LISTEN_NO_MQ sessionswanghanlin1-3/+4
2023-08-07cnat: Support offloaded check sumsNathan Skrzypczak4-215/+155
2023-08-04nsh: fix nsh gre referencesBenoît Ganne1-10/+14
2023-08-04vpp: detect early nosyslog and interactive flagsDamjan Marion1-0/+4
2023-08-02vppinfra: add pool_foreach_pointer()Damjan Marion2-0/+8
2023-08-02quic: fix closing of streamsFlorin Coras1-3/+1
2023-08-02vlib: remove dependency on libuuidDamjan Marion3-33/+57
2023-07-31vppinfra: add unformat_c_string_arrayDamjan Marion2-0/+27
2023-07-31ipsec: fix IPv6 IPsec tunnel puntingSylvain Cadilhac1-0/+1
2023-07-31libmemif: add support for buffer sizeMohsin Kazmi1-2/+11
2023-07-28vlib: fix gcc build breakageDave Wallace1-1/+3
2023-07-28hs-test: improve get statsFilip Tehlar2-4/+19
2023-07-28session: regrab evt llist elt for app transports txFlorin Coras1-0/+6
2023-07-28vnet: add vnet_register_device_class functionDamjan Marion2-21/+25
2023-07-28vlib: pci cleanup and improvementsDamjan Marion7-486/+531
2023-07-28vlib: fix coverity issue in vlib_node_set_interrupt_pendingDamjan Marion1-2/+5
2023-07-27hsa: add total bytes parameter to vcl_test_clientFilip Tehlar1-1/+17
2023-07-27session: remove unused codeFilip Tehlar1-17/+0
2023-07-27ipsec: fix sa bind cliMaxime Peim1-1/+1
2023-07-27ikev2: cleanup stuck sessionsDenys Haryachyy3-23/+45
2023-07-26vcl: allow rx of zero length dgramsFlorin Coras1-1/+2
2023-07-26vlib: rename vnet_log_get_class_dataVratko Polak2-3/+3
2023-07-26stats: remove extra format lineSteven Luong1-2/+1
2023-07-26session: use session error type instead of vnet errorFilip Tehlar14-92/+117
2023-07-25vlib: interrupt mode support for pre-input nodesDamjan Marion6-17/+53
2023-07-25classify: add bpf support to pcap classifierMaxime Peim9-5/+128
2023-07-25dpdk: fix signed single bit fieldTianyu Li1-8/+8
2023-07-24vpp-swan: fix handler API messagesGabriel Oginski1-19/+26
2023-07-21vcl: ldp support SO_ORIGINAL_DSTqinyang14-12/+167
2023-07-21tests: Add checksum offload interface testsNaveen Joy2-0/+42
2023-07-21ipsec: fix logic in ext_hdr_is_pre_espPiotr Bronowski1-3/+3
2023-07-19vcl: zero out cmsg for recvmsg APISteven Luong1-0/+1
2023-07-19vpp-swan: change flow in function for add routeGabriel Oginski3-16/+27
2023-07-19vpp-swan: fix incorrect msg ID in register_eventGabriel Oginski1-5/+7
2023-07-19vpp-swan: fix function to get sw_if_indexGabriel Oginski1-6/+23
2023-07-17docs: add api change process from wikiDave Wallace2-0/+198
2023-07-14ipip: populate mode in tunnel detailsMatthew Smith1-2/+19
2023-07-13hsa: fix echo client initFlorin Coras1-1/+2
ass="nf">create_stream_l2_to_ip(self, src_l2_if, src_ip_if, dst_ip_if, packet_sizes): pkts = [] for i in range(0, 257): info = self.create_packet_info(src_ip_if, dst_ip_if) payload = self.info_to_payload(info) host = choice(src_l2_if.remote_hosts) p = (Ether(src=host.mac, dst=src_ip_if.local_mac) / IP(src=host.ip4, dst=dst_ip_if.remote_ip4) / UDP(sport=1234, dport=1234) / Raw(payload)) info.data = p.copy() size = packet_sizes[(i // 2) % len(packet_sizes)] self.extend_packet(p, size) pkts.append(p) return pkts def verify_capture_l2_to_ip(self, dst_ip_if, src_ip_if, capture): last_info = dict() for i in self.interfaces: last_info[i.sw_if_index] = None dst_ip_sw_if_index = dst_ip_if.sw_if_index for packet in capture: ip = packet[IP] udp = packet[IP][UDP] payload_info = self.payload_to_info(packet[IP][UDP][Raw]) self.assertEqual(payload_info.dst, dst_ip_sw_if_index) next_info = self.get_next_packet_info_for_interface2( payload_info.src, dst_ip_sw_if_index, last_info[payload_info.src]) last_info[payload_info.src] = next_info self.assertTrue(next_info is not None) saved_packet = next_info.data self.assertTrue(next_info is not None) # MAC: src, dst self.assertEqual(packet.src, dst_ip_if.local_mac) self.assertEqual(packet.dst, dst_ip_if.remote_mac) # IP: src, dst host = src_ip_if.host_by_ip4(ip.src) self.assertIsNotNone(host) self.assertEqual(ip.dst, saved_packet[IP].dst) self.assertEqual(ip.dst, dst_ip_if.remote_ip4) # UDP: self.assertEqual(udp.sport, saved_packet[UDP].sport) self.assertEqual(udp.dport, saved_packet[UDP].dport) def verify_capture(self, dst_ip_if, src_ip_if, capture): last_info = dict() for i in self.interfaces: last_info[i.sw_if_index] = None dst_ip_sw_if_index = dst_ip_if.sw_if_index for packet in capture: ip = packet[IP] udp = packet[IP][UDP] payload_info = self.payload_to_info(packet[IP][UDP][Raw]) packet_index = payload_info.index self.assertEqual(payload_info.dst, dst_ip_sw_if_index) next_info = self.get_next_packet_info_for_interface2( payload_info.src, dst_ip_sw_if_index, last_info[payload_info.src]) last_info[payload_info.src] = next_info self.assertTrue(next_info is not None) self.assertEqual(packet_index, next_info.index) saved_packet = next_info.data self.assertTrue(next_info is not None) # MAC: src, dst self.assertEqual(packet.src, dst_ip_if.local_mac) host = dst_ip_if.host_by_mac(packet.dst) # IP: src, dst self.assertEqual(ip.src, src_ip_if.remote_ip4) self.assertEqual(ip.dst, saved_packet[IP].dst) self.assertEqual(ip.dst, host.ip4) # UDP: self.assertEqual(udp.sport, saved_packet[UDP].sport) self.assertEqual(udp.dport, saved_packet[UDP].dport) def test_ip4_irb_1(self): """ IPv4 IRB test 1 Test scenario: - ip traffic from pg2 interface must ends in both pg0 and pg1 - arp entry present in bvi0 interface for destination IP - no l2 entry configured, pg0 and pg1 are same """ stream = self.create_stream( self.pg2, self.bvi0, self.pg_if_packet_sizes) self.pg2.add_stream(stream) self.pg_enable_capture(self.pg_interfaces) self.pg_start() packet_count = self.get_packet_count_for_if_idx(self.bvi0.sw_if_index) rcvd1 = self.pg0.get_capture(packet_count) rcvd2 = self.pg1.get_capture(packet_count) self.verify_capture(self.bvi0, self.pg2, rcvd1) self.verify_capture(self.bvi0, self.pg2, rcvd2) self.assertListEqual(rcvd1.res, rcvd2.res) def send_and_verify_l2_to_ip(self): stream1 = self.create_stream_l2_to_ip( self.pg0, self.bvi0, self.pg2, self.pg_if_packet_sizes) stream2 = self.create_stream_l2_to_ip( self.pg1, self.bvi0, self.pg2, self.pg_if_packet_sizes) self.vapi.cli("clear trace") self.pg0.add_stream(stream1) self.pg1.add_stream(stream2) self.pg_enable_capture(self.pg_interfaces) self.pg_start() rcvd = self.pg2.get_capture(514) self.verify_capture_l2_to_ip(self.pg2, self.bvi0, rcvd) def test_ip4_irb_2(self): """ IPv4 IRB test 2 Test scenario: - ip traffic from pg0 and pg1 ends on pg2 """ self.send_and_verify_l2_to_ip() # change the BVI's mac and resed traffic self.bvi0.set_mac(MACAddress("00:00:00:11:11:33")) self.send_and_verify_l2_to_ip() # check it wasn't flooded self.pg1.assert_nothing_captured(remark="UU Flood") if __name__ == '__main__': unittest.main(testRunner=VppTestRunner)