X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fioam%2Fip6%2Fioam_cache.h;h=3a3cf6a620e9fcdd424d1e620c248bb5754b07d3;hb=eb987d3a09f669787014b1553f032219522149e1;hp=75ec784bf52fb087f8df6511e57446b00e658e7e;hpb=b20dd1ba714c0b6de78abfe05dbee5b076cdac72;p=vpp.git diff --git a/src/plugins/ioam/ip6/ioam_cache.h b/src/plugins/ioam/ip6/ioam_cache.h index 75ec784bf52..3a3cf6a620e 100644 --- a/src/plugins/ioam/ip6/ioam_cache.h +++ b/src/plugins/ioam/ip6/ioam_cache.h @@ -20,7 +20,7 @@ #include #include #include -#include +#include #include #include @@ -98,6 +98,8 @@ */ typedef struct { + /** Required for pool_get_aligned */ + CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); ip6_address_t src_address; ip6_address_t dst_address; u16 src_port; @@ -122,6 +124,8 @@ typedef struct */ typedef struct { + /** Required for pool_get_aligned */ + CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); u32 pool_id; u32 pool_index; ip6_address_t src_address; @@ -173,6 +177,7 @@ typedef struct /* The current rewrite string being used */ u8 *rewrite; u8 rewrite_pool_index_offset; + ip6_address_t sr_localsid_cache; u64 lookup_table_nbuckets; u64 lookup_table_size; @@ -190,6 +195,7 @@ typedef struct */ bool criteria_oneway; u8 wait_for_responses; + ip6_address_t sr_localsid_ts; /* convenience */ vlib_main_t *vlib_main; @@ -201,7 +207,7 @@ typedef struct u32 cleanup_process_node_index; } ioam_cache_main_t; -ioam_cache_main_t ioam_cache_main; +extern ioam_cache_main_t ioam_cache_main; extern vlib_node_registration_t ioam_cache_node; extern vlib_node_registration_t ioam_cache_ts_node; @@ -276,17 +282,11 @@ typedef CLIB_PACKED (struct static inline void ioam_e2e_id_rewrite_handler (ioam_e2e_id_option_t * e2e_option, - vlib_buffer_t * b0) + ip6_address_t * address) { - ip6_main_t *im = &ip6_main; - ip6_address_t *my_address = 0; - my_address = - ip6_interface_first_address (im, vnet_buffer (b0)->sw_if_index[VLIB_RX]); - if (my_address) - { - e2e_option->id.as_u64[0] = my_address->as_u64[0]; - e2e_option->id.as_u64[1] = my_address->as_u64[1]; - } + e2e_option->id.as_u64[0] = address->as_u64[0]; + e2e_option->id.as_u64[1] = address->as_u64[1]; + } /* Following functions are for the caching of ioam header @@ -400,7 +400,7 @@ ioam_cache_add (vlib_buffer_t * b0, /* suffix rewrite string with e2e ID option */ e2e = (ioam_e2e_id_option_t *) (entry->ioam_rewrite_string + e2e_id_offset); - ioam_e2e_id_rewrite_handler (e2e, b0); + ioam_e2e_id_rewrite_handler (e2e, &cm->sr_localsid_cache); entry->my_address_offset = (u8 *) (&e2e->id) - (u8 *) hbh0; /* add it to hash, replacing and freeing any collision for now */ @@ -436,9 +436,9 @@ ioam_cache_sr_rewrite_template_create (void) /* This nodes address and the original dest will be * filled when the packet is processed */ - vec_add2 (segments, this_seg, 2); - memset (this_seg, 0xfe, 2 * sizeof (ip6_address_t)); - cm->sr_rewrite_template = ip6_compute_rewrite_string_insert (segments); + vec_add2 (segments, this_seg, 1); + memset (this_seg, 0xfe, sizeof (ip6_address_t)); + cm->sr_rewrite_template = ip6_sr_compute_rewrite_string_insert (segments); vec_free (segments); } @@ -532,8 +532,7 @@ ioam_cache_ts_table_init (vlib_main_t * vm) CLIB_CACHE_LINE_BYTES); vec_validate_aligned (cm->ts_stats, no_of_threads - 1, CLIB_CACHE_LINE_BYTES); - vec_validate_aligned (cm->timer_wheels, no_of_threads - 1, - CLIB_CACHE_LINE_BYTES); + vec_validate (cm->timer_wheels, no_of_threads - 1); cm->lookup_table_nbuckets = IOAM_CACHE_TABLE_DEFAULT_HASH_NUM_BUCKETS; cm->lookup_table_nbuckets = 1 << max_log2 (cm->lookup_table_nbuckets); cm->lookup_table_size = IOAM_CACHE_TABLE_DEFAULT_HASH_MEMORY_SIZE;