From 50f0ac0f097e5495da1f2b1816106e3d420ff34b Mon Sep 17 00:00:00 2001 From: Neale Ranns Date: Wed, 15 May 2019 02:13:37 -0700 Subject: Punt: socket register for exception dispatched/punted packets based on reason - add to the Punt API to allow different descriptions of the desired packets: UDP or exceptions - move the punt nodes into punt_node.c - improve tests (test that the correct packets are punted to the registered socket) Change-Id: I1a133dec88106874993cba1f5a439cd26b2fef72 Signed-off-by: Neale Ranns --- src/vnet/ip/punt.api | 92 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 68 insertions(+), 24 deletions(-) (limited to 'src/vnet/ip/punt.api') diff --git a/src/vnet/ip/punt.api b/src/vnet/ip/punt.api index c8b222a211b..cedddc5601d 100644 --- a/src/vnet/ip/punt.api +++ b/src/vnet/ip/punt.api @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015-2016 Cisco and/or its affiliates. + * Copyright (c) 2015-2019 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: @@ -13,18 +13,55 @@ * limitations under the License. */ -option version = "2.0.0"; +option version = "2.1.0"; +import "vnet/ip/ip_types.api"; -/** \brief Punt definition - @param ipv - L3 protocol 4 - IPv4, 6 - IPv6, ~0 - All - @param l4_protocol - L4 protocol to be punted - @param l4_port - TCP/UDP port to be punted +/** \brief The types of packets to be punted */ -typeonly define punt +enum punt_type { - u8 ipv; - u8 l4_protocol; - u16 l4_port; + /* L4 (UDP) packets */ + PUNT_API_TYPE_L4, + /* Exception packets handled by the VLIB punt infra */ + PUNT_API_TYPE_EXCEPTION, +}; + +/** \brief Punt L4 traffic definition + @param af - Address Family, IPv4 or IPV6 + @param protocol - L4 protocol to be punted + @param port - TCP/UDP port to be punted +*/ +typedef punt_l4 +{ + vl_api_address_family_t af; + vl_api_ip_proto_t protocol; + u16 port; +}; + +/** \brief The ID of the punt exception reason + Dump all the reasons to obtain this +*/ +typedef punt_exception +{ + u32 id; +}; + +/** \brief Union of the different punt packet descriptions +*/ +union punt_union +{ + vl_api_punt_exception_t exception; + vl_api_punt_l4_t l4; +}; + +/** \brief Full description of which packets are requested to be punted + @param type - Which packet type + @param punt - Description corresponding to the type +*/ +typedef punt +{ + vl_api_punt_type_t type; + vl_api_punt_union_t punt; }; /** \brief Punt traffic to the host @@ -40,19 +77,6 @@ autoreply define set_punt { vl_api_punt_t punt; }; -define punt_dump -{ - u32 client_index; - u32 context; - u8 is_ipv6; -}; - -define punt_details -{ - u32 context; - vl_api_punt_t punt; -}; - /** \brief Punt traffic to the host via socket @param client_index - opaque cookie to identify the sender @param context - sender context, to match reply w/ request @@ -78,7 +102,7 @@ define punt_socket_dump { u32 client_index; u32 context; - u8 is_ipv6; + vl_api_punt_type_t type; }; define punt_socket_details @@ -94,6 +118,26 @@ autoreply define punt_socket_deregister { vl_api_punt_t punt; }; +/** \brief Dump all of the excpetion punt reasons +*/ +define punt_reason_dump +{ + u32 client_index; + u32 context; +}; + +typedef punt_reason +{ + u32 id; + string name; +}; + +define punt_reason_details +{ + u32 context; + vl_api_punt_reason_t reason; +}; + /* * Local Variables: * eval: (c-set-style "gnu") -- cgit 1.2.3-korg