X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=test%2Fvpp_pg_interface.py;h=c4b2e0a96db27d072cc188eb22799c0a44040061;hb=e46bd4cac4b80c553d39dbc2a06e5dd3f8eef671;hp=e5926fac509a5529963058d0c33e76f1d3ff8cbb;hpb=3d36f19a0febaed532bd255a150504f7af8f18c2;p=vpp.git diff --git a/test/vpp_pg_interface.py b/test/vpp_pg_interface.py index e5926fac509..c4b2e0a96db 100755 --- a/test/vpp_pg_interface.py +++ b/test/vpp_pg_interface.py @@ -1,7 +1,8 @@ import os -import time import socket +from socket import inet_pton, inet_ntop import struct +import time from traceback import format_exc, format_stack import scapy.compat @@ -15,7 +16,6 @@ from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, ICMPv6ND_NA,\ IPv6ExtHdrHopByHop from util import ppp, ppc from scapy.utils6 import in6_getnsma, in6_getnsmac, in6_ismaddr -from scapy.utils import inet_pton, inet_ntop class CaptureTimeoutError(Exception): @@ -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()