16 #ifndef VNET_VNET_URI_TRANSPORT_H_ 17 #define VNET_VNET_URI_TRANSPORT_H_ 27 typedef struct _transport_connection
29 ip46_address_t rmt_ip;
30 ip46_address_t lcl_ip;
45 #define c_lcl_ip connection.lcl_ip 46 #define c_rmt_ip connection.rmt_ip 47 #define c_lcl_ip4 connection.lcl_ip.ip4 48 #define c_rmt_ip4 connection.rmt_ip.ip4 49 #define c_lcl_ip6 connection.lcl_ip.ip6 50 #define c_rmt_ip6 connection.rmt_ip.ip6 51 #define c_lcl_port connection.lcl_port 52 #define c_rmt_port connection.rmt_port 53 #define c_proto connection.proto 54 #define c_state connection.state 55 #define c_s_index connection.s_index 56 #define c_c_index connection.c_index 57 #define c_is_ip4 connection.is_ip4 58 #define c_thread_index connection.thread_index 59 #define c_elog_track connection.elog_track 65 typedef struct _transport_proto_vft
72 int (*open) (ip46_address_t *
addr,
u16 port_host_byte_order);
73 void (*close) (u32 conn_index, u32 thread_index);
74 void (*
cleanup) (u32 conn_index, u32 thread_index);
94 u8 *(*format_connection) (
u8 * s, va_list * args);
95 u8 *(*format_listener) (
u8 * s, va_list * args);
96 u8 *(*format_half_open) (
u8 * s, va_list * args);
117 }) v4_connection_key_t;
127 u16 dst_port;
u32 proto;
u8 unused_for_now[8];
130 }) v6_connection_key_t;
138 u16 lcl_port,
u16 rmt_port,
u8 proto)
140 v4_connection_key_t key;
141 memset (&key, 0,
sizeof (v4_connection_key_t));
143 key.src.as_u32 = lcl->
as_u32;
144 key.dst.as_u32 = rmt->
as_u32;
145 key.src_port = lcl_port;
146 key.dst_port = rmt_port;
149 kv->
key[0] = key.as_u64[0];
150 kv->
key[1] = key.as_u64[1];
158 v4_connection_key_t key;
159 memset (&key, 0,
sizeof (v4_connection_key_t));
161 key.src.as_u32 = lcl->
as_u32;
163 key.src_port = lcl_port;
167 kv->
key[0] = key.as_u64[0];
168 kv->
key[1] = key.as_u64[1];
175 return make_v4_ss_kv (kv, &t->lcl_ip.ip4, &t->rmt_ip.ip4, t->lcl_port,
176 t->rmt_port, t->proto);
181 u16 lcl_port,
u16 rmt_port,
u8 proto)
183 v6_connection_key_t key;
184 memset (&key, 0,
sizeof (v6_connection_key_t));
186 key.src.as_u64[0] = lcl->
as_u64[0];
187 key.src.as_u64[1] = lcl->
as_u64[1];
188 key.dst.as_u64[0] = rmt->
as_u64[0];
189 key.dst.as_u64[1] = rmt->
as_u64[1];
190 key.src_port = lcl_port;
191 key.dst_port = rmt_port;
194 kv->
key[0] = key.as_u64[0];
195 kv->
key[1] = key.as_u64[1];
207 v6_connection_key_t key;
208 memset (&key, 0,
sizeof (v6_connection_key_t));
210 key.src.as_u64[0] = lcl->
as_u64[0];
211 key.src.as_u64[1] = lcl->
as_u64[1];
212 key.dst.as_u64[0] = 0;
213 key.dst.as_u64[1] = 0;
214 key.src_port = lcl_port;
218 kv->
key[0] = key.as_u64[0];
219 kv->
key[1] = key.as_u64[1];
230 make_v6_ss_kv (kv, &t->lcl_ip.ip6, &t->rmt_ip.ip6, t->lcl_port,
231 t->rmt_port, t->proto);
234 typedef struct _transport_endpoint
244 #define TRANSPORT_ENDPOINT_INVALID_INDEX ((u32)~0) 248 ip46_address_t * ip,
u16 port);
struct _transport_connection transport_connection_t
static void make_v4_ss_kv_from_tc(session_kv4_t *kv, transport_connection_t *t)
clib_bihash_kv_16_8_t session_kv4_t
static void make_v6_ss_kv(session_kv6_t *kv, ip6_address_t *lcl, ip6_address_t *rmt, u16 lcl_port, u16 rmt_port, u8 proto)
static void make_v6_ss_kv_from_tc(session_kv6_t *kv, transport_connection_t *t)
static void cleanup(void)
static void make_v6_listener_kv(session_kv6_t *kv, ip6_address_t *lcl, u16 lcl_port, u8 proto)
static void make_v4_listener_kv(session_kv4_t *kv, ip4_address_t *lcl, u16 lcl_port, u8 proto)
clib_bihash_kv_48_8_t session_kv6_t
void transport_endpoint_table_add(transport_endpoint_table_t *ht, transport_endpoint_t *te, u32 value)
struct _transport_proto_vft transport_proto_vft_t
typedef CLIB_PACKED(struct{union{struct{ip4_address_t src;ip4_address_t dst;u16 src_port;u16 dst_port;u32 proto;};u64 as_u64[2];};}) v4_connection_key_t
clib_bihash_24_8_t transport_endpoint_table_t
static void make_v4_ss_kv(session_kv4_t *kv, ip4_address_t *lcl, ip4_address_t *rmt, u16 lcl_port, u16 rmt_port, u8 proto)
void transport_endpoint_table_del(transport_endpoint_table_t *ht, transport_endpoint_t *te)
struct _transport_endpoint transport_endpoint_t
static void elog_track(elog_main_t *em, elog_event_type_t *type, elog_track_t *track, u32 data)
u32 transport_endpoint_lookup(transport_endpoint_table_t *ht, ip46_address_t *ip, u16 port)