diff options
author | phk <phk@FreeBSD.org> | 1998-12-16 18:30:43 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 1998-12-16 18:30:43 +0000 |
commit | 38464a3bbc7ca1a7686cd5fd5f56c8def4aa5ed8 (patch) | |
tree | 9aba0b2234ee7791d5449a38c16d12190316cc5d | |
parent | 8532cc33d7e606508d79e0d6392395f5de7cdc92 (diff) | |
download | FreeBSD-src-38464a3bbc7ca1a7686cd5fd5f56c8def4aa5ed8.zip FreeBSD-src-38464a3bbc7ca1a7686cd5fd5f56c8def4aa5ed8.tar.gz |
Generalize the if_up() and if_down() functions under the names
if_route() and if_unroute().
This is first step towards sanitizing IFF_UP and IFF_RUNNING
-rw-r--r-- | sys/net/if.c | 50 | ||||
-rw-r--r-- | sys/net/if_var.h | 7 |
2 files changed, 42 insertions, 15 deletions
diff --git a/sys/net/if.c b/sys/net/if.c index 0ac5738..b0c7be7 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)if.c 8.3 (Berkeley) 1/4/94 - * $Id: if.c,v 1.62 1998/08/12 22:51:59 wpaul Exp $ + * $Id: if.c,v 1.63 1998/12/04 22:54:52 archie Exp $ */ #include "opt_compat.h" @@ -401,16 +401,17 @@ link_rtrequest(cmd, rt, sa) * NOTE: must be called at splnet or eqivalent. */ void -if_down(ifp) +if_unroute(ifp, flag, fam) register struct ifnet *ifp; + int flag, fam; { register struct ifaddr *ifa; - ifp->if_flags &= ~IFF_UP; + ifp->if_flags &= ~flag; getmicrotime(&ifp->if_lastchange); - for (ifa = ifp->if_addrhead.tqh_first; ifa; - ifa = ifa->ifa_link.tqe_next) - pfctlinput(PRC_IFDOWN, ifa->ifa_addr); + TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) + if (fam == PF_UNSPEC || (fam == ifa->ifa_addr->sa_family)) + pfctlinput(PRC_IFDOWN, ifa->ifa_addr); if_qflush(&ifp->if_snd); rt_ifmsg(ifp); } @@ -421,20 +422,47 @@ if_down(ifp) * NOTE: must be called at splnet or eqivalent. */ void -if_up(ifp) +if_route(ifp, flag, fam) register struct ifnet *ifp; + int flag, fam; { register struct ifaddr *ifa; - ifp->if_flags |= IFF_UP; + ifp->if_flags |= flag; getmicrotime(&ifp->if_lastchange); - for (ifa = ifp->if_addrhead.tqh_first; ifa; - ifa = ifa->ifa_link.tqe_next) - pfctlinput(PRC_IFUP, ifa->ifa_addr); + TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) + if (fam == PF_UNSPEC || (fam == ifa->ifa_addr->sa_family)) + pfctlinput(PRC_IFUP, ifa->ifa_addr); rt_ifmsg(ifp); } /* + * Mark an interface down and notify protocols of + * the transition. + * NOTE: must be called at splnet or eqivalent. + */ +void +if_down(ifp) + register struct ifnet *ifp; +{ + + if_unroute(ifp, IFF_UP, AF_UNSPEC); +} + +/* + * Mark an interface up and notify protocols of + * the transition. + * NOTE: must be called at splnet or eqivalent. + */ +void +if_up(ifp) + register struct ifnet *ifp; +{ + + if_route(ifp, IFF_UP, AF_UNSPEC); +} + +/* * Flush an interface queue. */ static void diff --git a/sys/net/if_var.h b/sys/net/if_var.h index 0feaf23..31ce8f6 100644 --- a/sys/net/if_var.h +++ b/sys/net/if_var.h @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * From: @(#)if.h 8.1 (Berkeley) 6/10/93 - * $Id: if_var.h,v 1.8 1998/06/07 17:12:06 dfr Exp $ + * $Id: if_var.h,v 1.9 1998/06/12 03:48:09 julian Exp $ */ #ifndef _NET_IF_VAR_H_ @@ -300,10 +300,9 @@ int if_allmulti __P((struct ifnet *, int)); void if_attach __P((struct ifnet *)); int if_delmulti __P((struct ifnet *, struct sockaddr *)); void if_down __P((struct ifnet *)); +void if_route __P((struct ifnet *, int flag, int fam)); +void if_unroute __P((struct ifnet *, int flag, int fam)); void if_up __P((struct ifnet *)); -#ifdef vax -void ifubareset __P((int)); -#endif /*void ifinit __P((void));*/ /* declared in systm.h for main() */ int ifioctl __P((struct socket *, u_long, caddr_t, struct proc *)); int ifpromisc __P((struct ifnet *, int)); |