diff options
author | mlaier <mlaier@FreeBSD.org> | 2004-11-03 17:21:12 +0000 |
---|---|---|
committer | mlaier <mlaier@FreeBSD.org> | 2004-11-03 17:21:12 +0000 |
commit | 829a2496de9b45e7ea583ab9152b10305146e411 (patch) | |
tree | 523728c70febd40b3b5c903eab6145bde23cb843 /sys/contrib/pf | |
parent | a1ade15a09a72b8725f170cadcdb5608f28d8e52 (diff) | |
download | FreeBSD-src-829a2496de9b45e7ea583ab9152b10305146e411.zip FreeBSD-src-829a2496de9b45e7ea583ab9152b10305146e411.tar.gz |
Improved interface handling. This should fix the use of renamed interfaces
(ifconfig xl0 name foo) as well as some special interfaces such as the 6to4
tunnel.
Reported by: Ed Schouten <ed (at) il ! fontys , nl>
Tested by: freebsd-pf
PR: kern/72444
MFC after: 3 weeks
Diffstat (limited to 'sys/contrib/pf')
-rw-r--r-- | sys/contrib/pf/net/pf_if.c | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/sys/contrib/pf/net/pf_if.c b/sys/contrib/pf/net/pf_if.c index 56388c9..78e99e9 100644 --- a/sys/contrib/pf/net/pf_if.c +++ b/sys/contrib/pf/net/pf_if.c @@ -157,12 +157,11 @@ pfi_initialize(void) #ifdef __FreeBSD__ PF_LOCK(); IFNET_RLOCK(); - TAILQ_FOREACH(ifp, &ifnet, if_link) - if (ifp->if_dunit != IF_DUNIT_NONE) { - IFNET_RUNLOCK(); - pfi_attach_ifnet(ifp); - IFNET_RLOCK(); - } + TAILQ_FOREACH(ifp, &ifnet, if_link) { + IFNET_RUNLOCK(); + pfi_attach_ifnet(ifp); + IFNET_RLOCK(); + } IFNET_RUNLOCK(); PF_UNLOCK(); pfi_dummy = pfi_if_create("notyet", pfi_self, @@ -248,8 +247,7 @@ void pfi_attach_ifnet_event(void *arg __unused, struct ifnet *ifp) { PF_LOCK(); - if (ifp->if_dunit != IF_DUNIT_NONE) - pfi_attach_ifnet(ifp); + pfi_attach_ifnet(ifp); PF_UNLOCK(); } @@ -341,8 +339,8 @@ pfi_attach_ifnet(struct ifnet *ifp) /* add/modify interface */ if (p == NULL) - p = pfi_if_create(ifp->if_xname, q, - realname?PFI_IFLAG_INSTANCE:PFI_IFLAG_PLACEHOLDER); + p = pfi_if_create(ifp->if_xname, q, PFI_IFLAG_INSTANCE | + (realname?0:PFI_IFLAG_PLACEHOLDER)); else { /* remove from the dummy group */ /* XXX: copy stats? We should not have any!!! */ @@ -354,10 +352,9 @@ pfi_attach_ifnet(struct ifnet *ifp) q->pfik_addcnt++; TAILQ_INSERT_TAIL(&q->pfik_grouphead, p, pfik_instances); - if (realname) { + if (realname) p->pfik_flags &= ~PFI_IFLAG_PLACEHOLDER; - p->pfik_flags |= PFI_IFLAG_INSTANCE; - } + p->pfik_flags |= PFI_IFLAG_INSTANCE; } if (p == NULL) panic("pfi_attach_ifnet: " @@ -874,6 +871,7 @@ pfi_maybe_destroy(struct pfi_kif *p) if (p->pfik_rules > 0 || p->pfik_states > 0) { /* move back to the dummy group */ p->pfik_parent = pfi_dummy; + p->pfik_flags &= ~PFI_IFLAG_INSTANCE; pfi_dummy->pfik_addcnt++; TAILQ_INSERT_TAIL(&pfi_dummy->pfik_grouphead, p, pfik_instances); @@ -912,11 +910,8 @@ pfi_dynamic_drivers(void) */ IFNET_RLOCK(); - TAILQ_FOREACH(ifp, &ifnet, if_link) { - if (ifp->if_dunit == IF_DUNIT_NONE) - continue; + TAILQ_FOREACH(ifp, &ifnet, if_link) pfi_newgroup(ifp->if_dname, PFI_IFLAG_DYNAMIC); - } IFNET_RUNLOCK(); #else char *buses[] = PFI_DYNAMIC_BUSES; |