Home | History | Annotate | Download | only in linux
      1 #ifndef _LINUX_IF_LINK_H
      2 #define _LINUX_IF_LINK_H
      3 
      4 #include <linux/types.h>
      5 #include <linux/netlink.h>
      6 
      7 /* This struct should be in sync with struct rtnl_link_stats64 */
      8 struct rtnl_link_stats {
      9 	__u32	rx_packets;		/* total packets received	*/
     10 	__u32	tx_packets;		/* total packets transmitted	*/
     11 	__u32	rx_bytes;		/* total bytes received 	*/
     12 	__u32	tx_bytes;		/* total bytes transmitted	*/
     13 	__u32	rx_errors;		/* bad packets received		*/
     14 	__u32	tx_errors;		/* packet transmit problems	*/
     15 	__u32	rx_dropped;		/* no space in linux buffers	*/
     16 	__u32	tx_dropped;		/* no space available in linux	*/
     17 	__u32	multicast;		/* multicast packets received	*/
     18 	__u32	collisions;
     19 
     20 	/* detailed rx_errors: */
     21 	__u32	rx_length_errors;
     22 	__u32	rx_over_errors;		/* receiver ring buff overflow	*/
     23 	__u32	rx_crc_errors;		/* recved pkt with crc error	*/
     24 	__u32	rx_frame_errors;	/* recv'd frame alignment error */
     25 	__u32	rx_fifo_errors;		/* recv'r fifo overrun		*/
     26 	__u32	rx_missed_errors;	/* receiver missed packet	*/
     27 
     28 	/* detailed tx_errors */
     29 	__u32	tx_aborted_errors;
     30 	__u32	tx_carrier_errors;
     31 	__u32	tx_fifo_errors;
     32 	__u32	tx_heartbeat_errors;
     33 	__u32	tx_window_errors;
     34 
     35 	/* for cslip etc */
     36 	__u32	rx_compressed;
     37 	__u32	tx_compressed;
     38 };
     39 
     40 /* The main device statistics structure */
     41 struct rtnl_link_stats64 {
     42 	__u64	rx_packets;		/* total packets received	*/
     43 	__u64	tx_packets;		/* total packets transmitted	*/
     44 	__u64	rx_bytes;		/* total bytes received 	*/
     45 	__u64	tx_bytes;		/* total bytes transmitted	*/
     46 	__u64	rx_errors;		/* bad packets received		*/
     47 	__u64	tx_errors;		/* packet transmit problems	*/
     48 	__u64	rx_dropped;		/* no space in linux buffers	*/
     49 	__u64	tx_dropped;		/* no space available in linux	*/
     50 	__u64	multicast;		/* multicast packets received	*/
     51 	__u64	collisions;
     52 
     53 	/* detailed rx_errors: */
     54 	__u64	rx_length_errors;
     55 	__u64	rx_over_errors;		/* receiver ring buff overflow	*/
     56 	__u64	rx_crc_errors;		/* recved pkt with crc error	*/
     57 	__u64	rx_frame_errors;	/* recv'd frame alignment error */
     58 	__u64	rx_fifo_errors;		/* recv'r fifo overrun		*/
     59 	__u64	rx_missed_errors;	/* receiver missed packet	*/
     60 
     61 	/* detailed tx_errors */
     62 	__u64	tx_aborted_errors;
     63 	__u64	tx_carrier_errors;
     64 	__u64	tx_fifo_errors;
     65 	__u64	tx_heartbeat_errors;
     66 	__u64	tx_window_errors;
     67 
     68 	/* for cslip etc */
     69 	__u64	rx_compressed;
     70 	__u64	tx_compressed;
     71 };
     72 
     73 /* The struct should be in sync with struct ifmap */
     74 struct rtnl_link_ifmap {
     75 	__u64	mem_start;
     76 	__u64	mem_end;
     77 	__u64	base_addr;
     78 	__u16	irq;
     79 	__u8	dma;
     80 	__u8	port;
     81 };
     82 
     83 enum {
     84 	IFLA_UNSPEC,
     85 	IFLA_ADDRESS,
     86 	IFLA_BROADCAST,
     87 	IFLA_IFNAME,
     88 	IFLA_MTU,
     89 	IFLA_LINK,
     90 	IFLA_QDISC,
     91 	IFLA_STATS,
     92 	IFLA_COST,
     93 #define IFLA_COST IFLA_COST
     94 	IFLA_PRIORITY,
     95 #define IFLA_PRIORITY IFLA_PRIORITY
     96 	IFLA_MASTER,
     97 #define IFLA_MASTER IFLA_MASTER
     98 	IFLA_WIRELESS,		/* Wireless Extension event - see wireless.h */
     99 #define IFLA_WIRELESS IFLA_WIRELESS
    100 	IFLA_PROTINFO,		/* Protocol specific information for a link */
    101 #define IFLA_PROTINFO IFLA_PROTINFO
    102 	IFLA_TXQLEN,
    103 #define IFLA_TXQLEN IFLA_TXQLEN
    104 	IFLA_MAP,
    105 #define IFLA_MAP IFLA_MAP
    106 	IFLA_WEIGHT,
    107 #define IFLA_WEIGHT IFLA_WEIGHT
    108 	IFLA_OPERSTATE,
    109 	IFLA_LINKMODE,
    110 	IFLA_LINKINFO,
    111 #define IFLA_LINKINFO IFLA_LINKINFO
    112 	IFLA_NET_NS_PID,
    113 	IFLA_IFALIAS,
    114 	IFLA_NUM_VF,		/* Number of VFs if device is SR-IOV PF */
    115 	IFLA_VFINFO_LIST,
    116 	IFLA_STATS64,
    117 	IFLA_VF_PORTS,
    118 	IFLA_PORT_SELF,
    119 	__IFLA_MAX
    120 };
    121 
    122 
    123 #define IFLA_MAX (__IFLA_MAX - 1)
    124 
    125 /* backwards compatibility for userspace */
    126 #ifndef __KERNEL__
    127 #define IFLA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg))))
    128 #define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg))
    129 #endif
    130 
    131 /* ifi_flags.
    132 
    133    IFF_* flags.
    134 
    135    The only change is:
    136    IFF_LOOPBACK, IFF_BROADCAST and IFF_POINTOPOINT are
    137    more not changeable by user. They describe link media
    138    characteristics and set by device driver.
    139 
    140    Comments:
    141    - Combination IFF_BROADCAST|IFF_POINTOPOINT is invalid
    142    - If neither of these three flags are set;
    143      the interface is NBMA.
    144 
    145    - IFF_MULTICAST does not mean anything special:
    146    multicasts can be used on all not-NBMA links.
    147    IFF_MULTICAST means that this media uses special encapsulation
    148    for multicast frames. Apparently, all IFF_POINTOPOINT and
    149    IFF_BROADCAST devices are able to use multicasts too.
    150  */
    151 
    152 /* IFLA_LINK.
    153    For usual devices it is equal ifi_index.
    154    If it is a "virtual interface" (f.e. tunnel), ifi_link
    155    can point to real physical interface (f.e. for bandwidth calculations),
    156    or maybe 0, what means, that real media is unknown (usual
    157    for IPIP tunnels, when route to endpoint is allowed to change)
    158  */
    159 
    160 /* Subtype attributes for IFLA_PROTINFO */
    161 enum {
    162 	IFLA_INET6_UNSPEC,
    163 	IFLA_INET6_FLAGS,	/* link flags			*/
    164 	IFLA_INET6_CONF,	/* sysctl parameters		*/
    165 	IFLA_INET6_STATS,	/* statistics			*/
    166 	IFLA_INET6_MCAST,	/* MC things. What of them?	*/
    167 	IFLA_INET6_CACHEINFO,	/* time values and max reasm size */
    168 	IFLA_INET6_ICMP6STATS,	/* statistics (icmpv6)		*/
    169 	__IFLA_INET6_MAX
    170 };
    171 
    172 #define IFLA_INET6_MAX	(__IFLA_INET6_MAX - 1)
    173 
    174 struct ifla_cacheinfo {
    175 	__u32	max_reasm_len;
    176 	__u32	tstamp;		/* ipv6InterfaceTable updated timestamp */
    177 	__u32	reachable_time;
    178 	__u32	retrans_time;
    179 };
    180 
    181 enum {
    182 	IFLA_INFO_UNSPEC,
    183 	IFLA_INFO_KIND,
    184 	IFLA_INFO_DATA,
    185 	IFLA_INFO_XSTATS,
    186 	__IFLA_INFO_MAX,
    187 };
    188 
    189 #define IFLA_INFO_MAX	(__IFLA_INFO_MAX - 1)
    190 
    191 /* VLAN section */
    192 
    193 enum {
    194 	IFLA_VLAN_UNSPEC,
    195 	IFLA_VLAN_ID,
    196 	IFLA_VLAN_FLAGS,
    197 	IFLA_VLAN_EGRESS_QOS,
    198 	IFLA_VLAN_INGRESS_QOS,
    199 	__IFLA_VLAN_MAX,
    200 };
    201 
    202 #define IFLA_VLAN_MAX	(__IFLA_VLAN_MAX - 1)
    203 
    204 struct ifla_vlan_flags {
    205 	__u32	flags;
    206 	__u32	mask;
    207 };
    208 
    209 enum {
    210 	IFLA_VLAN_QOS_UNSPEC,
    211 	IFLA_VLAN_QOS_MAPPING,
    212 	__IFLA_VLAN_QOS_MAX
    213 };
    214 
    215 #define IFLA_VLAN_QOS_MAX	(__IFLA_VLAN_QOS_MAX - 1)
    216 
    217 struct ifla_vlan_qos_mapping {
    218 	__u32 from;
    219 	__u32 to;
    220 };
    221 
    222 /* MACVLAN section */
    223 enum {
    224 	IFLA_MACVLAN_UNSPEC,
    225 	IFLA_MACVLAN_MODE,
    226 	__IFLA_MACVLAN_MAX,
    227 };
    228 
    229 #define IFLA_MACVLAN_MAX (__IFLA_MACVLAN_MAX - 1)
    230 
    231 enum macvlan_mode {
    232 	MACVLAN_MODE_PRIVATE = 1, /* don't talk to other macvlans */
    233 	MACVLAN_MODE_VEPA    = 2, /* talk to other ports through ext bridge */
    234 	MACVLAN_MODE_BRIDGE  = 4, /* talk to bridge ports directly */
    235 };
    236 
    237 /* SR-IOV virtual function management section */
    238 
    239 enum {
    240 	IFLA_VF_INFO_UNSPEC,
    241 	IFLA_VF_INFO,
    242 	__IFLA_VF_INFO_MAX,
    243 };
    244 
    245 #define IFLA_VF_INFO_MAX (__IFLA_VF_INFO_MAX - 1)
    246 
    247 enum {
    248 	IFLA_VF_UNSPEC,
    249 	IFLA_VF_MAC,		/* Hardware queue specific attributes */
    250 	IFLA_VF_VLAN,
    251 	IFLA_VF_TX_RATE,	/* TX Bandwidth Allocation */
    252 	__IFLA_VF_MAX,
    253 };
    254 
    255 #define IFLA_VF_MAX (__IFLA_VF_MAX - 1)
    256 
    257 struct ifla_vf_mac {
    258 	__u32 vf;
    259 	__u8 mac[32]; /* MAX_ADDR_LEN */
    260 };
    261 
    262 struct ifla_vf_vlan {
    263 	__u32 vf;
    264 	__u32 vlan; /* 0 - 4095, 0 disables VLAN filter */
    265 	__u32 qos;
    266 };
    267 
    268 struct ifla_vf_tx_rate {
    269 	__u32 vf;
    270 	__u32 rate; /* Max TX bandwidth in Mbps, 0 disables throttling */
    271 };
    272 
    273 struct ifla_vf_info {
    274 	__u32 vf;
    275 	__u8 mac[32];
    276 	__u32 vlan;
    277 	__u32 qos;
    278 	__u32 tx_rate;
    279 };
    280 
    281 /* VF ports management section
    282  *
    283  *	Nested layout of set/get msg is:
    284  *
    285  *		[IFLA_NUM_VF]
    286  *		[IFLA_VF_PORTS]
    287  *			[IFLA_VF_PORT]
    288  *				[IFLA_PORT_*], ...
    289  *			[IFLA_VF_PORT]
    290  *				[IFLA_PORT_*], ...
    291  *			...
    292  *		[IFLA_PORT_SELF]
    293  *			[IFLA_PORT_*], ...
    294  */
    295 
    296 enum {
    297 	IFLA_VF_PORT_UNSPEC,
    298 	IFLA_VF_PORT,			/* nest */
    299 	__IFLA_VF_PORT_MAX,
    300 };
    301 
    302 #define IFLA_VF_PORT_MAX (__IFLA_VF_PORT_MAX - 1)
    303 
    304 enum {
    305 	IFLA_PORT_UNSPEC,
    306 	IFLA_PORT_VF,			/* __u32 */
    307 	IFLA_PORT_PROFILE,		/* string */
    308 	IFLA_PORT_VSI_TYPE,		/* 802.1Qbg (pre-)standard VDP */
    309 	IFLA_PORT_INSTANCE_UUID,	/* binary UUID */
    310 	IFLA_PORT_HOST_UUID,		/* binary UUID */
    311 	IFLA_PORT_REQUEST,		/* __u8 */
    312 	IFLA_PORT_RESPONSE,		/* __u16, output only */
    313 	__IFLA_PORT_MAX,
    314 };
    315 
    316 #define IFLA_PORT_MAX (__IFLA_PORT_MAX - 1)
    317 
    318 #define PORT_PROFILE_MAX	40
    319 #define PORT_UUID_MAX		16
    320 #define PORT_SELF_VF		-1
    321 
    322 enum {
    323 	PORT_REQUEST_PREASSOCIATE = 0,
    324 	PORT_REQUEST_PREASSOCIATE_RR,
    325 	PORT_REQUEST_ASSOCIATE,
    326 	PORT_REQUEST_DISASSOCIATE,
    327 };
    328 
    329 enum {
    330 	PORT_VDP_RESPONSE_SUCCESS = 0,
    331 	PORT_VDP_RESPONSE_INVALID_FORMAT,
    332 	PORT_VDP_RESPONSE_INSUFFICIENT_RESOURCES,
    333 	PORT_VDP_RESPONSE_UNUSED_VTID,
    334 	PORT_VDP_RESPONSE_VTID_VIOLATION,
    335 	PORT_VDP_RESPONSE_VTID_VERSION_VIOALTION,
    336 	PORT_VDP_RESPONSE_OUT_OF_SYNC,
    337 	/* 0x08-0xFF reserved for future VDP use */
    338 	PORT_PROFILE_RESPONSE_SUCCESS = 0x100,
    339 	PORT_PROFILE_RESPONSE_INPROGRESS,
    340 	PORT_PROFILE_RESPONSE_INVALID,
    341 	PORT_PROFILE_RESPONSE_BADSTATE,
    342 	PORT_PROFILE_RESPONSE_INSUFFICIENT_RESOURCES,
    343 	PORT_PROFILE_RESPONSE_ERROR,
    344 };
    345 
    346 struct ifla_port_vsi {
    347 	__u8 vsi_mgr_id;
    348 	__u8 vsi_type_id[3];
    349 	__u8 vsi_type_version;
    350 	__u8 pad[3];
    351 };
    352 
    353 #endif /* _LINUX_IF_LINK_H */
    354