1 /* vi: set sw=4 ts=4: */
3 * Copyright (C) 2011 Denys Vlasenko.
5 * Licensed under GPLv2, see file LICENSE in this source tree.
7 #ifndef UDHCP_D6_COMMON_H
8 #define UDHCP_D6_COMMON_H 1
10 #include <netinet/ip6.h>
12 PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
15 /*** DHCPv6 packet ***/
17 /* DHCPv6 protocol. See RFC 3315 */
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
37 uint8_t d6_options[576 - sizeof(struct iphdr) - sizeof(struct udphdr) - 4
38 + CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS];
40 #define d6_msg_type d6_u.d6_msg_type
41 #define d6_xid32 d6_u.d6_xid32
43 struct ip6_udp_d6_packet {
46 struct d6_packet data;
49 struct udp_d6_packet {
51 struct d6_packet data;
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
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
84 #define D6_OPT_DNS_SERVERS 23
85 #define D6_OPT_DOMAIN_LIST 24
87 #define D6_OPT_IA_PD 25
88 #define D6_OPT_IAPREFIX 26
90 #define D6_OPT_CLIENT_FQDN 39
92 /*** Other shared functions ***/
94 struct client6_data_t {
95 struct d6_option *server_id;
96 struct d6_option *ia_na;
99 /* link-local IPv6 address */
100 struct in6_addr ll_ip6;
103 #define client6_data (*(struct client6_data_t*)(&bb_common_bufsiz1[COMMON_BUFSIZE - sizeof(struct client6_data_t)]))
105 int FAST_FUNC d6_read_interface(const char *interface, int *ifindex, struct in6_addr *nip6, uint8_t *mac);
107 int FAST_FUNC d6_listen_socket(int port, const char *inf);
109 int FAST_FUNC d6_recv_kernel_packet(
110 struct in6_addr *peer_ipv6,
111 struct d6_packet *packet, int fd
114 int FAST_FUNC d6_send_raw_packet(
115 struct d6_packet *d6_pkt, unsigned d6_pkt_size,
116 struct in6_addr *src_ipv6, int source_port,
117 struct in6_addr *dst_ipv6, int dest_port, const uint8_t *dest_arp,
121 int FAST_FUNC d6_send_kernel_packet(
122 struct d6_packet *d6_pkt, unsigned d6_pkt_size,
123 struct in6_addr *src_ipv6, int source_port,
124 struct in6_addr *dst_ipv6, int dest_port,
128 #if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 2
129 void FAST_FUNC d6_dump_packet(struct d6_packet *packet);
131 # define d6_dump_packet(packet) ((void)0)
135 POP_SAVED_FUNCTION_VISIBILITY