+ def test_punt_socket_traffic_multi_port_multi_sockets(self):
+ """ Punt socket traffic multi ports and multi sockets"""
+
+ for p in self.ports:
+ self.portsCheck[p] = 0
+
+ #
+ # create stream with random pakets count per given ports
+ #
+ pkts = list()
+ for _ in range(0, self.nr_packets):
+ # choose port from port list
+ p = random.choice(self.ports)
+ pkts.append((
+ Ether(src=self.pg0.remote_mac,
+ dst=self.pg0.local_mac) /
+ IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
+ UDP(sport=9876, dport=p) /
+ Raw('\xa5' * 100)))
+ self.portsCheck[p] += 1
+ #
+ # no punt socket
+ #
+ punts = self.vapi.punt_socket_dump(is_ip6=0)
+ self.assertEqual(len(punts), 0)
+
+ #
+ # configure a punt socket
+ #
+ for p in self.ports:
+ self.socket_client_create(self.tempdir+"/socket_" + str(p))
+ self.vapi.punt_socket_register(p, self.tempdir+"/socket_" + str(p))
+ punts = self.vapi.punt_socket_dump(is_ip6=0)
+ self.assertEqual(len(punts), len(self.ports))
+
+ for p in self.ports:
+ self.logger.debug("Sending %s packets to port %d",
+ str(self.portsCheck[p]), p)
+
+ #
+ # expect punt socket and no packets on pg0
+ #
+ self.vapi.cli("clear errors")
+ self.vapi.cli("clear trace")
+ self.pg0.add_stream(pkts)
+ self.pg_enable_capture(self.pg_interfaces)
+ self.pg_start()
+ self.pg0.get_capture(0)
+ self.logger.info(self.vapi.cli("show trace"))
+ self.socket_client_close()
+
+ for p in self.ports:
+ self.assertEqual(self.portsCheck[p], 0)
+ self.vapi.punt_socket_deregister(p)
+ punts = self.vapi.punt_socket_dump(is_ip6=0)
+ self.assertEqual(len(punts), 0)
+
+ def test_punt_socket_traffic_multi_ports_single_socket(self):
+ """ Punt socket traffic multi ports and single socket"""
+
+ for p in self.ports:
+ self.portsCheck[p] = 0
+
+ #
+ # create stream with random pakets count per given ports
+ #
+ pkts = list()
+ for _ in range(0, self.nr_packets):
+ # choose port from port list
+ p = random.choice(self.ports)
+ pkts.append((
+ Ether(src=self.pg0.remote_mac,
+ dst=self.pg0.local_mac) /
+ IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
+ UDP(sport=9876, dport=p) /
+ Raw('\xa5' * 100)))
+ self.portsCheck[p] += 1
+
+ #
+ # no punt socket
+ #
+ punts = self.vapi.punt_socket_dump(is_ip6=0)
+ self.assertEqual(len(punts), 0)
+
+ # configure a punt socket
+ #
+ self.socket_client_create(self.tempdir+"/socket_multi")
+ for p in self.ports:
+ self.vapi.punt_socket_register(p, self.tempdir+"/socket_multi")
+ punts = self.vapi.punt_socket_dump(is_ip6=0)
+ self.assertEqual(len(punts), len(self.ports))
+
+ for p in self.ports:
+ self.logger.debug("Sending %s packets to port %d",
+ str(self.portsCheck[p]), p)
+ #
+ # expect punt socket and no packets on pg0
+ #
+ self.vapi.cli("clear errors")
+ self.vapi.cli("clear trace")
+ self.pg0.add_stream(pkts)
+ self.pg_enable_capture(self.pg_interfaces)
+ self.pg_start()
+ self.pg0.get_capture(0)
+ self.logger.info(self.vapi.cli("show trace"))
+ self.socket_client_close()
+
+ for p in self.ports:
+ self.assertEqual(self.portsCheck[p], 0)
+ self.vapi.punt_socket_deregister(p)
+ punts = self.vapi.punt_socket_dump(is_ip6=0)
+ self.assertEqual(len(punts), 0)
+