ikev2: support responder hostname
[vpp.git] / test / vpp_pg_interface.py
index 32c0eae..c4b2e0a 100755 (executable)
@@ -57,6 +57,13 @@ class VppPGInterface(VppInterface):
         """gso size on packet-generator interface"""
         return self._gso_size
 
+    @property
+    def coalesce_is_enabled(self):
+        """coalesce enabled on packet-generator interface"""
+        if self._coalesce_enabled == 0:
+            return "coalesce-disabled"
+        return "coalesce-enabled"
+
     @property
     def out_path(self):
         """pcap file path - captured packets"""
@@ -113,6 +120,7 @@ class VppPGInterface(VppInterface):
         self._pg_index = pg_index
         self._gso_enabled = gso
         self._gso_size = gso_size
+        self._coalesce_enabled = 0
         self._out_file = "pg%u_out.pcap" % self.pg_index
         self._out_path = self.test.tempdir + "/" + self._out_file
         self._in_file = "pg%u_in.pcap" % self.pg_index
@@ -160,6 +168,18 @@ class VppPGInterface(VppInterface):
     def disable_capture(self):
         self.test.vapi.cli("%s disable" % self.capture_cli)
 
+    def coalesce_enable(self):
+        """ Enable packet coalesce on this packet-generator interface"""
+        self._coalesce_enabled = 1
+        self.test.vapi.pg_interface_enable_disable_coalesce(self.sw_if_index,
+                                                            1)
+
+    def coalesce_disable(self):
+        """ Disable packet coalesce on this packet-generator interface"""
+        self._coalesce_enabled = 0
+        self.test.vapi.pg_interface_enable_disable_coalesce(self.sw_if_index,
+                                                            0)
+
     def add_stream(self, pkts, nb_replays=None, worker=None):
         """
         Add a stream of packets to this packet-generator
@@ -422,14 +442,16 @@ class VppPGInterface(VppInterface):
                 ARP(op=ARP.who_has, pdst=self.local_ip4,
                     psrc=self.remote_ip4, hwsrc=self.remote_mac))
 
-    def create_ndp_req(self):
+    def create_ndp_req(self, addr=None):
         """Create NDP - NS applicable for this interface"""
-        nsma = in6_getnsma(inet_pton(socket.AF_INET6, self.local_ip6))
+        if not addr:
+            addr = self.local_ip6
+        nsma = in6_getnsma(inet_pton(socket.AF_INET6, addr))
         d = inet_ntop(socket.AF_INET6, nsma)
 
         return (Ether(dst=in6_getnsmac(nsma)) /
                 IPv6(dst=d, src=self.remote_ip6) /
-                ICMPv6ND_NS(tgt=self.local_ip6) /
+                ICMPv6ND_NS(tgt=addr) /
                 ICMPv6NDOptSrcLLAddr(lladdr=self.remote_mac))
 
     def resolve_arp(self, pg_interface=None):
@@ -468,19 +490,22 @@ class VppPGInterface(VppInterface):
                 ppp("Unexpected response to ARP request:", captured_packet))
             raise
 
-    def resolve_ndp(self, pg_interface=None, timeout=1):
+    def resolve_ndp(self, pg_interface=None, timeout=1, link_layer=False):
         """Resolve NDP using provided packet-generator interface
 
         :param pg_interface: interface used to resolve, if None then this
             interface is used
         :param timeout: how long to wait for response before giving up
+        :param link_layer: resolve for global address if False (default)
+            or for link-layer address if True
 
         """
         if pg_interface is None:
             pg_interface = self
+        addr = self.local_ip6_ll if link_layer else self.local_ip6
         self.test.logger.info("Sending NDP request for %s on port %s" %
-                              (self.local_ip6, pg_interface.name))
-        ndp_req = self.create_ndp_req()
+                              (addr, pg_interface.name))
+        ndp_req = self.create_ndp_req(addr)
         pg_interface.add_stream(ndp_req)
         pg_interface.enable_capture()
         self.test.pg_start()