| 1022 | } |
| 1023 | |
| 1024 | static void |
| 1025 | pfr_copyout_astats(struct pfr_astats *as, const struct pfr_kentry *ke, |
| 1026 | const struct pfr_walktree *w) |
| 1027 | { |
| 1028 | int dir, op; |
| 1029 | const struct pfr_kcounters *kc = &ke->pfrke_counters; |
| 1030 | |
| 1031 | pfr_copyout_addr(&as->pfras_a, ke); |
| 1032 | as->pfras_tzero = kc->pfrkc_tzero; |
| 1033 | |
| 1034 | if (! (w->pfrw_flags & PFR_TFLAG_COUNTERS)) { |
| 1035 | bzero(as->pfras_packets, sizeof(as->pfras_packets)); |
| 1036 | bzero(as->pfras_bytes, sizeof(as->pfras_bytes)); |
| 1037 | as->pfras_a.pfra_fback = PFR_FB_NOCOUNT; |
| 1038 | return; |
| 1039 | } |
| 1040 | |
| 1041 | for (dir = 0; dir < PFR_DIR_MAX; dir++) { |
| 1042 | for (op = 0; op < PFR_OP_ADDR_MAX; op ++) { |
| 1043 | as->pfras_packets[dir][op] = counter_u64_fetch( |
| 1044 | pfr_kentry_counter(kc, dir, op, PFR_TYPE_PACKETS)); |
| 1045 | as->pfras_bytes[dir][op] = counter_u64_fetch( |
| 1046 | pfr_kentry_counter(kc, dir, op, PFR_TYPE_BYTES)); |
| 1047 | } |
| 1048 | } |
| 1049 | } |
| 1050 | |
| 1051 | static int |
| 1052 | pfr_walktree(struct radix_node *rn, void *arg) |
no test coverage detected