summaryrefslogtreecommitdiffstats
path: root/sys/net/if.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>1998-12-16 18:30:43 +0000
committerphk <phk@FreeBSD.org>1998-12-16 18:30:43 +0000
commit38464a3bbc7ca1a7686cd5fd5f56c8def4aa5ed8 (patch)
tree9aba0b2234ee7791d5449a38c16d12190316cc5d /sys/net/if.c
parent8532cc33d7e606508d79e0d6392395f5de7cdc92 (diff)
downloadFreeBSD-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
Diffstat (limited to 'sys/net/if.c')
-rw-r--r--sys/net/if.c50
1 files changed, 39 insertions, 11 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
OpenPOWER on IntegriCloud