summaryrefslogtreecommitdiffstats
path: root/src/vat
AgeCommit message (Expand)AuthorFilesLines
2017-08-14FIB table add/delete API onlyNeale Ranns1-0/+104
2017-08-11Dedicated SW Interface EventNeale Ranns1-11/+6
2017-08-08L2 over MPLSNeale Ranns1-8/+9
2017-08-07LISP: Map-server fallback featureFilip Tehlar1-0/+94
2017-08-03Add support for API client to receive L2 MAC eventsJohn Lo1-7/+79
2017-08-02LISP: make TTL for map register messages configurableFilip Tehlar1-0/+95
2017-08-01P2P EthernetPavel Kotucek1-5/+12
2017-08-01SPAN/API:enable L2 dumpEyal Bari1-1/+12
2017-07-24SPAN:add l2 mirrorEyal Bari1-1/+5
2017-07-05Add API support for LLDP config/interface setSteve Shin1-3/+92
2017-06-25VPP crash on creating vxlan gpe interface. VPP-875Hongjun Ni1-11/+97
2017-06-16Fix vni/dp_table endianness for gpe iface addition (VPP-882)Florin Coras1-2/+2
2017-06-15Add VAT handlers for LISP-GPE APIFilip Tehlar1-0/+199
2017-06-08LISP: add NSH supportFilip Tehlar1-8/+172
2017-06-08P2P Ethernet - APIPavel Kotucek1-3/+104
2017-06-05LISP-GPE: return index of newly created fwd entry, VPP-868Filip Tehlar1-1/+33
2017-05-30LISP: L2 ARP handlingFilip Tehlar1-0/+233
2017-05-22vhost: migrate to use device infra for worker thread assignment, rx-mode.Steven1-62/+5
2017-05-22LISP-GPE: add dump call for VNIs in useFilip Tehlar1-0/+75
2017-05-20API: Cleaning up message naming that does not follow the conventionsOle Troan1-55/+59
2017-05-15Fix vnet_interface_counters API definitionAloys Augustin1-31/+45
2017-05-09Fix remaining 32-bit compile issuesDamjan Marion1-5/+5
2017-05-09API support for IPsec tunnel interface creationMatthew Smith1-0/+134
2017-05-09Add missing format_ip6_address() functions to plugin_api.Jon Loeliger2-0/+78
2017-04-13LISP: make statistics thread safeFilip Tehlar1-0/+15
2017-04-07MPLS McastNeale Ranns1-56/+77
2017-04-05L2FIB:add l2fib_flush_bd l2fib_flush_int apisEyal Bari1-2/+72
2017-04-05GRE over IPv6Ciara Loftus1-13/+65
2017-04-04BD/API:add bridge_domain_set_mac_age apiEyal Bari1-1/+76
2017-03-30Fix pid field endian in ARP/ND/DHCP event related API messagesJohn Lo1-9/+9
2017-03-30Fix more "symbol XXX found in none of the libs" warningsDave Barach1-1/+0
2017-03-22vhost: support interrupt modeSteven1-5/+62
2017-03-22policer: fix byte ordering in policer_details msgMarek Gradzki1-2/+2
2017-03-21LISP statisticsFilip Tehlar1-0/+208
2017-03-15VXLAN:add hidden multicast interface checkEyal Bari1-4/+2
2017-03-10LISP: fix Proxy-ETR show command, VPP-660Filip Tehlar1-0/+146
2017-03-09IMplementation for option to not create a FIB table entry when adding a neigh...Neale Ranns1-0/+4
2017-03-08Proxy ND (RFC4389 - or a sub-set thereof). This allows the 'emulation' of bri...Neale Ranns1-0/+109
2017-03-07Missing plugin binary API command fns found after brief searchDave Barach2-2/+1
2017-03-07DHCP Multiple Servers (VPP-602, VPP-605)Neale Ranns1-14/+42
2017-03-07Fix endian issue in ARP Event ReplyWojciech Dec1-2/+4
2017-03-04Evolving SRv6 (Segment Routing for IPv6)Pablo Camarillo1-286/+71
2017-03-03Implement a loopback instance allocation scheme.Jon Loeliger1-6/+53
2017-03-02Clean up binary api message handler registration issuesDave Barach1-7/+36
2017-03-02Remove the unused VRF ID parameter from the IP neighbour Add/Del APINeale Ranns1-4/+0
2017-03-01dpdk: be a pluginDamjan Marion1-320/+0
2017-02-27Add GPE CLI/API for setting encap modeFilip Tehlar1-0/+114
2017-02-23Fix vpp built-in version of api_unformat_sw_if_index(...)Dave Barach1-16/+34
2017-02-22Clean up "binary-api" help string, arg parse bugsDave Barach1-0/+2
2017-02-21Add Overlay Network Engine APIFilip Tehlar1-209/+291
span class="p">) dst6.add_vpp_config() cls.vapi.lb_conf(ip4_src_address="39.40.41.42", ip6_src_address="2004::1") except Exception: super(TestLB, cls).tearDownClass() raise @classmethod def tearDownClass(cls): super(TestLB, cls).tearDownClass() def tearDown(self): super(TestLB, self).tearDown() def show_commands_at_teardown(self): self.logger.info(self.vapi.cli("show lb vip verbose")) def getIPv4Flow(self, id): return IP( dst="90.0.%u.%u" % (id / 255, id % 255), src="40.0.%u.%u" % (id / 255, id % 255), ) / UDP(sport=10000 + id, dport=20000) def getIPv6Flow(self, id): return IPv6(dst="2001::%u" % (id), src="fd00:f00d:ffff::%u" % (id)) / UDP( sport=10000 + id, dport=20000 ) def generatePackets(self, src_if, isv4): self.reset_packet_infos() pkts = [] for pktid in self.packets: info = self.create_packet_info(src_if, self.pg1) payload = self.info_to_payload(info) ip = self.getIPv4Flow(pktid) if isv4 else self.getIPv6Flow(pktid) packet = ( Ether(dst=src_if.local_mac, src=src_if.remote_mac) / ip / Raw(payload) ) self.extend_packet(packet, 128) info.data = packet.copy() pkts.append(packet) return pkts def checkInner(self, gre, isv4): IPver = IP if isv4 else IPv6 self.assertEqual(gre.proto, 0x0800 if isv4 else 0x86DD) self.assertEqual(gre.flags, 0) self.assertEqual(gre.version, 0) inner = IPver(scapy.compat.raw(gre.payload)) payload_info = self.payload_to_info(inner[Raw]) self.info = self.packet_infos[payload_info.index] self.assertEqual(payload_info.src, self.pg0.sw_if_index) self.assertEqual( scapy.compat.raw(inner), scapy.compat.raw(self.info.data[IPver]) ) def checkCapture(self, encap, isv4): self.pg0.assert_nothing_captured() out = self.pg1.get_capture(len(self.packets)) load = [0] * len(self.ass) self.info = None for p in out: try: asid = 0 gre = None if encap == "gre4": ip = p[IP] asid = int(ip.dst.split(".")[3]) self.assertEqual(ip.version, 4) self.assertEqual(ip.flags, 0) self.assertEqual(ip.src, "39.40.41.42") self.assertEqual(ip.dst, "10.0.0.%u" % asid) self.assertEqual(ip.proto, 47) self.assertEqual(len(ip.options), 0) gre = p[GRE] self.checkInner(gre, isv4) elif encap == "gre6": ip = p[IPv6] asid = ip.dst.split(":") asid = asid[len(asid) - 1] asid = 0 if asid == "" else int(asid) self.assertEqual(ip.version, 6) self.assertEqual(ip.tc, 0) self.assertEqual(ip.fl, 0) self.assertEqual(ip.src, "2004::1") self.assertEqual( socket.inet_pton(socket.AF_INET6, ip.dst), socket.inet_pton(socket.AF_INET6, "2002::%u" % asid), ) self.assertEqual(ip.nh, 47) # self.assertEqual(len(ip.options), 0) gre = GRE(scapy.compat.raw(p[IPv6].payload)) self.checkInner(gre, isv4) elif encap == "l3dsr": ip = p[IP] asid = int(ip.dst.split(".")[3]) self.assertEqual(ip.version, 4) self.assertEqual(ip.flags, 0) self.assertEqual(ip.dst, "10.0.0.%u" % asid) self.assertEqual(ip.tos, 0x1C) self.assertEqual(len(ip.options), 0) self.assert_ip_checksum_valid(p) if ip.proto == IP_PROTOS.tcp: self.assert_tcp_checksum_valid(p) elif ip.proto == IP_PROTOS.udp: self.assert_udp_checksum_valid(p) elif encap == "nat4": ip = p[IP] asid = int(ip.dst.split(".")[3]) self.assertEqual(ip.version, 4) self.assertEqual(ip.flags, 0) self.assertEqual(ip.dst, "10.0.0.%u" % asid) self.assertEqual(ip.proto, 17) self.assertEqual(len(ip.options), 0) udp = p[UDP] self.assertEqual(udp.dport, 3307) elif encap == "nat6": ip = p[IPv6] asid = ip.dst.split(":") asid = asid[len(asid) - 1] asid = 0 if asid == "" else int(asid) self.assertEqual(ip.version, 6) self.assertEqual(ip.tc, 0) self.assertEqual(ip.fl, 0) self.assertEqual( socket.inet_pton(socket.AF_INET6, ip.dst), socket.inet_pton(socket.AF_INET6, "2002::%u" % asid), ) self.assertEqual(ip.nh, 17) self.assertGreaterEqual(ip.hlim, 63) udp = UDP(scapy.compat.raw(p[IPv6].payload)) self.assertEqual(udp.dport, 3307) load[asid] += 1 except: self.logger.error(ppp("Unexpected or invalid packet:", p)) raise # This is just to roughly check that the balancing algorithm # is not completely biased. for asid in self.ass: if load[asid] < int(len(self.packets) / (len(self.ass) * 2)): self.logger.error( "ASS is not balanced: load[%d] = %d" % (asid, load[asid]) ) raise Exception("Load Balancer algorithm is biased") def test_lb_ip4_gre4(self): """Load Balancer IP4 GRE4 on vip case""" try: self.vapi.cli("lb vip 90.0.0.0/8 encap gre4") for asid in self.ass: self.vapi.cli("lb as 90.0.0.0/8 10.0.0.%u" % (asid)) self.pg0.add_stream(self.generatePackets(self.pg0, isv4=True)) self.pg_enable_capture(self.pg_interfaces) self.pg_start() self.checkCapture(encap="gre4", isv4=True) finally: for asid in self.ass: self.vapi.cli("lb as 90.0.0.0/8 10.0.0.%u del" % (asid)) self.vapi.cli("lb vip 90.0.0.0/8 encap gre4 del") self.vapi.cli("test lb flowtable flush") def test_lb_ip6_gre4(self): """Load Balancer IP6 GRE4 on vip case""" try: self.vapi.cli("lb vip 2001::/16 encap gre4") for asid in self.ass: self.vapi.cli("lb as 2001::/16 10.0.0.%u" % (asid)) self.pg0.add_stream(self.generatePackets(self.pg0, isv4=False)) self.pg_enable_capture(self.pg_interfaces) self.pg_start() self.checkCapture(encap="gre4", isv4=False) finally: for asid in self.ass: self.vapi.cli("lb as 2001::/16 10.0.0.%u del" % (asid)) self.vapi.cli("lb vip 2001::/16 encap gre4 del") self.vapi.cli("test lb flowtable flush") def test_lb_ip4_gre6(self): """Load Balancer IP4 GRE6 on vip case""" try: self.vapi.cli("lb vip 90.0.0.0/8 encap gre6") for asid in self.ass: self.vapi.cli("lb as 90.0.0.0/8 2002::%u" % (asid)) self.pg0.add_stream(self.generatePackets(self.pg0, isv4=True)) self.pg_enable_capture(self.pg_interfaces) self.pg_start() self.checkCapture(encap="gre6", isv4=True) finally: for asid in self.ass: self.vapi.cli("lb as 90.0.0.0/8 2002::%u del" % (asid)) self.vapi.cli("lb vip 90.0.0.0/8 encap gre6 del") self.vapi.cli("test lb flowtable flush") def test_lb_ip6_gre6(self): """Load Balancer IP6 GRE6 on vip case""" try: self.vapi.cli("lb vip 2001::/16 encap gre6") for asid in self.ass: self.vapi.cli("lb as 2001::/16 2002::%u" % (asid)) self.pg0.add_stream(self.generatePackets(self.pg0, isv4=False)) self.pg_enable_capture(self.pg_interfaces) self.pg_start() self.checkCapture(encap="gre6", isv4=False) finally: for asid in self.ass: self.vapi.cli("lb as 2001::/16 2002::%u del" % (asid)) self.vapi.cli("lb vip 2001::/16 encap gre6 del") self.vapi.cli("test lb flowtable flush") def test_lb_ip4_gre4_port(self): """Load Balancer IP4 GRE4 on per-port-vip case""" try: self.vapi.cli("lb vip 90.0.0.0/8 protocol udp port 20000 encap gre4") for asid in self.ass: self.vapi.cli( "lb as 90.0.0.0/8 protocol udp port 20000 10.0.0.%u" % (asid) ) self.pg0.add_stream(self.generatePackets(self.pg0, isv4=True)) self.pg_enable_capture(self.pg_interfaces) self.pg_start() self.checkCapture(encap="gre4", isv4=True) finally: for asid in self.ass: self.vapi.cli( "lb as 90.0.0.0/8 protocol udp port 20000 10.0.0.%u del" % (asid) ) self.vapi.cli("lb vip 90.0.0.0/8 protocol udp port 20000 encap gre4 del") self.vapi.cli("test lb flowtable flush") def test_lb_ip6_gre4_port(self): """Load Balancer IP6 GRE4 on per-port-vip case""" try: self.vapi.cli("lb vip 2001::/16 protocol udp port 20000 encap gre4") for asid in self.ass: self.vapi.cli( "lb as 2001::/16 protocol udp port 20000 10.0.0.%u" % (asid) ) self.pg0.add_stream(self.generatePackets(self.pg0, isv4=False)) self.pg_enable_capture(self.pg_interfaces) self.pg_start() self.checkCapture(encap="gre4", isv4=False) finally: for asid in self.ass: self.vapi.cli( "lb as 2001::/16 protocol udp port 20000 10.0.0.%u del" % (asid) ) self.vapi.cli("lb vip 2001::/16 protocol udp port 20000 encap gre4 del") self.vapi.cli("test lb flowtable flush") def test_lb_ip4_gre6_port(self): """Load Balancer IP4 GRE6 on per-port-vip case""" try: self.vapi.cli("lb vip 90.0.0.0/8 protocol udp port 20000 encap gre6") for asid in self.ass: self.vapi.cli( "lb as 90.0.0.0/8 protocol udp port 20000 2002::%u" % (asid) ) self.pg0.add_stream(self.generatePackets(self.pg0, isv4=True)) self.pg_enable_capture(self.pg_interfaces) self.pg_start() self.checkCapture(encap="gre6", isv4=True) finally: for asid in self.ass: self.vapi.cli( "lb as 90.0.0.0/8 protocol udp port 20000 2002::%u del" % (asid) ) self.vapi.cli("lb vip 90.0.0.0/8 protocol udp port 20000 encap gre6 del") self.vapi.cli("test lb flowtable flush") def test_lb_ip6_gre6_port(self): """Load Balancer IP6 GRE6 on per-port-vip case""" try: self.vapi.cli("lb vip 2001::/16 protocol udp port 20000 encap gre6") for asid in self.ass: self.vapi.cli( "lb as 2001::/16 protocol udp port 20000 2002::%u" % (asid) ) self.pg0.add_stream(self.generatePackets(self.pg0, isv4=False)) self.pg_enable_capture(self.pg_interfaces) self.pg_start() self.checkCapture(encap="gre6", isv4=False) finally: for asid in self.ass: self.vapi.cli( "lb as 2001::/16 protocol udp port 20000 2002::%u del" % (asid) ) self.vapi.cli("lb vip 2001::/16 protocol udp port 20000 encap gre6 del") self.vapi.cli("test lb flowtable flush") def test_lb_ip4_l3dsr(self): """Load Balancer IP4 L3DSR on vip case""" try: self.vapi.cli("lb vip 90.0.0.0/8 encap l3dsr dscp 7") for asid in self.ass: self.vapi.cli("lb as 90.0.0.0/8 10.0.0.%u" % (asid)) self.pg0.add_stream(self.generatePackets(self.pg0, isv4=True)) self.pg_enable_capture(self.pg_interfaces) self.pg_start() self.checkCapture(encap="l3dsr", isv4=True) finally: for asid in self.ass: self.vapi.cli("lb as 90.0.0.0/8 10.0.0.%u del" % (asid)) self.vapi.cli("lb vip 90.0.0.0/8 encap l3dsr dscp 7 del") self.vapi.cli("test lb flowtable flush") def test_lb_ip4_l3dsr_port(self): """Load Balancer IP4 L3DSR on per-port-vip case""" try: self.vapi.cli( "lb vip 90.0.0.0/8 protocol udp port 20000 encap l3dsr dscp 7" ) for asid in self.ass: self.vapi.cli( "lb as 90.0.0.0/8 protocol udp port 20000 10.0.0.%u" % (asid) ) self.pg0.add_stream(self.generatePackets(self.pg0, isv4=True)) self.pg_enable_capture(self.pg_interfaces) self.pg_start() self.checkCapture(encap="l3dsr", isv4=True) finally: for asid in self.ass: self.vapi.cli( "lb as 90.0.0.0/8 protocol udp port 20000 10.0.0.%u del" % (asid) ) self.vapi.cli( "lb vip 90.0.0.0/8 protocol udp port 20000 encap l3dsr dscp 7 del" ) self.vapi.cli("test lb flowtable flush") def test_lb_ip4_nat4_port(self): """Load Balancer IP4 NAT4 on per-port-vip case""" try: self.vapi.cli( "lb vip 90.0.0.0/8 protocol udp port 20000 encap nat4" " type clusterip target_port 3307" ) for asid in self.ass: self.vapi.cli( "lb as 90.0.0.0/8 protocol udp port 20000 10.0.0.%u" % (asid) ) self.pg0.add_stream(self.generatePackets(self.pg0, isv4=True)) self.pg_enable_capture(self.pg_interfaces) self.pg_start() self.checkCapture(encap="nat4", isv4=True) finally: for asid in self.ass: self.vapi.cli( "lb as 90.0.0.0/8 protocol udp port 20000 10.0.0.%u del" % (asid) ) self.vapi.cli( "lb vip 90.0.0.0/8 protocol udp port 20000 encap nat4" " type clusterip target_port 3307 del" ) self.vapi.cli("test lb flowtable flush") def test_lb_ip6_nat6_port(self): """Load Balancer IP6 NAT6 on per-port-vip case""" try: self.vapi.cli( "lb vip 2001::/16 protocol udp port 20000 encap nat6" " type clusterip target_port 3307" ) for asid in self.ass: self.vapi.cli( "lb as 2001::/16 protocol udp port 20000 2002::%u" % (asid) ) self.pg0.add_stream(self.generatePackets(self.pg0, isv4=False)) self.pg_enable_capture(self.pg_interfaces) self.pg_start() self.checkCapture(encap="nat6", isv4=False) finally: for asid in self.ass: self.vapi.cli( "lb as 2001::/16 protocol udp port 20000 2002::%u del" % (asid) ) self.vapi.cli( "lb vip 2001::/16 protocol udp port 20000 encap nat6" " type clusterip target_port 3307 del" ) self.vapi.cli("test lb flowtable flush")