Lines Matching defs:lpm
41 __KERNEL_RCSID(0, "$NetBSD: lpm.c,v 1.6 2019/06/12 14:36:32 christos Exp $");
64 #include "lpm.h"
91 struct lpm {
103 lpm_t *lpm = kmem_zalloc(sizeof(*lpm), KM_SLEEP);
104 lpm->flags = flags;
105 return lpm;
109 lpm_clear(lpm_t *lpm, lpm_dtor_t dtor, void *arg)
112 lpm_hmap_t *hmap = &lpm->prefix[n];
139 dtor(arg, zero_address, 4, lpm->defvals[0]);
140 dtor(arg, zero_address, 16, lpm->defvals[1]);
142 memset(lpm->bitmask, 0, sizeof(lpm->bitmask));
143 memset(lpm->defvals, 0, sizeof(lpm->defvals));
147 lpm_destroy(lpm_t *lpm)
149 lpm_clear(lpm, NULL, NULL);
150 kmem_free(lpm, sizeof(*lpm));
320 lpm_insert(lpm_t *lpm, const void *addr,
330 lpm->defvals[LPM_LEN_IDX(len)] = val;
334 entry = hashmap_insert(&lpm->prefix[preflen], prefix, len, lpm->flags);
337 lpm->bitmask[n] |= 0x80000000U >> (preflen & 31);
348 lpm_remove(lpm_t *lpm, const void *addr, size_t len, unsigned preflen)
355 lpm->defvals[LPM_LEN_IDX(len)] = NULL;
359 return hashmap_remove(&lpm->prefix[preflen], prefix, len);
368 lpm_lookup(lpm_t *lpm, const void *addr, size_t len)
375 uint32_t bitmask = lpm->bitmask[n];
379 lpm_hmap_t *hmap = &lpm->prefix[preflen];
390 return lpm->defvals[LPM_LEN_IDX(len)];
399 lpm_lookup_prefix(lpm_t *lpm, const void *addr, size_t len, unsigned preflen)
407 return lpm->defvals[LPM_LEN_IDX(len)];
410 entry = hashmap_lookup(&lpm->prefix[preflen], prefix, len);