@@ -152,7 +152,11 @@ def _configure_ipv4_forwarding(self, enable: bool) -> None:
self.sut_node.configure_ipv4_forwarding(enable)
def send_packet_and_capture(
- self, packet: Packet, duration: float = 1
+ self,
+ packet: Packet,
+ duration: float = 1,
+ no_lldp: bool = True,
+ no_arp: bool = True,
) -> list[Packet]:
"""
Send a packet through the appropriate interface and
@@ -162,7 +166,12 @@ def send_packet_and_capture(
"""
packet = self._adjust_addresses(packet)
return self.tg_node.send_packet_and_capture(
- packet, self._tg_port_egress, self._tg_port_ingress, duration
+ packet,
+ self._tg_port_egress,
+ self._tg_port_ingress,
+ duration,
+ no_lldp,
+ no_arp,
)
def get_expected_packet(self, packet: Packet) -> Packet:
@@ -52,6 +52,8 @@ def send_packet_and_capture(
send_port: Port,
receive_port: Port,
duration: float,
+ no_lldp: bool,
+ no_arp: bool,
capture_name: str = _get_default_capture_name(),
) -> list[Packet]:
"""Send a packet, return received traffic.
@@ -71,7 +73,7 @@ def send_packet_and_capture(
A list of received packets. May be empty if no packets are captured.
"""
return self.send_packets_and_capture(
- [packet], send_port, receive_port, duration, capture_name
+ [packet], send_port, receive_port, duration, no_lldp, no_arp, capture_name
)
def send_packets_and_capture(
@@ -80,6 +82,8 @@ def send_packets_and_capture(
send_port: Port,
receive_port: Port,
duration: float,
+ no_lldp: bool,
+ no_arp: bool,
capture_name: str = _get_default_capture_name(),
) -> list[Packet]:
"""Send packets, return received traffic.
@@ -93,6 +97,8 @@ def send_packets_and_capture(
send_port: The egress port on the TG node.
receive_port: The ingress port in the TG node.
duration: Capture traffic for this amount of time after sending the packets.
+ no_lldp: Option to disable capturing LLDP packets
+ no_arp: Option to disable capturing ARP packets
capture_name: The name of the .pcap file where to store the capture.
Returns:
@@ -108,6 +114,8 @@ def send_packets_and_capture(
send_port,
receive_port,
duration,
+ no_lldp,
+ no_arp,
)
self._logger.debug(
@@ -123,6 +131,8 @@ def _send_packets_and_capture(
send_port: Port,
receive_port: Port,
duration: float,
+ no_lldp: bool,
+ no_arp: bool,
) -> list[Packet]:
"""
The extended classes must implement this method which
@@ -69,6 +69,7 @@ def scapy_send_packets_and_capture(
send_iface: str,
recv_iface: str,
duration: float,
+ sniff_filter: str,
) -> list[bytes]:
"""RPC function to send and capture packets.
@@ -90,6 +91,7 @@ def scapy_send_packets_and_capture(
iface=recv_iface,
store=True,
started_callback=lambda *args: scapy.all.sendp(scapy_packets, iface=send_iface),
+ filter=sniff_filter,
)
sniffer.start()
time.sleep(duration)
@@ -264,10 +266,16 @@ def _send_packets_and_capture(
send_port: Port,
receive_port: Port,
duration: float,
+ no_lldp: bool,
+ no_arp: bool,
capture_name: str = _get_default_capture_name(),
) -> list[Packet]:
binary_packets = [packet.build() for packet in packets]
-
+ sniff_filter = []
+ if no_lldp:
+ sniff_filter.append("ether[12:2] != 0x88cc")
+ if no_arp:
+ sniff_filter.append("ether[12:2] != 0x0806")
xmlrpc_packets: list[
xmlrpc.client.Binary
] = self.rpc_server_proxy.scapy_send_packets_and_capture(
@@ -275,6 +283,7 @@ def _send_packets_and_capture(
send_port.logical_name,
receive_port.logical_name,
duration,
+ " && ".join(sniff_filter),
) # type: ignore[assignment]
scapy_packets = [Ether(packet.data) for packet in xmlrpc_packets]
@@ -56,6 +56,8 @@ def send_packet_and_capture(
send_port: Port,
receive_port: Port,
duration: float = 1,
+ no_lldp: bool = True,
+ no_arp: bool = True,
) -> list[Packet]:
"""Send a packet, return received traffic.
@@ -73,7 +75,7 @@ def send_packet_and_capture(
A list of received packets. May be empty if no packets are captured.
"""
return self.traffic_generator.send_packet_and_capture(
- packet, send_port, receive_port, duration
+ packet, send_port, receive_port, duration, no_lldp, no_arp
)
def close(self) -> None: