#!/usr/bin/env python
import socket
-from util import ip4n_range
+from util import ip4n_range, ip4_range
import unittest
from framework import VppTestCase, VppTestRunner
from template_bd import BridgeDomain
VXLAN(vni=vni, flags=self.flags) /
pkt)
+ def ip_range(self, start, end):
+ """ range of remote ip's """
+ return ip4_range(self.pg0.remote_ip4, start, end)
+
def encap_mcast(self, pkt, src_ip, src_mac, vni):
"""
Encapsulate the original payload frame by adding VXLAN header with its
# Method for checking VXLAN encapsulation.
#
- def check_encapsulation(self, pkt, vni, local_only=False):
+ def check_encapsulation(self, pkt, vni, local_only=False, mcast_pkt=False):
# TODO: add error messages
# Verify source MAC is VPP_MAC and destination MAC is MY_MAC resolved
# by VPP using ARP.
self.assertEqual(pkt[Ether].src, self.pg0.local_mac)
if not local_only:
- self.assertEqual(pkt[Ether].dst, self.pg0.remote_mac)
+ 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 tunnel source IP is VPP_IP and destination IP is MY_IP.
self.assertEqual(pkt[IP].src, self.pg0.local_ip4)
if not local_only:
- self.assertEqual(pkt[IP].dst, self.pg0.remote_ip4)
+ 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 4789, source UDP port could be
# arbitrary.
self.assertEqual(pkt[UDP].dport, type(self).dport)
add or del tunnels sharing the same mcast dst
to test vxlan ref_count mechanism
"""
- n_shared_dst_tunnels = 2000
+ n_shared_dst_tunnels = 20
vni_start = 10000
vni_end = vni_start + n_shared_dst_tunnels
for vni in range(vni_start, vni_end):
- cls.vapi.vxlan_add_del_tunnel(
+ r = cls.vapi.vxlan_add_del_tunnel(
src_addr=cls.pg0.local_ip4n,
dst_addr=cls.mcast_ip4n,
mcast_sw_if_index=1,
vni=vni,
is_add=is_add)
+ if r.sw_if_index == 0xffffffff:
+ raise "bad sw_if_index"
@classmethod
def add_shared_mcast_dst_load(cls):