dmake: do not set MAKEFLAGS=k
[unleashed/tickless.git] / usr / src / common / net / dhcp / dhcp_impl.h
blob91f2cd309190302a466b1cc947be421dc0628f25
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
22 * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
26 #ifndef _DHCP_IMPL_H
27 #define _DHCP_IMPL_H
29 #pragma ident "%Z%%M% %I% %E% SMI"
32 * Common definitions used by Sun DHCP implementations
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
39 #include <sys/types.h>
40 #include <sys/socket.h>
41 #include <netinet/in.h>
42 #include <netinet/udp.h>
43 #include <netinet/dhcp.h>
44 #include <netinet/dhcp6.h>
45 #include <dhcp_symbol_common.h>
46 #include <sys/sunos_dhcp_class.h>
48 /* Packet fields */
49 #define CD_PACKET_START 0
50 #define CD_POPCODE 0 /* packet opcode */
51 #define CD_PHTYPE 1 /* packet header type */
52 #define CD_PHLEN 2 /* packet header len */
53 #define CD_PHOPS 3 /* packet header len */
54 #define CD_PXID 4 /* packet hops */
55 #define CD_PSECS 8 /* packet xid */
56 #define CD_PFLAGS 10 /* packet secs */
57 #define CD_PCIADDR 12 /* packet flags */
58 #define CD_YIADDR 16 /* client's ip address */
59 #define CD_SIADDR 20 /* Bootserver's ip address */
60 #define CD_GIADDR 24 /* BOOTP relay agent address */
61 #define CD_PCHADDR 28 /* BOOTP relay agent address */
62 #define CD_SNAME 44 /* Hostname of Bootserver, or opts */
63 #define CD_BOOTFILE 108 /* File to boot or opts */
64 #define CD_PCOOKIE 236 /* packet cookie */
65 #define CD_POPTIONS 240 /* packet options */
66 #define CD_PACKET_END CD_POPTIONS
68 /* Internal server options */
69 #define CD_INTRNL_START 1024
70 #define CD_BOOL_HOSTNAME 1024 /* Entry wants hostname (Nameserv) */
71 #define CD_BOOL_LEASENEG 1025 /* Entry's lease is negotiable */
72 #define CD_BOOL_ECHO_VCLASS 1026 /* Echo Vendor class back to Entry */
73 #define CD_BOOTPATH 1027 /* prefix path to File to boot */
74 #define CD_INTRNL_END 1027
76 /* Error codes that could be generated while parsing packets */
77 #define DHCP_ERR_OFFSET 512
78 #define DHCP_GARBLED_MSG_TYPE (DHCP_ERR_OFFSET+0)
79 #define DHCP_WRONG_MSG_TYPE (DHCP_ERR_OFFSET+1)
80 #define DHCP_BAD_OPT_OVLD (DHCP_ERR_OFFSET+2)
83 * Arbitrary "maximum" client ID length (in bytes), used by various bits
84 * of the standalone code. This needs to go away someday.
86 #define DHCP_MAX_CID_LEN 64
89 * Generic DHCP option structure.
91 typedef struct {
92 uint8_t code;
93 uint8_t len;
94 uint8_t value[1];
95 } DHCP_OPT;
97 typedef union sockaddr46_s {
98 struct sockaddr_in v4;
99 struct sockaddr_in6 v6;
100 } sockaddr46_t;
103 * Generic DHCP packet list.
105 * The PKT * pointer here actually points to a dhcpv6_message_t if the packet
106 * is DHCPv6. We assume that PKT * the same or stricter alignment
107 * requirements, and that the unused elements are not a significant burden.
109 #define MAX_PKT_LIST 5 /* maximum list size */
110 typedef struct dhcp_list {
111 struct dhcp_list *next; /* keep first and in this */
112 struct dhcp_list *prev; /* order for insque/remque */
114 PKT *pkt; /* client packet */
115 uint_t len; /* packet len */
116 int rfc1048; /* RFC1048 options - boolean */
117 uint8_t offset; /* BOOTP packet offset */
118 uint8_t isv6; /* DHCPv6 packet - boolean */
120 * standard/site options
122 DHCP_OPT *opts[DHCP_LAST_OPT + 1];
125 * Vendor specific options (client only)
127 DHCP_OPT *vs[VS_OPTION_END - VS_OPTION_START + 1];
129 struct in_addr off_ip; /* Address OFFERed */
131 uint_t ifindex; /* received ifindex (if any) */
132 sockaddr46_t pktfrom; /* source (peer) address on input */
133 sockaddr46_t pktto; /* destination (local) address */
135 } PKT_LIST;
137 extern int dhcp_options_scan(PKT_LIST *, boolean_t);
138 extern boolean_t dhcp_getinfo_pl(PKT_LIST *, uchar_t, uint16_t, uint16_t,
139 void *, size_t *);
140 extern dhcpv6_option_t *dhcpv6_find_option(const void *, size_t,
141 const dhcpv6_option_t *, uint16_t, uint_t *);
142 extern dhcpv6_option_t *dhcpv6_pkt_option(const PKT_LIST *,
143 const dhcpv6_option_t *, uint16_t, uint_t *);
145 #ifdef __cplusplus
147 #endif
149 #endif /* _DHCP_IMPL_H */