From owner-p4-projects@FreeBSD.ORG Thu Jan 1 20:38:39 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id D71E416A4D0; Thu, 1 Jan 2004 20:38:38 -0800 (PST) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id B131316A4CE for ; Thu, 1 Jan 2004 20:38:38 -0800 (PST) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 3E81043D2D for ; Thu, 1 Jan 2004 20:38:37 -0800 (PST) (envelope-from sam@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.10/8.12.10) with ESMTP id i024cb0B051917 for ; Thu, 1 Jan 2004 20:38:37 -0800 (PST) (envelope-from sam@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.10/8.12.10/Submit) id i024ca9e051914 for perforce@freebsd.org; Thu, 1 Jan 2004 20:38:36 -0800 (PST) (envelope-from sam@freebsd.org) Date: Thu, 1 Jan 2004 20:38:36 -0800 (PST) Message-Id: <200401020438.i024ca9e051914@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to sam@freebsd.org using -f From: Sam Leffler To: Perforce Change Reviews Subject: PERFORCE change 44663 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Jan 2004 04:38:39 -0000 http://perforce.freebsd.org/chv.cgi?CH=44663 Change 44663 by sam@sam_ebb on 2004/01/01 20:37:35 manage vlan tags with a private zone Affected files ... .. //depot/projects/netperf+sockets/sys/net/if_vlan.c#3 edit .. //depot/projects/netperf+sockets/sys/net/if_vlan_var.h#2 edit Differences ... ==== //depot/projects/netperf+sockets/sys/net/if_vlan.c#3 (text+ko) ==== @@ -53,6 +53,7 @@ #include #include #include +#include #include #include @@ -101,6 +102,7 @@ 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; @@ -217,6 +219,9 @@ 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; @@ -225,6 +230,7 @@ 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; } @@ -295,6 +301,25 @@ } 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) { struct ifvlan *ifv; @@ -331,10 +356,7 @@ * packet tag that holds it. */ if (p->if_capabilities & IFCAP_VLAN_HWTAGGING) { - struct m_tag *mtag = m_tag_alloc(MTAG_VLAN, - MTAG_VLAN_TAG, - sizeof (u_int), - M_NOWAIT); + struct m_tag *mtag = vlan_tag_alloc(M_NOWAIT); if (mtag == NULL) { ifp->if_oerrors++; m_freem(m); ==== //depot/projects/netperf+sockets/sys/net/if_vlan_var.h#2 (text+ko) ==== @@ -98,8 +98,7 @@ #define VLAN_INPUT_TAG(_ifp, _m, _t, _errcase) do { \ struct m_tag *mtag; \ - mtag = m_tag_alloc(MTAG_VLAN, MTAG_VLAN_TAG, \ - sizeof (u_int), M_NOWAIT); \ + mtag = vlan_tag_alloc(M_NOWAIT); \ if (mtag == NULL) { \ (_ifp)->if_ierrors++; \ m_freem(_m); \ @@ -113,6 +112,8 @@ ((_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_ */