diff options
author | yar <yar@FreeBSD.org> | 2005-08-31 11:36:50 +0000 |
---|---|---|
committer | yar <yar@FreeBSD.org> | 2005-08-31 11:36:50 +0000 |
commit | a8babb6361f498ad4ec130129442557417062299 (patch) | |
tree | 84a8bfd45590a638afe97a040f869b58ff7e417d /sys/net/if_vlan_var.h | |
parent | a895ee1c0503a8b4640b891719cb1d32e96ef528 (diff) | |
download | FreeBSD-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.h | 9 |
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_ */ |