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