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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers pico_dhcp_common.h Source File

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