diff options
author | phk <phk@FreeBSD.org> | 1999-06-06 09:17:51 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 1999-06-06 09:17:51 +0000 |
commit | 0098c16802b914fdce6d769f5d8614afd9752297 (patch) | |
tree | ebd6e66f41d901f7a6af83a9996a8770ce7f22ca /sys/net | |
parent | 562e26b9ea92407f6681ed11abbf63c64cbf5a84 (diff) | |
download | FreeBSD-src-0098c16802b914fdce6d769f5d8614afd9752297.zip FreeBSD-src-0098c16802b914fdce6d769f5d8614afd9752297.tar.gz |
Introduce IFF_SMART bit.
This means that the driver will add/delete routes when it knows it is
up/down, rather than have the generic code belive it is up if configured.
This is probably most useful for serial lines, although many PHY chips
could probably tell us if we're connected to the cable/hub as well.
Diffstat (limited to 'sys/net')
-rw-r--r-- | sys/net/if.c | 11 | ||||
-rw-r--r-- | sys/net/if.h | 5 |
2 files changed, 10 insertions, 6 deletions
diff --git a/sys/net/if.c b/sys/net/if.c index e91445e..3021562 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.69 1999/04/27 11:16:56 phk Exp $ + * $Id: if.c,v 1.70 1999/04/28 11:37:32 phk Exp $ */ #include "opt_compat.h" @@ -639,12 +639,15 @@ ifioctl(so, cmd, data, p) if (error) return (error); ifr->ifr_prevflags = ifp->if_flags; - if (ifp->if_flags & IFF_UP && (ifr->ifr_flags & IFF_UP) == 0) { + if (ifp->if_flags & IFF_SMART) { + /* Smart drivers twiddle their own routes */ + } else if ((ifp->if_flags & IFF_UP && + (ifr->ifr_flags & IFF_UP) == 0) { int s = splimp(); if_down(ifp); splx(s); - } - if (ifr->ifr_flags & IFF_UP && (ifp->if_flags & IFF_UP) == 0) { + } else if (ifr->ifr_flags & IFF_UP && + (ifp->if_flags & IFF_UP) == 0) { int s = splimp(); if_up(ifp); splx(s); diff --git a/sys/net/if.h b/sys/net/if.h index f0fa46c..a639bc2 100644 --- a/sys/net/if.h +++ b/sys/net/if.h @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)if.h 8.1 (Berkeley) 6/10/93 - * $Id: if.h,v 1.51 1999/04/28 11:37:33 phk Exp $ + * $Id: if.h,v 1.52 1999/05/08 07:00:04 phk Exp $ */ #ifndef _NET_IF_H_ @@ -82,6 +82,7 @@ struct if_data { #define IFF_DEBUG 0x4 /* turn on debugging */ #define IFF_LOOPBACK 0x8 /* is a loopback net */ #define IFF_POINTOPOINT 0x10 /* interface is point-to-point link */ +#define IFF_SMART 0x20 /* interface manages own routes */ #define IFF_RUNNING 0x40 /* resources allocated */ #define IFF_NOARP 0x80 /* no address resolution protocol */ #define IFF_PROMISC 0x100 /* receive all packets */ @@ -97,7 +98,7 @@ struct if_data { /* flags set internally only: */ #define IFF_CANTCHANGE \ (IFF_BROADCAST|IFF_POINTOPOINT|IFF_RUNNING|IFF_OACTIVE|\ - IFF_SIMPLEX|IFF_MULTICAST|IFF_ALLMULTI) + IFF_SIMPLEX|IFF_MULTICAST|IFF_ALLMULTI|IFF_SMART) #define IFQ_MAXLEN 50 #define IFNET_SLOWHZ 1 /* granularity is 1 second */ |