summaryrefslogtreecommitdiffstats
path: root/sys/net/if_vlan_var.h
diff options
context:
space:
mode:
authoryar <yar@FreeBSD.org>2005-08-31 11:36:50 +0000
committeryar <yar@FreeBSD.org>2005-08-31 11:36:50 +0000
commita8babb6361f498ad4ec130129442557417062299 (patch)
tree84a8bfd45590a638afe97a040f869b58ff7e417d /sys/net/if_vlan_var.h
parenta895ee1c0503a8b4640b891719cb1d32e96ef528 (diff)
downloadFreeBSD-src-a8babb6361f498ad4ec130129442557417062299.zip
FreeBSD-src-a8babb6361f498ad4ec130129442557417062299.tar.gz
Use VLAN_TAG_VALUE() not only to read a dot1q tag
value from an m_tag, but also to set it. This reduces complex code duplication and improves its readability. Alas, we shouldn't rename the macro to VLAN_TAG_LVALUE() globally because that would cause pain for kernel module port maintainers and vendors using FreeBSD as their codebase. Added a clarifying comment instead. Discussed with: ru, glebius X-MFC-After: 6.0-RELEASE (MFC is good just to reduce the diff)
Diffstat (limited to 'sys/net/if_vlan_var.h')
-rw-r--r--sys/net/if_vlan_var.h9
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/net/if_vlan_var.h b/sys/net/if_vlan_var.h
index 11cbf7b..c55d5d1 100644
--- a/sys/net/if_vlan_var.h
+++ b/sys/net/if_vlan_var.h
@@ -96,6 +96,12 @@ struct vlanreq {
#define MTAG_VLAN 1035328035
#define MTAG_VLAN_TAG 0 /* tag of VLAN interface */
+/*
+ * This macro must expand to a lvalue so that it can be used
+ * to set a tag with a simple assignment.
+ */
+#define VLAN_TAG_VALUE(_mt) (*(u_int *)((_mt) + 1))
+
#define VLAN_INPUT_TAG(_ifp, _m, _t, _errcase) do { \
struct m_tag *mtag; \
mtag = m_tag_alloc(MTAG_VLAN, MTAG_VLAN_TAG, \
@@ -105,7 +111,7 @@ struct vlanreq {
m_freem(_m); \
_errcase; \
} \
- *(u_int *)(mtag+1) = (_t); \
+ VLAN_TAG_VALUE(mtag) = (_t); \
m_tag_prepend((_m), mtag); \
(_m)->m_flags |= M_VLANTAG; \
} while (0)
@@ -113,7 +119,6 @@ struct vlanreq {
#define VLAN_OUTPUT_TAG(_ifp, _m) \
((_m)->m_flags & M_VLANTAG ? \
m_tag_locate((_m), MTAG_VLAN, MTAG_VLAN_TAG, NULL) : NULL)
-#define VLAN_TAG_VALUE(_mt) (*(u_int *)((_mt)+1))
#endif /* _KERNEL */
#endif /* _NET_IF_VLAN_VAR_H_ */
OpenPOWER on IntegriCloud