/*	$NetBSD: if_bridgevar.h,v 1.4 2003/07/08 07:13:50 itojun Exp $	*/

/*
 * Copyright 2001 Wasabi Systems, Inc.
 * All rights reserved.
 *
 * Written by Jason R. Thorpe for Wasabi Systems, Inc.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *	This product includes software developed for the NetBSD Project by
 *	Wasabi Systems, Inc.
 * 4. The name of Wasabi Systems, Inc. may not be used to endorse
 *    or promote products derived from this software without specific prior
 *    written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

/*
 * Copyright (c) 1999, 2000 Jason L. Wright (jason@thought.net)
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *	This product includes software developed by Jason L. Wright
 * 4. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * OpenBSD: if_bridge.h,v 1.14 2001/03/22 03:48:29 jason Exp
 *
 * $FreeBSD: src/sys/net/if_bridgevar.h,v 1.24.2.1.2.1 2009/10/25 01:10:29 kensmith Exp $
 */

/*
 * Data structure and control definitions for bridge interfaces.
 */

#include <sys/bsd_callout.h>
#include <sys/bsd_queue.h>
#include <sys/bsd_condvar.h>

/*
 * Commands used in the SIOCSDRVSPEC ioctl.  Note the lookup of the
 * bridge interface itself is keyed off the ifdrv structure.
 */
#define	BRDGADD			0	/* add bridge member (ifbreq) */
#define	BRDGDEL			1	/* delete bridge member (ifbreq) */
#define	BRDGGIFFLGS		2	/* get member if flags (ifbreq) */
#define	BRDGSIFFLGS		3	/* set member if flags (ifbreq) */
#define	BRDGSCACHE		4	/* set cache size (ifbrparam) */
#define	BRDGGCACHE		5	/* get cache size (ifbrparam) */
#define	BRDGGIFS		6	/* get member list (ifbifconf) */
#define	BRDGRTS			7	/* get address list (ifbaconf) */
#define	BRDGSADDR		8	/* set static address (ifbareq) */
#define	BRDGSTO			9	/* set cache timeout (ifbrparam) */
#define	BRDGGTO			10	/* get cache timeout (ifbrparam) */
#define	BRDGDADDR		11	/* delete address (ifbareq) */
#define	BRDGFLUSH		12	/* flush address cache (ifbreq) */

#define	BRDGGPRI		13	/* get priority (ifbrparam) */
#define	BRDGSPRI		14	/* set priority (ifbrparam) */
#define	BRDGGHT			15	/* get hello time (ifbrparam) */
#define	BRDGSHT			16	/* set hello time (ifbrparam) */
#define	BRDGGFD			17	/* get forward delay (ifbrparam) */
#define	BRDGSFD			18	/* set forward delay (ifbrparam) */
#define	BRDGGMA			19	/* get max age (ifbrparam) */
#define	BRDGSMA			20	/* set max age (ifbrparam) */
#define	BRDGSIFPRIO		21	/* set if priority (ifbreq) */
#define	BRDGSIFCOST		22	/* set if path cost (ifbreq) */
#define	BRDGADDS		23	/* add bridge span member (ifbreq) */
#define	BRDGDELS		24	/* delete bridge span member (ifbreq) */
#define	BRDGPARAM		25	/* get bridge STP params (ifbropreq) */
#define	BRDGGRTE		26	/* get cache drops (ifbrparam) */
#define	BRDGGIFSSTP		27	/* get member STP params list
					 * (ifbpstpconf) */
#define	BRDGSPROTO		28	/* set protocol (ifbrparam) */
#define	BRDGSTXHC		29	/* set tx hold count (ifbrparam) */
#define	BRDGSIFAMAX		30	/* set max interface addrs (ifbreq) */

/*
 * Generic bridge control request.
 */
struct ifbreq {
	char		ifbr_ifsname[IFNAMSIZ];	/* member if name */
	uint32_t	ifbr_ifsflags;		/* member if flags */
	uint32_t	ifbr_stpflags;		/* member if STP flags */
	uint32_t	ifbr_path_cost;		/* member if STP cost */
	uint8_t		ifbr_portno;		/* member if port number */
	uint8_t		ifbr_priority;		/* member if STP priority */
	uint8_t		ifbr_proto;		/* member if STP protocol */
	uint8_t		ifbr_role;		/* member if STP role */
	uint8_t		ifbr_state;		/* member if STP state */
	uint32_t	ifbr_addrcnt;		/* member if addr number */
	uint32_t	ifbr_addrmax;		/* member if addr max */
	uint32_t	ifbr_addrexceeded;	/* member if addr violations */
	uint8_t		pad[32];
};

