I'd like to be able to easily identify how deep are the tentacles of a
pseudo-driver in your network stack. This diff takes the example of
gif(4) and move all the remaining blocks checking for "IFT_GIF" under
the appropriate #ifdef dance.
The #ifdef I'm adding below are not strictly needed to compile a kernel
without gif(4) but they act as markers to limit code chunks that do not
need to be executed without the corresponding interface.
Ok?
Index: net/if_bridge.c
===================================================================
RCS file: /cvs/src/sys/net/if_bridge.c,v
retrieving revision 1.232
diff -u -p -r1.232 if_bridge.c
--- net/if_bridge.c 6 Feb 2015 22:10:43 -0000 1.232
+++ net/if_bridge.c 1 Apr 2015 12:00:11 -0000
@@ -1377,6 +1377,7 @@ bridge_input(struct ifnet *ifp, struct e
IF_ENQUEUE(&sc->sc_if.if_snd, mc);
splx(s);
schednetisr(NETISR_BRIDGE);
+#if NGIF > 0
if (ifp->if_type == IFT_GIF) {
TAILQ_FOREACH(ifl, &sc->sc_iflist, next) {
if (ifl->ifp->if_type == IFT_ETHER)
@@ -1396,6 +1397,7 @@ bridge_input(struct ifnet *ifp, struct e
m = NULL;
}
}
+#endif /* NGIF */
return (m);
}
@@ -1446,11 +1448,13 @@ bridge_input(struct ifnet *ifp, struct e
m->m_pkthdr.rcvif = ifl->ifp;
m->m_pkthdr.ph_rtableid = ifl->ifp->if_rdomain;
+#if NGIF > 0
if (ifp->if_type == IFT_GIF) {
m->m_flags |= M_PROTO1;
ether_input(ifl->ifp, eh, m);
m = NULL;
}
+#endif /* NGIF */
return (m);
}
if (bcmp(ac->ac_enaddr, eh->ether_shost, ETHER_ADDR_LEN) == 0
Index: netinet6/in6_ifattach.c
===================================================================
RCS file: /cvs/src/sys/netinet6/in6_ifattach.c,v
retrieving revision 1.86
diff -u -p -r1.86 in6_ifattach.c
--- netinet6/in6_ifattach.c 14 Mar 2015 03:38:52 -0000 1.86
+++ netinet6/in6_ifattach.c 1 Apr 2015 11:58:55 -0000
@@ -30,6 +30,8 @@
* SUCH DAMAGE.
*/
+#include "gif.h"
+
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/socket.h>
@@ -198,6 +200,7 @@ get_hw_ifid(struct ifnet *ifp, struct in
}
break;
+#if NGIF > 0
case IFT_GIF:
/*
* RFC2893 says: "SHOULD use IPv4 address as ifid source".
@@ -206,6 +209,7 @@ get_hw_ifid(struct ifnet *ifp, struct in
* we don't do this.
*/
return -1;
+#endif /* NGIF */
default:
return -1;
Index: netinet6/nd6.c
===================================================================
RCS file: /cvs/src/sys/netinet6/nd6.c,v
retrieving revision 1.133
diff -u -p -r1.133 nd6.c
--- netinet6/nd6.c 25 Mar 2015 17:39:33 -0000 1.133
+++ netinet6/nd6.c 1 Apr 2015 12:02:14 -0000
@@ -30,6 +30,8 @@
* SUCH DAMAGE.
*/
+#include "gif.h"
+
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/timeout.h>
@@ -1817,7 +1819,10 @@ nd6_need_cache(struct ifnet *ifp)
case IFT_PROPVIRTUAL:
case IFT_IEEE80211:
case IFT_CARP:
- case IFT_GIF: /* XXX need more cases? */
+#if NGIF > 0
+ case IFT_GIF:
+#endif /* NGIF */
+ /* XXX need more cases? */
return (1);
default:
return (0);