1
2
3
4
5
6
7#ifndef UDHCP_D6_COMMON_H
8#define UDHCP_D6_COMMON_H 1
9
10#include <netinet/ip6.h>
11
12PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
13
14
15
16
17
18#define D6_MSG_SOLICIT 1
19#define D6_MSG_ADVERTISE 2
20#define D6_MSG_REQUEST 3
21#define D6_MSG_CONFIRM 4
22#define D6_MSG_RENEW 5
23#define D6_MSG_REBIND 6
24#define D6_MSG_REPLY 7
25#define D6_MSG_RELEASE 8
26#define D6_MSG_DECLINE 9
27#define D6_MSG_RECONFIGURE 10
28#define D6_MSG_INFORMATION_REQUEST 11
29#define D6_MSG_RELAY_FORW 12
30#define D6_MSG_RELAY_REPL 13
31
32struct d6_packet {
33 union {
34 uint8_t d6_msg_type;
35 uint32_t d6_xid32;
36 } d6_u;
37 uint8_t d6_options[576 - sizeof(struct iphdr) - sizeof(struct udphdr) - 4
38 + CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS];
39} PACKED;
40#define d6_msg_type d6_u.d6_msg_type
41#define d6_xid32 d6_u.d6_xid32
42
43struct ip6_udp_d6_packet {
44 struct ip6_hdr ip6;
45 struct udphdr udp;
46 struct d6_packet data;
47} PACKED;
48
49struct udp_d6_packet {
50 struct udphdr udp;
51 struct d6_packet data;
52} PACKED;
53
54
55
56struct d6_option {
57 uint8_t code_hi;
58 uint8_t code;
59 uint8_t len_hi;
60 uint8_t len;
61 uint8_t data[1];
62} PACKED;
63
64#define D6_OPT_CLIENTID 1
65#define D6_OPT_SERVERID 2
66#define D6_OPT_IA_NA 3
67#define D6_OPT_IA_TA 4
68#define D6_OPT_IAADDR 5
69#define D6_OPT_ORO 6
70#define D6_OPT_PREFERENCE 7
71#define D6_OPT_ELAPSED_TIME 8
72#define D6_OPT_RELAY_MSG 9
73#define D6_OPT_AUTH 11
74#define D6_OPT_UNICAST 12
75#define D6_OPT_STATUS_CODE 13
76#define D6_OPT_RAPID_COMMIT 14
77#define D6_OPT_USER_CLASS 15
78#define D6_OPT_VENDOR_CLASS 16
79#define D6_OPT_VENDOR_OPTS 17
80#define D6_OPT_INTERFACE_ID 18
81#define D6_OPT_RECONF_MSG 19
82#define D6_OPT_RECONF_ACCEPT 20
83
84#define D6_OPT_DNS_SERVERS 23
85#define D6_OPT_DOMAIN_LIST 24
86
87#define D6_OPT_IA_PD 25
88#define D6_OPT_IAPREFIX 26
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#define D6_OPT_CLIENT_FQDN 39
127
128#define D6_OPT_TZ_POSIX 41
129#define D6_OPT_TZ_NAME 42
130
131#define D6_OPT_BOOT_URL 59
132#define D6_OPT_BOOT_PARAM 60
133
134
135
136struct client6_data_t {
137 struct d6_option *server_id;
138 struct d6_option *ia_na;
139 struct d6_option *ia_pd;
140 char **env_ptr;
141 unsigned env_idx;
142
143 struct in6_addr ll_ip6;
144};
145
146#define client6_data (*(struct client6_data_t*)(&bb_common_bufsiz1[COMMON_BUFSIZE - sizeof(struct client6_data_t)]))
147
148int FAST_FUNC d6_read_interface(const char *interface, int *ifindex, struct in6_addr *nip6, uint8_t *mac);
149
150int FAST_FUNC d6_listen_socket(int port, const char *inf);
151
152int FAST_FUNC d6_recv_kernel_packet(
153 struct in6_addr *peer_ipv6,
154 struct d6_packet *packet, int fd
155);
156
157int FAST_FUNC d6_send_raw_packet(
158 struct d6_packet *d6_pkt, unsigned d6_pkt_size,
159 struct in6_addr *src_ipv6, int source_port,
160 struct in6_addr *dst_ipv6, int dest_port, const uint8_t *dest_arp,
161 int ifindex
162);
163
164int FAST_FUNC d6_send_kernel_packet(
165 struct d6_packet *d6_pkt, unsigned d6_pkt_size,
166 struct in6_addr *src_ipv6, int source_port,
167 struct in6_addr *dst_ipv6, int dest_port,
168 int ifindex
169);
170
171#if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 2
172void FAST_FUNC d6_dump_packet(struct d6_packet *packet);
173#else
174# define d6_dump_packet(packet) ((void)0)
175#endif
176
177
178POP_SAVED_FUNCTION_VISIBILITY
179
180#endif
181