| 686 | } |
| 687 | |
| 688 | static int |
| 689 | pfr_validate_addr(struct pfr_addr *ad) |
| 690 | { |
| 691 | int i; |
| 692 | |
| 693 | switch (ad->pfra_af) { |
| 694 | #ifdef INET |
| 695 | case AF_INET: |
| 696 | if (ad->pfra_net > 32) |
| 697 | return (-1); |
| 698 | break; |
| 699 | #endif /* INET */ |
| 700 | #ifdef INET6 |
| 701 | case AF_INET6: |
| 702 | if (ad->pfra_net > 128) |
| 703 | return (-1); |
| 704 | break; |
| 705 | #endif /* INET6 */ |
| 706 | default: |
| 707 | return (-1); |
| 708 | } |
| 709 | if (ad->pfra_net < 128 && |
| 710 | (((caddr_t)ad)[ad->pfra_net/8] & (0xFF >> (ad->pfra_net%8)))) |
| 711 | return (-1); |
| 712 | for (i = (ad->pfra_net+7)/8; i < sizeof(ad->pfra_u); i++) |
| 713 | if (((caddr_t)ad)[i]) |
| 714 | return (-1); |
| 715 | if (ad->pfra_not && ad->pfra_not != 1) |
| 716 | return (-1); |
| 717 | if (ad->pfra_fback) |
| 718 | return (-1); |
| 719 | return (0); |
| 720 | } |
| 721 | |
| 722 | static void |
| 723 | pfr_enqueue_addrs(struct pfr_ktable *kt, struct pfr_kentryworkq *workq, |
no outgoing calls
no test coverage detected