| 597 | } |
| 598 | |
| 599 | static enum flm_op_result |
| 600 | lradix4_add_route_cb(struct rtentry *rt, void *_data) |
| 601 | { |
| 602 | struct lradix4_data *lr = (struct lradix4_data *)_data; |
| 603 | struct radix4_addr_entry *ae; |
| 604 | struct sockaddr_in mask; |
| 605 | struct sockaddr *rt_mask; |
| 606 | struct radix_node *rn; |
| 607 | struct in_addr addr4, mask4; |
| 608 | uint32_t scopeid; |
| 609 | |
| 610 | if (lr->num_items >= lr->alloc_items) |
| 611 | return (FLM_REBUILD); |
| 612 | |
| 613 | ae = (struct radix4_addr_entry *)(lr->rt_base + lr->num_items * LRADIX4_ITEM_SZ); |
| 614 | lr->num_items++; |
| 615 | |
| 616 | ae->nhop = rt_get_raw_nhop(rt); |
| 617 | |
| 618 | rt_get_inet_prefix_pmask(rt, &addr4, &mask4, &scopeid); |
| 619 | ae->addr.sin_len = KEY_LEN_INET; |
| 620 | ae->addr.sin_addr = addr4; |
| 621 | |
| 622 | if (mask4.s_addr != INADDR_BROADCAST) { |
| 623 | bzero(&mask, sizeof(mask)); |
| 624 | mask.sin_len = KEY_LEN_INET; |
| 625 | mask.sin_addr = mask4; |
| 626 | rt_mask = (struct sockaddr *)&mask; |
| 627 | } else |
| 628 | rt_mask = NULL; |
| 629 | |
| 630 | rn = lr->rnh->rnh_addaddr((struct sockaddr *)&ae->addr, rt_mask, |
| 631 | &lr->rnh->rh, ae->rn); |
| 632 | if (rn == NULL) |
| 633 | return (FLM_REBUILD); |
| 634 | |
| 635 | return (FLM_SUCCESS); |
| 636 | } |
| 637 | |
| 638 | static enum flm_op_result |
| 639 | lradix4_end_dump(void *_data, struct fib_dp *dp) |
nothing calls this directly
no test coverage detected