Home | History | Annotate | Line # | Download | only in lagg
if_lagg.h revision 1.1
      1  1.1  yamaguch /*	$NetBSD: if_lagg.h,v 1.1 2021/05/17 04:07:43 yamaguchi Exp $	*/
      2  1.1  yamaguch 
      3  1.1  yamaguch #ifndef _NET_LAGG_IF_LAGG_H_
      4  1.1  yamaguch #define _NET_LAGG_IF_LAGG_H_
      5  1.1  yamaguch 
      6  1.1  yamaguch typedef enum {
      7  1.1  yamaguch 	LAGG_PROTO_NONE = 0,
      8  1.1  yamaguch 	LAGG_PROTO_LACP,	/* 802.1ax lacp */
      9  1.1  yamaguch 	LAGG_PROTO_FAILOVER,
     10  1.1  yamaguch 	LAGG_PROTO_LOADBALANCE,
     11  1.1  yamaguch 	LAGG_PROTO_MAX,
     12  1.1  yamaguch } lagg_proto;
     13  1.1  yamaguch 
     14  1.1  yamaguch /* IEEE802.3ad LACP protocol definitions.*/
     15  1.1  yamaguch #define LACP_STATE_ACTIVITY	__BIT(0)
     16  1.1  yamaguch #define LACP_STATE_TIMEOUT	__BIT(1)
     17  1.1  yamaguch #define LACP_STATE_AGGREGATION	__BIT(2)
     18  1.1  yamaguch #define LACP_STATE_SYNC		__BIT(3)
     19  1.1  yamaguch #define LACP_STATE_COLLECTING	__BIT(4)
     20  1.1  yamaguch #define LACP_STATE_DISTRIBUTING	__BIT(5)
     21  1.1  yamaguch #define LACP_STATE_DEFAULTED	__BIT(6)
     22  1.1  yamaguch #define LACP_STATE_EXPIRED	__BIT(7)
     23  1.1  yamaguch #define LACP_STATE_BITS		\
     24  1.1  yamaguch 	"\020"			\
     25  1.1  yamaguch 	"\001ACTIVITY"		\
     26  1.1  yamaguch 	"\002TIMEOUT"		\
     27  1.1  yamaguch 	"\003AGGREGATION"	\
     28  1.1  yamaguch 	"\004SYNC"		\
     29  1.1  yamaguch 	"\005COLLECTING"	\
     30  1.1  yamaguch 	"\006DISTRIBUTING"	\
     31  1.1  yamaguch 	"\007DEFAULTED"		\
     32  1.1  yamaguch 	"\010EXPIRED"
     33  1.1  yamaguch #define LACP_STATESTR_LEN	256
     34  1.1  yamaguch #define LACP_MAC_LEN		ETHER_ADDR_LEN
     35  1.1  yamaguch 
     36  1.1  yamaguch enum lagg_ioctl_lacp {
     37  1.1  yamaguch 	LAGGIOC_LACPSETFLAGS = 1,
     38  1.1  yamaguch 	LAGGIOC_LACPCLRFLAGS,
     39  1.1  yamaguch 	LAGGIOC_LACPSETMAXPORTS,
     40  1.1  yamaguch 	LAGGIOC_LACPCLRMAXPORTS,
     41  1.1  yamaguch };
     42  1.1  yamaguch 
     43  1.1  yamaguch #define LAGGREQLACP_OPTIMISTIC		__BIT(0)
     44  1.1  yamaguch #define LAGGREQLACP_DUMPDU		__BIT(1)
     45  1.1  yamaguch #define LAGGREQLACP_STOPDU		__BIT(2)
     46  1.1  yamaguch #define LAGGREQLACP_MULTILS		__BIT(3)
     47  1.1  yamaguch #define LAGGREQLACP_BITS		\
     48  1.1  yamaguch 	"\020"				\
     49  1.1  yamaguch 	"\001OPTIMISTIC"		\
     50  1.1  yamaguch 	"\002DUMPDU"			\
     51  1.1  yamaguch 	"\003STOPDU"			\
     52  1.1  yamaguch 	"\004MULTILS"
     53  1.1  yamaguch 
     54  1.1  yamaguch struct laggreq_lacp {
     55  1.1  yamaguch 	uint32_t	 command;
     56  1.1  yamaguch 	uint32_t	 flags;
     57  1.1  yamaguch 	size_t		 maxports;
     58  1.1  yamaguch 
     59  1.1  yamaguch 	uint16_t	 actor_prio;
     60  1.1  yamaguch 	uint8_t		 actor_mac[LACP_MAC_LEN];
     61  1.1  yamaguch 	uint16_t	 actor_key;
     62  1.1  yamaguch 	uint16_t	 partner_prio;
     63  1.1  yamaguch 	uint8_t		 partner_mac[LACP_MAC_LEN];
     64  1.1  yamaguch 	uint16_t	 partner_key;
     65  1.1  yamaguch };
     66  1.1  yamaguch 
     67  1.1  yamaguch enum lagg_ioctl_fail {
     68  1.1  yamaguch 	LAGGIOC_FAILSETFLAGS = 1,
     69  1.1  yamaguch 	LAGGIOC_FAILCLRFLAGS
     70  1.1  yamaguch };
     71  1.1  yamaguch 
     72  1.1  yamaguch #define LAGGREQFAIL_RXALL		__BIT(0)
     73  1.1  yamaguch 
     74  1.1  yamaguch struct laggreq_fail {
     75  1.1  yamaguch 	uint32_t	 command;
     76  1.1  yamaguch 	uint32_t	 flags;
     77  1.1  yamaguch };
     78  1.1  yamaguch 
     79  1.1  yamaguch struct laggreqproto {
     80  1.1  yamaguch 	union {
     81  1.1  yamaguch 		struct laggreq_lacp	 proto_lacp;
     82  1.1  yamaguch 		struct laggreq_fail	 proto_fail;
     83  1.1  yamaguch 	} rp_proto;
     84  1.1  yamaguch #define rp_lacp	rp_proto.proto_lacp
     85  1.1  yamaguch #define rp_fail	rp_proto.proto_fail
     86  1.1  yamaguch };
     87  1.1  yamaguch 
     88  1.1  yamaguch #define LAGG_PORT_SLAVE		0
     89  1.1  yamaguch #define LAGG_PORT_MASTER	__BIT(0)
     90  1.1  yamaguch #define LAGG_PORT_STACK		__BIT(1)
     91  1.1  yamaguch #define LAGG_PORT_ACTIVE	__BIT(2)
     92  1.1  yamaguch #define LAGG_PORT_COLLECTING	__BIT(3)
     93  1.1  yamaguch #define LAGG_PORT_DISTRIBUTING	__BIT(4)
     94  1.1  yamaguch #define LAGG_PORT_STANDBY	__BIT(5)
     95  1.1  yamaguch #define LAGG_PORT_BITS			\
     96  1.1  yamaguch 	"\020"				\
     97  1.1  yamaguch 	"\001MASTER"			\
     98  1.1  yamaguch 	"\002STACK"			\
     99  1.1  yamaguch 	"\003ACTIVE"			\
    100  1.1  yamaguch 	"\004COLLECTING"		\
    101  1.1  yamaguch 	"\005DISTRIBUTING"		\
    102  1.1  yamaguch 	"\006STANDBY"
    103  1.1  yamaguch #define LACP_PORTSTR_LEN	256
    104  1.1  yamaguch 
    105  1.1  yamaguch struct laggreq_lacpport {
    106  1.1  yamaguch 	uint16_t	 partner_prio;
    107  1.1  yamaguch 	uint8_t		 partner_mac[LACP_MAC_LEN];
    108  1.1  yamaguch 	uint16_t	 partner_key;
    109  1.1  yamaguch 
    110  1.1  yamaguch 	uint16_t	 actor_portprio;
    111  1.1  yamaguch 	uint16_t	 actor_portno;
    112  1.1  yamaguch 	uint8_t		 actor_state;
    113  1.1  yamaguch 	uint16_t	 partner_portprio;
    114  1.1  yamaguch 	uint16_t	 partner_portno;
    115  1.1  yamaguch 	uint8_t		 partner_state;
    116  1.1  yamaguch };
    117  1.1  yamaguch 
    118  1.1  yamaguch struct laggreqport {
    119  1.1  yamaguch 	char		 rp_portname[IFNAMSIZ];
    120  1.1  yamaguch 	uint32_t	 rp_prio;
    121  1.1  yamaguch 	uint32_t	 rp_flags;
    122  1.1  yamaguch 
    123  1.1  yamaguch 	union {
    124  1.1  yamaguch 		struct laggreq_lacpport	 port_lacp;
    125  1.1  yamaguch 	} rp_port;
    126  1.1  yamaguch #define rp_lacpport	rp_port.port_lacp
    127  1.1  yamaguch };
    128  1.1  yamaguch 
    129  1.1  yamaguch enum lagg_ioctl {
    130  1.1  yamaguch 	LAGGIOC_NOCMD,
    131  1.1  yamaguch 	LAGGIOC_SETPROTO = 1,
    132  1.1  yamaguch 	LAGGIOC_SETPROTOOPT,
    133  1.1  yamaguch 	LAGGIOC_ADDPORT,
    134  1.1  yamaguch 	LAGGIOC_DELPORT,
    135  1.1  yamaguch 	LAGGIOC_SETPORTPRI,
    136  1.1  yamaguch };
    137  1.1  yamaguch 
    138  1.1  yamaguch struct lagg_req {
    139  1.1  yamaguch 	uint32_t		 lrq_ioctl;
    140  1.1  yamaguch 	lagg_proto		 lrq_proto;
    141  1.1  yamaguch 	size_t			 lrq_nports;
    142  1.1  yamaguch 	struct laggreqproto	 lrq_reqproto;
    143  1.1  yamaguch 	struct laggreqport	 lrq_reqports[1];
    144  1.1  yamaguch };
    145  1.1  yamaguch 
    146  1.1  yamaguch #define	SIOCGLAGG		SIOCGIFGENERIC
    147  1.1  yamaguch #define	SIOCSLAGG		SIOCSIFGENERIC
    148  1.1  yamaguch #define SIOCGLAGGPORT		SIOCGIFGENERIC
    149  1.1  yamaguch #endif
    150