summaryrefslogtreecommitdiffstats
path: root/src/vppinfra/bihash_template.h
AgeCommit message (Expand)AuthorFilesLines
2020-04-23vppinfra: more bihash optimizatonsDamjan Marion1-12/+34
2020-04-22vppinfra: fix potential race in bihash bucket lockDamjan Marion1-11/+9
2020-04-22vppinfra: improve bihash add/del performanceDamjan Marion1-7/+9
2020-04-21vppinfra: bihash improvementsDave Barach1-13/+40
2020-03-27vppinfra: add clib_bihash_get_bucketDamjan Marion1-14/+11
2019-12-16vppinfra: bihash walk cb typedef and continue/stop controlsNeale Ranns1-1/+9
2019-09-03vppinfra: add bihash_init2Dave Barach1-0/+13
2019-08-01vppinfra: make first bihash add thread-safeDave Barach1-0/+1
2019-07-09vppinfra: allocate bihash virtual space on demandDave Barach1-0/+14
2019-05-07Add bihash statistics hookDave Barach1-5/+63
2018-09-19bihash template: reinstate the check for the available memory in the arenaAndrew Yourtchenko1-2/+2
2018-09-11bihash 32/64 bit shared memory interopDave Barach1-6/+6
2018-08-2832/64 shmem bihash interoperabilityDave Barach1-13/+83
2018-08-23bihash: remove unused countersDamjan Marion1-3/+0
2018-08-22bihash: add support for reuse of expired entry when bucket is full (VPP-1272)Matus Fabian1-0/+6
2018-07-20bihash: give hint to CPU that we are spinlockingDamjan Marion1-3/+5
2018-07-20Fine-grained add / delete lockingDave Barach1-187/+33
2018-07-18vppinfra: increase max bihash arena size to 512GBDamjan Marion1-7/+17
2018-06-14Add clib_bihash_search_inline_2_with_hash to bihash templateAndrew Yourtchenko1-5/+15
2018-02-23Add prefetch inlines, update bi-hash doc tagsDave Barach1-6/+47
2018-02-22bihash table size perf/scale improvementsDave Barach1-4/+10
2018-02-08Minimize bihash memory consumptionDave Barach1-16/+16
2018-01-24Adding a format function for bihash init routine to format the key, value, wh...Vijayabhaskar Katamreddy1-0/+8
2017-08-31Fix BIHASH_KVP_CACHE_SIZE == 0 caseDave Barach1-2/+23
2017-07-23Atomic bucket lockDave Barach1-28/+44
2017-07-19Add a bihash prefetchable bucket-level cacheDave Barach1-23/+183
2017-05-18VPP-847: improve bihash template memory allocator performanceDave Barach1-0/+1
2017-01-02Handle execessive hash collisions, VPP-555Dave Barach1-12/+19
2016-12-28Reorganize source tree to use single autotools instanceDamjan Marion1-0/+214
="o">= 0; vec_foreach(delegate, fib_entry->fe_delegates) { if (delegate->fd_type == type) { if (NULL != index) *index = ii; return (delegate); } else { ii++; } } return (NULL); } fib_entry_delegate_t * fib_entry_delegate_get (const fib_entry_t *fib_entry, fib_entry_delegate_type_t type) { return (fib_entry_delegate_find_i(fib_entry, type, NULL)); } void fib_entry_delegate_remove (fib_entry_t *fib_entry, fib_entry_delegate_type_t type) { fib_entry_delegate_t *fed; u32 index = ~0; fed = fib_entry_delegate_find_i(fib_entry, type, &index); ASSERT(NULL != fed); vec_del1(fib_entry->fe_delegates, index); } static int fib_entry_delegate_cmp_for_sort (void * v1, void * v2) { fib_entry_delegate_t *delegate1 = v1, *delegate2 = v2; return (delegate1->fd_type - delegate2->fd_type); } static void fib_entry_delegate_init (fib_entry_t *fib_entry, fib_entry_delegate_type_t type) { fib_entry_delegate_t delegate = { .fd_entry_index = fib_entry_get_index(fib_entry), .fd_type = type, }; vec_add1(fib_entry->fe_delegates, delegate); vec_sort_with_function(fib_entry->fe_delegates, fib_entry_delegate_cmp_for_sort); } fib_entry_delegate_t * fib_entry_delegate_find_or_add (fib_entry_t *fib_entry, fib_entry_delegate_type_t fdt) { fib_entry_delegate_t *delegate; delegate = fib_entry_delegate_get(fib_entry, fdt); if (NULL == delegate) { fib_entry_delegate_init(fib_entry, fdt); } return (fib_entry_delegate_get(fib_entry, fdt)); } fib_entry_delegate_type_t fib_entry_chain_type_to_delegate_type (fib_forward_chain_type_t fct) { switch (fct) { case FIB_FORW_CHAIN_TYPE_UNICAST_IP4: return (FIB_ENTRY_DELEGATE_CHAIN_UNICAST_IP4); case FIB_FORW_CHAIN_TYPE_UNICAST_IP6: return (FIB_ENTRY_DELEGATE_CHAIN_UNICAST_IP6); case FIB_FORW_CHAIN_TYPE_MPLS_EOS: return (FIB_ENTRY_DELEGATE_CHAIN_MPLS_EOS); case FIB_FORW_CHAIN_TYPE_MPLS_NON_EOS: return (FIB_ENTRY_DELEGATE_CHAIN_MPLS_NON_EOS); case FIB_FORW_CHAIN_TYPE_ETHERNET: return (FIB_ENTRY_DELEGATE_CHAIN_ETHERNET); case FIB_FORW_CHAIN_TYPE_MCAST_IP4: case FIB_FORW_CHAIN_TYPE_MCAST_IP6: break; case FIB_FORW_CHAIN_TYPE_NSH: return (FIB_ENTRY_DELEGATE_CHAIN_NSH); } ASSERT(0); return (FIB_ENTRY_DELEGATE_CHAIN_UNICAST_IP4); } fib_forward_chain_type_t fib_entry_delegate_type_to_chain_type (fib_entry_delegate_type_t fdt) { switch (fdt) { case FIB_ENTRY_DELEGATE_CHAIN_UNICAST_IP4: return (FIB_FORW_CHAIN_TYPE_UNICAST_IP4); case FIB_ENTRY_DELEGATE_CHAIN_UNICAST_IP6: return (FIB_FORW_CHAIN_TYPE_UNICAST_IP6); case FIB_ENTRY_DELEGATE_CHAIN_MPLS_EOS: return (FIB_FORW_CHAIN_TYPE_MPLS_EOS); case FIB_ENTRY_DELEGATE_CHAIN_MPLS_NON_EOS: return (FIB_FORW_CHAIN_TYPE_MPLS_NON_EOS); case FIB_ENTRY_DELEGATE_CHAIN_ETHERNET: return (FIB_FORW_CHAIN_TYPE_ETHERNET); case FIB_ENTRY_DELEGATE_CHAIN_NSH: return (FIB_FORW_CHAIN_TYPE_NSH); case FIB_ENTRY_DELEGATE_COVERED: case FIB_ENTRY_DELEGATE_ATTACHED_IMPORT: case FIB_ENTRY_DELEGATE_ATTACHED_EXPORT: case FIB_ENTRY_DELEGATE_BFD: break; } ASSERT(0); return (FIB_FORW_CHAIN_TYPE_UNICAST_IP4); } /** * typedef for printing a delegate */ typedef u8 * (*fib_entry_delegate_format_t)(const fib_entry_delegate_t *fed, u8 *s); /** * Print a delegate that represents a forwarding chain */ static u8 * fib_entry_delegate_fmt_fwd_chain (const fib_entry_delegate_t *fed, u8 *s) { s = format(s, "%U-chain\n %U", format_fib_forw_chain_type, fib_entry_delegate_type_to_chain_type(fed->fd_type), format_dpo_id, &fed->fd_dpo, 2); return (s); } /** * Print a delegate that represents cover tracking */ static u8 * fib_entry_delegate_fmt_covered (const fib_entry_delegate_t *fed, u8 *s) { s = format(s, "covered:["); s = fib_node_children_format(fed->fd_list, s); s = format(s, "]"); return (s); } /** * Print a delegate that represents attached-import tracking */ static u8 * fib_entry_delegate_fmt_import (const fib_entry_delegate_t *fed, u8 *s) { s = format(s, "import:%U", fib_ae_import_format, fed->fd_index); return (s); } /** * Print a delegate that represents attached-export tracking */ static u8 * fib_entry_delegate_fmt_export (const fib_entry_delegate_t *fed, u8 *s) { s = format(s, "export:%U", fib_ae_export_format, fed->fd_index); return (s); } /** * Print a delegate that represents BFD tracking */ static u8 * fib_entry_delegate_fmt_bfd (const fib_entry_delegate_t *fed, u8 *s) { s = format(s, "BFD:%d", fed->fd_bfd_state); return (s); } /** * A delegate type to formatter map */ static fib_entry_delegate_format_t fed_formatters[] = { [FIB_ENTRY_DELEGATE_CHAIN_UNICAST_IP4] = fib_entry_delegate_fmt_fwd_chain, [FIB_ENTRY_DELEGATE_CHAIN_UNICAST_IP6] = fib_entry_delegate_fmt_fwd_chain, [FIB_ENTRY_DELEGATE_CHAIN_MPLS_EOS] = fib_entry_delegate_fmt_fwd_chain, [FIB_ENTRY_DELEGATE_CHAIN_MPLS_NON_EOS] = fib_entry_delegate_fmt_fwd_chain, [FIB_ENTRY_DELEGATE_CHAIN_ETHERNET] = fib_entry_delegate_fmt_fwd_chain, [FIB_ENTRY_DELEGATE_CHAIN_NSH] = fib_entry_delegate_fmt_fwd_chain, [FIB_ENTRY_DELEGATE_COVERED] = fib_entry_delegate_fmt_covered, [FIB_ENTRY_DELEGATE_ATTACHED_IMPORT] = fib_entry_delegate_fmt_import, [FIB_ENTRY_DELEGATE_ATTACHED_EXPORT] = fib_entry_delegate_fmt_export, [FIB_ENTRY_DELEGATE_BFD] = fib_entry_delegate_fmt_bfd, }; u8 * format_fib_entry_deletegate (u8 * s, va_list * args) { fib_entry_delegate_t *fed; fed = va_arg (*args, fib_entry_delegate_t *); return (fed_formatters[fed->fd_type](fed, s)); }