|
| 1 | +From a1e0c25218b5bac0adeebcbd95b29618b4cadf3d Mon Sep 17 00:00:00 2001 |
| 2 | + |
| 3 | +Date: Fri, 11 Apr 2025 09:57:23 +0000 |
| 4 | +Subject: [PATCH] 0003-add-dataplane-mask-counters-to-avoid-dataplane-noise |
| 5 | + |
| 6 | +--- |
| 7 | + src/ptf/dataplane.py | 17 +++++++++++++++++ |
| 8 | + 1 file changed, 17 insertions(+) |
| 9 | + |
| 10 | +diff --git a/src/ptf/dataplane.py b/src/ptf/dataplane.py |
| 11 | +index a5d4664..0aee7ab 100644 |
| 12 | +--- a/src/ptf/dataplane.py |
| 13 | ++++ b/src/ptf/dataplane.py |
| 14 | +@@ -574,6 +574,12 @@ class DataPlane(Thread): |
| 15 | + # counters of transmited packets |
| 16 | + self.tx_counters = defaultdict(int) |
| 17 | + |
| 18 | ++ # rx/tx counters of packets that matching the packet mask |
| 19 | ++ # the key of dict is mask |
| 20 | ++ # the value is a dict of device number, port number to count |
| 21 | ++ self.mask_rx_cnt = {} |
| 22 | ++ self.mask_tx_cnt = {} |
| 23 | ++ |
| 24 | + # cvar serves double duty as a regular top level lock and |
| 25 | + # as a condition variable |
| 26 | + self.cvar = Condition() |
| 27 | +@@ -665,6 +671,9 @@ class DataPlane(Thread): |
| 28 | + self.logger.debug("Discarding oldest packet to make room") |
| 29 | + queue.append((pkt, timestamp)) |
| 30 | + self.rx_counters[(device_number, port_number)] += 1 |
| 31 | ++ for mask, cnt in self.mask_rx_cnt.items(): |
| 32 | ++ if match_exp_pkt(mask, pkt): |
| 33 | ++ cnt[(device_number, port_number)] += 1 |
| 34 | + self.cvar.notify_all() |
| 35 | + |
| 36 | + self.logger.info("Thread exit") |
| 37 | +@@ -731,6 +740,9 @@ class DataPlane(Thread): |
| 38 | + self.pcap_writer.write(packet, time.time(), device_number, port_number) |
| 39 | + bytes = self.ports[(device_number, port_number)].send(packet) |
| 40 | + self.tx_counters[(device_number, port_number)] += 1 |
| 41 | ++ for mask, cnt in self.mask_tx_cnt.items(): |
| 42 | ++ if match_exp_pkt(mask, packet): |
| 43 | ++ cnt[(device_number, port_number)] += 1 |
| 44 | + if bytes != len(packet): |
| 45 | + self.logger.error( |
| 46 | + "Unhandled send error, length mismatch %d != %d" % (bytes, len(packet)) |
| 47 | +@@ -1038,3 +1050,8 @@ class DataPlane(Thread): |
| 48 | + self.pcap_writer.close() |
| 49 | + self.pcap_writer = None |
| 50 | + self.cvar.notify_all() |
| 51 | ++ |
| 52 | ++ def create_mask_counters(self, mask): |
| 53 | ++ """Create a new mask counters""" |
| 54 | ++ self.mask_rx_cnt[mask] = defaultdict(int) |
| 55 | ++ self.mask_tx_cnt[mask] = defaultdict(int) |
| 56 | +-- |
| 57 | +2.49.0 |
0 commit comments