aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Barach <dave@barachs.net>2020-04-24 09:43:14 -0400
committerDave Wallace <dwallacelf@gmail.com>2020-04-24 15:01:29 +0000
commit82192ca4dca41de77a2e8a2dd50d72b5573e9a49 (patch)
tree1ee0f7c2045c4f4d20f265426b539d7f94cac69a
parent69de9fadbfd2e6e256a5133513e002712705ded3 (diff)
tests: test vnet_calc_checksums_inline(...)
Use a hand-crafted packet generator script to inject packets with deliberately broken ip4 and udp checksums - and the appropriate checksum offload flags - into src/vnet/interface_output.c vnet_interface_output_node_inline(...), and make sure that the resulting checksums are correct. Use the packet tracer to catch one of the packets. Parse through the packet trace, and make sure that the checksums have been correctly computed. Type: test Signed-off-by: Dave Barach <dave@barachs.net> Change-Id: Ic08b4b64d7ef27061558a3abf0b79917ead254b5
-rw-r--r--test/test_offload.py74
1 files changed, 74 insertions, 0 deletions
diff --git a/test/test_offload.py b/test/test_offload.py
new file mode 100644
index 00000000000..8b045bfe131
--- /dev/null
+++ b/test/test_offload.py
@@ -0,0 +1,74 @@
+#!/usr/bin/env python3
+
+import unittest
+
+from framework import VppTestCase, VppTestRunner, running_gcov_tests
+from vpp_ip_route import VppIpTable, VppIpRoute, VppRoutePath
+
+
+class TestOffload(VppTestCase):
+ """ Offload Unit Test Cases """
+
+ @classmethod
+ def setUpClass(cls):
+ super(TestOffload, cls).setUpClass()
+
+ @classmethod
+ def tearDownClass(cls):
+ super(TestOffload, cls).tearDownClass()
+
+ def setUp(self):
+ super(TestOffload, self).setUp()
+
+ def tearDown(self):
+ super(TestOffload, self).tearDown()
+
+ def test_offload_unittest(self):
+ """ Checksum Offload Test """
+ cmds = ["loop create",
+ "set int ip address loop0 11.22.33.1/24",
+ "set int state loop0 up",
+ "loop create",
+ "set int ip address loop1 11.22.34.1/24",
+ "set int state loop1 up",
+ "set ip neighbor loop1 11.22.34.44 03:00:11:22:34:44",
+ "packet-generator new {\n"
+ " name s0\n"
+ " limit 100\n"
+ " size 128-128\n"
+ " interface loop0\n"
+ " tx-interface loop1\n"
+ " node loop1-output\n"
+ " buffer-flags ip4 offload-ip-cksum offload-udp-cksum\n"
+ " data {\n"
+ " IP4: 1.2.3 -> dead.0000.0001\n"
+ " UDP: 11.22.33.44 -> 11.22.34.44\n"
+ " ttl 2 checksum 13\n"
+ " UDP: 1234 -> 2345\n"
+ " checksum 11\n"
+ " incrementing 114\n"
+ " }\n"
+ "}",
+ "trace add pg-input 1",
+ "pa en",
+ "show error"]
+
+ 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))
+
+ r = self.vapi.cli_return_response("show trace")
+ self.assertTrue(r.retval == 0)
+ self.assertTrue(hasattr(r, 'reply'))
+ rv = r.reply
+ look_here = rv.find('ethernet-input')
+ self.assertFalse(look_here == -1)
+ bad_checksum_index = rv[look_here:].find('should be')
+ self.assertTrue(bad_checksum_index == -1)
+
+if __name__ == '__main__':
+ unittest.main(testRunner=VppTestRunner)