Home | History | Annotate | Line # | Download | only in lagg
if_lagg.h revision 1.2.2.2
      1  1.2.2.2  cjep /*	$NetBSD: if_lagg.h,v 1.2.2.2 2021/05/31 22:15:21 cjep Exp $	*/
      2  1.2.2.2  cjep 
      3  1.2.2.2  cjep /*
      4  1.2.2.2  cjep  * Copyright (c) 2005, 2006 Reyk Floeter <reyk (at) openbsd.org>
      5  1.2.2.2  cjep  *
      6  1.2.2.2  cjep  * Permission to use, copy, modify, and distribute this software for any
      7  1.2.2.2  cjep  * purpose with or without fee is hereby granted, provided that the above
      8  1.2.2.2  cjep  * copyright notice and this permission notice appear in all copies.
      9  1.2.2.2  cjep  *
     10  1.2.2.2  cjep  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
     11  1.2.2.2  cjep  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     12  1.2.2.2  cjep  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     13  1.2.2.2  cjep  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     14  1.2.2.2  cjep  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     15  1.2.2.2  cjep  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
     16  1.2.2.2  cjep  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     17  1.2.2.2  cjep  *
     18  1.2.2.2  cjep  * $FreeBSD$
     19  1.2.2.2  cjep  */
     20  1.2.2.2  cjep 
     21  1.2.2.2  cjep /*
     22  1.2.2.2  cjep  * Copyright (c) 2021 Internet Initiative Japan Inc.
     23  1.2.2.2  cjep  * All rights reserved.
     24  1.2.2.2  cjep  *
     25  1.2.2.2  cjep  * Redistribution and use in source and binary forms, with or without
     26  1.2.2.2  cjep  * modification, are permitted provided that the following conditions
     27  1.2.2.2  cjep  * are met:
     28  1.2.2.2  cjep  * 1. Redistributions of source code must retain the above copyright
     29  1.2.2.2  cjep  *    notice, this list of conditions and the following disclaimer.
     30  1.2.2.2  cjep  * 2. Redistributions in binary form must reproduce the above copyright
     31  1.2.2.2  cjep  *    notice, this list of conditions and the following disclaimer in the
     32  1.2.2.2  cjep  *    documentation and/or other materials provided with the distribution.
     33  1.2.2.2  cjep  *
     34  1.2.2.2  cjep  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     35  1.2.2.2  cjep  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     36  1.2.2.2  cjep  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     37  1.2.2.2  cjep  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     38  1.2.2.2  cjep  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     39  1.2.2.2  cjep  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     40  1.2.2.2  cjep  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     41  1.2.2.2  cjep  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     42  1.2.2.2  cjep  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     43  1.2.2.2  cjep  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     44  1.2.2.2  cjep  * POSSIBILITY OF SUCH DAMAGE.
     45  1.2.2.2  cjep  */
     46  1.2.2.2  cjep 
     47  1.2.2.2  cjep #ifndef _NET_LAGG_IF_LAGG_H_
     48  1.2.2.2  cjep #define _NET_LAGG_IF_LAGG_H_
     49  1.2.2.2  cjep 
     50  1.2.2.2  cjep typedef enum {
     51  1.2.2.2  cjep 	LAGG_PROTO_NONE = 0,
     52  1.2.2.2  cjep 	LAGG_PROTO_LACP,	/* 802.1ax lacp */
     53  1.2.2.2  cjep 	LAGG_PROTO_FAILOVER,
     54  1.2.2.2  cjep 	LAGG_PROTO_LOADBALANCE,
     55  1.2.2.2  cjep 	LAGG_PROTO_MAX,
     56  1.2.2.2  cjep } lagg_proto;
     57  1.2.2.2  cjep 
     58  1.2.2.2  cjep /* IEEE802.3ad LACP protocol definitions.*/
     59  1.2.2.2  cjep #define LACP_STATE_ACTIVITY	__BIT(0)
     60  1.2.2.2  cjep #define LACP_STATE_TIMEOUT	__BIT(1)
     61  1.2.2.2  cjep #define LACP_STATE_AGGREGATION	__BIT(2)
     62  1.2.2.2  cjep #define LACP_STATE_SYNC		__BIT(3)
     63  1.2.2.2  cjep #define LACP_STATE_COLLECTING	__BIT(4)
     64  1.2.2.2  cjep #define LACP_STATE_DISTRIBUTING	__BIT(5)
     65  1.2.2.2  cjep #define LACP_STATE_DEFAULTED	__BIT(6)
     66  1.2.2.2  cjep #define LACP_STATE_EXPIRED	__BIT(7)
     67  1.2.2.2  cjep #define LACP_STATE_BITS		\
     68  1.2.2.2  cjep 	"\020"			\
     69  1.2.2.2  cjep 	"\001ACTIVITY"		\
     70  1.2.2.2  cjep 	"\002TIMEOUT"		\
     71  1.2.2.2  cjep 	"\003AGGREGATION"	\
     72  1.2.2.2  cjep 	"\004SYNC"		\
     73  1.2.2.2  cjep 	"\005COLLECTING"	\
     74  1.2.2.2  cjep 	"\006DISTRIBUTING"	\
     75  1.2.2.2  cjep 	"\007DEFAULTED"		\
     76  1.2.2.2  cjep 	"\010EXPIRED"
     77  1.2.2.2  cjep #define LACP_STATESTR_LEN	256
     78  1.2.2.2  cjep #define LACP_MAC_LEN		ETHER_ADDR_LEN
     79  1.2.2.2  cjep 
     80  1.2.2.2  cjep enum lagg_ioctl_lacp {
     81  1.2.2.2  cjep 	LAGGIOC_LACPSETFLAGS = 1,
     82  1.2.2.2  cjep 	LAGGIOC_LACPCLRFLAGS,
     83  1.2.2.2  cjep 	LAGGIOC_LACPSETMAXPORTS,
     84  1.2.2.2  cjep 	LAGGIOC_LACPCLRMAXPORTS,
     85  1.2.2.2  cjep };
     86  1.2.2.2  cjep 
     87  1.2.2.2  cjep #define LAGGREQLACP_OPTIMISTIC		__BIT(0)
     88  1.2.2.2  cjep #define LAGGREQLACP_DUMPDU		__BIT(1)
     89  1.2.2.2  cjep #define LAGGREQLACP_STOPDU		__BIT(2)
     90  1.2.2.2  cjep #define LAGGREQLACP_MULTILS		__BIT(3)
     91  1.2.2.2  cjep #define LAGGREQLACP_BITS		\
     92  1.2.2.2  cjep 	"\020"				\
     93  1.2.2.2  cjep 	"\001OPTIMISTIC"		\
     94  1.2.2.2  cjep 	"\002DUMPDU"			\
     95  1.2.2.2  cjep 	"\003STOPDU"			\
     96  1.2.2.2  cjep 	"\004MULTILS"
     97  1.2.2.2  cjep 
     98  1.2.2.2  cjep struct laggreq_lacp {
     99  1.2.2.2  cjep 	uint32_t	 command;
    100  1.2.2.2  cjep 	uint32_t	 flags;
    101  1.2.2.2  cjep 	size_t		 maxports;
    102  1.2.2.2  cjep 
    103  1.2.2.2  cjep 	uint16_t	 actor_prio;
    104  1.2.2.2  cjep 	uint8_t		 actor_mac[LACP_MAC_LEN];
    105  1.2.2.2  cjep 	uint16_t	 actor_key;
    106  1.2.2.2  cjep 	uint16_t	 partner_prio;
    107  1.2.2.2  cjep 	uint8_t		 partner_mac[LACP_MAC_LEN];
    108  1.2.2.2  cjep 	uint16_t	 partner_key;
    109  1.2.2.2  cjep };
    110  1.2.2.2  cjep 
    111  1.2.2.2  cjep enum lagg_ioctl_fail {
    112  1.2.2.2  cjep 	LAGGIOC_FAILSETFLAGS = 1,
    113  1.2.2.2  cjep 	LAGGIOC_FAILCLRFLAGS
    114  1.2.2.2  cjep };
    115  1.2.2.2  cjep 
    116  1.2.2.2  cjep #define LAGGREQFAIL_RXALL		__BIT(0)
    117  1.2.2.2  cjep 
    118  1.2.2.2  cjep struct laggreq_fail {
    119  1.2.2.2  cjep 	uint32_t	 command;
    120  1.2.2.2  cjep 	uint32_t	 flags;
    121  1.2.2.2  cjep };
    122  1.2.2.2  cjep 
    123  1.2.2.2  cjep struct laggreqproto {
    124  1.2.2.2  cjep 	union {
    125  1.2.2.2  cjep 		struct laggreq_lacp	 proto_lacp;
    126  1.2.2.2  cjep 		struct laggreq_fail	 proto_fail;
    127  1.2.2.2  cjep 	} rp_proto;
    128  1.2.2.2  cjep #define rp_lacp	rp_proto.proto_lacp
    129  1.2.2.2  cjep #define rp_fail	rp_proto.proto_fail
    130  1.2.2.2  cjep };
    131  1.2.2.2  cjep 
    132  1.2.2.2  cjep #define LAGG_PORT_SLAVE		0
    133  1.2.2.2  cjep #define LAGG_PORT_MASTER	__BIT(0)
    134  1.2.2.2  cjep #define LAGG_PORT_STACK		__BIT(1)
    135  1.2.2.2  cjep #define LAGG_PORT_ACTIVE	__BIT(2)
    136  1.2.2.2  cjep #define LAGG_PORT_COLLECTING	__BIT(3)
    137  1.2.2.2  cjep #define LAGG_PORT_DISTRIBUTING	__BIT(4)
    138  1.2.2.2  cjep #define LAGG_PORT_STANDBY	__BIT(5)
    139  1.2.2.2  cjep #define LAGG_PORT_BITS			\
    140  1.2.2.2  cjep 	"\020"				\
    141  1.2.2.2  cjep 	"\001MASTER"			\
    142  1.2.2.2  cjep 	"\002STACK"			\
    143  1.2.2.2  cjep 	"\003ACTIVE"			\
    144  1.2.2.2  cjep 	"\004COLLECTING"		\
    145  1.2.2.2  cjep 	"\005DISTRIBUTING"		\
    146  1.2.2.2  cjep 	"\006STANDBY"
    147  1.2.2.2  cjep #define LACP_PORTSTR_LEN	256
    148  1.2.2.2  cjep 
    149  1.2.2.2  cjep struct laggreq_lacpport {
    150  1.2.2.2  cjep 	uint16_t	 partner_prio;
    151  1.2.2.2  cjep 	uint8_t		 partner_mac[LACP_MAC_LEN];
    152  1.2.2.2  cjep 	uint16_t	 partner_key;
    153  1.2.2.2  cjep 
    154  1.2.2.2  cjep 	uint16_t	 actor_portprio;
    155  1.2.2.2  cjep 	uint16_t	 actor_portno;
    156  1.2.2.2  cjep 	uint8_t		 actor_state;
    157  1.2.2.2  cjep 	uint16_t	 partner_portprio;
    158  1.2.2.2  cjep 	uint16_t	 partner_portno;
    159  1.2.2.2  cjep 	uint8_t		 partner_state;
    160  1.2.2.2  cjep };
    161  1.2.2.2  cjep 
    162  1.2.2.2  cjep struct laggreqport {
    163  1.2.2.2  cjep 	char		 rp_portname[IFNAMSIZ];
    164  1.2.2.2  cjep 	uint32_t	 rp_prio;
    165  1.2.2.2  cjep 	uint32_t	 rp_flags;
    166  1.2.2.2  cjep 
    167  1.2.2.2  cjep 	union {
    168  1.2.2.2  cjep 		struct laggreq_lacpport	 port_lacp;
    169  1.2.2.2  cjep 	} rp_port;
    170  1.2.2.2  cjep #define rp_lacpport	rp_port.port_lacp
    171  1.2.2.2  cjep };
    172  1.2.2.2  cjep 
    173  1.2.2.2  cjep enum lagg_ioctl {
    174  1.2.2.2  cjep 	LAGGIOC_NOCMD,
    175  1.2.2.2  cjep 	LAGGIOC_SETPROTO = 1,
    176  1.2.2.2  cjep 	LAGGIOC_SETPROTOOPT,
    177  1.2.2.2  cjep 	LAGGIOC_ADDPORT,
    178  1.2.2.2  cjep 	LAGGIOC_DELPORT,
    179  1.2.2.2  cjep 	LAGGIOC_SETPORTPRI,
    180  1.2.2.2  cjep };
    181  1.2.2.2  cjep 
    182  1.2.2.2  cjep struct lagg_req {
    183  1.2.2.2  cjep 	uint32_t		 lrq_ioctl;
    184  1.2.2.2  cjep 	lagg_proto		 lrq_proto;
    185  1.2.2.2  cjep 	size_t			 lrq_nports;
    186  1.2.2.2  cjep 	struct laggreqproto	 lrq_reqproto;
    187  1.2.2.2  cjep 	struct laggreqport	 lrq_reqports[1];
    188  1.2.2.2  cjep };
    189  1.2.2.2  cjep 
    190  1.2.2.2  cjep #define	SIOCGLAGG		SIOCGIFGENERIC
    191  1.2.2.2  cjep #define	SIOCSLAGG		SIOCSIFGENERIC
    192  1.2.2.2  cjep #define SIOCGLAGGPORT		SIOCGIFGENERIC
    193  1.2.2.2  cjep #endif
    194