| 557 | } |
| 558 | |
| 559 | static enum flm_op_result |
| 560 | lradix4_init(uint32_t fibnum, struct fib_data *fd, void *_old_data, void **_data) |
| 561 | { |
| 562 | struct lradix4_data *lr; |
| 563 | struct rib_rtable_info rinfo; |
| 564 | uint32_t count; |
| 565 | size_t sz; |
| 566 | |
| 567 | lr = malloc(sizeof(struct lradix4_data), M_RTABLE, M_NOWAIT | M_ZERO); |
| 568 | if (lr == NULL || !rn_inithead((void **)&lr->rnh, OFF_LEN_INET)) |
| 569 | return (FLM_REBUILD); |
| 570 | fib_get_rtable_info(fib_get_rh(fd), &rinfo); |
| 571 | |
| 572 | count = rinfo.num_prefixes * 11 / 10; |
| 573 | sz = count * LRADIX4_ITEM_SZ + CACHE_LINE_SIZE; |
| 574 | lr->mem = malloc(sz, M_RTABLE, M_NOWAIT | M_ZERO); |
| 575 | if (lr->mem == NULL) |
| 576 | return (FLM_REBUILD); |
| 577 | /* Align all rtentries to a cacheline boundary */ |
| 578 | lr->rt_base = (char *)roundup2((uintptr_t)lr->mem, CACHE_LINE_SIZE); |
| 579 | lr->alloc_items = count; |
| 580 | lr->fd = fd; |
| 581 | |
| 582 | *_data = lr; |
| 583 | |
| 584 | return (FLM_SUCCESS); |
| 585 | } |
| 586 | |
| 587 | static void |
| 588 | lradix4_destroy(void *_data) |
nothing calls this directly
no test coverage detected