/* BRDGGIFFLAGS, BRDGSIFFLAGS */
#define	IFBIF_LEARNING		0x0001	/* if can learn */
#define	IFBIF_DISCOVER		0x0002	/* if sends packets w/ unknown dest. */
#define	IFBIF_STP		0x0004	/* if participates in spanning tree */
#define	IFBIF_SPAN		0x0008	/* if is a span port */
#define	IFBIF_STICKY		0x0010	/* if learned addresses stick */
#define	IFBIF_BSTP_EDGE		0x0020	/* member stp edge port */
#define	IFBIF_BSTP_AUTOEDGE	0x0040	/* member stp autoedge enabled */
#define	IFBIF_BSTP_PTP		0x0080	/* member stp point to point */
#define	IFBIF_BSTP_AUTOPTP	0x0100	/* member stp autoptp enabled */
#define	IFBIF_BSTP_ADMEDGE	0x0200	/* member stp admin edge enabled */
#define	IFBIF_BSTP_ADMCOST	0x0400	/* member stp admin path cost */
#define	IFBIF_PRIVATE		0x0800	/* if is a private segment */

#define	IFBIFBITS	"\020\001LEARNING\002DISCOVER\003STP\004SPAN" \
			"\005STICKY\014PRIVATE\006EDGE\007AUTOEDGE\010PTP" \
			"\011AUTOPTP"
#define	IFBIFMASK	~(IFBIF_BSTP_EDGE|IFBIF_BSTP_AUTOEDGE|IFBIF_BSTP_PTP| \
			IFBIF_BSTP_AUTOPTP|IFBIF_BSTP_ADMEDGE| \
			IFBIF_BSTP_ADMCOST)	/* not saved */

/* BRDGFLUSH */
#define	IFBF_FLUSHDYN		0x00	/* flush learned addresses only */
#define	IFBF_FLUSHALL		0x01	/* flush all addresses */

/*
 * Interface list structure.
 */
struct ifbifconf {
	uint32_t	ifbic_len;	/* buffer size */
	union {
		caddr_t	ifbicu_buf;
		struct ifbreq *ifbicu_req;
	} ifbic_ifbicu;
#define	ifbic_buf	ifbic_ifbicu.ifbicu_buf
#define	ifbic_req	ifbic_ifbicu.ifbicu_req
};

/*
 * Bridge address request.
 */
struct ifbareq {
	char		ifba_ifsname[IFNAMSIZ];	/* member if name */
	unsigned long	ifba_expire;		/* address expire time */
	uint8_t		ifba_flags;		/* address flags */
	uint8_t		ifba_dst[ETHER_ADDR_LEN];/* destination address */
	uint16_t	ifba_vlan;		/* vlan id */
};

#define	IFBAF_TYPEMASK	0x03	/* address type mask */
#define	IFBAF_DYNAMIC	0x00	/* dynamically learned address */
#define	IFBAF_STATIC	0x01	/* static address */
#define	IFBAF_STICKY	0x02	/* sticky address */

#define	IFBAFBITS	"\020\1STATIC\2STICKY"

/*
 * Address list structure.
 */
struct ifbaconf {
	uint32_t	ifbac_len;	/* buffer size */
	union {
		caddr_t ifbacu_buf;
		struct ifbareq *ifbacu_req;
	} ifbac_ifbacu;
#define	ifbac_buf	ifbac_ifbacu.ifbacu_buf
#define	ifbac_req	ifbac_ifbacu.ifbacu_req
};

/*
 * Bridge parameter structure.
 */
struct ifbrparam {
	union {
		uint32_t ifbrpu_int32;
		uint16_t ifbrpu_int16;
		uint8_t ifbrpu_int8;
	} ifbrp_ifbrpu;
};
#define	ifbrp_csize	ifbrp_ifbrpu.ifbrpu_int32	/* cache size */
#define	ifbrp_ctime	ifbrp_ifbrpu.ifbrpu_int32	/* cache time (sec) */
#define	ifbrp_prio	ifbrp_ifbrpu.ifbrpu_int16	/* bridge priority */
#define	ifbrp_proto	ifbrp_ifbrpu.ifbrpu_int8	/* bridge protocol */
#define	ifbrp_txhc	ifbrp_ifbrpu.ifbrpu_int8	/* bpdu tx holdcount */
#define	ifbrp_hellotime	ifbrp_ifbrpu.ifbrpu_int8	/* hello time (sec) */
#define	ifbrp_fwddelay	ifbrp_ifbrpu.ifbrpu_int8	/* fwd time (sec) */
#define	ifbrp_maxage	ifbrp_ifbrpu.ifbrpu_int8	/* max age (sec) */
#define	ifbrp_cexceeded ifbrp_ifbrpu.ifbrpu_int32	/* # of cache dropped
							 * adresses */
/*
 * Bridge current operational parameters structure.
 */
