summaryrefslogtreecommitdiffstats
path: root/sys/net/ethernet.h
diff options
context:
space:
mode:
authorbrooks <brooks@FreeBSD.org>2001-09-05 21:10:28 +0000
committerbrooks <brooks@FreeBSD.org>2001-09-05 21:10:28 +0000
commit7da2447808dd5233fae946a91d1cbc895d9ed346 (patch)
treedb9a1b36fca844efd89c94c81d0a7b9fb126f325 /sys/net/ethernet.h
parent06023d7a89677d7f21d97275f61ba4e8a4d4cf69 (diff)
downloadFreeBSD-src-7da2447808dd5233fae946a91d1cbc895d9ed346.zip
FreeBSD-src-7da2447808dd5233fae946a91d1cbc895d9ed346.tar.gz
Make vlan(4) loadable, unloadable, and clonable. As a side effect,
interfaces must now always enable VLAN support. Reviewed by: jlemon MFC after: 3 weeks
Diffstat (limited to 'sys/net/ethernet.h')
-rw-r--r--sys/net/ethernet.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/sys/net/ethernet.h b/sys/net/ethernet.h
index 15cab6c..b5a0fae 100644
--- a/sys/net/ethernet.h
+++ b/sys/net/ethernet.h
@@ -99,6 +99,41 @@ extern int (*ng_ether_output_p)(struct ifnet *ifp, struct mbuf **mp);
extern void (*ng_ether_attach_p)(struct ifnet *ifp);
extern void (*ng_ether_detach_p)(struct ifnet *ifp);
+extern int (*vlan_input_p)(struct ether_header *eh, struct mbuf *m);
+extern int (*vlan_input_tag_p)(struct ether_header *eh, struct mbuf *m,
+ u_int16_t t);
+#define _VLAN_INPUT(ifp, eh, m) do { \
+ if (vlan_input_p != NULL) { \
+ if ((*vlan_input_p)(eh, m) == -1) \
+ (ifp)->if_noproto++; \
+ } else { \
+ m_free(m); \
+ (ifp)->if_noproto++; \
+ } \
+} while (0)
+
+#define VLAN_INPUT(ifp, eh, m) do { \
+ /* XXX: lock */ \
+ _VLAN_INPUT(ifp, eh, m); \
+ /* XXX: unlock */ \
+} while (0)
+
+#define _VLAN_INPUT_TAG(ifp, eh, m, t) do { \
+ if (vlan_input_tag_p != NULL) { \
+ if ((*vlan_input_tag_p)(eh, m, t) == -1) \
+ (ifp)->if_noproto++; \
+ } else { \
+ m_free(m); \
+ (ifp)->if_noproto++; \
+ } \
+} while (0)
+
+#define VLAN_INPUT_TAG(ifp, eh, m, t) do { \
+ /* XXX: lock */ \
+ _VLAN_INPUT_TAG(ifp, eh, m, t); \
+ /* XXX: unlock */ \
+} while (0)
+
#else /* _KERNEL */
#include <sys/cdefs.h>
OpenPOWER on IntegriCloud