vpp/test/test_offload.py
Dave Barach 82192ca4dc 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
2020-04-24 15:01:29 +00:00

75 lines
2.4 KiB
Python

#!/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)