16 #ifndef included_gro_h 17 #define included_gro_h 23 #define GRO_FLOW_TABLE_MAX_SIZE 16 24 #define GRO_FLOW_TABLE_FLUSH 1e-5 25 #define GRO_FLOW_N_BUFFERS 64 26 #define GRO_FLOW_TIMEOUT 1e-5 27 #define GRO_TO_VECTOR_SIZE(X) (X + GRO_FLOW_TABLE_MAX_SIZE) 128 if (!flow_table_temp)
133 flow_table_temp->
is_l2 = is_l2;
134 *flow_table = flow_table_temp;
265 s =
format (s,
"packet-coalesce: enable\n");
267 s =
format (s,
"packet-coalesce: disable\n");
273 "%Uflow-table: size %u gro-total-vectors %lu gro-n-vectors %u",
278 double average_rate =
280 s =
format (s,
" gro-average-rate %.2f", average_rate);
283 s =
format (s,
" gro-average-rate 0.00");
static_always_inline u8 gro_flow_table_is_enable(gro_flow_table_t *flow_table)
static_always_inline void gro_flow_store_packet(gro_flow_t *gro_flow, u32 bi0)
static_always_inline u8 * gro_flow_table_format(u8 *s, va_list *args)
static_always_inline u8 gro_flow_table_is_timeout(vlib_main_t *vm, gro_flow_table_t *flow_table)
clib_memset(h->entries, 0, sizeof(h->entries[0]) *entries)
static f64 vlib_time_now(vlib_main_t *vm)
static_always_inline void gro_flow_set_flow_key(gro_flow_t *to, gro_flow_key_t *from)
ip46_address_t src_address
#define static_always_inline
#define GRO_FLOW_TABLE_MAX_SIZE
description fragment has unexpected format
static heap_elt_t * first(heap_header_t *h)
static_always_inline gro_flow_t * gro_flow_table_find_or_add_flow(gro_flow_table_t *flow_table, gro_flow_key_t *flow_key)
ip46_address_t dst_address
static_always_inline gro_flow_t * gro_flow_table_new_flow(gro_flow_table_t *flow_table)
gro_flow_t gro_flow[GRO_FLOW_TABLE_MAX_SIZE]
static_always_inline void gro_flow_table_reset_flow(gro_flow_table_t *flow_table, gro_flow_t *gro_flow)
sll srl srl sll sra u16x4 i
static_always_inline void gro_flow_table_free(gro_flow_table_t *flow_table)
static_always_inline u32 gro_flow_table_init(gro_flow_table_t **flow_table, u8 is_l2, u32 node_index)
static_always_inline u8 gro_flow_is_timeout(vlib_main_t *vm, gro_flow_t *gro_flow)
static_always_inline u8 gro_flow_is_equal(gro_flow_key_t *first, gro_flow_key_t *second)
static_always_inline void gro_flow_table_set_timeout(vlib_main_t *vm, gro_flow_table_t *flow_table, f64 timeout_expire)
static void clib_mem_free(void *p)
static void * clib_mem_alloc(uword size)
static_always_inline void gro_flow_set_timeout(vlib_main_t *vm, gro_flow_t *gro_flow, f64 timeout_expire)
timeout_expire is in between 3 to 10 microseconds 3e-6 1e-5
static_always_inline gro_flow_t * gro_flow_table_get_flow(gro_flow_table_t *flow_table, gro_flow_key_t *flow_key)
static_always_inline void gro_flow_table_set_is_enable(gro_flow_table_t *flow_table, u8 is_enable)
static_always_inline void gro_flow_table_set_node_index(gro_flow_table_t *flow_table, u32 node_index)
vl_api_interface_index_t sw_if_index