hc
2024-03-25 edb30157bad0c0001c32b854271ace01d3b9a16a
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/* Copyright (C) 1997-2021 Free Software Foundation, Inc.
   This file is part of the GNU C Library.
 
   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.
 
   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, see
   <https://www.gnu.org/licenses/>.  */
 
/* Based on the 4.4BSD and Linux version of this file.  */
 
#ifndef _NET_ROUTE_H
#define _NET_ROUTE_H    1
 
#include <features.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <bits/wordsize.h>
 
 
/* This structure gets passed by the SIOCADDRT and SIOCDELRT calls. */
struct rtentry
  {
    unsigned long int rt_pad1;
    struct sockaddr rt_dst;        /* Target address.  */
    struct sockaddr rt_gateway;        /* Gateway addr (RTF_GATEWAY).  */
    struct sockaddr rt_genmask;        /* Target network mask (IP).  */
    unsigned short int rt_flags;
    short int rt_pad2;
    unsigned long int rt_pad3;
    unsigned char rt_tos;
    unsigned char rt_class;
#if __WORDSIZE == 64
    short int rt_pad4[3];
#else
    short int rt_pad4;
#endif
    short int rt_metric;        /* +1 for binary compatibility!  */
    char *rt_dev;            /* Forcing the device at add.  */
    unsigned long int rt_mtu;        /* Per route MTU/Window.  */
    unsigned long int rt_window;    /* Window clamping.  */
    unsigned short int rt_irtt;        /* Initial RTT.  */
  };
/* Compatibility hack.  */
#define rt_mss    rt_mtu
 
 
struct in6_rtmsg
  {
    struct in6_addr rtmsg_dst;
    struct in6_addr rtmsg_src;
    struct in6_addr rtmsg_gateway;
    uint32_t rtmsg_type;
    uint16_t rtmsg_dst_len;
    uint16_t rtmsg_src_len;
    uint32_t rtmsg_metric;
    unsigned long int rtmsg_info;
    uint32_t rtmsg_flags;
    int rtmsg_ifindex;
  };
 
 
#define    RTF_UP        0x0001        /* Route usable.  */
#define    RTF_GATEWAY    0x0002        /* Destination is a gateway.  */
 
#define    RTF_HOST    0x0004        /* Host entry (net otherwise).  */
#define RTF_REINSTATE    0x0008        /* Reinstate route after timeout.  */
#define    RTF_DYNAMIC    0x0010        /* Created dyn. (by redirect).  */
#define    RTF_MODIFIED    0x0020        /* Modified dyn. (by redirect).  */
#define RTF_MTU        0x0040        /* Specific MTU for this route.  */
#define RTF_MSS        RTF_MTU        /* Compatibility.  */
#define RTF_WINDOW    0x0080        /* Per route window clamping.  */
#define RTF_IRTT    0x0100        /* Initial round trip time.  */
#define RTF_REJECT    0x0200        /* Reject route.  */
#define    RTF_STATIC    0x0400        /* Manually injected route.  */
#define    RTF_XRESOLVE    0x0800        /* External resolver.  */
#define RTF_NOFORWARD   0x1000        /* Forwarding inhibited.  */
#define RTF_THROW    0x2000        /* Go to next class.  */
#define RTF_NOPMTUDISC  0x4000        /* Do not send packets with DF.  */
 
/* for IPv6 */
#define RTF_DEFAULT    0x00010000    /* default - learned via ND    */
#define RTF_ALLONLINK    0x00020000    /* fallback, no routers on link    */
#define RTF_ADDRCONF    0x00040000    /* addrconf route - RA        */
 
#define RTF_LINKRT    0x00100000    /* link specific - device match    */
#define RTF_NONEXTHOP    0x00200000    /* route with no nexthop    */
 
#define RTF_CACHE    0x01000000    /* cache entry            */
#define RTF_FLOW    0x02000000    /* flow significant route    */
#define RTF_POLICY    0x04000000    /* policy route            */
 
#define RTCF_VALVE    0x00200000
#define RTCF_MASQ    0x00400000
#define RTCF_NAT    0x00800000
#define RTCF_DOREDIRECT 0x01000000
#define RTCF_LOG    0x02000000
#define RTCF_DIRECTSRC    0x04000000
 
#define RTF_LOCAL    0x80000000
#define RTF_INTERFACE    0x40000000
#define RTF_MULTICAST    0x20000000
#define RTF_BROADCAST    0x10000000
#define RTF_NAT        0x08000000
 
#define RTF_ADDRCLASSMASK    0xF8000000
#define RT_ADDRCLASS(flags)    ((uint32_t) flags >> 23)
 
#define RT_TOS(tos)        ((tos) & IPTOS_TOS_MASK)
 
#define RT_LOCALADDR(flags)    ((flags & RTF_ADDRCLASSMASK) \
                == (RTF_LOCAL|RTF_INTERFACE))
 
#define RT_CLASS_UNSPEC        0
#define RT_CLASS_DEFAULT    253
 
#define RT_CLASS_MAIN        254
#define RT_CLASS_LOCAL        255
#define RT_CLASS_MAX        255
 
 
#define RTMSG_ACK        NLMSG_ACK
#define RTMSG_OVERRUN        NLMSG_OVERRUN
 
#define RTMSG_NEWDEVICE        0x11
#define RTMSG_DELDEVICE        0x12
#define RTMSG_NEWROUTE        0x21
#define RTMSG_DELROUTE        0x22
#define RTMSG_NEWRULE        0x31
#define RTMSG_DELRULE        0x32
#define RTMSG_CONTROL        0x40
 
#define RTMSG_AR_FAILED        0x51    /* Address Resolution failed.  */
 
#endif /* net/route.h */