Free (GPLv2) TCP/IP stack developed by TASS Belgium
Dependents: lpc1768-picotcp-demo ZeroMQ_PicoTCP_Publisher_demo TCPSocket_HelloWorld_PicoTCP Pico_TCP_UDP_Test ... more
pico_dhcp_common.h
00001 /********************************************************************* 00002 PicoTCP. Copyright (c) 2012-2015 Altran Intelligent Systems. Some rights reserved. 00003 See LICENSE and COPYING for usage. 00004 00005 . 00006 00007 *********************************************************************/ 00008 #ifndef INCLUDE_PICO_DHCP_COMMON 00009 #define INCLUDE_PICO_DHCP_COMMON 00010 #include "pico_config.h" 00011 #include "pico_addressing.h" 00012 00013 #define PICO_DHCPD_PORT (short_be(67)) 00014 #define PICO_DHCP_CLIENT_PORT (short_be(68)) 00015 #define PICO_DHCPD_MAGIC_COOKIE (long_be(0x63825363)) 00016 #define PICO_DHCP_HTYPE_ETH 1 00017 00018 /* Macro to get DHCP option field */ 00019 #define DHCP_OPT(hdr,off) ((struct pico_dhcp_opt *)(((uint8_t *)hdr)+sizeof(struct pico_dhcp_hdr) + off)) 00020 00021 /* flags */ 00022 #define PICO_DHCP_FLAG_BROADCAST 0x8000 00023 00024 /* options */ 00025 #define PICO_DHCP_OPT_PAD 0x00 00026 #define PICO_DHCP_OPT_NETMASK 0x01 00027 #define PICO_DHCP_OPT_TIME 0x02 00028 #define PICO_DHCP_OPT_ROUTER 0x03 00029 #define PICO_DHCP_OPT_DNS 0x06 00030 #define PICO_DHCP_OPT_HOSTNAME 0x0c 00031 #define PICO_DHCP_OPT_DOMAINNAME 0x0f 00032 #define PICO_DHCP_OPT_MTU 0x1a 00033 #define PICO_DHCP_OPT_BROADCAST 0x1c 00034 #define PICO_DHCP_OPT_NETBIOSNS 0x2c 00035 #define PICO_DHCP_OPT_NETBIOSSCOPE 0x2f 00036 #define PICO_DHCP_OPT_REQIP 0x32 00037 #define PICO_DHCP_OPT_LEASETIME 0x33 00038 #define PICO_DHCP_OPT_OPTOVERLOAD 0x34 00039 #define PICO_DHCP_OPT_MSGTYPE 0x35 00040 #define PICO_DHCP_OPT_SERVERID 0x36 00041 #define PICO_DHCP_OPT_PARAMLIST 0x37 00042 #define PICO_DHCP_OPT_MESSAGE 0x38 00043 #define PICO_DHCP_OPT_MAXMSGSIZE 0x39 00044 #define PICO_DHCP_OPT_RENEWALTIME 0x3a 00045 #define PICO_DHCP_OPT_REBINDINGTIME 0x3b 00046 #define PICO_DHCP_OPT_VENDORID 0x3c 00047 #define PICO_DHCP_OPT_CLIENTID 0x3d 00048 #define PICO_DHCP_OPT_DOMAINSEARCH 0x77 00049 #define PICO_DHCP_OPT_STATICROUTE 0x79 00050 #define PICO_DHCP_OPT_END 0xFF 00051 00052 /* options len */ 00053 #define PICO_DHCP_OPTLEN_HDR 2 /* account for code and len field */ 00054 #define PICO_DHCP_OPTLEN_NETMASK 6 00055 #define PICO_DHCP_OPTLEN_ROUTER 6 00056 #define PICO_DHCP_OPTLEN_DNS 6 00057 #define PICO_DHCP_OPTLEN_BROADCAST 6 00058 #define PICO_DHCP_OPTLEN_REQIP 6 00059 #define PICO_DHCP_OPTLEN_LEASETIME 6 00060 #define PICO_DHCP_OPTLEN_OPTOVERLOAD 3 00061 #define PICO_DHCP_OPTLEN_MSGTYPE 3 00062 #define PICO_DHCP_OPTLEN_SERVERID 6 00063 #define PICO_DHCP_OPTLEN_PARAMLIST 9 /* PicoTCP specific */ 00064 #define PICO_DHCP_OPTLEN_MAXMSGSIZE 4 00065 #define PICO_DHCP_OPTLEN_RENEWALTIME 6 00066 #define PICO_DHCP_OPTLEN_REBINDINGTIME 6 00067 #define PICO_DHCP_OPTLEN_END 1 00068 00069 /* op codes */ 00070 #define PICO_DHCP_OP_REQUEST 1 00071 #define PICO_DHCP_OP_REPLY 2 00072 00073 /* rfc message types */ 00074 #define PICO_DHCP_MSG_DISCOVER 1 00075 #define PICO_DHCP_MSG_OFFER 2 00076 #define PICO_DHCP_MSG_REQUEST 3 00077 #define PICO_DHCP_MSG_DECLINE 4 00078 #define PICO_DHCP_MSG_ACK 5 00079 #define PICO_DHCP_MSG_NAK 6 00080 #define PICO_DHCP_MSG_RELEASE 7 00081 #define PICO_DHCP_MSG_INFORM 8 00082 00083 /* custom message types */ 00084 #define PICO_DHCP_EVENT_T1 9 00085 #define PICO_DHCP_EVENT_T2 10 00086 #define PICO_DHCP_EVENT_LEASE 11 00087 #define PICO_DHCP_EVENT_RETRANSMIT 12 00088 #define PICO_DHCP_EVENT_NONE 0xff 00089 00090 PACKED_STRUCT_DEF pico_dhcp_hdr 00091 { 00092 uint8_t op; 00093 uint8_t htype; 00094 uint8_t hlen; 00095 uint8_t hops; /* zero */ 00096 uint32_t xid; /* store this in the request */ 00097 uint16_t secs; /* ignore */ 00098 uint16_t flags; 00099 uint32_t ciaddr; /* client address - if asking for renewal */ 00100 uint32_t yiaddr; /* your address (client) */ 00101 uint32_t siaddr; /* dhcp offered address */ 00102 uint32_t giaddr; /* relay agent, bootp. */ 00103 uint8_t hwaddr[6]; 00104 uint8_t hwaddr_padding[10]; 00105 char hostname[64]; 00106 char bootp_filename[128]; 00107 uint32_t dhcp_magic; 00108 }; 00109 00110 PACKED_STRUCT_DEF pico_dhcp_opt 00111 { 00112 uint8_t code; 00113 uint8_t len; 00114 PACKED_UNION_DEF dhcp_opt_ext_u { 00115 PEDANTIC_STRUCT_DEF netmask_s { 00116 struct pico_ip4 ip; 00117 } netmask; 00118 PEDANTIC_STRUCT_DEF router_s { 00119 struct pico_ip4 ip; 00120 } router; 00121 PEDANTIC_STRUCT_DEF dns_s { 00122 struct pico_ip4 ip; 00123 } dns1; 00124 struct dns_s dns2; 00125 PEDANTIC_STRUCT_DEF broadcast_s { 00126 struct pico_ip4 ip; 00127 } broadcast; 00128 PEDANTIC_STRUCT_DEF req_ip_s { 00129 struct pico_ip4 ip; 00130 } req_ip; 00131 PEDANTIC_STRUCT_DEF lease_time_s { 00132 uint32_t time; 00133 } lease_time; 00134 PEDANTIC_STRUCT_DEF opt_overload_s { 00135 uint8_t value; 00136 } opt_overload; 00137 PEDANTIC_STRUCT_DEF tftp_server_s { 00138 char name[1]; 00139 } tftp_server; 00140 PEDANTIC_STRUCT_DEF bootfile_s { 00141 char name[1]; 00142 } bootfile; 00143 PEDANTIC_STRUCT_DEF msg_type_s { 00144 uint8_t type; 00145 } msg_type; 00146 PEDANTIC_STRUCT_DEF server_id_s { 00147 struct pico_ip4 ip; 00148 } server_id; 00149 PEDANTIC_STRUCT_DEF param_list_s { 00150 uint8_t code[1]; 00151 } param_list; 00152 PEDANTIC_STRUCT_DEF message_s { 00153 char error[1]; 00154 } message; 00155 PEDANTIC_STRUCT_DEF max_msg_size_s { 00156 uint16_t size; 00157 } max_msg_size; 00158 PEDANTIC_STRUCT_DEF renewal_time_s { 00159 uint32_t time; 00160 } renewal_time; 00161 PEDANTIC_STRUCT_DEF rebinding_time_s { 00162 uint32_t time; 00163 } rebinding_time; 00164 PEDANTIC_STRUCT_DEF vendor_id_s { 00165 uint8_t id[1]; 00166 } vendor_id; 00167 PEDANTIC_STRUCT_DEF client_id_s { 00168 uint8_t id[1]; 00169 } client_id; 00170 } ext; 00171 }; 00172 00173 uint8_t dhcp_get_next_option(uint8_t *begin, uint8_t *data, int *len, uint8_t **nextopt); 00174 struct pico_dhcp_opt *pico_dhcp_next_option(struct pico_dhcp_opt **ptr); 00175 uint8_t pico_dhcp_are_options_valid(void *ptr, int32_t len); 00176 00177 uint8_t pico_dhcp_opt_netmask(void *ptr, struct pico_ip4 *ip); 00178 uint8_t pico_dhcp_opt_router(void *ptr, struct pico_ip4 *ip); 00179 uint8_t pico_dhcp_opt_dns(void *ptr, struct pico_ip4 *ip); 00180 uint8_t pico_dhcp_opt_broadcast(void *ptr, struct pico_ip4 *ip); 00181 uint8_t pico_dhcp_opt_reqip(void *ptr, struct pico_ip4 *ip); 00182 uint8_t pico_dhcp_opt_leasetime(void *ptr, uint32_t time); 00183 uint8_t pico_dhcp_opt_msgtype(void *ptr, uint8_t type); 00184 uint8_t pico_dhcp_opt_serverid(void *ptr, struct pico_ip4 *ip); 00185 uint8_t pico_dhcp_opt_paramlist(void *ptr); 00186 uint8_t pico_dhcp_opt_maxmsgsize(void *ptr, uint16_t size); 00187 uint8_t pico_dhcp_opt_end(void *ptr); 00188 #endif
Generated on Tue Jul 12 2022 15:59:21 by 1.7.2