This commit was generated by cvs2svn to compensate for changes in r1650,
[iproute2.git] / include / linux / rtnetlink.h
1 #ifndef __LINUX_RTNETLINK_H
2 #define __LINUX_RTNETLINK_H
3
4 #include <linux/netlink.h>
5
6 /****
7  *              Routing/neighbour discovery messages.
8  ****/
9
10 /* Types of messages */
11
12 enum {
13         RTM_BASE        = 16,
14 #define RTM_BASE        RTM_BASE
15
16         RTM_NEWLINK     = 16,
17 #define RTM_NEWLINK     RTM_NEWLINK
18         RTM_DELLINK,
19 #define RTM_DELLINK     RTM_DELLINK
20         RTM_GETLINK,
21 #define RTM_GETLINK     RTM_GETLINK
22         RTM_SETLINK,
23 #define RTM_SETLINK     RTM_SETLINK
24
25         RTM_NEWADDR     = 20,
26 #define RTM_NEWADDR     RTM_NEWADDR
27         RTM_DELADDR,
28 #define RTM_DELADDR     RTM_DELADDR
29         RTM_GETADDR,
30 #define RTM_GETADDR     RTM_GETADDR
31
32         RTM_NEWROUTE    = 24,
33 #define RTM_NEWROUTE    RTM_NEWROUTE
34         RTM_DELROUTE,
35 #define RTM_DELROUTE    RTM_DELROUTE
36         RTM_GETROUTE,
37 #define RTM_GETROUTE    RTM_GETROUTE
38
39         RTM_NEWNEIGH    = 28,
40 #define RTM_NEWNEIGH    RTM_NEWNEIGH
41         RTM_DELNEIGH,
42 #define RTM_DELNEIGH    RTM_DELNEIGH
43         RTM_GETNEIGH,
44 #define RTM_GETNEIGH    RTM_GETNEIGH
45
46         RTM_NEWRULE     = 32,
47 #define RTM_NEWRULE     RTM_NEWRULE
48         RTM_DELRULE,
49 #define RTM_DELRULE     RTM_DELRULE
50         RTM_GETRULE,
51 #define RTM_GETRULE     RTM_GETRULE
52
53         RTM_NEWQDISC    = 36,
54 #define RTM_NEWQDISC    RTM_NEWQDISC
55         RTM_DELQDISC,
56 #define RTM_DELQDISC    RTM_DELQDISC
57         RTM_GETQDISC,
58 #define RTM_GETQDISC    RTM_GETQDISC
59
60         RTM_NEWTCLASS   = 40,
61 #define RTM_NEWTCLASS   RTM_NEWTCLASS
62         RTM_DELTCLASS,
63 #define RTM_DELTCLASS   RTM_DELTCLASS
64         RTM_GETTCLASS,
65 #define RTM_GETTCLASS   RTM_GETTCLASS
66
67         RTM_NEWTFILTER  = 44,
68 #define RTM_NEWTFILTER  RTM_NEWTFILTER
69         RTM_DELTFILTER,
70 #define RTM_DELTFILTER  RTM_DELTFILTER
71         RTM_GETTFILTER,
72 #define RTM_GETTFILTER  RTM_GETTFILTER
73
74         RTM_NEWACTION   = 48,
75 #define RTM_NEWACTION   RTM_NEWACTION
76         RTM_DELACTION,
77 #define RTM_DELACTION   RTM_DELACTION
78         RTM_GETACTION,
79 #define RTM_GETACTION   RTM_GETACTION
80
81         RTM_NEWPREFIX   = 52,
82 #define RTM_NEWPREFIX   RTM_NEWPREFIX
83         RTM_GETPREFIX   = 54,
84 #define RTM_GETPREFIX   RTM_GETPREFIX
85
86         RTM_GETMULTICAST = 58,
87 #define RTM_GETMULTICAST RTM_GETMULTICAST
88
89         RTM_GETANYCAST  = 62,
90 #define RTM_GETANYCAST  RTM_GETANYCAST
91
92         RTM_MAX,
93 #define RTM_MAX         RTM_MAX
94 };
95
96 /* 
97    Generic structure for encapsulation of optional route information.
98    It is reminiscent of sockaddr, but with sa_family replaced
99    with attribute type.
100  */
101
102 struct rtattr
103 {
104         unsigned short  rta_len;
105         unsigned short  rta_type;
106 };
107
108 /* Macros to handle rtattributes */
109
110 #define RTA_ALIGNTO     4
111 #define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) )
112 #define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \
113                          (rta)->rta_len >= sizeof(struct rtattr) && \
114                          (rta)->rta_len <= (len))
115 #define RTA_NEXT(rta,attrlen)   ((attrlen) -= RTA_ALIGN((rta)->rta_len), \
116                                  (struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len)))
117 #define RTA_LENGTH(len) (RTA_ALIGN(sizeof(struct rtattr)) + (len))
118 #define RTA_SPACE(len)  RTA_ALIGN(RTA_LENGTH(len))
119 #define RTA_DATA(rta)   ((void*)(((char*)(rta)) + RTA_LENGTH(0)))
120 #define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))
121
122
123
124
125 /******************************************************************************
126  *              Definitions used in routing table administration.
127  ****/
128
129 struct rtmsg
130 {
131         unsigned char           rtm_family;
132         unsigned char           rtm_dst_len;
133         unsigned char           rtm_src_len;
134         unsigned char           rtm_tos;
135
136         unsigned char           rtm_table;      /* Routing table id */
137         unsigned char           rtm_protocol;   /* Routing protocol; see below  */
138         unsigned char           rtm_scope;      /* See below */ 
139         unsigned char           rtm_type;       /* See below    */
140
141         unsigned                rtm_flags;
142 };
143
144 /* rtm_type */
145
146 enum
147 {
148         RTN_UNSPEC,
149         RTN_UNICAST,            /* Gateway or direct route      */
150         RTN_LOCAL,              /* Accept locally               */
151         RTN_BROADCAST,          /* Accept locally as broadcast,
152                                    send as broadcast */
153         RTN_ANYCAST,            /* Accept locally as broadcast,
154                                    but send as unicast */
155         RTN_MULTICAST,          /* Multicast route              */
156         RTN_BLACKHOLE,          /* Drop                         */
157         RTN_UNREACHABLE,        /* Destination is unreachable   */
158         RTN_PROHIBIT,           /* Administratively prohibited  */
159         RTN_THROW,              /* Not in this table            */
160         RTN_NAT,                /* Translate this address       */
161         RTN_XRESOLVE,           /* Use external resolver        */
162         __RTN_MAX
163 };
164
165 #define RTN_MAX (__RTN_MAX - 1)
166
167
168 /* rtm_protocol */
169
170 #define RTPROT_UNSPEC   0
171 #define RTPROT_REDIRECT 1       /* Route installed by ICMP redirects;
172                                    not used by current IPv4 */
173 #define RTPROT_KERNEL   2       /* Route installed by kernel            */
174 #define RTPROT_BOOT     3       /* Route installed during boot          */
175 #define RTPROT_STATIC   4       /* Route installed by administrator     */
176
177 /* Values of protocol >= RTPROT_STATIC are not interpreted by kernel;
178    they are just passed from user and back as is.
179    It will be used by hypothetical multiple routing daemons.
180    Note that protocol values should be standardized in order to
181    avoid conflicts.
182  */
183
184 #define RTPROT_GATED    8       /* Apparently, GateD */
185 #define RTPROT_RA       9       /* RDISC/ND router advertisements */
186 #define RTPROT_MRT      10      /* Merit MRT */
187 #define RTPROT_ZEBRA    11      /* Zebra */
188 #define RTPROT_BIRD     12      /* BIRD */
189 #define RTPROT_DNROUTED 13      /* DECnet routing daemon */
190 #define RTPROT_XORP     14      /* XORP */
191
192 /* rtm_scope
193
194    Really it is not scope, but sort of distance to the destination.
195    NOWHERE are reserved for not existing destinations, HOST is our
196    local addresses, LINK are destinations, located on directly attached
197    link and UNIVERSE is everywhere in the Universe.
198
199    Intermediate values are also possible f.e. interior routes
200    could be assigned a value between UNIVERSE and LINK.
201 */
202
203 enum rt_scope_t
204 {
205         RT_SCOPE_UNIVERSE=0,
206 /* User defined values  */
207         RT_SCOPE_SITE=200,
208         RT_SCOPE_LINK=253,
209         RT_SCOPE_HOST=254,
210         RT_SCOPE_NOWHERE=255
211 };
212
213 /* rtm_flags */
214
215 #define RTM_F_NOTIFY            0x100   /* Notify user of route change  */
216 #define RTM_F_CLONED            0x200   /* This route is cloned         */
217 #define RTM_F_EQUALIZE          0x400   /* Multipath equalizer: NI      */
218 #define RTM_F_PREFIX            0x800   /* Prefix addresses             */
219
220 /* Reserved table identifiers */
221
222 enum rt_class_t
223 {
224         RT_TABLE_UNSPEC=0,
225 /* User defined values */
226         RT_TABLE_DEFAULT=253,
227         RT_TABLE_MAIN=254,
228         RT_TABLE_LOCAL=255,
229         __RT_TABLE_MAX
230 };
231 #define RT_TABLE_MAX (__RT_TABLE_MAX - 1)
232
233
234
235 /* Routing message attributes */
236
237 enum rtattr_type_t
238 {
239         RTA_UNSPEC,
240         RTA_DST,
241         RTA_SRC,
242         RTA_IIF,
243         RTA_OIF,
244         RTA_GATEWAY,
245         RTA_PRIORITY,
246         RTA_PREFSRC,
247         RTA_METRICS,
248         RTA_MULTIPATH,
249         RTA_PROTOINFO,
250         RTA_FLOW,
251         RTA_CACHEINFO,
252         RTA_SESSION,
253         __RTA_MAX
254 };
255
256 #define RTA_MAX (__RTA_MAX - 1)
257
258 #define RTM_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct rtmsg))))
259 #define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg))
260
261 /* RTM_MULTIPATH --- array of struct rtnexthop.
262  *
263  * "struct rtnexthop" describes all necessary nexthop information,
264  * i.e. parameters of path to a destination via this nexthop.
265  *
266  * At the moment it is impossible to set different prefsrc, mtu, window
267  * and rtt for different paths from multipath.
268  */
269
270 struct rtnexthop
271 {
272         unsigned short          rtnh_len;
273         unsigned char           rtnh_flags;
274         unsigned char           rtnh_hops;
275         int                     rtnh_ifindex;
276 };
277
278 /* rtnh_flags */
279
280 #define RTNH_F_DEAD             1       /* Nexthop is dead (used by multipath)  */
281 #define RTNH_F_PERVASIVE        2       /* Do recursive gateway lookup  */
282 #define RTNH_F_ONLINK           4       /* Gateway is forced on link    */
283
284 /* Macros to handle hexthops */
285
286 #define RTNH_ALIGNTO    4
287 #define RTNH_ALIGN(len) ( ((len)+RTNH_ALIGNTO-1) & ~(RTNH_ALIGNTO-1) )
288 #define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && \
289                            ((int)(rtnh)->rtnh_len) <= (len))
290 #define RTNH_NEXT(rtnh) ((struct rtnexthop*)(((char*)(rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len)))
291 #define RTNH_LENGTH(len) (RTNH_ALIGN(sizeof(struct rtnexthop)) + (len))
292 #define RTNH_SPACE(len) RTNH_ALIGN(RTNH_LENGTH(len))
293 #define RTNH_DATA(rtnh)   ((struct rtattr*)(((char*)(rtnh)) + RTNH_LENGTH(0)))
294
295 /* RTM_CACHEINFO */
296
297 struct rta_cacheinfo
298 {
299         __u32   rta_clntref;
300         __u32   rta_lastuse;
301         __s32   rta_expires;
302         __u32   rta_error;
303         __u32   rta_used;
304
305 #define RTNETLINK_HAVE_PEERINFO 1
306         __u32   rta_id;
307         __u32   rta_ts;
308         __u32   rta_tsage;
309 };
310
311 /* RTM_METRICS --- array of struct rtattr with types of RTAX_* */
312
313 enum
314 {
315         RTAX_UNSPEC,
316 #define RTAX_UNSPEC RTAX_UNSPEC
317         RTAX_LOCK,
318 #define RTAX_LOCK RTAX_LOCK
319         RTAX_MTU,
320 #define RTAX_MTU RTAX_MTU
321         RTAX_WINDOW,
322 #define RTAX_WINDOW RTAX_WINDOW
323         RTAX_RTT,
324 #define RTAX_RTT RTAX_RTT
325         RTAX_RTTVAR,
326 #define RTAX_RTTVAR RTAX_RTTVAR
327         RTAX_SSTHRESH,
328 #define RTAX_SSTHRESH RTAX_SSTHRESH
329         RTAX_CWND,
330 #define RTAX_CWND RTAX_CWND
331         RTAX_ADVMSS,
332 #define RTAX_ADVMSS RTAX_ADVMSS
333         RTAX_REORDERING,
334 #define RTAX_REORDERING RTAX_REORDERING
335         RTAX_HOPLIMIT,
336 #define RTAX_HOPLIMIT RTAX_HOPLIMIT
337         RTAX_INITCWND,
338 #define RTAX_INITCWND RTAX_INITCWND
339         RTAX_FEATURES,
340 #define RTAX_FEATURES RTAX_FEATURES
341         __RTAX_MAX
342 };
343
344 #define RTAX_MAX (__RTAX_MAX - 1)
345
346 #define RTAX_FEATURE_ECN        0x00000001
347 #define RTAX_FEATURE_SACK       0x00000002
348 #define RTAX_FEATURE_TIMESTAMP  0x00000004
349
350 struct rta_session
351 {
352         __u8    proto;
353
354         union {
355                 struct {
356                         __u16   sport;
357                         __u16   dport;
358                 } ports;
359
360                 struct {
361                         __u8    type;
362                         __u8    code;
363                         __u16   ident;
364                 } icmpt;
365
366                 __u32           spi;
367         } u;
368 };
369
370
371 /*********************************************************
372  *              Interface address.
373  ****/
374
375 struct ifaddrmsg
376 {
377         unsigned char   ifa_family;
378         unsigned char   ifa_prefixlen;  /* The prefix length            */
379         unsigned char   ifa_flags;      /* Flags                        */
380         unsigned char   ifa_scope;      /* See above                    */
381         int             ifa_index;      /* Link index                   */
382 };
383
384 enum
385 {
386         IFA_UNSPEC,
387         IFA_ADDRESS,
388         IFA_LOCAL,
389         IFA_LABEL,
390         IFA_BROADCAST,
391         IFA_ANYCAST,
392         IFA_CACHEINFO,
393         IFA_MULTICAST,
394         __IFA_MAX
395 };
396
397 #define IFA_MAX (__IFA_MAX - 1)
398
399 /* ifa_flags */
400
401 #define IFA_F_SECONDARY         0x01
402 #define IFA_F_TEMPORARY         IFA_F_SECONDARY
403
404 #define IFA_F_DEPRECATED        0x20
405 #define IFA_F_TENTATIVE         0x40
406 #define IFA_F_PERMANENT         0x80
407
408 struct ifa_cacheinfo
409 {
410         __u32   ifa_prefered;
411         __u32   ifa_valid;
412         __u32   cstamp; /* created timestamp, hundredths of seconds */
413         __u32   tstamp; /* updated timestamp, hundredths of seconds */
414 };
415
416
417 #define IFA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifaddrmsg))))
418 #define IFA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifaddrmsg))
419
420 /*
421    Important comment:
422    IFA_ADDRESS is prefix address, rather than local interface address.
423    It makes no difference for normally configured broadcast interfaces,
424    but for point-to-point IFA_ADDRESS is DESTINATION address,
425    local address is supplied in IFA_LOCAL attribute.
426  */
427
428 /**************************************************************
429  *              Neighbour discovery.
430  ****/
431
432 struct ndmsg
433 {
434         unsigned char   ndm_family;
435         unsigned char   ndm_pad1;
436         unsigned short  ndm_pad2;
437         int             ndm_ifindex;    /* Link index                   */
438         __u16           ndm_state;
439         __u8            ndm_flags;
440         __u8            ndm_type;
441 };
442
443 enum
444 {
445         NDA_UNSPEC,
446         NDA_DST,
447         NDA_LLADDR,
448         NDA_CACHEINFO,
449         __NDA_MAX
450 };
451
452 #define NDA_MAX (__NDA_MAX - 1)
453
454 #define NDA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ndmsg))))
455 #define NDA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ndmsg))
456
457 /*
458  *      Neighbor Cache Entry Flags
459  */
460
461 #define NTF_PROXY       0x08    /* == ATF_PUBL */
462 #define NTF_ROUTER      0x80
463
464 /*
465  *      Neighbor Cache Entry States.
466  */
467
468 #define NUD_INCOMPLETE  0x01
469 #define NUD_REACHABLE   0x02
470 #define NUD_STALE       0x04
471 #define NUD_DELAY       0x08
472 #define NUD_PROBE       0x10
473 #define NUD_FAILED      0x20
474
475 /* Dummy states */
476 #define NUD_NOARP       0x40
477 #define NUD_PERMANENT   0x80
478 #define NUD_NONE        0x00
479
480
481 struct nda_cacheinfo
482 {
483         __u32           ndm_confirmed;
484         __u32           ndm_used;
485         __u32           ndm_updated;
486         __u32           ndm_refcnt;
487 };
488
489 /****
490  *              General form of address family dependent message.
491  ****/
492
493 struct rtgenmsg
494 {
495         unsigned char           rtgen_family;
496 };
497
498 /*****************************************************************
499  *              Link layer specific messages.
500  ****/
501
502 /* struct ifinfomsg
503  * passes link level specific information, not dependent
504  * on network protocol.
505  */
506
507 struct ifinfomsg
508 {
509         unsigned char   ifi_family;
510         unsigned char   __ifi_pad;
511         unsigned short  ifi_type;               /* ARPHRD_* */
512         int             ifi_index;              /* Link index   */
513         unsigned        ifi_flags;              /* IFF_* flags  */
514         unsigned        ifi_change;             /* IFF_* change mask */
515 };
516
517 /********************************************************************
518  *              prefix information 
519  ****/
520
521 struct prefixmsg
522 {
523         unsigned char   prefix_family;
524         int             prefix_ifindex;
525         unsigned char   prefix_type;
526         unsigned char   prefix_len;
527         unsigned char   prefix_flags;
528 };
529
530 enum 
531 {
532         PREFIX_UNSPEC,
533         PREFIX_ADDRESS,
534         PREFIX_CACHEINFO,
535         __PREFIX_MAX
536 };
537
538 #define PREFIX_MAX      (__PREFIX_MAX - 1)
539
540 struct prefix_cacheinfo
541 {
542         __u32   preferred_time;
543         __u32   valid_time;
544 };
545
546 /* The struct should be in sync with struct net_device_stats */
547 struct rtnl_link_stats
548 {
549         __u32   rx_packets;             /* total packets received       */
550         __u32   tx_packets;             /* total packets transmitted    */
551         __u32   rx_bytes;               /* total bytes received         */
552         __u32   tx_bytes;               /* total bytes transmitted      */
553         __u32   rx_errors;              /* bad packets received         */
554         __u32   tx_errors;              /* packet transmit problems     */
555         __u32   rx_dropped;             /* no space in linux buffers    */
556         __u32   tx_dropped;             /* no space available in linux  */
557         __u32   multicast;              /* multicast packets received   */
558         __u32   collisions;
559
560         /* detailed rx_errors: */
561         __u32   rx_length_errors;
562         __u32   rx_over_errors;         /* receiver ring buff overflow  */
563         __u32   rx_crc_errors;          /* recved pkt with crc error    */
564         __u32   rx_frame_errors;        /* recv'd frame alignment error */
565         __u32   rx_fifo_errors;         /* recv'r fifo overrun          */
566         __u32   rx_missed_errors;       /* receiver missed packet       */
567
568         /* detailed tx_errors */
569         __u32   tx_aborted_errors;
570         __u32   tx_carrier_errors;
571         __u32   tx_fifo_errors;
572         __u32   tx_heartbeat_errors;
573         __u32   tx_window_errors;
574         
575         /* for cslip etc */
576         __u32   rx_compressed;
577         __u32   tx_compressed;
578 };
579
580 /* The struct should be in sync with struct ifmap */
581 struct rtnl_link_ifmap
582 {
583         __u64   mem_start;
584         __u64   mem_end;
585         __u64   base_addr;
586         __u16   irq;
587         __u8    dma;
588         __u8    port;
589 };
590
591 enum
592 {
593         IFLA_UNSPEC,
594         IFLA_ADDRESS,
595         IFLA_BROADCAST,
596         IFLA_IFNAME,
597         IFLA_MTU,
598         IFLA_LINK,
599         IFLA_QDISC,
600         IFLA_STATS,
601         IFLA_COST,
602 #define IFLA_COST IFLA_COST
603         IFLA_PRIORITY,
604 #define IFLA_PRIORITY IFLA_PRIORITY
605         IFLA_MASTER,
606 #define IFLA_MASTER IFLA_MASTER
607         IFLA_WIRELESS,          /* Wireless Extension event - see wireless.h */
608 #define IFLA_WIRELESS IFLA_WIRELESS
609         IFLA_PROTINFO,          /* Protocol specific information for a link */
610 #define IFLA_PROTINFO IFLA_PROTINFO
611         IFLA_TXQLEN,
612 #define IFLA_TXQLEN IFLA_TXQLEN
613         IFLA_MAP,
614 #define IFLA_MAP IFLA_MAP
615         IFLA_WEIGHT,
616 #define IFLA_WEIGHT IFLA_WEIGHT
617         __IFLA_MAX
618 };
619
620
621 #define IFLA_MAX (__IFLA_MAX - 1)
622
623 #define IFLA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg))))
624 #define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg))
625
626 /* ifi_flags.
627
628    IFF_* flags.
629
630    The only change is:
631    IFF_LOOPBACK, IFF_BROADCAST and IFF_POINTOPOINT are
632    more not changeable by user. They describe link media
633    characteristics and set by device driver.
634
635    Comments:
636    - Combination IFF_BROADCAST|IFF_POINTOPOINT is invalid
637    - If neither of these three flags are set;
638      the interface is NBMA.
639
640    - IFF_MULTICAST does not mean anything special:
641    multicasts can be used on all not-NBMA links.
642    IFF_MULTICAST means that this media uses special encapsulation
643    for multicast frames. Apparently, all IFF_POINTOPOINT and
644    IFF_BROADCAST devices are able to use multicasts too.
645  */
646
647 /* IFLA_LINK.
648    For usual devices it is equal ifi_index.
649    If it is a "virtual interface" (f.e. tunnel), ifi_link
650    can point to real physical interface (f.e. for bandwidth calculations),
651    or maybe 0, what means, that real media is unknown (usual
652    for IPIP tunnels, when route to endpoint is allowed to change)
653  */
654
655 /* Subtype attributes for IFLA_PROTINFO */
656 enum
657 {
658         IFLA_INET6_UNSPEC,
659         IFLA_INET6_FLAGS,       /* link flags                   */
660         IFLA_INET6_CONF,        /* sysctl parameters            */
661         IFLA_INET6_STATS,       /* statistics                   */
662         IFLA_INET6_MCAST,       /* MC things. What of them?     */
663         IFLA_INET6_CACHEINFO,   /* time values and max reasm size */
664         __IFLA_INET6_MAX
665 };
666
667 #define IFLA_INET6_MAX  (__IFLA_INET6_MAX - 1)
668
669 struct ifla_cacheinfo
670 {
671         __u32   max_reasm_len;
672         __u32   tstamp;         /* ipv6InterfaceTable updated timestamp */
673         __u32   reachable_time;
674         __u32   retrans_time;
675 };
676
677 /*****************************************************************
678  *              Traffic control messages.
679  ****/
680
681 struct tcmsg
682 {
683         unsigned char   tcm_family;
684         unsigned char   tcm__pad1;
685         unsigned short  tcm__pad2;
686         int             tcm_ifindex;
687         __u32           tcm_handle;
688         __u32           tcm_parent;
689         __u32           tcm_info;
690 };
691
692 enum
693 {
694         TCA_UNSPEC,
695         TCA_KIND,
696         TCA_OPTIONS,
697         TCA_STATS,
698         TCA_XSTATS,
699         TCA_RATE,
700         TCA_FCNT,
701         TCA_STATS2,
702         TCA_ACT_STATS,
703         __TCA_MAX
704 };
705
706 #define TCA_MAX (__TCA_MAX - 1)
707
708 #define TCA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcmsg))))
709 #define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg))
710
711
712 /* RTnetlink multicast groups */
713
714 #define RTMGRP_LINK             1
715 #define RTMGRP_NOTIFY           2
716 #define RTMGRP_NEIGH            4
717 #define RTMGRP_TC               8
718
719 #define RTMGRP_IPV4_IFADDR      0x10
720 #define RTMGRP_IPV4_MROUTE      0x20
721 #define RTMGRP_IPV4_ROUTE       0x40
722
723 #define RTMGRP_IPV6_IFADDR      0x100
724 #define RTMGRP_IPV6_MROUTE      0x200
725 #define RTMGRP_IPV6_ROUTE       0x400
726 #define RTMGRP_IPV6_IFINFO      0x800
727
728 #define RTMGRP_DECnet_IFADDR    0x1000
729 #define RTMGRP_DECnet_ROUTE     0x4000
730
731 #define RTMGRP_IPV6_PREFIX      0x20000
732
733 /* TC action piece */
734 struct tcamsg
735 {
736         unsigned char   tca_family;
737         unsigned char   tca__pad1;
738         unsigned short  tca__pad2;
739 };
740 #define TA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg))))
741 #define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg))
742 #define TCA_ACT_TAB 1 /* attr type must be >=1 */       
743 #define TCAA_MAX 1
744
745 /* End of information exported to user level */
746
747
748
749 #endif  /* __LINUX_RTNETLINK_H */