Home | History | Annotate | Line # | Download | only in net
      1  1.17  yamaguch /*	$NetBSD: if_vlanvar.h,v 1.17 2022/06/20 08:02:25 yamaguchi Exp $	*/
      2   1.1   thorpej 
      3  1.13      maxv /*
      4   1.1   thorpej  * Copyright (c) 2000 The NetBSD Foundation, Inc.
      5   1.1   thorpej  * All rights reserved.
      6   1.1   thorpej  *
      7   1.1   thorpej  * This code is derived from software contributed to The NetBSD Foundation
      8   1.1   thorpej  * by Andrew Doran.
      9   1.1   thorpej  *
     10   1.1   thorpej  * Redistribution and use in source and binary forms, with or without
     11   1.1   thorpej  * modification, are permitted provided that the following conditions
     12   1.1   thorpej  * are met:
     13   1.1   thorpej  * 1. Redistributions of source code must retain the above copyright
     14   1.1   thorpej  *    notice, this list of conditions and the following disclaimer.
     15   1.1   thorpej  * 2. Redistributions in binary form must reproduce the above copyright
     16   1.1   thorpej  *    notice, this list of conditions and the following disclaimer in the
     17   1.1   thorpej  *    documentation and/or other materials provided with the distribution.
     18   1.1   thorpej  *
     19   1.1   thorpej  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     20   1.1   thorpej  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     21   1.1   thorpej  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     22   1.1   thorpej  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     23   1.1   thorpej  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     24   1.1   thorpej  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     25   1.1   thorpej  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     26   1.1   thorpej  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     27   1.1   thorpej  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     28   1.1   thorpej  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     29   1.1   thorpej  * POSSIBILITY OF SUCH DAMAGE.
     30   1.1   thorpej  */
     31   1.1   thorpej 
     32   1.1   thorpej /*
     33   1.1   thorpej  * Copyright 1998 Massachusetts Institute of Technology
     34   1.1   thorpej  *
     35   1.1   thorpej  * Permission to use, copy, modify, and distribute this software and
     36   1.1   thorpej  * its documentation for any purpose and without fee is hereby
     37   1.1   thorpej  * granted, provided that both the above copyright notice and this
     38   1.1   thorpej  * permission notice appear in all copies, that both the above
     39   1.1   thorpej  * copyright notice and this permission notice appear in all
     40   1.1   thorpej  * supporting documentation, and that the name of M.I.T. not be used
     41   1.1   thorpej  * in advertising or publicity pertaining to distribution of the
     42   1.1   thorpej  * software without specific, written prior permission.  M.I.T. makes
     43   1.1   thorpej  * no representations about the suitability of this software for any
     44   1.1   thorpej  * purpose.  It is provided "as is" without express or implied
     45   1.1   thorpej  * warranty.
     46   1.5     perry  *
     47   1.1   thorpej  * THIS SOFTWARE IS PROVIDED BY M.I.T. ``AS IS''.  M.I.T. DISCLAIMS
     48   1.1   thorpej  * ALL EXPRESS OR IMPLIED WARRANTIES WITH REGARD TO THIS SOFTWARE,
     49   1.1   thorpej  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     50   1.1   thorpej  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT
     51   1.1   thorpej  * SHALL M.I.T. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     52   1.1   thorpej  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     53   1.1   thorpej  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
     54   1.1   thorpej  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     55   1.1   thorpej  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     56   1.1   thorpej  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     57   1.1   thorpej  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     58   1.1   thorpej  * SUCH DAMAGE.
     59   1.1   thorpej  *
     60   1.1   thorpej  * from FreeBSD: if_vlan_var.h,v 1.3 1999/08/28 00:48:24 peter Exp
     61   1.1   thorpej  */
     62   1.1   thorpej 
     63   1.1   thorpej #ifndef _NET_IF_VLANVAR_H_
     64   1.1   thorpej #define	_NET_IF_VLANVAR_H_
     65   1.1   thorpej 
     66   1.1   thorpej struct ether_vlan_header {
     67   1.8      matt 	uint8_t		evl_dhost[ETHER_ADDR_LEN];
     68   1.8      matt 	uint8_t		evl_shost[ETHER_ADDR_LEN];
     69   1.8      matt 	uint16_t	evl_encap_proto;
     70   1.8      matt 	uint16_t	evl_tag;
     71   1.8      matt 	uint16_t	evl_proto;
     72   1.7     perry } __packed;
     73   1.1   thorpej 
     74   1.1   thorpej /* Configuration structure for SIOCSETVLAN and SIOCGETVLAN ioctls. */
     75   1.1   thorpej struct vlanreq {
     76  1.12   msaitoh 	char		vlr_parent[IFNAMSIZ];
     77  1.12   msaitoh 	uint16_t	vlr_tag;
     78   1.1   thorpej };
     79   1.1   thorpej 
     80   1.1   thorpej #define	SIOCSETVLAN	SIOCSIFGENERIC
     81   1.1   thorpej #define	SIOCGETVLAN	SIOCGIFGENERIC
     82   1.1   thorpej 
     83   1.1   thorpej #ifdef _KERNEL
     84  1.17  yamaguch struct mbuf *	vlan_input(struct ifnet *, struct mbuf *);
     85  1.10  knakahar 
     86  1.10  knakahar /*
     87  1.10  knakahar  * Locking notes:
     88  1.10  knakahar  * + ifv_list.list is protected by ifv_list.lock (an adaptive mutex)
     89  1.10  knakahar  *     ifv_list.list is list of all ifvlans, and it is used to avoid
     90  1.10  knakahar  *     unload while busy.
     91  1.10  knakahar  * + ifv_hash.lists is protected by
     92  1.10  knakahar  *   - ifv_hash.lock (an adaptive mutex) for writer
     93  1.10  knakahar  *   - pserialize for reader
     94  1.10  knakahar  *     ifv_hash.lists is hashed list of all configured
     95  1.10  knakahar  *     vlan interface, and it is used to avoid unload while busy.
     96  1.10  knakahar  * + ifvlan->ifv_linkmib is protected by
     97  1.10  knakahar  *   - ifvlan->ifv_lock (an adaptive mutex) for writer
     98  1.10  knakahar  *   - ifv_linkmib->ifvm_psref for reader
     99  1.10  knakahar  *     ifvlan->ifv_linkmib is used for variant values while tagging
    100  1.10  knakahar  *     and untagging
    101  1.10  knakahar  *
    102  1.10  knakahar  * Locking order:
    103  1.10  knakahar  *     - ifv_list.lock => struct ifvlan->ifv_lock
    104  1.10  knakahar  *     - struct ifvlan->ifv_lock => ifv_hash.lock
    105  1.10  knakahar  * Other mutexes must not hold simultaneously
    106  1.10  knakahar  *
    107  1.10  knakahar  *   NOTICE
    108  1.10  knakahar  *     - ifvlan must not have a variant value while tagging and
    109  1.10  knakahar  *       untagging. Such variant values must be in ifvlan->ifv_mib
    110  1.10  knakahar  *     - ifvlan->ifv_mib is modified like read-copy-update.
    111  1.10  knakahar  *       So, once we dereference ifvlan->ifv_mib,
    112  1.10  knakahar  *       we must keep the pointer during the same context. If we
    113  1.10  knakahar  *       re-dereference ifvlan->ifv_mib, the ifv_mib may be other
    114  1.10  knakahar  *       one because of concurrent writer processing.
    115  1.10  knakahar  */
    116   1.1   thorpej #endif	/* _KERNEL */
    117   1.1   thorpej 
    118   1.1   thorpej #endif	/* !_NET_IF_VLANVAR_H_ */
    119