aboutsummaryrefslogtreecommitdiffstats
path: root/VPP_STABLE_VER_CENTOS
AgeCommit message (Expand)AuthorFilesLines
2020-01-13CSIT-1597 API cleanup: rdmaJan Gelety1-1/+1
2020-01-07Update of VPP_STABLE_VER filesJan Gelety1-1/+1
2019-12-12CSIT-1597, CSIT-1647 API cleanup: gbpJan Gelety1-1/+1
2019-12-12API: Add collection for 23835/1Jan Gelety1-1/+1
2019-12-01API: Add collection for 23830/1Jan Gelety1-1/+1
2019-12-01CSIT-1597 API cleanup: vhostJan Gelety1-1/+1
2019-12-11CSIT-1597 API cleanup: tapJan Gelety1-1/+1
2019-12-10CSIT-1597 API cleanup: classifyJan Gelety1-1/+1
2019-11-14Update of VPP_STABLE_VER filesJan Gelety1-1/+1
2019-10-10Update of VPP_STABLE_VER filesJan Gelety1-1/+1
2019-10-09Update of VPP_STABLE_VER filesJan Gelety1-1/+1
2019-10-04Update of VPP_STABLE_VER filesJan Gelety1-1/+1
2019-09-20Bump stable_vpp and fix CRC listVratko Polak1-1/+1
2019-09-11Revert "API cleanup: tap" and bump stable_vppVratko Polak1-1/+1
2019-09-04Update of VPP_STABLE_VER filesJan Gelety1-1/+1
2019-09-09Update of VPP_STABLE_VER filesJan Gelety1-1/+1
2019-09-04Hotfix: Bump version and CRCsVratko Polak1-1/+1
2019-09-02Update of VPP_STABLE_VER filesJan Gelety1-1/+1
2019-08-20Bump stable vpp version to 20.01-rc0~68Vratko Polak1-1/+1
2019-08-09Bump VPP stable version: socksvrVratko Polak1-1/+1
2019-08-05Fix CRCs, bump stable VPP versionVratko Polak1-1/+1
2019-07-30Update of VPP_STABLE_VER filesPeter Mikus1-1/+1
2019-07-23Update of VPP_STABLE_VER filesPeter Mikus1-1/+1
2019-07-19Bump VPP stable versionVratko Polak1-1/+1
2019-07-12Update of VPP_STABLE_VER filesJan Gelety1-1/+1
2019-07-18Update of VPP_STABLE_VER filesJan Gelety1-1/+1
2019-07-11Update of VPP_STABLE_VER filesJan Gelety1-1/+1
2019-07-09Update of VPP_STABLE_VER filesJan Gelety1-1/+1
2019-07-04Bump stable VPP version to get VPP-1716 fixVratko Polak1-1/+1
2019-07-03FIX: use len parameter name in prefix structure in ip_route_add_delJan Gelety1-1/+1
2019-06-16FIX: IPUtil after vpp api changesJan Gelety1-1/+1
2019-06-18Update of VPP_STABLE_VER filesJan Gelety1-1/+1
2019-06-03Update of VPP_STABLE_VER filesJan Gelety1-1/+1
2019-05-15Update of VPP_STABLE_VER files + quick fix for gre create tunnelJan Gelety1-1/+1
2019-04-15Update of VPP_STABLE_VER filesJan Gelety1-1/+1
2019-03-19Update of VPP_STABLE_VERJan Gelety1-1/+1
2019-02-26FIX: ipsec + vpp stable version updateJan Gelety1-1/+1
2019-01-30Update of VPP_STABLE_VERJan Gelety1-1/+1
2019-01-24CSIT-1407 FIX vpp install after VPP changesPeter Mikus1-1/+1
2019-01-21Update of VPP_STABLE_VERJan Gelety1-1/+1
2019-01-15Update of VPP_STABLE_VERJan Gelety1-1/+1
2019-01-07Update of VPP_STABLE_VERJan Gelety1-1/+1
2019-01-03Update of VPP_STABLE_VERJan Gelety1-1/+1
2018-12-19Update of VPP_STABLE_VERJan Gelety1-1/+1
2018-12-17FIX: Update PAPI to work with string changes in Python APIJan Gelety1-1/+1
2018-12-13Update of VPP_STABLE_VERJan Gelety1-1/+1
2018-12-03Update of VPP_STABLE_VERJan Gelety1-1/+1
2018-11-05Update of VPP_STABLE_VERJan Gelety1-1/+1
2018-10-29Update of VPP_STABLE_VERJan Gelety1-1/+1
2018-10-17Update of VPP_STABLE_VER and DPDK_STABLE_VERPeter Mikus1-1/+1
k1 = mhash_key_to_mem (hv, key1); void *k2 = mhash_key_to_mem (hv, key2); return vec_len (k1) == vec_len (k2) && memcmp (k1, k2, vec_len (k1)) == 0; } /* The CLIB hash user pointer must always point to a valid mhash_t. Now, the address of mhash_t can change (think vec_resize). So we must always be careful that it points to the correct address. */ always_inline void mhash_sanitize_hash_user (mhash_t * mh) { uword *hash = mh->hash; hash_t *h = hash_header (hash); h->user = pointer_to_uword (mh); } void mhash_init (mhash_t * h, uword n_value_bytes, uword n_key_bytes) { static struct { hash_key_sum_function_t *key_sum; hash_key_equal_function_t *key_equal; } t[] = { #define _(N_KEY_BYTES) \ [N_KEY_BYTES] = { \ .key_sum = mhash_key_sum_##N_KEY_BYTES, \ .key_equal = mhash_key_equal_##N_KEY_BYTES, \ }, foreach_mhash_key_size #undef _ [MHASH_C_STRING_KEY] = { .key_sum = mhash_key_sum_c_string,.key_equal = mhash_key_equal_c_string,}, [MHASH_VEC_STRING_KEY] = { .key_sum = mhash_key_sum_vec_string,.key_equal = mhash_key_equal_vec_string,},}; if (mhash_key_vector_is_heap (h)) heap_free (h->key_vector_or_heap); else vec_free (h->key_vector_or_heap); vec_free (h->key_vector_free_indices); { int i; for (i = 0; i < vec_len (h->key_tmps); i++) vec_free (h->key_tmps[i]); } vec_free (h->key_tmps); hash_free (h->hash); clib_memset (h, 0, sizeof (h[0])); h->n_key_bytes = n_key_bytes; vec_validate (h->key_tmps, os_get_nthreads () - 1); ASSERT (n_key_bytes < ARRAY_LEN (t)); h->hash = hash_create2 ( /* elts */ 0, /* user */ pointer_to_uword (h), /* value_bytes */ n_value_bytes, t[n_key_bytes].key_sum, t[n_key_bytes].key_equal, /* format pair/arg */ 0, 0); } static uword mhash_set_tmp_key (mhash_t * h, const void *key) { u8 *key_tmp; int my_cpu = os_get_thread_index (); key_tmp = h->key_tmps[my_cpu]; vec_reset_length (key_tmp); if (mhash_key_vector_is_heap (h)) { uword is_c_string = h->n_key_bytes == MHASH_C_STRING_KEY; if (is_c_string) vec_add (key_tmp, key, strlen (key) + 1); else vec_add (key_tmp, key, vec_len (key)); } else vec_add (key_tmp, key, h->n_key_bytes); h->key_tmps[my_cpu] = key_tmp; return ~0; } hash_pair_t * mhash_get_pair (mhash_t * h, const void *key) { uword ikey; mhash_sanitize_hash_user (h); ikey = mhash_set_tmp_key (h, key); return hash_get_pair (h->hash, ikey); } typedef struct { u32 heap_handle; /* Must coincide with vec_header. */ vec_header_t vec; } mhash_string_key_t; uword mhash_set_mem (mhash_t * h, void *key, uword * new_value, uword * old_value) { u8 *k; uword ikey, i, l = 0, n_key_bytes, old_n_elts, key_alloc_from_free_list = 0; mhash_sanitize_hash_user (h); if (mhash_key_vector_is_heap (h)) { mhash_string_key_t *sk; uword is_c_string = h->n_key_bytes == MHASH_C_STRING_KEY; uword handle; n_key_bytes = is_c_string ? (strlen (key) + 1) : vec_len (key); i = heap_alloc (h->key_vector_or_heap, n_key_bytes + sizeof (sk[0]), handle); sk = (void *) (h->key_vector_or_heap + i); sk->heap_handle = handle; sk->vec.len = n_key_bytes; clib_memcpy_fast (sk->vec.vector_data, key, n_key_bytes); /* Advance key past vector header. */ i += sizeof (sk[0]); } else { key_alloc_from_free_list = (l = vec_len (h->key_vector_free_indices)) > 0; if (key_alloc_from_free_list) { i = h->key_vector_free_indices[l - 1]; k = vec_elt_at_index (h->key_vector_or_heap, i); _vec_len (h->key_vector_free_indices) = l - 1; } else { vec_add2 (h->key_vector_or_heap, k, h->n_key_bytes); i = k - h->key_vector_or_heap; } n_key_bytes = h->n_key_bytes; clib_memcpy_fast (k, key, n_key_bytes); } ikey = i; old_n_elts = hash_elts (h->hash); h->hash = _hash_set3 (h->hash, ikey, new_value, old_value); /* If element already existed remove duplicate key. */ if (hash_elts (h->hash) == old_n_elts) { hash_pair_t *p; /* Fetch old key for return value. */ p = hash_get_pair (h->hash, ikey); ikey = p->key; /* Remove duplicate key. */ if (mhash_key_vector_is_heap (h)) { mhash_string_key_t *sk; sk = (void *) (h->key_vector_or_heap + i - sizeof (sk[0])); heap_dealloc (h->key_vector_or_heap, sk->heap_handle); } else { if (key_alloc_from_free_list) { h->key_vector_free_indices[l] = i; _vec_len (h->key_vector_free_indices) = l + 1; } else _vec_len (h->key_vector_or_heap) -= h->n_key_bytes; } } return ikey; } uword mhash_unset (mhash_t * h, void *key, uword * old_value) { hash_pair_t *p; uword i; mhash_sanitize_hash_user (h); i = mhash_set_tmp_key (h, key); p = hash_get_pair (h->hash, i); if (!p) return 0; ASSERT (p->key != ~0); i = p->key; if (mhash_key_vector_is_heap (h)) { mhash_string_key_t *sk; sk = (void *) (h->key_vector_or_heap + i) - sizeof (sk[0]); heap_dealloc (h->key_vector_or_heap, sk->heap_handle); } else vec_add1 (h->key_vector_free_indices, i); hash_unset3 (h->hash, i, old_value); return 1; } u8 * format_mhash_key (u8 * s, va_list * va) { mhash_t *h = va_arg (*va, mhash_t *); u32 ki = va_arg (*va, u32); void *k = mhash_key_to_mem (h, ki); if (mhash_key_vector_is_heap (h)) { uword is_c_string = h->n_key_bytes == MHASH_C_STRING_KEY; u32 l = is_c_string ? strlen (k) : vec_len (k); vec_add (s, k, l); } else if (h->format_key) s = format (s, "%U", h->format_key, k); else s = format (s, "%U", format_hex_bytes, k, h->n_key_bytes); return s; } /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */