| #!/usr/bin/env python3 |
| |
| import unittest |
| |
| from scapy.packet import Raw |
| from scapy.layers.l2 import Ether |
| from scapy.layers.inet import IP, UDP |
| from scapy.layers.inet6 import IPv6 |
| |
| from framework import VppTestCase |
| from asfframework import VppTestRunner |
| |
| |
| class TestPgStream(VppTestCase): |
| """PG Stream Test Case""" |
| |
| def __init__(self, *args): |
| VppTestCase.__init__(self, *args) |
| |
| def setUp(self): |
| super(TestPgStream, self).setUp() |
| |
| # Create 3 pg interfaces - one each for ethernet, IPv4, and IPv6. |
| self.create_pg_interfaces(range(0, 1)) |
| self.pg_interfaces += self.create_pg_ip4_interfaces(range(1, 2)) |
| self.pg_interfaces += self.create_pg_ip6_interfaces(range(2, 3)) |
| |
| for i in self.pg_interfaces: |
| i.admin_up() |
| |
| for i in [self.pg0, self.pg1]: |
| i.config_ip4() |
| |
| for i in [self.pg0, self.pg2]: |
| i.config_ip6() |
| |
| self.pg0.resolve_arp() |
| self.pg0.resolve_ndp() |
| |
| def tearDown(self): |
| super(TestPgStream, self).tearDown() |
| for i in self.pg_interfaces: |
| i.unconfig_ip4() |
| i.admin_down() |
| i.remove_vpp_config() |
| |
| def pg_stream(self, count=100, rate=1e6, packet_size=700): |
| rate = str(rate) |
| packet_size = str(packet_size) |
| count = str(count) |
| |
| cmds = [ |
| "packet-generator new {{\n" |
| " name pg0-stream\n" |
| " limit {count}\n" |
| " node ethernet-input\n" |
| " source pg0\n" |
| " rate {rate}\n" |
| " size {packet_size}+{packet_size}\n" |
| " data {{\n" |
| " IP4: {src_mac} -> 00:02:03:04:05:06\n" |
| " UDP: 192.168.20.20 -> 192.168.10.100\n" |
| " UDP: 1234 -> 4321\n" |
| " incrementing 100\n" |
| " }}\n" |
| "}}\n".format( |
| count=count, |
| rate=rate, |
| packet_size=packet_size, |
| src_mac=self.pg0.local_mac, |
| ), |
| "packet-generator enable", |
| "packet-generator disable", |
| "packet-generator delete pg0-stream", |
| ] |
| |
| for cmd in cmds: |
| r = self.vapi.cli_return_response(cmd) |
| if r.retval != 0: |
| if hasattr(r, "reply"): |
| self.logger.info(cmd + " FAIL reply " + r.reply) |
| else: |
| self.logger.info(cmd + " FAIL retval " + str(r.retval)) |
| |
| def test_pg_stream(self): |
| """PG Stream testing""" |
| self.pg_stream(rate=100, packet_size=64) |
| self.pg_stream(count=1000, rate=1000) |
| self.pg_stream(count=100000, rate=10000, packet_size=1500) |
| self.pg_stream(packet_size=4000) |
| |
| |
| if __name__ == "__main__": |
| unittest.main(testRunner=VppTestRunner) |