struct ifbropreq {
	uint8_t		ifbop_holdcount;
	uint8_t		ifbop_maxage;
	uint8_t		ifbop_hellotime;
	uint8_t		ifbop_fwddelay;
	uint8_t		ifbop_protocol;
	uint16_t	ifbop_priority;
	uint16_t	ifbop_root_port;
	uint32_t	ifbop_root_path_cost;
	uint64_t	ifbop_bridgeid;
	uint64_t	ifbop_designated_root;
	uint64_t	ifbop_designated_bridge;
	struct timeval	ifbop_last_tc_time;
};

/*
 * Bridge member operational STP params structure.
 */
struct ifbpstpreq {
	uint8_t		ifbp_portno;		/* bp STP port number */
	uint32_t	ifbp_fwd_trans;		/* bp STP fwd transitions */
	uint32_t	ifbp_design_cost;	/* bp STP designated cost */
	uint32_t	ifbp_design_port;	/* bp STP designated port */
	uint64_t	ifbp_design_bridge;	/* bp STP designated bridge */
	uint64_t	ifbp_design_root;	/* bp STP designated root */
};

/*
 * Bridge STP ports list structure.
 */
struct ifbpstpconf {
	uint32_t	ifbpstp_len;	/* buffer size */
	union {
		caddr_t	ifbpstpu_buf;
		struct ifbpstpreq *ifbpstpu_req;
	} ifbpstp_ifbpstpu;
#define	ifbpstp_buf	ifbpstp_ifbpstpu.ifbpstpu_buf
#define	ifbpstp_req	ifbpstp_ifbpstpu.ifbpstpu_req
};

#ifdef _FREEBSD_KERNEL

#define BRIDGE_LOCK_INIT(_sc)		do {			\
	mtx_init(&(_sc)->sc_mtx, "if_bridge", NULL, MTX_DEF);	\
	cv_init(&(_sc)->sc_cv, "if_bridge_cv");			\
} while (0)
#define BRIDGE_LOCK_DESTROY(_sc)	do {	\
	mtx_destroy(&(_sc)->sc_mtx);		\
	cv_destroy(&(_sc)->sc_cv);		\
} while (0)
#define BRIDGE_LOCK(_sc)		mtx_lock(&(_sc)->sc_mtx)
#define BRIDGE_UNLOCK(_sc)		mtx_unlock(&(_sc)->sc_mtx)
#define BRIDGE_LOCK_ASSERT(_sc)		mtx_assert(&(_sc)->sc_mtx, MA_OWNED)
#define	BRIDGE_LOCK2REF(_sc, _err)	do {	\
	mtx_assert(&(_sc)->sc_mtx, MA_OWNED);	\
	if ((_sc)->sc_iflist_xcnt > 0)		\
		(_err) = EBUSY;			\
	else					\
		(_sc)->sc_iflist_ref++;		\
	mtx_unlock(&(_sc)->sc_mtx);		\
} while (0)
#define	BRIDGE_UNREF(_sc)		do {				\
	mtx_lock(&(_sc)->sc_mtx);					\
	(_sc)->sc_iflist_ref--;						\
	if (((_sc)->sc_iflist_xcnt > 0) && ((_sc)->sc_iflist_ref == 0))	\
		cv_broadcast(&(_sc)->sc_cv);				\
	mtx_unlock(&(_sc)->sc_mtx);					\
} while (0)
#define	BRIDGE_XLOCK(_sc)		do {		\
	mtx_assert(&(_sc)->sc_mtx, MA_OWNED);		\
	(_sc)->sc_iflist_xcnt++;			\
	while ((_sc)->sc_iflist_ref > 0)		\
		cv_wait(&(_sc)->sc_cv, &(_sc)->sc_mtx);	\
} while (0)
#define	BRIDGE_XDROP(_sc)		do {	\
	mtx_assert(&(_sc)->sc_mtx, MA_OWNED);	\
	(_sc)->sc_iflist_xcnt--;		\
} while (0)

#define BRIDGE_INPUT(_ifp, _m)		do {    	\
	KASSERT(bridge_input_p != NULL,			\
	    ("%s: if_bridge not loaded!", __func__));	\
	_m = (*bridge_input_p)(_ifp, _m);		\
	if (_m != NULL)					\
		_ifp = _m->m_pkthdr.rcvif;		\
} while (0)

#define BRIDGE_OUTPUT(_ifp, _m, _err)	do {    		\
	KASSERT(bridge_output_p != NULL,			\
	    ("%s: if_bridge not loaded!", __func__));		\
	_err = (*bridge_output_p)(_ifp, _m, NULL, NULL);	\
} while (0)

extern	struct mbuf *(*bridge_input_p)(struct ifnet *, struct mbuf *);
extern	int (*bridge_output_p)(struct ifnet *, struct mbuf *,
		struct sockaddr *, struct rtentry *);
extern	void (*bridge_dn_p)(struct mbuf *, struct ifnet *);

#endif /* _FREEBSD_KERNEL */
