1*53ee8cc1Swenshuai.xi #ifndef _LINUX_IF_LINK_H 2*53ee8cc1Swenshuai.xi #define _LINUX_IF_LINK_H 3*53ee8cc1Swenshuai.xi 4*53ee8cc1Swenshuai.xi #include <linux/netlink.h> 5*53ee8cc1Swenshuai.xi 6*53ee8cc1Swenshuai.xi /* The struct should be in sync with struct net_device_stats */ 7*53ee8cc1Swenshuai.xi struct rtnl_link_stats 8*53ee8cc1Swenshuai.xi { 9*53ee8cc1Swenshuai.xi __u32 rx_packets; /* total packets received */ 10*53ee8cc1Swenshuai.xi __u32 tx_packets; /* total packets transmitted */ 11*53ee8cc1Swenshuai.xi __u32 rx_bytes; /* total bytes received */ 12*53ee8cc1Swenshuai.xi __u32 tx_bytes; /* total bytes transmitted */ 13*53ee8cc1Swenshuai.xi __u32 rx_errors; /* bad packets received */ 14*53ee8cc1Swenshuai.xi __u32 tx_errors; /* packet transmit problems */ 15*53ee8cc1Swenshuai.xi __u32 rx_dropped; /* no space in linux buffers */ 16*53ee8cc1Swenshuai.xi __u32 tx_dropped; /* no space available in linux */ 17*53ee8cc1Swenshuai.xi __u32 multicast; /* multicast packets received */ 18*53ee8cc1Swenshuai.xi __u32 collisions; 19*53ee8cc1Swenshuai.xi 20*53ee8cc1Swenshuai.xi /* detailed rx_errors: */ 21*53ee8cc1Swenshuai.xi __u32 rx_length_errors; 22*53ee8cc1Swenshuai.xi __u32 rx_over_errors; /* receiver ring buff overflow */ 23*53ee8cc1Swenshuai.xi __u32 rx_crc_errors; /* recved pkt with crc error */ 24*53ee8cc1Swenshuai.xi __u32 rx_frame_errors; /* recv'd frame alignment error */ 25*53ee8cc1Swenshuai.xi __u32 rx_fifo_errors; /* recv'r fifo overrun */ 26*53ee8cc1Swenshuai.xi __u32 rx_missed_errors; /* receiver missed packet */ 27*53ee8cc1Swenshuai.xi 28*53ee8cc1Swenshuai.xi /* detailed tx_errors */ 29*53ee8cc1Swenshuai.xi __u32 tx_aborted_errors; 30*53ee8cc1Swenshuai.xi __u32 tx_carrier_errors; 31*53ee8cc1Swenshuai.xi __u32 tx_fifo_errors; 32*53ee8cc1Swenshuai.xi __u32 tx_heartbeat_errors; 33*53ee8cc1Swenshuai.xi __u32 tx_window_errors; 34*53ee8cc1Swenshuai.xi 35*53ee8cc1Swenshuai.xi /* for cslip etc */ 36*53ee8cc1Swenshuai.xi __u32 rx_compressed; 37*53ee8cc1Swenshuai.xi __u32 tx_compressed; 38*53ee8cc1Swenshuai.xi }; 39*53ee8cc1Swenshuai.xi 40*53ee8cc1Swenshuai.xi /* The struct should be in sync with struct ifmap */ 41*53ee8cc1Swenshuai.xi struct rtnl_link_ifmap 42*53ee8cc1Swenshuai.xi { 43*53ee8cc1Swenshuai.xi __u64 mem_start; 44*53ee8cc1Swenshuai.xi __u64 mem_end; 45*53ee8cc1Swenshuai.xi __u64 base_addr; 46*53ee8cc1Swenshuai.xi __u16 irq; 47*53ee8cc1Swenshuai.xi __u8 dma; 48*53ee8cc1Swenshuai.xi __u8 port; 49*53ee8cc1Swenshuai.xi }; 50*53ee8cc1Swenshuai.xi 51*53ee8cc1Swenshuai.xi enum 52*53ee8cc1Swenshuai.xi { 53*53ee8cc1Swenshuai.xi IFLA_UNSPEC, 54*53ee8cc1Swenshuai.xi IFLA_ADDRESS, 55*53ee8cc1Swenshuai.xi IFLA_BROADCAST, 56*53ee8cc1Swenshuai.xi IFLA_IFNAME, 57*53ee8cc1Swenshuai.xi IFLA_MTU, 58*53ee8cc1Swenshuai.xi IFLA_LINK, 59*53ee8cc1Swenshuai.xi IFLA_QDISC, 60*53ee8cc1Swenshuai.xi IFLA_STATS, 61*53ee8cc1Swenshuai.xi IFLA_COST, 62*53ee8cc1Swenshuai.xi #define IFLA_COST IFLA_COST 63*53ee8cc1Swenshuai.xi IFLA_PRIORITY, 64*53ee8cc1Swenshuai.xi #define IFLA_PRIORITY IFLA_PRIORITY 65*53ee8cc1Swenshuai.xi IFLA_MASTER, 66*53ee8cc1Swenshuai.xi #define IFLA_MASTER IFLA_MASTER 67*53ee8cc1Swenshuai.xi IFLA_WIRELESS, /* Wireless Extension event - see wireless.h */ 68*53ee8cc1Swenshuai.xi #define IFLA_WIRELESS IFLA_WIRELESS 69*53ee8cc1Swenshuai.xi IFLA_PROTINFO, /* Protocol specific information for a link */ 70*53ee8cc1Swenshuai.xi #define IFLA_PROTINFO IFLA_PROTINFO 71*53ee8cc1Swenshuai.xi IFLA_TXQLEN, 72*53ee8cc1Swenshuai.xi #define IFLA_TXQLEN IFLA_TXQLEN 73*53ee8cc1Swenshuai.xi IFLA_MAP, 74*53ee8cc1Swenshuai.xi #define IFLA_MAP IFLA_MAP 75*53ee8cc1Swenshuai.xi IFLA_WEIGHT, 76*53ee8cc1Swenshuai.xi #define IFLA_WEIGHT IFLA_WEIGHT 77*53ee8cc1Swenshuai.xi IFLA_OPERSTATE, 78*53ee8cc1Swenshuai.xi IFLA_LINKMODE, 79*53ee8cc1Swenshuai.xi IFLA_LINKINFO, 80*53ee8cc1Swenshuai.xi #define IFLA_LINKINFO IFLA_LINKINFO 81*53ee8cc1Swenshuai.xi IFLA_NET_NS_PID, 82*53ee8cc1Swenshuai.xi __IFLA_MAX 83*53ee8cc1Swenshuai.xi }; 84*53ee8cc1Swenshuai.xi 85*53ee8cc1Swenshuai.xi 86*53ee8cc1Swenshuai.xi #define IFLA_MAX (__IFLA_MAX - 1) 87*53ee8cc1Swenshuai.xi 88*53ee8cc1Swenshuai.xi /* backwards compatibility for userspace */ 89*53ee8cc1Swenshuai.xi #define IFLA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg)))) 90*53ee8cc1Swenshuai.xi #define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg)) 91*53ee8cc1Swenshuai.xi 92*53ee8cc1Swenshuai.xi /* ifi_flags. 93*53ee8cc1Swenshuai.xi 94*53ee8cc1Swenshuai.xi IFF_* flags. 95*53ee8cc1Swenshuai.xi 96*53ee8cc1Swenshuai.xi The only change is: 97*53ee8cc1Swenshuai.xi IFF_LOOPBACK, IFF_BROADCAST and IFF_POINTOPOINT are 98*53ee8cc1Swenshuai.xi more not changeable by user. They describe link media 99*53ee8cc1Swenshuai.xi characteristics and set by device driver. 100*53ee8cc1Swenshuai.xi 101*53ee8cc1Swenshuai.xi Comments: 102*53ee8cc1Swenshuai.xi - Combination IFF_BROADCAST|IFF_POINTOPOINT is invalid 103*53ee8cc1Swenshuai.xi - If neither of these three flags are set; 104*53ee8cc1Swenshuai.xi the interface is NBMA. 105*53ee8cc1Swenshuai.xi 106*53ee8cc1Swenshuai.xi - IFF_MULTICAST does not mean anything special: 107*53ee8cc1Swenshuai.xi multicasts can be used on all not-NBMA links. 108*53ee8cc1Swenshuai.xi IFF_MULTICAST means that this media uses special encapsulation 109*53ee8cc1Swenshuai.xi for multicast frames. Apparently, all IFF_POINTOPOINT and 110*53ee8cc1Swenshuai.xi IFF_BROADCAST devices are able to use multicasts too. 111*53ee8cc1Swenshuai.xi */ 112*53ee8cc1Swenshuai.xi 113*53ee8cc1Swenshuai.xi /* IFLA_LINK. 114*53ee8cc1Swenshuai.xi For usual devices it is equal ifi_index. 115*53ee8cc1Swenshuai.xi If it is a "virtual interface" (f.e. tunnel), ifi_link 116*53ee8cc1Swenshuai.xi can point to real physical interface (f.e. for bandwidth calculations), 117*53ee8cc1Swenshuai.xi or maybe 0, what means, that real media is unknown (usual 118*53ee8cc1Swenshuai.xi for IPIP tunnels, when route to endpoint is allowed to change) 119*53ee8cc1Swenshuai.xi */ 120*53ee8cc1Swenshuai.xi 121*53ee8cc1Swenshuai.xi /* Subtype attributes for IFLA_PROTINFO */ 122*53ee8cc1Swenshuai.xi enum 123*53ee8cc1Swenshuai.xi { 124*53ee8cc1Swenshuai.xi IFLA_INET6_UNSPEC, 125*53ee8cc1Swenshuai.xi IFLA_INET6_FLAGS, /* link flags */ 126*53ee8cc1Swenshuai.xi IFLA_INET6_CONF, /* sysctl parameters */ 127*53ee8cc1Swenshuai.xi IFLA_INET6_STATS, /* statistics */ 128*53ee8cc1Swenshuai.xi IFLA_INET6_MCAST, /* MC things. What of them? */ 129*53ee8cc1Swenshuai.xi IFLA_INET6_CACHEINFO, /* time values and max reasm size */ 130*53ee8cc1Swenshuai.xi IFLA_INET6_ICMP6STATS, /* statistics (icmpv6) */ 131*53ee8cc1Swenshuai.xi __IFLA_INET6_MAX 132*53ee8cc1Swenshuai.xi }; 133*53ee8cc1Swenshuai.xi 134*53ee8cc1Swenshuai.xi #define IFLA_INET6_MAX (__IFLA_INET6_MAX - 1) 135*53ee8cc1Swenshuai.xi 136*53ee8cc1Swenshuai.xi struct ifla_cacheinfo 137*53ee8cc1Swenshuai.xi { 138*53ee8cc1Swenshuai.xi __u32 max_reasm_len; 139*53ee8cc1Swenshuai.xi __u32 tstamp; /* ipv6InterfaceTable updated timestamp */ 140*53ee8cc1Swenshuai.xi __u32 reachable_time; 141*53ee8cc1Swenshuai.xi __u32 retrans_time; 142*53ee8cc1Swenshuai.xi }; 143*53ee8cc1Swenshuai.xi 144*53ee8cc1Swenshuai.xi enum 145*53ee8cc1Swenshuai.xi { 146*53ee8cc1Swenshuai.xi IFLA_INFO_UNSPEC, 147*53ee8cc1Swenshuai.xi IFLA_INFO_KIND, 148*53ee8cc1Swenshuai.xi IFLA_INFO_DATA, 149*53ee8cc1Swenshuai.xi IFLA_INFO_XSTATS, 150*53ee8cc1Swenshuai.xi __IFLA_INFO_MAX, 151*53ee8cc1Swenshuai.xi }; 152*53ee8cc1Swenshuai.xi 153*53ee8cc1Swenshuai.xi #define IFLA_INFO_MAX (__IFLA_INFO_MAX - 1) 154*53ee8cc1Swenshuai.xi 155*53ee8cc1Swenshuai.xi /* VLAN section */ 156*53ee8cc1Swenshuai.xi 157*53ee8cc1Swenshuai.xi enum 158*53ee8cc1Swenshuai.xi { 159*53ee8cc1Swenshuai.xi IFLA_VLAN_UNSPEC, 160*53ee8cc1Swenshuai.xi IFLA_VLAN_ID, 161*53ee8cc1Swenshuai.xi IFLA_VLAN_FLAGS, 162*53ee8cc1Swenshuai.xi IFLA_VLAN_EGRESS_QOS, 163*53ee8cc1Swenshuai.xi IFLA_VLAN_INGRESS_QOS, 164*53ee8cc1Swenshuai.xi __IFLA_VLAN_MAX, 165*53ee8cc1Swenshuai.xi }; 166*53ee8cc1Swenshuai.xi 167*53ee8cc1Swenshuai.xi #define IFLA_VLAN_MAX (__IFLA_VLAN_MAX - 1) 168*53ee8cc1Swenshuai.xi 169*53ee8cc1Swenshuai.xi struct ifla_vlan_flags { 170*53ee8cc1Swenshuai.xi __u32 flags; 171*53ee8cc1Swenshuai.xi __u32 mask; 172*53ee8cc1Swenshuai.xi }; 173*53ee8cc1Swenshuai.xi 174*53ee8cc1Swenshuai.xi enum 175*53ee8cc1Swenshuai.xi { 176*53ee8cc1Swenshuai.xi IFLA_VLAN_QOS_UNSPEC, 177*53ee8cc1Swenshuai.xi IFLA_VLAN_QOS_MAPPING, 178*53ee8cc1Swenshuai.xi __IFLA_VLAN_QOS_MAX 179*53ee8cc1Swenshuai.xi }; 180*53ee8cc1Swenshuai.xi 181*53ee8cc1Swenshuai.xi #define IFLA_VLAN_QOS_MAX (__IFLA_VLAN_QOS_MAX - 1) 182*53ee8cc1Swenshuai.xi 183*53ee8cc1Swenshuai.xi struct ifla_vlan_qos_mapping 184*53ee8cc1Swenshuai.xi { 185*53ee8cc1Swenshuai.xi __u32 from; 186*53ee8cc1Swenshuai.xi __u32 to; 187*53ee8cc1Swenshuai.xi }; 188*53ee8cc1Swenshuai.xi 189*53ee8cc1Swenshuai.xi #endif /* _LINUX_IF_LINK_H */ 190