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
11
12
13#define RTNL_FAMILY_IPMR 128
14#define RTNL_FAMILY_IP6MR 129
15#define RTNL_FAMILY_MAX 129
16
17
18
19
20
21
22
23enum {
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_NEWMDB = 84,
129#define RTM_NEWMDB RTM_NEWMDB
130 RTM_DELMDB = 85,
131#define RTM_DELMDB RTM_DELMDB
132 RTM_GETMDB = 86,
133#define RTM_GETMDB RTM_GETMDB
134
135 RTM_NEWNSID = 88,
136#define RTM_NEWNSID RTM_NEWNSID
137 RTM_DELNSID = 89,
138#define RTM_DELNSID RTM_DELNSID
139 RTM_GETNSID = 90,
140#define RTM_GETNSID RTM_GETNSID
141
142 RTM_NEWSTATS = 92,
143#define RTM_NEWSTATS RTM_NEWSTATS
144 RTM_GETSTATS = 94,
145#define RTM_GETSTATS RTM_GETSTATS
146
147 __RTM_MAX,
148#define RTM_MAX (((__RTM_MAX + 3) & ~3) - 1)
149};
150
151#define RTM_NR_MSGTYPES (RTM_MAX + 1 - RTM_BASE)
152#define RTM_NR_FAMILIES (RTM_NR_MSGTYPES >> 2)
153#define RTM_FAM(cmd) (((cmd) - RTM_BASE) >> 2)
154
155
156
157
158
159
160
161struct rtattr {
162 unsigned short rta_len;
163 unsigned short rta_type;
164};
165
166
167
168#define RTA_ALIGNTO 4U
169#define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) )
170#define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \
171 (rta)->rta_len >= sizeof(struct rtattr) && \
172 (rta)->rta_len <= (len))
173#define RTA_NEXT(rta,attrlen) ((attrlen) -= RTA_ALIGN((rta)->rta_len), \
174 (struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len)))
175#define RTA_LENGTH(len) (RTA_ALIGN(sizeof(struct rtattr)) + (len))
176#define RTA_SPACE(len) RTA_ALIGN(RTA_LENGTH(len))
177#define RTA_DATA(rta) ((void*)(((char*)(rta)) + RTA_LENGTH(0)))
178#define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))
179
180
181
182
183
184
185
186
187struct rtmsg {
188 unsigned char rtm_family;
189 unsigned char rtm_dst_len;
190 unsigned char rtm_src_len;
191 unsigned char rtm_tos;
192
193 unsigned char rtm_table;
194 unsigned char rtm_protocol;
195 unsigned char rtm_scope;
196 unsigned char rtm_type;
197
198 unsigned rtm_flags;
199};
200
201
202
203enum {
204 RTN_UNSPEC,
205 RTN_UNICAST,
206 RTN_LOCAL,
207 RTN_BROADCAST,
208
209 RTN_ANYCAST,
210
211 RTN_MULTICAST,
212 RTN_BLACKHOLE,
213 RTN_UNREACHABLE,
214 RTN_PROHIBIT,
215 RTN_THROW,
216 RTN_NAT,
217 RTN_XRESOLVE,
218 __RTN_MAX
219};
220
221#define RTN_MAX (__RTN_MAX - 1)
222
223
224
225
226#define RTPROT_UNSPEC 0
227#define RTPROT_REDIRECT 1
228
229#define RTPROT_KERNEL 2
230#define RTPROT_BOOT 3
231#define RTPROT_STATIC 4
232
233
234
235
236
237
238
239
240#define RTPROT_GATED 8
241#define RTPROT_RA 9
242#define RTPROT_MRT 10
243#define RTPROT_ZEBRA 11
244#define RTPROT_BIRD 12
245#define RTPROT_DNROUTED 13
246#define RTPROT_XORP 14
247#define RTPROT_NTK 15
248#define RTPROT_DHCP 16
249#define RTPROT_MROUTED 17
250#define RTPROT_BABEL 42
251
252
253
254
255
256
257
258
259
260
261
262
263enum rt_scope_t {
264 RT_SCOPE_UNIVERSE=0,
265
266 RT_SCOPE_SITE=200,
267 RT_SCOPE_LINK=253,
268 RT_SCOPE_HOST=254,
269 RT_SCOPE_NOWHERE=255
270};
271
272
273
274#define RTM_F_NOTIFY 0x100
275#define RTM_F_CLONED 0x200
276#define RTM_F_EQUALIZE 0x400
277#define RTM_F_PREFIX 0x800
278#define RTM_F_LOOKUP_TABLE 0x1000
279
280
281
282enum rt_class_t {
283 RT_TABLE_UNSPEC=0,
284
285 RT_TABLE_COMPAT=252,
286 RT_TABLE_DEFAULT=253,
287 RT_TABLE_MAIN=254,
288 RT_TABLE_LOCAL=255,
289 RT_TABLE_MAX=0xFFFFFFFF
290};
291
292
293
294
295enum rtattr_type_t {
296 RTA_UNSPEC,
297 RTA_DST,
298 RTA_SRC,
299 RTA_IIF,
300 RTA_OIF,
301 RTA_GATEWAY,
302 RTA_PRIORITY,
303 RTA_PREFSRC,
304 RTA_METRICS,
305 RTA_MULTIPATH,
306 RTA_PROTOINFO,
307 RTA_FLOW,
308 RTA_CACHEINFO,
309 RTA_SESSION,
310 RTA_MP_ALGO,
311 RTA_TABLE,
312 RTA_MARK,
313 RTA_MFC_STATS,
314 RTA_VIA,
315 RTA_NEWDST,
316 RTA_PREF,
317 RTA_ENCAP_TYPE,
318 RTA_ENCAP,
319 RTA_EXPIRES,
320 RTA_PAD,
321 RTA_UID,
322 __RTA_MAX
323};
324
325#define RTA_MAX (__RTA_MAX - 1)
326
327#define RTM_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct rtmsg))))
328#define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg))
329
330
331
332
333
334
335
336
337
338
339struct rtnexthop {
340 unsigned short rtnh_len;
341 unsigned char rtnh_flags;
342 unsigned char rtnh_hops;
343 int rtnh_ifindex;
344};
345
346
347
348#define RTNH_F_DEAD 1
349#define RTNH_F_PERVASIVE 2
350#define RTNH_F_ONLINK 4
351#define RTNH_F_OFFLOAD 8
352#define RTNH_F_LINKDOWN 16
353#define RTNH_F_UNRESOLVED 32
354
355#define RTNH_COMPARE_MASK (RTNH_F_DEAD | RTNH_F_LINKDOWN | RTNH_F_OFFLOAD)
356
357
358
359#define RTNH_ALIGNTO 4
360#define RTNH_ALIGN(len) ( ((len)+RTNH_ALIGNTO-1) & ~(RTNH_ALIGNTO-1) )
361#define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && \
362 ((int)(rtnh)->rtnh_len) <= (len))
363#define RTNH_NEXT(rtnh) ((struct rtnexthop*)(((char*)(rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len)))
364#define RTNH_LENGTH(len) (RTNH_ALIGN(sizeof(struct rtnexthop)) + (len))
365#define RTNH_SPACE(len) RTNH_ALIGN(RTNH_LENGTH(len))
366#define RTNH_DATA(rtnh) ((struct rtattr*)(((char*)(rtnh)) + RTNH_LENGTH(0)))
367
368
369struct rtvia {
370 __kernel_sa_family_t rtvia_family;
371 __u8 rtvia_addr[0];
372};
373
374
375
376struct rta_cacheinfo {
377 __u32 rta_clntref;
378 __u32 rta_lastuse;
379 __s32 rta_expires;
380 __u32 rta_error;
381 __u32 rta_used;
382
383#define RTNETLINK_HAVE_PEERINFO 1
384 __u32 rta_id;
385 __u32 rta_ts;
386 __u32 rta_tsage;
387};
388
389
390
391enum {
392 RTAX_UNSPEC,
393#define RTAX_UNSPEC RTAX_UNSPEC
394 RTAX_LOCK,
395#define RTAX_LOCK RTAX_LOCK
396 RTAX_MTU,
397#define RTAX_MTU RTAX_MTU
398 RTAX_WINDOW,
399#define RTAX_WINDOW RTAX_WINDOW
400 RTAX_RTT,
401#define RTAX_RTT RTAX_RTT
402 RTAX_RTTVAR,
403#define RTAX_RTTVAR RTAX_RTTVAR
404 RTAX_SSTHRESH,
405#define RTAX_SSTHRESH RTAX_SSTHRESH
406 RTAX_CWND,
407#define RTAX_CWND RTAX_CWND
408 RTAX_ADVMSS,
409#define RTAX_ADVMSS RTAX_ADVMSS
410 RTAX_REORDERING,
411#define RTAX_REORDERING RTAX_REORDERING
412 RTAX_HOPLIMIT,
413#define RTAX_HOPLIMIT RTAX_HOPLIMIT
414 RTAX_INITCWND,
415#define RTAX_INITCWND RTAX_INITCWND
416 RTAX_FEATURES,
417#define RTAX_FEATURES RTAX_FEATURES
418 RTAX_RTO_MIN,
419#define RTAX_RTO_MIN RTAX_RTO_MIN
420 RTAX_INITRWND,
421#define RTAX_INITRWND RTAX_INITRWND
422 RTAX_QUICKACK,
423#define RTAX_QUICKACK RTAX_QUICKACK
424 RTAX_CC_ALGO,
425#define RTAX_CC_ALGO RTAX_CC_ALGO
426 __RTAX_MAX
427};
428
429#define RTAX_MAX (__RTAX_MAX - 1)
430
431#define RTAX_FEATURE_ECN (1 << 0)
432#define RTAX_FEATURE_SACK (1 << 1)
433#define RTAX_FEATURE_TIMESTAMP (1 << 2)
434#define RTAX_FEATURE_ALLFRAG (1 << 3)
435
436#define RTAX_FEATURE_MASK (RTAX_FEATURE_ECN | RTAX_FEATURE_SACK | \
437 RTAX_FEATURE_TIMESTAMP | RTAX_FEATURE_ALLFRAG)
438
439struct rta_session {
440 __u8 proto;
441 __u8 pad1;
442 __u16 pad2;
443
444 union {
445 struct {
446 __u16 sport;
447 __u16 dport;
448 } ports;
449
450 struct {
451 __u8 type;
452 __u8 code;
453 __u16 ident;
454 } icmpt;
455
456 __u32 spi;
457 } u;
458};
459
460struct rta_mfc_stats {
461 __u64 mfcs_packets;
462 __u64 mfcs_bytes;
463 __u64 mfcs_wrong_if;
464};
465
466
467
468
469
470struct rtgenmsg {
471 unsigned char rtgen_family;
472};
473
474
475
476
477
478
479
480
481
482
483struct ifinfomsg {
484 unsigned char ifi_family;
485 unsigned char __ifi_pad;
486 unsigned short ifi_type;
487 int ifi_index;
488 unsigned ifi_flags;
489 unsigned ifi_change;
490};
491
492
493
494
495
496struct prefixmsg {
497 unsigned char prefix_family;
498 unsigned char prefix_pad1;
499 unsigned short prefix_pad2;
500 int prefix_ifindex;
501 unsigned char prefix_type;
502 unsigned char prefix_len;
503 unsigned char prefix_flags;
504 unsigned char prefix_pad3;
505};
506
507enum
508{
509 PREFIX_UNSPEC,
510 PREFIX_ADDRESS,
511 PREFIX_CACHEINFO,
512 __PREFIX_MAX
513};
514
515#define PREFIX_MAX (__PREFIX_MAX - 1)
516
517struct prefix_cacheinfo {
518 __u32 preferred_time;
519 __u32 valid_time;
520};
521
522
523
524
525
526
527struct tcmsg {
528 unsigned char tcm_family;
529 unsigned char tcm__pad1;
530 unsigned short tcm__pad2;
531 int tcm_ifindex;
532 __u32 tcm_handle;
533 __u32 tcm_parent;
534 __u32 tcm_info;
535};
536
537enum {
538 TCA_UNSPEC,
539 TCA_KIND,
540 TCA_OPTIONS,
541 TCA_STATS,
542 TCA_XSTATS,
543 TCA_RATE,
544 TCA_FCNT,
545 TCA_STATS2,
546 TCA_STAB,
547 TCA_PAD,
548 __TCA_MAX
549};
550
551#define TCA_MAX (__TCA_MAX - 1)
552
553#define TCA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcmsg))))
554#define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg))
555
556
557
558
559
560struct nduseroptmsg {
561 unsigned char nduseropt_family;
562 unsigned char nduseropt_pad1;
563 unsigned short nduseropt_opts_len;
564 int nduseropt_ifindex;
565 __u8 nduseropt_icmp_type;
566 __u8 nduseropt_icmp_code;
567 unsigned short nduseropt_pad2;
568 unsigned int nduseropt_pad3;
569
570};
571
572enum {
573 NDUSEROPT_UNSPEC,
574 NDUSEROPT_SRCADDR,
575 __NDUSEROPT_MAX
576};
577
578#define NDUSEROPT_MAX (__NDUSEROPT_MAX - 1)
579
580#ifndef __KERNEL__
581
582#define RTMGRP_LINK 1
583#define RTMGRP_NOTIFY 2
584#define RTMGRP_NEIGH 4
585#define RTMGRP_TC 8
586
587#define RTMGRP_IPV4_IFADDR 0x10
588#define RTMGRP_IPV4_MROUTE 0x20
589#define RTMGRP_IPV4_ROUTE 0x40
590#define RTMGRP_IPV4_RULE 0x80
591
592#define RTMGRP_IPV6_IFADDR 0x100
593#define RTMGRP_IPV6_MROUTE 0x200
594#define RTMGRP_IPV6_ROUTE 0x400
595#define RTMGRP_IPV6_IFINFO 0x800
596
597#define RTMGRP_DECnet_IFADDR 0x1000
598#define RTMGRP_DECnet_ROUTE 0x4000
599
600#define RTMGRP_IPV6_PREFIX 0x20000
601#endif
602
603
604enum rtnetlink_groups {
605 RTNLGRP_NONE,
606#define RTNLGRP_NONE RTNLGRP_NONE
607 RTNLGRP_LINK,
608#define RTNLGRP_LINK RTNLGRP_LINK
609 RTNLGRP_NOTIFY,
610#define RTNLGRP_NOTIFY RTNLGRP_NOTIFY
611 RTNLGRP_NEIGH,
612#define RTNLGRP_NEIGH RTNLGRP_NEIGH
613 RTNLGRP_TC,
614#define RTNLGRP_TC RTNLGRP_TC
615 RTNLGRP_IPV4_IFADDR,
616#define RTNLGRP_IPV4_IFADDR RTNLGRP_IPV4_IFADDR
617 RTNLGRP_IPV4_MROUTE,
618#define RTNLGRP_IPV4_MROUTE RTNLGRP_IPV4_MROUTE
619 RTNLGRP_IPV4_ROUTE,
620#define RTNLGRP_IPV4_ROUTE RTNLGRP_IPV4_ROUTE
621 RTNLGRP_IPV4_RULE,
622#define RTNLGRP_IPV4_RULE RTNLGRP_IPV4_RULE
623 RTNLGRP_IPV6_IFADDR,
624#define RTNLGRP_IPV6_IFADDR RTNLGRP_IPV6_IFADDR
625 RTNLGRP_IPV6_MROUTE,
626#define RTNLGRP_IPV6_MROUTE RTNLGRP_IPV6_MROUTE
627 RTNLGRP_IPV6_ROUTE,
628#define RTNLGRP_IPV6_ROUTE RTNLGRP_IPV6_ROUTE
629 RTNLGRP_IPV6_IFINFO,
630#define RTNLGRP_IPV6_IFINFO RTNLGRP_IPV6_IFINFO
631 RTNLGRP_DECnet_IFADDR,
632#define RTNLGRP_DECnet_IFADDR RTNLGRP_DECnet_IFADDR
633 RTNLGRP_NOP2,
634 RTNLGRP_DECnet_ROUTE,
635#define RTNLGRP_DECnet_ROUTE RTNLGRP_DECnet_ROUTE
636 RTNLGRP_DECnet_RULE,
637#define RTNLGRP_DECnet_RULE RTNLGRP_DECnet_RULE
638 RTNLGRP_NOP4,
639 RTNLGRP_IPV6_PREFIX,
640#define RTNLGRP_IPV6_PREFIX RTNLGRP_IPV6_PREFIX
641 RTNLGRP_IPV6_RULE,
642#define RTNLGRP_IPV6_RULE RTNLGRP_IPV6_RULE
643 RTNLGRP_ND_USEROPT,
644#define RTNLGRP_ND_USEROPT RTNLGRP_ND_USEROPT
645 RTNLGRP_PHONET_IFADDR,
646#define RTNLGRP_PHONET_IFADDR RTNLGRP_PHONET_IFADDR
647 RTNLGRP_PHONET_ROUTE,
648#define RTNLGRP_PHONET_ROUTE RTNLGRP_PHONET_ROUTE
649 RTNLGRP_DCB,
650#define RTNLGRP_DCB RTNLGRP_DCB
651 RTNLGRP_IPV4_NETCONF,
652#define RTNLGRP_IPV4_NETCONF RTNLGRP_IPV4_NETCONF
653 RTNLGRP_IPV6_NETCONF,
654#define RTNLGRP_IPV6_NETCONF RTNLGRP_IPV6_NETCONF
655 RTNLGRP_MDB,
656#define RTNLGRP_MDB RTNLGRP_MDB
657 RTNLGRP_MPLS_ROUTE,
658#define RTNLGRP_MPLS_ROUTE RTNLGRP_MPLS_ROUTE
659 RTNLGRP_NSID,
660#define RTNLGRP_NSID RTNLGRP_NSID
661 RTNLGRP_MPLS_NETCONF,
662#define RTNLGRP_MPLS_NETCONF RTNLGRP_MPLS_NETCONF
663 __RTNLGRP_MAX
664};
665#define RTNLGRP_MAX (__RTNLGRP_MAX - 1)
666
667
668struct tcamsg {
669 unsigned char tca_family;
670 unsigned char tca__pad1;
671 unsigned short tca__pad2;
672};
673#define TA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg))))
674#define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg))
675#define TCA_ACT_TAB 1
676#define TCAA_MAX 1
677
678
679#define RTEXT_FILTER_VF (1 << 0)
680#define RTEXT_FILTER_BRVLAN (1 << 1)
681#define RTEXT_FILTER_BRVLAN_COMPRESSED (1 << 2)
682#define RTEXT_FILTER_SKIP_STATS (1 << 3)
683
684
685
686
687
688#endif
689