Lines Matching refs:kif
124 struct pfi_kkif *kif; in pfi_initialize_vnet() local
141 kif = pf_kkif_create(M_WAITOK); in pfi_initialize_vnet()
142 LIST_INSERT_HEAD(&kifs, kif, pfik_list); in pfi_initialize_vnet()
147 kif = LIST_FIRST(&kifs); in pfi_initialize_vnet()
148 LIST_REMOVE(kif, pfik_list); in pfi_initialize_vnet()
149 V_pfi_all = pfi_kkif_attach(kif, IFG_ALL); in pfi_initialize_vnet()
151 kif = LIST_FIRST(&kifs); in pfi_initialize_vnet()
152 LIST_REMOVE(kif, pfik_list); in pfi_initialize_vnet()
153 pfi_attach_ifgroup(ifg, kif); in pfi_initialize_vnet()
156 kif = LIST_FIRST(&kifs); in pfi_initialize_vnet()
157 LIST_REMOVE(kif, pfik_list); in pfi_initialize_vnet()
158 pfi_attach_ifnet(ifp, kif); in pfi_initialize_vnet()
188 struct pfi_kkif *kif; in pfi_cleanup_vnet() local
193 while ((kif = RB_MIN(pfi_ifhead, &V_pfi_ifs))) { in pfi_cleanup_vnet()
194 RB_REMOVE(pfi_ifhead, &V_pfi_ifs, kif); in pfi_cleanup_vnet()
195 if (kif->pfik_group) in pfi_cleanup_vnet()
196 kif->pfik_group->ifg_pf_kif = NULL; in pfi_cleanup_vnet()
197 if (kif->pfik_ifp) { in pfi_cleanup_vnet()
198 if_rele(kif->pfik_ifp); in pfi_cleanup_vnet()
199 kif->pfik_ifp->if_pf_kif = NULL; in pfi_cleanup_vnet()
201 pf_kkif_free(kif); in pfi_cleanup_vnet()
205 while ((kif = LIST_FIRST(&V_pfi_unlinked_kifs))) { in pfi_cleanup_vnet()
206 LIST_REMOVE(kif, pfik_list); in pfi_cleanup_vnet()
207 pf_kkif_free(kif); in pfi_cleanup_vnet()
229 struct pfi_kkif *kif; in pf_kkif_create() local
234 kif = malloc(sizeof(*kif), PFI_MTYPE, flags | M_ZERO); in pf_kkif_create()
235 if (! kif) in pf_kkif_create()
236 return (kif); in pf_kkif_create()
241 if (pf_counter_u64_init(&kif->pfik_packets[i][j][k], flags) != 0) { in pf_kkif_create()
242 pf_kkif_free(kif); in pf_kkif_create()
246 if (pf_counter_u64_init(&kif->pfik_bytes[i][j][k], flags) != 0) { in pf_kkif_create()
247 pf_kkif_free(kif); in pf_kkif_create()
258 LIST_INSERT_HEAD(&V_pf_allkiflist, kif, pfik_allkiflist); in pf_kkif_create()
264 return (kif); in pf_kkif_create()
268 pf_kkif_free(struct pfi_kkif *kif) in pf_kkif_free() argument
274 if (! kif) in pf_kkif_free()
278 if (kif->pfik_ifp) { in pf_kkif_free()
279 struct ifnet *ifp = kif->pfik_ifp; in pf_kkif_free()
280 MPASS(ifp->if_pf_kif == NULL || ifp->if_pf_kif == kif); in pf_kkif_free()
288 LIST_REMOVE(kif, pfik_allkiflist); in pf_kkif_free()
297 pf_counter_u64_deinit(&kif->pfik_packets[i][j][k]); in pf_kkif_free()
298 pf_counter_u64_deinit(&kif->pfik_bytes[i][j][k]); in pf_kkif_free()
303 free(kif, PFI_MTYPE); in pf_kkif_free()
307 pf_kkif_zero(struct pfi_kkif *kif) in pf_kkif_zero() argument
313 pf_counter_u64_zero(&kif->pfik_packets[i][j][k]); in pf_kkif_zero()
314 pf_counter_u64_zero(&kif->pfik_bytes[i][j][k]); in pf_kkif_zero()
318 kif->pfik_tzero = time_second; in pf_kkif_zero()
335 pfi_kkif_attach(struct pfi_kkif *kif, const char *kif_name) in pfi_kkif_attach() argument
340 KASSERT(kif != NULL, ("%s: null kif", __func__)); in pfi_kkif_attach()
344 pf_kkif_free(kif); in pfi_kkif_attach()
348 pf_kkif_zero(kif); in pfi_kkif_attach()
349 strlcpy(kif->pfik_name, kif_name, sizeof(kif->pfik_name)); in pfi_kkif_attach()
357 kif->pfik_tzero = time_second > 1 ? time_second : 0; in pfi_kkif_attach()
358 TAILQ_INIT(&kif->pfik_dynaddrs); in pfi_kkif_attach()
360 if (!strcmp(kif->pfik_name, "any")) { in pfi_kkif_attach()
362 kif->pfik_flags |= PFI_IFLAG_ANY; in pfi_kkif_attach()
365 RB_INSERT(pfi_ifhead, &V_pfi_ifs, kif); in pfi_kkif_attach()
367 return (kif); in pfi_kkif_attach()
371 pfi_kkif_ref(struct pfi_kkif *kif) in pfi_kkif_ref() argument
375 kif->pfik_rulerefs++; in pfi_kkif_ref()
379 pfi_kkif_remove_if_unref(struct pfi_kkif *kif) in pfi_kkif_remove_if_unref() argument
384 if (kif->pfik_rulerefs > 0) in pfi_kkif_remove_if_unref()
389 if (kif->pfik_ifp != NULL || kif->pfik_group != NULL || in pfi_kkif_remove_if_unref()
390 kif == V_pfi_all || kif->pfik_flags != 0) in pfi_kkif_remove_if_unref()
406 if (! RB_FIND(pfi_ifhead, &V_pfi_ifs, kif)) { in pfi_kkif_remove_if_unref()
412 if (tmp == kif) { in pfi_kkif_remove_if_unref()
422 RB_REMOVE(pfi_ifhead, &V_pfi_ifs, kif); in pfi_kkif_remove_if_unref()
424 kif->pfik_flags |= PFI_IFLAG_REFS; in pfi_kkif_remove_if_unref()
427 LIST_INSERT_HEAD(&V_pfi_unlinked_kifs, kif, pfik_list); in pfi_kkif_remove_if_unref()
432 pfi_kkif_unref(struct pfi_kkif *kif) in pfi_kkif_unref() argument
436 KASSERT(kif->pfik_rulerefs > 0, ("%s: %p has zero refs", __func__, kif)); in pfi_kkif_unref()
438 kif->pfik_rulerefs--; in pfi_kkif_unref()
440 pfi_kkif_remove_if_unref(kif); in pfi_kkif_unref()
446 struct pfi_kkif *kif, *kif1; in pfi_kkif_purge() local
453 LIST_FOREACH_SAFE(kif, &V_pfi_unlinked_kifs, pfik_list, kif1) { in pfi_kkif_purge()
454 if (!(kif->pfik_flags & PFI_IFLAG_REFS)) { in pfi_kkif_purge()
455 LIST_REMOVE(kif, pfik_list); in pfi_kkif_purge()
456 pf_kkif_free(kif); in pfi_kkif_purge()
458 kif->pfik_flags &= ~PFI_IFLAG_REFS; in pfi_kkif_purge()
490 pfi_attach_ifnet(struct ifnet *ifp, struct pfi_kkif *kif) in pfi_attach_ifnet() argument
496 kif = pfi_kkif_attach(kif, ifp->if_xname); in pfi_attach_ifnet()
498 kif->pfik_ifp = ifp; in pfi_attach_ifnet()
499 ifp->if_pf_kif = kif; in pfi_attach_ifnet()
500 pfi_kkif_update(kif); in pfi_attach_ifnet()
504 pfi_attach_ifgroup(struct ifg_group *ifg, struct pfi_kkif *kif) in pfi_attach_ifgroup() argument
510 kif = pfi_kkif_attach(kif, ifg->ifg_group); in pfi_attach_ifgroup()
511 kif->pfik_group = ifg; in pfi_attach_ifgroup()
512 ifg->ifg_pf_kif = kif; in pfi_attach_ifgroup()
557 struct pfi_kkif *kif; in pfi_dynaddr_setup() local
568 if ((kif = pf_kkif_create(M_NOWAIT)) == NULL) { in pfi_dynaddr_setup()
574 dyn->pfid_kif = pfi_kkif_attach(kif, IFG_ALL); in pfi_dynaddr_setup()
576 dyn->pfid_kif = pfi_kkif_attach(kif, aw->v.ifname); in pfi_dynaddr_setup()
577 kif = NULL; in pfi_dynaddr_setup()
629 pfi_kkif_update(struct pfi_kkif *kif) in pfi_kkif_update() argument
640 TAILQ_FOREACH(p, &kif->pfik_dynaddrs, entry) in pfi_kkif_update()
644 if (kif->pfik_group != NULL) { in pfi_kkif_update()
645 CK_STAILQ_FOREACH(ifgm, &kif->pfik_group->ifg_members, in pfi_kkif_update()
651 tmpkif->pfik_flags |= kif->pfik_flags; in pfi_kkif_update()
656 if (kif->pfik_ifp != NULL) { in pfi_kkif_update()
657 CK_STAILQ_FOREACH(ifgl, &kif->pfik_ifp->if_groups, ifgl_next) in pfi_kkif_update()
666 struct pfi_kkif *kif; in pfi_dynaddr_update() local
673 kif = dyn->pfid_kif; in pfi_dynaddr_update()
678 pfi_table_update(kt, kif, dyn->pfid_net, dyn->pfid_iflags); in pfi_dynaddr_update()
685 pfi_table_update(struct pfr_ktable *kt, struct pfi_kkif *kif, int net, int flags) in pfi_table_update() argument
694 if (kif->pfik_ifp != NULL) in pfi_table_update()
695 pfi_instance_add(kif->pfik_ifp, net, flags); in pfi_table_update()
696 else if (kif->pfik_group != NULL) { in pfi_table_update()
697 CK_STAILQ_FOREACH(ifgm, &kif->pfik_group->ifg_members, ifgm_next) in pfi_table_update()
905 pf_kkif_to_kif(struct pfi_kkif *kkif, struct pfi_kif *kif) in pf_kkif_to_kif() argument
908 memset(kif, 0, sizeof(*kif)); in pf_kkif_to_kif()
909 strlcpy(kif->pfik_name, kkif->pfik_name, sizeof(kif->pfik_name)); in pf_kkif_to_kif()
913 kif->pfik_packets[i][j][k] = in pf_kkif_to_kif()
915 kif->pfik_bytes[i][j][k] = in pf_kkif_to_kif()
920 kif->pfik_flags = kkif->pfik_flags; in pf_kkif_to_kif()
921 kif->pfik_tzero = kkif->pfik_tzero; in pf_kkif_to_kif()
922 kif->pfik_rulerefs = kkif->pfik_rulerefs; in pf_kkif_to_kif()
929 kif->pfik_group = in pf_kkif_to_kif()
985 struct pfi_kkif *p, *kif; in pfi_set_flags() local
987 kif = pf_kkif_create(M_NOWAIT); in pfi_set_flags()
988 if (kif == NULL) in pfi_set_flags()
993 kif = pfi_kkif_attach(kif, name); in pfi_set_flags()
1051 struct pfi_kkif *kif; in pfi_attach_ifnet_event() local
1057 kif = pf_kkif_create(M_NOWAIT); in pfi_attach_ifnet_event()
1060 pfi_attach_ifnet(ifp, kif); in pfi_attach_ifnet_event()
1072 struct pfi_kkif *kif = (struct pfi_kkif *)ifp->if_pf_kif; in pfi_detach_ifnet_event() local
1077 if (kif == NULL) in pfi_detach_ifnet_event()
1088 pfi_kkif_update(kif); in pfi_detach_ifnet_event()
1090 if (kif->pfik_ifp) in pfi_detach_ifnet_event()
1091 if_rele(kif->pfik_ifp); in pfi_detach_ifnet_event()
1093 kif->pfik_ifp = NULL; in pfi_detach_ifnet_event()
1098 pfi_kkif_remove_if_unref(kif); in pfi_detach_ifnet_event()
1108 struct pfi_kkif *kif; in pfi_attach_group_event() local
1114 kif = pf_kkif_create(M_WAITOK); in pfi_attach_group_event()
1117 pfi_attach_ifgroup(ifg, kif); in pfi_attach_group_event()
1126 struct pfi_kkif *kif; in pfi_change_group_event() local
1133 kif = pf_kkif_create(M_WAITOK); in pfi_change_group_event()
1137 kif = pfi_kkif_attach(kif, gname); in pfi_change_group_event()
1138 pfi_kkif_update(kif); in pfi_change_group_event()
1146 struct pfi_kkif *kif = (struct pfi_kkif *)ifg->ifg_pf_kif; in pfi_detach_group_event() local
1148 if (kif == NULL) in pfi_detach_group_event()
1158 kif->pfik_group = NULL; in pfi_detach_group_event()
1161 pfi_kkif_remove_if_unref(kif); in pfi_detach_group_event()