Dr Andrew Scott G7VAV

My photo
 
April 2024
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 1 2 3 4 5
6 7 8 9 10 11 12


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


for client 3.141.152.173
© Andrew Scott 2006 - 2024,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/