ipmr/ip6mr: advertise mfc stats via rtnetlink
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / include / uapi / linux / rtnetlink.h
1 #ifndef _UAPI__LINUX_RTNETLINK_H
2 #define _UAPI__LINUX_RTNETLINK_H
3
4 #include <linux/types.h>
5 #include <linux/netlink.h>
6 #include <linux/if_link.h>
7 #include <linux/if_addr.h>
8 #include <linux/neighbour.h>
9
10 /* rtnetlink families. Values up to 127 are reserved for real address
11 * families, values above 128 may be used arbitrarily.
12 */
13 #define RTNL_FAMILY_IPMR 128
14 #define RTNL_FAMILY_IP6MR 129
15 #define RTNL_FAMILY_MAX 129
16
17 /****
18 * Routing/neighbour discovery messages.
19 ****/
20
21 /* Types of messages */
22
23 enum {
24 RTM_BASE = 16,
25 #define RTM_BASE RTM_BASE
26
27 RTM_NEWLINK = 16,
28 #define RTM_NEWLINK RTM_NEWLINK
29 RTM_DELLINK,
30 #define RTM_DELLINK RTM_DELLINK
31 RTM_GETLINK,
32 #define RTM_GETLINK RTM_GETLINK
33 RTM_SETLINK,
34 #define RTM_SETLINK RTM_SETLINK
35
36 RTM_NEWADDR = 20,
37 #define RTM_NEWADDR RTM_NEWADDR
38 RTM_DELADDR,
39 #define RTM_DELADDR RTM_DELADDR
40 RTM_GETADDR,
41 #define RTM_GETADDR RTM_GETADDR
42
43 RTM_NEWROUTE = 24,
44 #define RTM_NEWROUTE RTM_NEWROUTE
45 RTM_DELROUTE,
46 #define RTM_DELROUTE RTM_DELROUTE
47 RTM_GETROUTE,
48 #define RTM_GETROUTE RTM_GETROUTE
49
50 RTM_NEWNEIGH = 28,
51 #define RTM_NEWNEIGH RTM_NEWNEIGH
52 RTM_DELNEIGH,
53 #define RTM_DELNEIGH RTM_DELNEIGH
54 RTM_GETNEIGH,
55 #define RTM_GETNEIGH RTM_GETNEIGH
56
57 RTM_NEWRULE = 32,
58 #define RTM_NEWRULE RTM_NEWRULE
59 RTM_DELRULE,
60 #define RTM_DELRULE RTM_DELRULE
61 RTM_GETRULE,
62 #define RTM_GETRULE RTM_GETRULE
63
64 RTM_NEWQDISC = 36,
65 #define RTM_NEWQDISC RTM_NEWQDISC
66 RTM_DELQDISC,
67 #define RTM_DELQDISC RTM_DELQDISC
68 RTM_GETQDISC,
69 #define RTM_GETQDISC RTM_GETQDISC
70
71 RTM_NEWTCLASS = 40,
72 #define RTM_NEWTCLASS RTM_NEWTCLASS
73 RTM_DELTCLASS,
74 #define RTM_DELTCLASS RTM_DELTCLASS
75 RTM_GETTCLASS,
76 #define RTM_GETTCLASS RTM_GETTCLASS
77
78 RTM_NEWTFILTER = 44,
79 #define RTM_NEWTFILTER RTM_NEWTFILTER
80 RTM_DELTFILTER,
81 #define RTM_DELTFILTER RTM_DELTFILTER
82 RTM_GETTFILTER,
83 #define RTM_GETTFILTER RTM_GETTFILTER
84
85 RTM_NEWACTION = 48,
86 #define RTM_NEWACTION RTM_NEWACTION
87 RTM_DELACTION,
88 #define RTM_DELACTION RTM_DELACTION
89 RTM_GETACTION,
90 #define RTM_GETACTION RTM_GETACTION
91
92 RTM_NEWPREFIX = 52,
93 #define RTM_NEWPREFIX RTM_NEWPREFIX
94
95 RTM_GETMULTICAST = 58,
96 #define RTM_GETMULTICAST RTM_GETMULTICAST
97
98 RTM_GETANYCAST = 62,
99 #define RTM_GETANYCAST RTM_GETANYCAST
100
101 RTM_NEWNEIGHTBL = 64,
102 #define RTM_NEWNEIGHTBL RTM_NEWNEIGHTBL
103 RTM_GETNEIGHTBL = 66,
104 #define RTM_GETNEIGHTBL RTM_GETNEIGHTBL
105 RTM_SETNEIGHTBL,
106 #define RTM_SETNEIGHTBL RTM_SETNEIGHTBL
107
108 RTM_NEWNDUSEROPT = 68,
109 #define RTM_NEWNDUSEROPT RTM_NEWNDUSEROPT
110
111 RTM_NEWADDRLABEL = 72,
112 #define RTM_NEWADDRLABEL RTM_NEWADDRLABEL
113 RTM_DELADDRLABEL,
114 #define RTM_DELADDRLABEL RTM_DELADDRLABEL
115 RTM_GETADDRLABEL,
116 #define RTM_GETADDRLABEL RTM_GETADDRLABEL
117
118 RTM_GETDCB = 78,
119 #define RTM_GETDCB RTM_GETDCB
120 RTM_SETDCB,
121 #define RTM_SETDCB RTM_SETDCB
122
123 RTM_NEWNETCONF = 80,
124 #define RTM_NEWNETCONF RTM_NEWNETCONF
125 RTM_GETNETCONF = 82,
126 #define RTM_GETNETCONF RTM_GETNETCONF
127
128 __RTM_MAX,
129 #define RTM_MAX (((__RTM_MAX + 3) & ~3) - 1)
130 };
131
132 #define RTM_NR_MSGTYPES (RTM_MAX + 1 - RTM_BASE)
133 #define RTM_NR_FAMILIES (RTM_NR_MSGTYPES >> 2)
134 #define RTM_FAM(cmd) (((cmd) - RTM_BASE) >> 2)
135
136 /*
137 Generic structure for encapsulation of optional route information.
138 It is reminiscent of sockaddr, but with sa_family replaced
139 with attribute type.
140 */
141
142 struct rtattr {
143 unsigned short rta_len;
144 unsigned short rta_type;
145 };
146
147 /* Macros to handle rtattributes */
148
149 #define RTA_ALIGNTO 4
150 #define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) )
151 #define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \
152 (rta)->rta_len >= sizeof(struct rtattr) && \
153 (rta)->rta_len <= (len))
154 #define RTA_NEXT(rta,attrlen) ((attrlen) -= RTA_ALIGN((rta)->rta_len), \
155 (struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len)))
156 #define RTA_LENGTH(len) (RTA_ALIGN(sizeof(struct rtattr)) + (len))
157 #define RTA_SPACE(len) RTA_ALIGN(RTA_LENGTH(len))
158 #define RTA_DATA(rta) ((void*)(((char*)(rta)) + RTA_LENGTH(0)))
159 #define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))
160
161
162
163
164 /******************************************************************************
165 * Definitions used in routing table administration.
166 ****/
167
168 struct rtmsg {
169 unsigned char rtm_family;
170 unsigned char rtm_dst_len;
171 unsigned char rtm_src_len;
172 unsigned char rtm_tos;
173
174 unsigned char rtm_table; /* Routing table id */
175 unsigned char rtm_protocol; /* Routing protocol; see below */
176 unsigned char rtm_scope; /* See below */
177 unsigned char rtm_type; /* See below */
178
179 unsigned rtm_flags;
180 };
181
182 /* rtm_type */
183
184 enum {
185 RTN_UNSPEC,
186 RTN_UNICAST, /* Gateway or direct route */
187 RTN_LOCAL, /* Accept locally */
188 RTN_BROADCAST, /* Accept locally as broadcast,
189 send as broadcast */
190 RTN_ANYCAST, /* Accept locally as broadcast,
191 but send as unicast */
192 RTN_MULTICAST, /* Multicast route */
193 RTN_BLACKHOLE, /* Drop */
194 RTN_UNREACHABLE, /* Destination is unreachable */
195 RTN_PROHIBIT, /* Administratively prohibited */
196 RTN_THROW, /* Not in this table */
197 RTN_NAT, /* Translate this address */
198 RTN_XRESOLVE, /* Use external resolver */
199 __RTN_MAX
200 };
201
202 #define RTN_MAX (__RTN_MAX - 1)
203
204
205 /* rtm_protocol */
206
207 #define RTPROT_UNSPEC 0
208 #define RTPROT_REDIRECT 1 /* Route installed by ICMP redirects;
209 not used by current IPv4 */
210 #define RTPROT_KERNEL 2 /* Route installed by kernel */
211 #define RTPROT_BOOT 3 /* Route installed during boot */
212 #define RTPROT_STATIC 4 /* Route installed by administrator */
213
214 /* Values of protocol >= RTPROT_STATIC are not interpreted by kernel;
215 they are just passed from user and back as is.
216 It will be used by hypothetical multiple routing daemons.
217 Note that protocol values should be standardized in order to
218 avoid conflicts.
219 */
220
221 #define RTPROT_GATED 8 /* Apparently, GateD */
222 #define RTPROT_RA 9 /* RDISC/ND router advertisements */
223 #define RTPROT_MRT 10 /* Merit MRT */
224 #define RTPROT_ZEBRA 11 /* Zebra */
225 #define RTPROT_BIRD 12 /* BIRD */
226 #define RTPROT_DNROUTED 13 /* DECnet routing daemon */
227 #define RTPROT_XORP 14 /* XORP */
228 #define RTPROT_NTK 15 /* Netsukuku */
229 #define RTPROT_DHCP 16 /* DHCP client */
230
231 /* rtm_scope
232
233 Really it is not scope, but sort of distance to the destination.
234 NOWHERE are reserved for not existing destinations, HOST is our
235 local addresses, LINK are destinations, located on directly attached
236 link and UNIVERSE is everywhere in the Universe.
237
238 Intermediate values are also possible f.e. interior routes
239 could be assigned a value between UNIVERSE and LINK.
240 */
241
242 enum rt_scope_t {
243 RT_SCOPE_UNIVERSE=0,
244 /* User defined values */
245 RT_SCOPE_SITE=200,
246 RT_SCOPE_LINK=253,
247 RT_SCOPE_HOST=254,
248 RT_SCOPE_NOWHERE=255
249 };
250
251 /* rtm_flags */
252
253 #define RTM_F_NOTIFY 0x100 /* Notify user of route change */
254 #define RTM_F_CLONED 0x200 /* This route is cloned */
255 #define RTM_F_EQUALIZE 0x400 /* Multipath equalizer: NI */
256 #define RTM_F_PREFIX 0x800 /* Prefix addresses */
257
258 /* Reserved table identifiers */
259
260 enum rt_class_t {
261 RT_TABLE_UNSPEC=0,
262 /* User defined values */
263 RT_TABLE_COMPAT=252,
264 RT_TABLE_DEFAULT=253,
265 RT_TABLE_MAIN=254,
266 RT_TABLE_LOCAL=255,
267 RT_TABLE_MAX=0xFFFFFFFF
268 };
269
270
271 /* Routing message attributes */
272
273 enum rtattr_type_t {
274 RTA_UNSPEC,
275 RTA_DST,
276 RTA_SRC,
277 RTA_IIF,
278 RTA_OIF,
279 RTA_GATEWAY,
280 RTA_PRIORITY,
281 RTA_PREFSRC,
282 RTA_METRICS,
283 RTA_MULTIPATH,
284 RTA_PROTOINFO, /* no longer used */
285 RTA_FLOW,
286 RTA_CACHEINFO,
287 RTA_SESSION, /* no longer used */
288 RTA_MP_ALGO, /* no longer used */
289 RTA_TABLE,
290 RTA_MARK,
291 RTA_MFC_STATS,
292 __RTA_MAX
293 };
294
295 #define RTA_MAX (__RTA_MAX - 1)
296
297 #define RTM_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct rtmsg))))
298 #define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg))
299
300 /* RTM_MULTIPATH --- array of struct rtnexthop.
301 *
302 * "struct rtnexthop" describes all necessary nexthop information,
303 * i.e. parameters of path to a destination via this nexthop.
304 *
305 * At the moment it is impossible to set different prefsrc, mtu, window
306 * and rtt for different paths from multipath.
307 */
308
309 struct rtnexthop {
310 unsigned short rtnh_len;
311 unsigned char rtnh_flags;
312 unsigned char rtnh_hops;
313 int rtnh_ifindex;
314 };
315
316 /* rtnh_flags */
317
318 #define RTNH_F_DEAD 1 /* Nexthop is dead (used by multipath) */
319 #define RTNH_F_PERVASIVE 2 /* Do recursive gateway lookup */
320 #define RTNH_F_ONLINK 4 /* Gateway is forced on link */
321
322 /* Macros to handle hexthops */
323
324 #define RTNH_ALIGNTO 4
325 #define RTNH_ALIGN(len) ( ((len)+RTNH_ALIGNTO-1) & ~(RTNH_ALIGNTO-1) )
326 #define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && \
327 ((int)(rtnh)->rtnh_len) <= (len))
328 #define RTNH_NEXT(rtnh) ((struct rtnexthop*)(((char*)(rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len)))
329 #define RTNH_LENGTH(len) (RTNH_ALIGN(sizeof(struct rtnexthop)) + (len))
330 #define RTNH_SPACE(len) RTNH_ALIGN(RTNH_LENGTH(len))
331 #define RTNH_DATA(rtnh) ((struct rtattr*)(((char*)(rtnh)) + RTNH_LENGTH(0)))
332
333 /* RTM_CACHEINFO */
334
335 struct rta_cacheinfo {
336 __u32 rta_clntref;
337 __u32 rta_lastuse;
338 __s32 rta_expires;
339 __u32 rta_error;
340 __u32 rta_used;
341
342 #define RTNETLINK_HAVE_PEERINFO 1
343 __u32 rta_id;
344 __u32 rta_ts;
345 __u32 rta_tsage;
346 };
347
348 /* RTM_METRICS --- array of struct rtattr with types of RTAX_* */
349
350 enum {
351 RTAX_UNSPEC,
352 #define RTAX_UNSPEC RTAX_UNSPEC
353 RTAX_LOCK,
354 #define RTAX_LOCK RTAX_LOCK
355 RTAX_MTU,
356 #define RTAX_MTU RTAX_MTU
357 RTAX_WINDOW,
358 #define RTAX_WINDOW RTAX_WINDOW
359 RTAX_RTT,
360 #define RTAX_RTT RTAX_RTT
361 RTAX_RTTVAR,
362 #define RTAX_RTTVAR RTAX_RTTVAR
363 RTAX_SSTHRESH,
364 #define RTAX_SSTHRESH RTAX_SSTHRESH
365 RTAX_CWND,
366 #define RTAX_CWND RTAX_CWND
367 RTAX_ADVMSS,
368 #define RTAX_ADVMSS RTAX_ADVMSS
369 RTAX_REORDERING,
370 #define RTAX_REORDERING RTAX_REORDERING
371 RTAX_HOPLIMIT,
372 #define RTAX_HOPLIMIT RTAX_HOPLIMIT
373 RTAX_INITCWND,
374 #define RTAX_INITCWND RTAX_INITCWND
375 RTAX_FEATURES,
376 #define RTAX_FEATURES RTAX_FEATURES
377 RTAX_RTO_MIN,
378 #define RTAX_RTO_MIN RTAX_RTO_MIN
379 RTAX_INITRWND,
380 #define RTAX_INITRWND RTAX_INITRWND
381 __RTAX_MAX
382 };
383
384 #define RTAX_MAX (__RTAX_MAX - 1)
385
386 #define RTAX_FEATURE_ECN 0x00000001
387 #define RTAX_FEATURE_SACK 0x00000002
388 #define RTAX_FEATURE_TIMESTAMP 0x00000004
389 #define RTAX_FEATURE_ALLFRAG 0x00000008
390
391 struct rta_session {
392 __u8 proto;
393 __u8 pad1;
394 __u16 pad2;
395
396 union {
397 struct {
398 __u16 sport;
399 __u16 dport;
400 } ports;
401
402 struct {
403 __u8 type;
404 __u8 code;
405 __u16 ident;
406 } icmpt;
407
408 __u32 spi;
409 } u;
410 };
411
412 struct rta_mfc_stats {
413 __u64 mfcs_packets;
414 __u64 mfcs_bytes;
415 __u64 mfcs_wrong_if;
416 };
417
418 /****
419 * General form of address family dependent message.
420 ****/
421
422 struct rtgenmsg {
423 unsigned char rtgen_family;
424 };
425
426 /*****************************************************************
427 * Link layer specific messages.
428 ****/
429
430 /* struct ifinfomsg
431 * passes link level specific information, not dependent
432 * on network protocol.
433 */
434
435 struct ifinfomsg {
436 unsigned char ifi_family;
437 unsigned char __ifi_pad;
438 unsigned short ifi_type; /* ARPHRD_* */
439 int ifi_index; /* Link index */
440 unsigned ifi_flags; /* IFF_* flags */
441 unsigned ifi_change; /* IFF_* change mask */
442 };
443
444 /********************************************************************
445 * prefix information
446 ****/
447
448 struct prefixmsg {
449 unsigned char prefix_family;
450 unsigned char prefix_pad1;
451 unsigned short prefix_pad2;
452 int prefix_ifindex;
453 unsigned char prefix_type;
454 unsigned char prefix_len;
455 unsigned char prefix_flags;
456 unsigned char prefix_pad3;
457 };
458
459 enum
460 {
461 PREFIX_UNSPEC,
462 PREFIX_ADDRESS,
463 PREFIX_CACHEINFO,
464 __PREFIX_MAX
465 };
466
467 #define PREFIX_MAX (__PREFIX_MAX - 1)
468
469 struct prefix_cacheinfo {
470 __u32 preferred_time;
471 __u32 valid_time;
472 };
473
474
475 /*****************************************************************
476 * Traffic control messages.
477 ****/
478
479 struct tcmsg {
480 unsigned char tcm_family;
481 unsigned char tcm__pad1;
482 unsigned short tcm__pad2;
483 int tcm_ifindex;
484 __u32 tcm_handle;
485 __u32 tcm_parent;
486 __u32 tcm_info;
487 };
488
489 enum {
490 TCA_UNSPEC,
491 TCA_KIND,
492 TCA_OPTIONS,
493 TCA_STATS,
494 TCA_XSTATS,
495 TCA_RATE,
496 TCA_FCNT,
497 TCA_STATS2,
498 TCA_STAB,
499 __TCA_MAX
500 };
501
502 #define TCA_MAX (__TCA_MAX - 1)
503
504 #define TCA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcmsg))))
505 #define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg))
506
507 /********************************************************************
508 * Neighbor Discovery userland options
509 ****/
510
511 struct nduseroptmsg {
512 unsigned char nduseropt_family;
513 unsigned char nduseropt_pad1;
514 unsigned short nduseropt_opts_len; /* Total length of options */
515 int nduseropt_ifindex;
516 __u8 nduseropt_icmp_type;
517 __u8 nduseropt_icmp_code;
518 unsigned short nduseropt_pad2;
519 unsigned int nduseropt_pad3;
520 /* Followed by one or more ND options */
521 };
522
523 enum {
524 NDUSEROPT_UNSPEC,
525 NDUSEROPT_SRCADDR,
526 __NDUSEROPT_MAX
527 };
528
529 #define NDUSEROPT_MAX (__NDUSEROPT_MAX - 1)
530
531 #ifndef __KERNEL__
532 /* RTnetlink multicast groups - backwards compatibility for userspace */
533 #define RTMGRP_LINK 1
534 #define RTMGRP_NOTIFY 2
535 #define RTMGRP_NEIGH 4
536 #define RTMGRP_TC 8
537
538 #define RTMGRP_IPV4_IFADDR 0x10
539 #define RTMGRP_IPV4_MROUTE 0x20
540 #define RTMGRP_IPV4_ROUTE 0x40
541 #define RTMGRP_IPV4_RULE 0x80
542
543 #define RTMGRP_IPV6_IFADDR 0x100
544 #define RTMGRP_IPV6_MROUTE 0x200
545 #define RTMGRP_IPV6_ROUTE 0x400
546 #define RTMGRP_IPV6_IFINFO 0x800
547
548 #define RTMGRP_DECnet_IFADDR 0x1000
549 #define RTMGRP_DECnet_ROUTE 0x4000
550
551 #define RTMGRP_IPV6_PREFIX 0x20000
552 #endif
553
554 /* RTnetlink multicast groups */
555 enum rtnetlink_groups {
556 RTNLGRP_NONE,
557 #define RTNLGRP_NONE RTNLGRP_NONE
558 RTNLGRP_LINK,
559 #define RTNLGRP_LINK RTNLGRP_LINK
560 RTNLGRP_NOTIFY,
561 #define RTNLGRP_NOTIFY RTNLGRP_NOTIFY
562 RTNLGRP_NEIGH,
563 #define RTNLGRP_NEIGH RTNLGRP_NEIGH
564 RTNLGRP_TC,
565 #define RTNLGRP_TC RTNLGRP_TC
566 RTNLGRP_IPV4_IFADDR,
567 #define RTNLGRP_IPV4_IFADDR RTNLGRP_IPV4_IFADDR
568 RTNLGRP_IPV4_MROUTE,
569 #define RTNLGRP_IPV4_MROUTE RTNLGRP_IPV4_MROUTE
570 RTNLGRP_IPV4_ROUTE,
571 #define RTNLGRP_IPV4_ROUTE RTNLGRP_IPV4_ROUTE
572 RTNLGRP_IPV4_RULE,
573 #define RTNLGRP_IPV4_RULE RTNLGRP_IPV4_RULE
574 RTNLGRP_IPV6_IFADDR,
575 #define RTNLGRP_IPV6_IFADDR RTNLGRP_IPV6_IFADDR
576 RTNLGRP_IPV6_MROUTE,
577 #define RTNLGRP_IPV6_MROUTE RTNLGRP_IPV6_MROUTE
578 RTNLGRP_IPV6_ROUTE,
579 #define RTNLGRP_IPV6_ROUTE RTNLGRP_IPV6_ROUTE
580 RTNLGRP_IPV6_IFINFO,
581 #define RTNLGRP_IPV6_IFINFO RTNLGRP_IPV6_IFINFO
582 RTNLGRP_DECnet_IFADDR,
583 #define RTNLGRP_DECnet_IFADDR RTNLGRP_DECnet_IFADDR
584 RTNLGRP_NOP2,
585 RTNLGRP_DECnet_ROUTE,
586 #define RTNLGRP_DECnet_ROUTE RTNLGRP_DECnet_ROUTE
587 RTNLGRP_DECnet_RULE,
588 #define RTNLGRP_DECnet_RULE RTNLGRP_DECnet_RULE
589 RTNLGRP_NOP4,
590 RTNLGRP_IPV6_PREFIX,
591 #define RTNLGRP_IPV6_PREFIX RTNLGRP_IPV6_PREFIX
592 RTNLGRP_IPV6_RULE,
593 #define RTNLGRP_IPV6_RULE RTNLGRP_IPV6_RULE
594 RTNLGRP_ND_USEROPT,
595 #define RTNLGRP_ND_USEROPT RTNLGRP_ND_USEROPT
596 RTNLGRP_PHONET_IFADDR,
597 #define RTNLGRP_PHONET_IFADDR RTNLGRP_PHONET_IFADDR
598 RTNLGRP_PHONET_ROUTE,
599 #define RTNLGRP_PHONET_ROUTE RTNLGRP_PHONET_ROUTE
600 RTNLGRP_DCB,
601 #define RTNLGRP_DCB RTNLGRP_DCB
602 RTNLGRP_IPV4_NETCONF,
603 #define RTNLGRP_IPV4_NETCONF RTNLGRP_IPV4_NETCONF
604 RTNLGRP_IPV6_NETCONF,
605 #define RTNLGRP_IPV6_NETCONF RTNLGRP_IPV6_NETCONF
606 __RTNLGRP_MAX
607 };
608 #define RTNLGRP_MAX (__RTNLGRP_MAX - 1)
609
610 /* TC action piece */
611 struct tcamsg {
612 unsigned char tca_family;
613 unsigned char tca__pad1;
614 unsigned short tca__pad2;
615 };
616 #define TA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg))))
617 #define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg))
618 #define TCA_ACT_TAB 1 /* attr type must be >=1 */
619 #define TCAA_MAX 1
620
621 /* New extended info filters for IFLA_EXT_MASK */
622 #define RTEXT_FILTER_VF (1 << 0)
623
624 /* End of information exported to user level */
625
626
627
628 #endif /* _UAPI__LINUX_RTNETLINK_H */