Free (GPLv2) TCP/IP stack developed by TASS Belgium
Fork of PicoTCP by
Diff: modules/pico_dhcp_common.h
- Revision:
- 51:18637a3d071f
- Parent:
- 3:b4047e8a0123
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules/pico_dhcp_common.h Sat Aug 03 08:50:27 2013 +0000 @@ -0,0 +1,102 @@ +/********************************************************************* +PicoTCP. Copyright (c) 2012 TASS Belgium NV. Some rights reserved. +See LICENSE and COPYING for usage. + +. + +*********************************************************************/ +#ifndef _INCLUDE_PICO_DHCP_COMMON +#define _INCLUDE_PICO_DHCP_COMMON + + +#include <stdint.h> + +//minimum size is 576, cfr RFC +#define DHCPC_DATAGRAM_SIZE 576 +#define DHCPD_DATAGRAM_SIZE 576 + + +#define PICO_DHCPD_PORT (short_be(67)) +#define PICO_DHCP_CLIENT_PORT (short_be(68)) + +#define PICO_DHCP_OP_REQUEST 1 +#define PICO_DHCP_OP_REPLY 2 + +#define PICO_HTYPE_ETHER 1 +#define PICO_HLEN_ETHER 6 + +#define PICO_DHCPD_MAGIC_COOKIE (long_be(0x63825363)) + +/* DHCP OPTIONS, RFC2132 */ +#define PICO_DHCPOPT_PAD 0x00 +#define PICO_DHCPOPT_NETMASK 0x01 +#define PICO_DHCPOPT_TIME 0x02 +#define PICO_DHCPOPT_ROUTER 0x03 +#define PICO_DHCPOPT_DNS 0x06 +#define PICO_DHCPOPT_HOSTNAME 0x0c +#define PICO_DHCPOPT_DOMAINNAME 0x0f +#define PICO_DHCPOPT_MTU 0x1a +#define PICO_DHCPOPT_BCAST 0x1c +#define PICO_DHCPOPT_NETBIOSNS 0x2c +#define PICO_DHCPOPT_NETBIOSSCOPE 0x2f + +#define PICO_DHCPOPT_REQIP 0x32 +#define PICO_DHCPOPT_LEASETIME 0x33 +#define PICO_DHCPOPT_OPTIONOVERLOAD 0x34 +#define PICO_DHCPOPT_MSGTYPE 0x35 +#define PICO_DHCPOPT_SERVERID 0x36 +#define PICO_DHCPOPT_PARMLIST 0x37 +#define PICO_DHCPOPT_MAXMSGSIZE 0x39 +#define PICO_DHCPOPT_RENEWALTIME 0x3a +#define PICO_DHCPOPT_REBINDINGTIME 0x3b +#define PICO_DHCPOPT_DOMAINSEARCH 0x77 +#define PICO_DHCPOPT_STATICROUTE 0x79 +#define PICO_DHCPOPT_END 0xFF + +/* DHCP MESSAGE TYPE */ +#define PICO_DHCP_MSG_DISCOVER 1 +#define PICO_DHCP_MSG_OFFER 2 +#define PICO_DHCP_MSG_REQUEST 3 +#define PICO_DHCP_MSG_DECLINE 4 +#define PICO_DHCP_MSG_ACK 5 +#define PICO_DHCP_MSG_NAK 6 +#define PICO_DHCP_MSG_RELEASE 7 +#define PICO_DHCP_MSG_INFORM 8 + + +enum dhcp_negotiation_state { + DHCPSTATE_DISCOVER = 0, + DHCPSTATE_OFFER, + DHCPSTATE_REQUEST, + DHCPSTATE_BOUND, + DHCPSTATE_RENEWING +}; + + +struct __attribute__((packed)) pico_dhcphdr +{ + uint8_t op; + uint8_t htype; + uint8_t hlen; + uint8_t hops; //zero + uint32_t xid; //store this in the request + uint16_t secs; // ignore + uint16_t flags; + uint32_t ciaddr; // client address - if asking for renewal + uint32_t yiaddr; // your address (client) + uint32_t siaddr; // dhcp offered address + uint32_t giaddr; // relay agent, bootp. + uint8_t hwaddr[6]; + uint8_t hwaddr_padding[10]; + char hostname[64]; + char bootp_filename[128]; + uint32_t dhcp_magic; + uint8_t options[0]; +}; + + +//common functions for client and server + +uint8_t dhcp_get_next_option(uint8_t *begin, uint8_t *data, int *len, uint8_t **nextopt); +int is_options_valid(uint8_t *opt_buffer, int len); +#endif