summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Barach <dave@barachs.net>2019-12-24 16:59:38 -0500
committerDave Barach <dave@barachs.net>2020-02-12 14:10:30 -0500
commitd3f6dc69bea7ffacbf5455a1f923c0a1af2ead23 (patch)
tree422e76376b9f9b318dcfd06c3ea605c795df0c7a
parent7c5a3536ce4c2fd4157c466367c495cefecaa52e (diff)
classify: "classify filter ..." debug CLI cleanup
The pcap trace filter initial table index lives in cm->filter_set_by_sw_if_index [0], which corresponds to the "local0" interface. Debug cli makes sure that folks don't accidentally specify the "local0" interface. At least it does now... Fix the "vlib format.c code coverage" test in test/test_vlib.py. Type: fix Change-Id: I35320bc2c8f0c6f1f8c12e3529d1938548185151 Signed-off-by: Dave Barach <dave@barachs.net> (cherry picked from commit 29c6132108be68feb11c8d9bfaaf674cba86ee33)
-rwxr-xr-xsrc/vnet/classify/vnet_classify.c15
-rw-r--r--test/test_vlib.py187
2 files changed, 195 insertions, 7 deletions
diff --git a/src/vnet/classify/vnet_classify.c b/src/vnet/classify/vnet_classify.c
index 3d338d15d07..fff279e798c 100755
--- a/src/vnet/classify/vnet_classify.c
+++ b/src/vnet/classify/vnet_classify.c
@@ -1694,6 +1694,7 @@ classify_filter_command_fn (vlib_main_t * vm,
int current_data_offset = 0;
u32 sw_if_index = ~0;
int pkt_trace = 0;
+ int pcap = 0;
int i;
vnet_classify_table_t *t;
u8 *mask = 0;
@@ -1706,13 +1707,16 @@ classify_filter_command_fn (vlib_main_t * vm,
{
if (unformat (input, "del"))
is_add = 0;
- else if (unformat (input, "pcap %=", &sw_if_index, 0))
- ;
+ else if (unformat (input, "pcap %=", &pcap, 1))
+ sw_if_index = 0;
else if (unformat (input, "trace"))
pkt_trace = 1;
else if (unformat (input, "%U",
unformat_vnet_sw_interface, vnm, &sw_if_index))
- ;
+ {
+ if (sw_if_index == 0)
+ return clib_error_return (0, "Local interface not supported...");
+ }
else if (unformat (input, "buckets %d", &nbuckets))
;
else if (unformat (input, "mask %U", unformat_classify_mask,
@@ -1725,9 +1729,6 @@ classify_filter_command_fn (vlib_main_t * vm,
break;
}
- if (sw_if_index == 0)
- return clib_error_return (0, "Local interface not supported...");
-
if (is_add && mask == 0 && table_index == ~0)
return clib_error_return (0, "Mask required");
@@ -1737,7 +1738,7 @@ classify_filter_command_fn (vlib_main_t * vm,
if (is_add && match == ~0 && table_index == ~0)
return clib_error_return (0, "match count required");
- if (sw_if_index == ~0 && pkt_trace == 0)
+ if (sw_if_index == ~0 && pkt_trace == 0 && pcap == 0)
return clib_error_return (0, "Must specify trace, pcap or interface...");
if (pkt_trace && sw_if_index != ~0)
diff --git a/test/test_vlib.py b/test/test_vlib.py
new file mode 100644
index 00000000000..33dc602cf2a
--- /dev/null
+++ b/test/test_vlib.py
@@ -0,0 +1,187 @@
+#!/usr/bin/env python3
+
+import unittest
+
+from framework import VppTestCase, VppTestRunner, running_extended_tests
+from vpp_ip_route import VppIpTable, VppIpRoute, VppRoutePath
+
+
+class TestVlib(VppTestCase):
+ """ Vlib Unit Test Cases """
+ worker_config = "workers 1"
+
+ @classmethod
+ def setUpClass(cls):
+ super(TestVlib, cls).setUpClass()
+
+ @classmethod
+ def tearDownClass(cls):
+ super(TestVlib, cls).tearDownClass()
+
+ def setUp(self):
+ super(TestVlib, self).setUp()
+
+ def tearDown(self):
+ super(TestVlib, self).tearDown()
+
+ # @unittest.skipUnless(running_extended_tests, "part of extended tests")
+
+ def test_vlib_main_unittest(self):
+ """ Vlib main.c Code Coverage Test """
+
+ cmds = ["loopback create",
+ "packet-generator new {\n"
+ " name vlib\n"
+ " limit 15\n"
+ " size 128-128\n"
+ " interface loop0\n"
+ " node ethernet-input\n"
+ " data {\n"
+ " IP6: 00:d0:2d:5e:86:85 -> 00:0d:ea:d0:00:00\n"
+ " ICMP: db00::1 -> db00::2\n"
+ " incrementing 30\n"
+ " }\n"
+ "}\n",
+ "elog trace dispatch",
+ "event-logger stop",
+ "event-logger clear",
+ "event-logger resize 102400",
+ "event-logger restart",
+ "pcap dispatch trace on max 100 buffer-trace pg-input 15",
+ "set pmc instructions-per-clock",
+ "pa en",
+ "show event-log 100 all",
+ "event-log save",
+ "event-log save foo",
+ "pcap dispatch trace",
+ "pcap dispatch trace status",
+ "pcap dispatch trace off",
+ "show vlib frame-allocation",
+ ]
+
+ 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_vlib_node_cli_unittest(self):
+ """ Vlib node_cli.c Code Coverage Test """
+
+ cmds = ["loopback create",
+ "packet-generator new {\n"
+ " name vlib\n"
+ " limit 15\n"
+ " size 128-128\n"
+ " interface loop0\n"
+ " node ethernet-input\n"
+ " data {\n"
+ " IP6: 00:d0:2d:5e:86:85 -> 00:0d:ea:d0:00:00\n"
+ " ICMP: db00::1 -> db00::2\n"
+ " incrementing 30\n"
+ " }\n"
+ "}\n",
+ "show vlib graph",
+ "show vlib graph ethernet-input",
+ "show vlib graphviz",
+ "show vlib graphviz graphviz.dot",
+ "pa en",
+ "show runtime ethernet-input",
+ "show runtime brief verbose max summary",
+ "clear runtime",
+ "show node index 1",
+ "show node ethernet-input",
+ "show node pg-input",
+ "set node function",
+ "set node function no-such-node",
+ "set node function cdp-input default",
+ "set node function ethernet-input default",
+ "set node function ethernet-input bozo",
+ "set node function ethernet-input",
+ "show \t",
+ ]
+
+ 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_vlib_buffer_c_unittest(self):
+ """ Vlib buffer.c Code Coverage Test """
+
+ cmds = ["loopback create",
+ "packet-generator new {\n"
+ " name vlib\n"
+ " limit 15\n"
+ " size 128-128\n"
+ " interface loop0\n"
+ " node ethernet-input\n"
+ " data {\n"
+ " IP6: 00:d0:2d:5e:86:85 -> 00:0d:ea:d0:00:00\n"
+ " ICMP: db00::1 -> db00::2\n"
+ " incrementing 30\n"
+ " }\n"
+ "}\n",
+ "elog trace",
+ "elog trace enable",
+ "elog trace api cli barrier",
+ "pa en",
+ "show interface bogus",
+ "elog trace disable api cli barrier",
+ "elog trace circuit-node ethernet-input",
+ "elog trace circuit-node ethernet-input disable",
+ "clear interfaces",
+ "test vlib",
+ "test vlib2",
+ "show memory api-segment stats-segment main-heap verbose",
+ "leak-check { show memory }",
+ "show cpu",
+ "memory-trace main-heap",
+ "memory-trace main-heap api-segment stats-segment",
+ "leak-check { show version }",
+ "show version ?",
+ "comment { show version }",
+ "uncomment { show version }",
+ "show memory main-heap",
+ "show memory bogus",
+ "choices",
+ "test heap-validate",
+ "memory-trace main-heap disable",
+ "show buffers",
+ "show eve",
+ "show help",
+ "show ip ",
+ ]
+
+ 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_vlib_format_unittest(self):
+ """ Vlib format.c Code Coverage Test """
+
+ cmds = ["loopback create",
+ "classify filter pcap mask l2 proto match l2 proto 0x86dd",
+ "classify filter pcap del",
+ "test format-vlib",
+ ]
+
+ 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))
+
+if __name__ == '__main__':
+ unittest.main(testRunner=VppTestRunner)