backout the switch to use a zone for vlan tags; this requires
vlans be present if any driver with h/w vlan tagging is configured
This commit is contained in:
parent
7a29c72c07
commit
5016de40e1
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=124096
@ -53,7 +53,6 @@
|
||||
#include <sys/sockio.h>
|
||||
#include <sys/sysctl.h>
|
||||
#include <sys/systm.h>
|
||||
#include <vm/uma.h>
|
||||
|
||||
#include <net/bpf.h>
|
||||
#include <net/ethernet.h>
|
||||
@ -102,7 +101,6 @@ SYSCTL_DECL(_net_link);
|
||||
SYSCTL_NODE(_net_link, IFT_L2VLAN, vlan, CTLFLAG_RW, 0, "IEEE 802.1Q VLAN");
|
||||
SYSCTL_NODE(_net_link_vlan, PF_LINK, link, CTLFLAG_RW, 0, "for consistency");
|
||||
|
||||
static uma_zone_t vlan_zone; /* for vlan packet tags */
|
||||
static MALLOC_DEFINE(M_VLAN, VLANNAME, "802.1Q Virtual LAN Interface");
|
||||
static LIST_HEAD(, ifvlan) ifv_list;
|
||||
|
||||
@ -219,9 +217,6 @@ vlan_modevent(module_t mod, int type, void *data)
|
||||
case MOD_LOAD:
|
||||
LIST_INIT(&ifv_list);
|
||||
VLAN_LOCK_INIT();
|
||||
vlan_zone = uma_zcreate("vlan",
|
||||
sizeof(struct m_tag)+sizeof(u_int),
|
||||
NULL, NULL, NULL, NULL, UMA_ALIGN_INT, 0);
|
||||
vlan_input_p = vlan_input;
|
||||
if_clone_attach(&vlan_cloner);
|
||||
break;
|
||||
@ -230,7 +225,6 @@ vlan_modevent(module_t mod, int type, void *data)
|
||||
vlan_input_p = NULL;
|
||||
while (!LIST_EMPTY(&ifv_list))
|
||||
vlan_clone_destroy(&LIST_FIRST(&ifv_list)->ifv_if);
|
||||
uma_zdestroy(vlan_zone);
|
||||
VLAN_LOCK_DESTROY();
|
||||
break;
|
||||
}
|
||||
@ -300,25 +294,6 @@ vlan_ifinit(void *foo)
|
||||
return;
|
||||
}
|
||||
|
||||
static void
|
||||
vlan_tag_free(struct m_tag *t)
|
||||
{
|
||||
uma_zfree(vlan_zone, t);
|
||||
}
|
||||
|
||||
struct m_tag *
|
||||
vlan_tag_alloc(int flags)
|
||||
{
|
||||
struct m_tag *mtag;
|
||||
|
||||
mtag = uma_zalloc(vlan_zone, flags);
|
||||
if (mtag) {
|
||||
m_tag_setup(mtag, MTAG_VLAN, MTAG_VLAN_TAG, sizeof(u_int));
|
||||
mtag->m_tag_free = vlan_tag_free;
|
||||
}
|
||||
return mtag;
|
||||
}
|
||||
|
||||
static void
|
||||
vlan_start(struct ifnet *ifp)
|
||||
{
|
||||
@ -356,7 +331,10 @@ vlan_start(struct ifnet *ifp)
|
||||
* packet tag that holds it.
|
||||
*/
|
||||
if (p->if_capabilities & IFCAP_VLAN_HWTAGGING) {
|
||||
struct m_tag *mtag = vlan_tag_alloc(M_NOWAIT);
|
||||
struct m_tag *mtag = m_tag_alloc(MTAG_VLAN,
|
||||
MTAG_VLAN_TAG,
|
||||
sizeof (u_int),
|
||||
M_NOWAIT);
|
||||
if (mtag == NULL) {
|
||||
ifp->if_oerrors++;
|
||||
m_freem(m);
|
||||
|
@ -98,7 +98,8 @@ struct vlanreq {
|
||||
|
||||
#define VLAN_INPUT_TAG(_ifp, _m, _t, _errcase) do { \
|
||||
struct m_tag *mtag; \
|
||||
mtag = vlan_tag_alloc(M_NOWAIT); \
|
||||
mtag = m_tag_alloc(MTAG_VLAN, MTAG_VLAN_TAG, \
|
||||
sizeof (u_int), M_NOWAIT); \
|
||||
if (mtag == NULL) { \
|
||||
(_ifp)->if_ierrors++; \
|
||||
m_freem(_m); \
|
||||
@ -112,8 +113,6 @@ struct vlanreq {
|
||||
((_ifp)->if_nvlans != 0 ? \
|
||||
m_tag_locate((_m), MTAG_VLAN, MTAG_VLAN_TAG, NULL) : NULL)
|
||||
#define VLAN_TAG_VALUE(_mt) (*(u_int *)((_mt)+1))
|
||||
|
||||
extern struct m_tag *vlan_tag_alloc(int flags);
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#endif /* _NET_IF_VLAN_VAR_H_ */
|
||||
|
Loading…
Reference in New Issue
Block a user