8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / common / net / dhcp / dhcp_impl.h
blob8d9dca577b6b7055fe569746464200494a1c2679
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. Ensure that _REENTRANT bracketed code stays at
104 * bottom of this definition - the client doesn't include it. Scan.c in
105 * libdhcp isn't aware of it either...
107 * The PKT * pointer here actually points to a dhcpv6_message_t if the packet
108 * is DHCPv6. We assume that PKT * the same or stricter alignment
109 * requirements, and that the unused elements are not a significant burden.
111 #define MAX_PKT_LIST 5 /* maximum list size */
112 typedef struct dhcp_list {
113 struct dhcp_list *next; /* keep first and in this */
114 struct dhcp_list *prev; /* order for insque/remque */
116 PKT *pkt; /* client packet */
117 uint_t len; /* packet len */
118 int rfc1048; /* RFC1048 options - boolean */
119 uint8_t offset; /* BOOTP packet offset */
120 uint8_t isv6; /* DHCPv6 packet - boolean */
122 * standard/site options
124 DHCP_OPT *opts[DHCP_LAST_OPT + 1];
127 * Vendor specific options (client only)
129 DHCP_OPT *vs[VS_OPTION_END - VS_OPTION_START + 1];
131 struct in_addr off_ip; /* Address OFFERed */
133 uint_t ifindex; /* received ifindex (if any) */
134 sockaddr46_t pktfrom; /* source (peer) address on input */
135 sockaddr46_t pktto; /* destination (local) address */
137 } PKT_LIST;
139 extern int dhcp_options_scan(PKT_LIST *, boolean_t);
140 extern boolean_t dhcp_getinfo_pl(PKT_LIST *, uchar_t, uint16_t, uint16_t,
141 void *, size_t *);
142 extern dhcpv6_option_t *dhcpv6_find_option(const void *, size_t,
143 const dhcpv6_option_t *, uint16_t, uint_t *);
144 extern dhcpv6_option_t *dhcpv6_pkt_option(const PKT_LIST *,
145 const dhcpv6_option_t *, uint16_t, uint_t *);
147 #ifdef __cplusplus
149 #endif
151 #endif /* _DHCP_IMPL_H */