summaryrefslogtreecommitdiffstats
path: root/docs
AgeCommit message (Expand)AuthorFilesLines
2022-03-28libmemif: refactor examplesJakub Grajciar4-6/+2
2022-03-25docs: Add getting started with GoVPPNathan Skrzypczak3-87/+174
2022-03-25docs: Fix macos clang-format docsNathan Skrzypczak1-9/+10
2022-02-25misc: VPP 22.02 Release NotesAndrew Yourtchenko2-0/+658
2022-02-17tests: make tests less make dependentKlement Sekera1-95/+82
2022-01-19misc: Initial 22.06-rc0 commitv22.06-rc0Andrew Yourtchenko2-1/+1
2021-12-01docs: add VPP Container Testbench example and labMatthew Giassa9-0/+1280
2021-11-23docs: add missing 21.10 rlsnotesNathan Skrzypczak3-1/+530
2021-11-16docs: consume fd.io version listNathan Skrzypczak2-6/+35
2021-11-15docs: add jira linkNathan Skrzypczak1-0/+2
2021-11-06tests docs: fix jsonschema dependencyDave Wallace1-2/+16
2021-11-02tests: update python packagesDave Wallace1-4/+1
2021-10-13docs: C & C++ apis examplesNathan Skrzypczak6-0/+346
2021-10-13docs: better docs, mv doxygen to sphinxNathan Skrzypczak361-12794/+25242
2021-09-28api: API trace improvementsFilip Tehlar3-66/+66
2021-08-17docs: fix missing dependency on pip-tools for docs-venvDave Wallace1-0/+2
2021-08-13tests docs: upgrade python packagesDave Wallace4-55/+8
2021-07-02ipsec: ADD/update IPSec documentationNeale Ranns1-0/+1
2021-06-11docs: cleanup, remove stale materialDave Barach77-2355/+15
2021-05-14vlib: pass node runtime to vlib_buffer_enqueue_to_thread()Damjan Marion1-1/+1
2021-05-01vlib: refactor trajectory trace debug featureBenoît Ganne1-4/+1
2021-04-21docs: document "make test-help"Dave Barach3-66/+208
2021-03-16docs: ikev2 usecasesFilip Tehlar6-2/+537
2021-03-04docs: Update macos doc to clang-formatNathan Skrzypczak1-15/+13
2021-02-12docs: fixing VPP tutorialArthur de Kerhor3-6/+6
2021-01-28build: do not _FORTIFY_SOURCE in debug modeMohammed Hawari1-3/+3
2021-01-27Change unformat_init_string API in doc to match codehemant_mnkcg1-1/+2
2021-01-22docs: vpp stateless traffic generatorDave Barach2-0/+106
2021-01-20build: add the missing leading underscore to FORTIFY_SOURCENeale Ranns1-8/+8
2021-01-14docs: Update FIB documentationNeale Ranns22-183/+1392
2020-12-21docs: update list of pluginsPaul Vinciguerra4-13/+80
2020-12-18docs: fix missing quotes in ubuntu install instructionsPaul Vinciguerra1-5/+5
2020-12-16docs: revise home gateway use-case documentationDave Barach3-286/+498
2020-12-07docs: Fix CentOS 8 buildJon Loeliger1-1/+7
2020-11-26docs: fix bihash doc bugsDave Barach1-19/+19
2020-11-24buffers: add page-size configNathan Skrzypczak1-0/+14
2020-11-16docs: fix memory troubleshooting docBenoît Ganne2-0/+4
2020-11-10vpp: use vpp heap for libcBenoît Ganne1-0/+84
2020-10-16misc: deprecate VOMDamjan Marion1-1/+1
2020-09-25docs: fix typo in bihash clib_bihash_search() documentationJon Loeliger1-2/+2
2020-09-21build: remove opensuse build infraDave Wallace5-75/+3
2020-09-16docs: improve plugin developer's guideDave Barach1-5/+55
2020-09-09docs: Improve new plugin doc & add govpp API docNathan Skrzypczak4-28/+142
2020-09-09docs: Update and improve indent installNathan Skrzypczak1-13/+28
2020-09-05docs: Improve & link cnat docNathan Skrzypczak2-0/+2
2020-08-13docs: correct fib tunnel diagram referenceChristian Hopps1-1/+1
2020-07-28docs: Update the VPP tutorialJohn DeNisco2-12/+21
2020-07-06docs: Reflect the fact that the DPDK is now a pluginJohn DeNisco2-10/+27
2020-06-23vlib: debug CLI macro expander, part deuxDave Barach1-0/+48
2020-06-16vlib: address sanitizer support for stack switch, enable clangDamjan Marion1-5/+5
>fail() self.assertTrue(rx[IPv6].src == expected[IPv6].src) self.assertTrue(rx[IPv6].dst == expected[IPv6].dst) self.assertTrue(rx[IPv6].nh == expected[IPv6].nh) def payload(self, len): return 'x' * len def test_6rd_ip6_to_ip4(self): """ ip6 -> ip4 (encap) 6rd test """ p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) p_ip6 = IPv6(src="1::1", dst="2002:AC10:0202::1", nh='UDP') rv = self.vapi.ipip_6rd_add_tunnel( 0, inet_pton(AF_INET6, '2002::'), 16, 0, inet_pton(AF_INET, '0.0.0.0'), 0, self.pg0.local_ip4n, True) self.tunnel_index = rv.sw_if_index self.vapi.cli("show ip6 fib") p_payload = UDP(sport=1234, dport=1234) p = (p_ether / p_ip6 / p_payload) p_reply = (IP(src=self.pg0.local_ip4, dst=self.pg1.remote_ip4, proto='ipv6') / p_ip6) rx = self.send_and_expect(self.pg0, p*10, self.pg1) for p in rx: self.validate_6in4(p, p_reply) # MTU tests (default is 1480) plen = 1481 - 40 - 8 p_ip6 = IPv6(src="1::1", dst="2002:AC10:0202::1") p_payload = UDP(sport=1234, dport=1234) / Raw(self.payload(plen)) p = (p_ether / p_ip6 / p_payload) p_reply = (IP(src=self.pg0.local_ip4, dst=self.pg1.remote_ip4, proto='ipv6') / p_ip6) rx = self.send_and_assert_no_replies(self.pg0, p*10) self.vapi.ipip_6rd_del_tunnel(self.tunnel_index) def test_6rd_ip6_to_ip4_vrf(self): """ ip6 -> ip4 (encap) 6rd VRF test """ p_ether = Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac) p_ip6 = IPv6(src="1::1", dst="2002:AC10:0402::1", nh='UDP') rv = self.vapi.ipip_6rd_add_tunnel( 20, inet_pton(AF_INET6, '2002::'), 16, 10, inet_pton(AF_INET, '0.0.0.0'), 0, self.pg2.local_ip4n, True) self.tunnel_index = rv.sw_if_index self.vapi.cli("show ip6 fib") p_payload = UDP(sport=1234, dport=1234) p = (p_ether / p_ip6 / p_payload) p_reply = (IP(src=self.pg2.local_ip4, dst=self.pg3.remote_ip4, proto='ipv6') / p_ip6) rx = self.send_and_expect(self.pg2, p*10, self.pg3) for p in rx: self.validate_6in4(p, p_reply) # MTU tests (default is 1480) plen = 1481 - 40 - 8 p_ip6 = IPv6(src="1::1", dst="2002:AC10:0402::1") p_payload = UDP(sport=1234, dport=1234) / Raw(self.payload(plen)) p = (p_ether / p_ip6 / p_payload) p_reply = (IP(src=self.pg2.local_ip4, dst=self.pg3.remote_ip4, proto='ipv6') / p_ip6) rx = self.send_and_assert_no_replies(self.pg0, p*10) self.vapi.ipip_6rd_del_tunnel(self.tunnel_index) def test_6rd_ip4_to_ip6(self): """ ip4 -> ip6 (decap) 6rd test """ rv = self.vapi.ipip_6rd_add_tunnel( 0, inet_pton(AF_INET6, '2002::'), 16, 0, inet_pton(AF_INET, '0.0.0.0'), 0, self.pg0.local_ip4n, True) self.tunnel_index = rv.sw_if_index rv = self.vapi.ipip_6rd_del_tunnel(rv.sw_if_index) rv = self.vapi.ipip_6rd_add_tunnel( 0, inet_pton(AF_INET6, '2002::'), 16, 0, inet_pton(AF_INET, '0.0.0.0'), 0, self.pg0.local_ip4n, True) self.tunnel_index = rv.sw_if_index p_ip6 = (IPv6(src="2002:AC10:0202::1", dst=self.pg1.remote_ip6) / UDP(sport=1234, dport=1234)) p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) / IP(src=self.pg1.remote_ip4, dst=self.pg0.local_ip4) / p_ip6) p_reply = p_ip6 rx = self.send_and_expect(self.pg0, p*10, self.pg1) for p in rx: self.validate_4in6(p, p_reply) self.vapi.ipip_6rd_del_tunnel(self.tunnel_index) def test_6rd_ip4_to_ip6_vrf(self): """ ip4 -> ip6 (decap) 6rd VRF test """ rv = self.vapi.ipip_6rd_add_tunnel( 20, inet_pton(AF_INET6, '2002::'), 16, 10, inet_pton(AF_INET, '0.0.0.0'), 0, self.pg2.local_ip4n, True) self.tunnel_index = rv.sw_if_index rv = self.vapi.ipip_6rd_del_tunnel(rv.sw_if_index) rv = self.vapi.ipip_6rd_add_tunnel( 20, inet_pton(AF_INET6, '2002::'), 16, 10, inet_pton(AF_INET, '0.0.0.0'), 0, self.pg2.local_ip4n, True) self.tunnel_index = rv.sw_if_index self.vapi.sw_interface_set_table(self.tunnel_index, 1, 20) p_ip6 = (IPv6(src="2002:AC10:0402::1", dst=self.pg3.remote_ip6) / UDP(sport=1234, dport=1234)) p = (Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac) / IP(src=self.pg3.remote_ip4, dst=self.pg2.local_ip4) / p_ip6) p_reply = p_ip6 rx = self.send_and_expect(self.pg2, p*10, self.pg3) for p in rx: self.validate_4in6(p, p_reply) self.vapi.sw_interface_set_table(self.tunnel_index, 1, 0) self.vapi.ipip_6rd_del_tunnel(self.tunnel_index) def test_6rd_ip4_to_ip6_multiple(self): """ ip4 -> ip6 (decap) 6rd test """ self.tunnel_index = [] rv = self.vapi.ipip_6rd_add_tunnel( 0, inet_pton(AF_INET6, '2002::'), 16, 0, inet_pton(AF_INET, '0.0.0.0'), 0, self.pg0.local_ip4n, True) self.tunnel_index.append(rv.sw_if_index) rv = self.vapi.ipip_6rd_add_tunnel( 0, inet_pton(AF_INET6, '2003::'), 16, 0, inet_pton(AF_INET, '0.0.0.0'), 0, self.pg1.local_ip4n, True) self.tunnel_index.append(rv.sw_if_index) self.vapi.cli("show ip6 fib") p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) p_ip4 = IP(src=self.pg1.remote_ip4, dst=self.pg0.local_ip4) p_ip6_1 = (IPv6(src="2002:AC10:0202::1", dst=self.pg1.remote_ip6) / UDP(sport=1234, dport=1234)) p_ip6_2 = (IPv6(src="2003:AC10:0202::1", dst=self.pg1.remote_ip6) / UDP(sport=1234, dport=1234)) p = (p_ether / p_ip4 / p_ip6_1) rx = self.send_and_expect(self.pg0, p*10, self.pg1) for p in rx: self.validate_4in6(p, p_ip6_1) p = (p_ether / p_ip4 / p_ip6_2) rx = self.send_and_expect(self.pg0, p*10, self.pg1) for p in rx: self.validate_4in6(p, p_ip6_2) for i in self.tunnel_index: self.vapi.ipip_6rd_del_tunnel(i) def test_6rd_ip4_to_ip6_suffix(self): """ ip4 -> ip6 (decap) 6rd test """ rv = self.vapi.ipip_6rd_add_tunnel( 0, inet_pton(AF_INET6, '2002::'), 16, 0, inet_pton(AF_INET, '172.0.0.0'), 8, self.pg0.local_ip4n, True) self.tunnel_index = rv.sw_if_index self.vapi.cli("show ip6 fib") p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) p_ip4 = IP(src=self.pg1.remote_ip4, dst=self.pg0.local_ip4) p_ip6 = (IPv6(src="2002:1002:0200::1", dst=self.pg1.remote_ip6) / UDP(sport=1234, dport=1234)) p = (p_ether / p_ip4 / p_ip6) rx = self.send_and_expect(self.pg0, p*10, self.pg1) for p in rx: self.validate_4in6(p, p_ip6) self.vapi.ipip_6rd_del_tunnel(self.tunnel_index) def test_6rd_ip4_to_ip6_sec_check(self): """ ip4 -> ip6 (decap) security check 6rd test """ rv = self.vapi.ipip_6rd_add_tunnel( 0, inet_pton(AF_INET6, '2002::'), 16, 0, inet_pton(AF_INET, '0.0.0.0'), 0, self.pg0.local_ip4n, True) self.tunnel_index = rv.sw_if_index self.vapi.cli("show ip6 fib") p_ip6 = (IPv6(src="2002:AC10:0202::1", dst=self.pg1.remote_ip6) / UDP(sport=1234, dport=1234)) p_ip6_fail = (IPv6(src="2002:DEAD:0202::1", dst=self.pg1.remote_ip6) / UDP(sport=1234, dport=1234)) p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) / IP(src=self.pg1.remote_ip4, dst=self.pg0.local_ip4) / p_ip6) p_reply = p_ip6 rx = self.send_and_expect(self.pg0, p*10, self.pg1) for p in rx: self.validate_4in6(p, p_reply) p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) / IP(src=self.pg1.remote_ip4, dst=self.pg0.local_ip4) / p_ip6_fail) rx = self.send_and_assert_no_replies(self.pg0, p*10) self.vapi.ipip_6rd_del_tunnel(self.tunnel_index) def test_6rd_bgp_tunnel(self): """ 6rd BGP tunnel """ rv = self.vapi.ipip_6rd_add_tunnel( 0, inet_pton(AF_INET6, '2002::'), 16, 0, inet_pton(AF_INET, '0.0.0.0'), 0, self.pg0.local_ip4n, False) self.tunnel_index = rv.sw_if_index default_route = VppIpRoute( self, "DEAD::", 16, [VppRoutePath("2002:0808:0808::", self.tunnel_index, proto=DpoProto.DPO_PROTO_IP6)], is_ip6=1) default_route.add_vpp_config() ip4_route = VppIpRoute(self, "8.0.0.0", 8, [VppRoutePath(self.pg1.remote_ip4, 0xFFFFFFFF)]) ip4_route.add_vpp_config() # Via recursive route 6 -> 4 p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) / IPv6(src="1::1", dst="DEAD:BEEF::1") / UDP(sport=1234, dport=1234)) p_reply = (IP(src=self.pg0.local_ip4, dst="8.8.8.8", proto='ipv6') / IPv6(src='1::1', dst='DEAD:BEEF::1', nh='UDP')) rx = self.send_and_expect(self.pg0, p*10, self.pg1) for p in rx: self.validate_6in4(p, p_reply) # Via recursive route 4 -> 6 (Security check must be disabled) p_ip6 = (IPv6(src="DEAD:BEEF::1", dst=self.pg1.remote_ip6) / UDP(sport=1234, dport=1234)) p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) / IP(src="8.8.8.8", dst=self.pg0.local_ip4) / p_ip6) p_reply = p_ip6 rx = self.send_and_expect(self.pg0, p*10, self.pg1) for p in rx: self.validate_4in6(p, p_reply) ip4_route.remove_vpp_config() default_route.remove_vpp_config() self.vapi.ipip_6rd_del_tunnel(self.tunnel_index) if __name__ == '__main__': unittest.main(testRunner=VppTestRunner)