punt: fix the set_punt API/CLI which was rejecting valid ports

add a UT for the API

Change-Id: I93fb6ec2c5f74b991bf7f229250a30c0395b8e24
Signed-off-by: Neale Ranns <nranns@cisco.com>
This commit is contained in:
Neale Ranns
2019-06-04 13:31:23 +00:00
committed by Dave Barach
parent df3ca23f17
commit 68577d2982
2 changed files with 31 additions and 12 deletions
+11 -11
View File
@@ -397,9 +397,6 @@ punt_l4_add_del (vlib_main_t * vm,
return clib_error_return (0,
"punt TCP/SCTP ports is not supported yet");
if (!udp_is_valid_dst_port (port, af == AF_IP4))
return clib_error_return (0, "invalid port: %d", port);
udp_register_dst_port (vm, port, udp4_punt_node.index, af == AF_IP4);
return 0;
@@ -438,16 +435,19 @@ punt_cli (vlib_main_t * vm,
{
clib_error_t *error = NULL;
bool is_add = true;
/* *INDENT-OFF* */
punt_reg_t pr = {
.punt = {
.l4 = {
.af = AF_IP4,
.port = ~0,
.protocol = ~0,
},
},
.l4 = {
.af = AF_IP4,
.port = ~0,
.protocol = ~0,
},
},
.type = PUNT_TYPE_L4,
};
u32 port;
/* *INDENT-ON* */
while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
{
@@ -457,8 +457,8 @@ punt_cli (vlib_main_t * vm,
pr.punt.l4.af = AF_IP6;
else if (unformat (input, "ip6"))
pr.punt.l4.af = AF_IP6;
else if (unformat (input, "%d", &pr.punt.l4.port))
;
else if (unformat (input, "%d", &port))
pr.punt.l4.port = port;
else if (unformat (input, "udp"))
pr.punt.l4.protocol = IP_PROTOCOL_UDP;
else if (unformat (input, "tcp"))
+20 -1
View File
@@ -17,6 +17,7 @@ from vpp_ip_route import VppIpRoute, VppRoutePath, VppIpMRoute, \
VppMRoutePath, MRouteItfFlags, MRouteEntryFlags, VppMplsIpBind, \
VppMplsTable, VppIpTable
from vpp_sub_interface import VppSubInterface, VppDot1QSubint, VppDot1ADSubint
from vpp_papi import VppEnum
NUM_PKTS = 67
@@ -1281,10 +1282,28 @@ class TestIPPunt(VppTestCase):
def test_ip_punt(self):
""" IP punt police and redirect """
# use UDP packet that have a port we need to explicitly
# register to get punted.
pt_l4 = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_L4
af_ip4 = VppEnum.vl_api_address_family_t.ADDRESS_IP4
udp_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_UDP
punt_udp = {
'type': pt_l4,
'punt': {
'l4': {
'af': af_ip4,
'protocol': udp_proto,
'port': 1234,
}
}
}
self.vapi.set_punt(is_add=1, punt=punt_udp)
p = (Ether(src=self.pg0.remote_mac,
dst=self.pg0.local_mac) /
IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
TCP(sport=1234, dport=1234) /
UDP(sport=1234, dport=1234) /
Raw('\xa5' * 100))
pkts = p * 1025