X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip%2Fpunt.h;h=4cef527855866aaa6ae876971907cf5ea9cf7f9b;hb=2af0e3a;hp=09a9d4c55bfe17ce39800d3e01c58fc9027fad93;hpb=7cd468a3d7dee7d6c92f69a0bb7061ae208ec727;p=vpp.git diff --git a/src/vnet/ip/punt.h b/src/vnet/ip/punt.h index 09a9d4c55bf..4cef5278558 100644 --- a/src/vnet/ip/punt.h +++ b/src/vnet/ip/punt.h @@ -20,6 +20,9 @@ #ifndef included_punt_h #define included_punt_h +#include +#include + typedef enum { #define punt_error(n,s) PUNT_ERROR_##n, @@ -30,9 +33,56 @@ typedef enum clib_error_t *vnet_punt_add_del (vlib_main_t * vm, u8 ipv, - u8 protocol, u16 port, int is_add); + u8 protocol, u16 port, bool is_add); +clib_error_t *vnet_punt_socket_add (vlib_main_t * vm, u32 header_version, + bool is_ip4, u8 protocol, u16 port, + char *client_pathname); +clib_error_t *vnet_punt_socket_del (vlib_main_t * vm, bool is_ip4, + u8 l4_protocol, u16 port); +char *vnet_punt_get_server_pathname (void); + +enum punt_action_e +{ + PUNT_L2 = 0, + PUNT_IP4_ROUTED, + PUNT_IP6_ROUTED, +}; + +/* + * Packet descriptor header. Version 1 + * If this header changes, the version must also change to notify clients. + */ +#define PUNT_PACKETDESC_VERSION 1 +typedef struct __attribute__ ((packed)) +{ + u32 sw_if_index; /* RX or TX interface */ + enum punt_action_e action; +} punt_packetdesc_t; + +/* + * Client registration + */ +typedef struct +{ + u16 port; + struct sockaddr_un caddr; +} punt_client_t; + +typedef struct +{ + int socket_fd; + char sun_path[sizeof (struct sockaddr_un)]; + punt_client_t *clients_by_dst_port4; + punt_client_t *clients_by_dst_port6; + u32 clib_file_index; + bool is_configured; + vlib_node_t *interface_output_node; + u32 *ready_fds; + u32 *rx_buffers; +} punt_main_t; +extern punt_main_t punt_main; -#endif /* included_punt_h */ +#endif /* * fd.io coding-style-patch-verification: ON