summaryrefslogtreecommitdiffstats
path: root/sys/net/ethernet.h
diff options
context:
space:
mode:
authorglebius <glebius@FreeBSD.org>2014-11-11 10:22:33 +0000
committerglebius <glebius@FreeBSD.org>2014-11-11 10:22:33 +0000
commitb786a57a348cc97896eea33fb19295b9947103e0 (patch)
tree6ef1823077a9bbe499d926bf516a19762eb14d3a /sys/net/ethernet.h
parent664419606cbabbda7fd2aecc50f6fc3d21bb850a (diff)
downloadFreeBSD-src-b786a57a348cc97896eea33fb19295b9947103e0.zip
FreeBSD-src-b786a57a348cc97896eea33fb19295b9947103e0.tar.gz
Move struct ether_vlan_header to ethernet.h, out of if_vlan_var.h,
since this structure is protocol definition, not part of implementation.
Diffstat (limited to 'sys/net/ethernet.h')
-rw-r--r--sys/net/ethernet.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/sys/net/ethernet.h b/sys/net/ethernet.h
index 10abf64..438028d 100644
--- a/sys/net/ethernet.h
+++ b/sys/net/ethernet.h
@@ -73,6 +73,25 @@ struct ether_addr {
#define ETHER_IS_MULTICAST(addr) (*(addr) & 0x01) /* is address mcast/bcast? */
/*
+ * 802.1q Virtual LAN header.
+ */
+struct ether_vlan_header {
+ uint8_t evl_dhost[ETHER_ADDR_LEN];
+ uint8_t evl_shost[ETHER_ADDR_LEN];
+ uint16_t evl_encap_proto;
+ uint16_t evl_tag;
+ uint16_t evl_proto;
+} __packed;
+
+#define EVL_VLID_MASK 0x0FFF
+#define EVL_PRI_MASK 0xE000
+#define EVL_VLANOFTAG(tag) ((tag) & EVL_VLID_MASK)
+#define EVL_PRIOFTAG(tag) (((tag) >> 13) & 7)
+#define EVL_CFIOFTAG(tag) (((tag) >> 12) & 1)
+#define EVL_MAKETAG(vlid, pri, cfi) \
+ ((((((pri) & 7) << 1) | ((cfi) & 1)) << 12) | ((vlid) & EVL_VLID_MASK))
+
+/*
* NOTE: 0x0000-0x05DC (0..1500) are generally IEEE 802.3 length fields.
* However, there are some conflicts.
*/
OpenPOWER on IntegriCloud