CDC/ECM driver for mbed, based on USBDevice by mbed-official. Uses PicoTCP to access Ethernet USB device. License: GPLv2
Fork of USB_Ethernet by
modules/pico_dhcp_common.h@2:540f6e142d59, 2013-08-03 (annotated)
- Committer:
- daniele
- Date:
- Sat Aug 03 13:16:14 2013 +0000
- Revision:
- 2:540f6e142d59
Moved to single package
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
daniele | 2:540f6e142d59 | 1 | /********************************************************************* |
daniele | 2:540f6e142d59 | 2 | PicoTCP. Copyright (c) 2012 TASS Belgium NV. Some rights reserved. |
daniele | 2:540f6e142d59 | 3 | See LICENSE and COPYING for usage. |
daniele | 2:540f6e142d59 | 4 | |
daniele | 2:540f6e142d59 | 5 | . |
daniele | 2:540f6e142d59 | 6 | |
daniele | 2:540f6e142d59 | 7 | *********************************************************************/ |
daniele | 2:540f6e142d59 | 8 | #ifndef _INCLUDE_PICO_DHCP_COMMON |
daniele | 2:540f6e142d59 | 9 | #define _INCLUDE_PICO_DHCP_COMMON |
daniele | 2:540f6e142d59 | 10 | |
daniele | 2:540f6e142d59 | 11 | |
daniele | 2:540f6e142d59 | 12 | #include <stdint.h> |
daniele | 2:540f6e142d59 | 13 | |
daniele | 2:540f6e142d59 | 14 | //minimum size is 576, cfr RFC |
daniele | 2:540f6e142d59 | 15 | #define DHCPC_DATAGRAM_SIZE 576 |
daniele | 2:540f6e142d59 | 16 | #define DHCPD_DATAGRAM_SIZE 576 |
daniele | 2:540f6e142d59 | 17 | |
daniele | 2:540f6e142d59 | 18 | |
daniele | 2:540f6e142d59 | 19 | #define PICO_DHCPD_PORT (short_be(67)) |
daniele | 2:540f6e142d59 | 20 | #define PICO_DHCP_CLIENT_PORT (short_be(68)) |
daniele | 2:540f6e142d59 | 21 | |
daniele | 2:540f6e142d59 | 22 | #define PICO_DHCP_OP_REQUEST 1 |
daniele | 2:540f6e142d59 | 23 | #define PICO_DHCP_OP_REPLY 2 |
daniele | 2:540f6e142d59 | 24 | |
daniele | 2:540f6e142d59 | 25 | #define PICO_HTYPE_ETHER 1 |
daniele | 2:540f6e142d59 | 26 | #define PICO_HLEN_ETHER 6 |
daniele | 2:540f6e142d59 | 27 | |
daniele | 2:540f6e142d59 | 28 | #define PICO_DHCPD_MAGIC_COOKIE (long_be(0x63825363)) |
daniele | 2:540f6e142d59 | 29 | |
daniele | 2:540f6e142d59 | 30 | /* DHCP OPTIONS, RFC2132 */ |
daniele | 2:540f6e142d59 | 31 | #define PICO_DHCPOPT_PAD 0x00 |
daniele | 2:540f6e142d59 | 32 | #define PICO_DHCPOPT_NETMASK 0x01 |
daniele | 2:540f6e142d59 | 33 | #define PICO_DHCPOPT_TIME 0x02 |
daniele | 2:540f6e142d59 | 34 | #define PICO_DHCPOPT_ROUTER 0x03 |
daniele | 2:540f6e142d59 | 35 | #define PICO_DHCPOPT_DNS 0x06 |
daniele | 2:540f6e142d59 | 36 | #define PICO_DHCPOPT_HOSTNAME 0x0c |
daniele | 2:540f6e142d59 | 37 | #define PICO_DHCPOPT_DOMAINNAME 0x0f |
daniele | 2:540f6e142d59 | 38 | #define PICO_DHCPOPT_MTU 0x1a |
daniele | 2:540f6e142d59 | 39 | #define PICO_DHCPOPT_BCAST 0x1c |
daniele | 2:540f6e142d59 | 40 | #define PICO_DHCPOPT_NETBIOSNS 0x2c |
daniele | 2:540f6e142d59 | 41 | #define PICO_DHCPOPT_NETBIOSSCOPE 0x2f |
daniele | 2:540f6e142d59 | 42 | |
daniele | 2:540f6e142d59 | 43 | #define PICO_DHCPOPT_REQIP 0x32 |
daniele | 2:540f6e142d59 | 44 | #define PICO_DHCPOPT_LEASETIME 0x33 |
daniele | 2:540f6e142d59 | 45 | #define PICO_DHCPOPT_OPTIONOVERLOAD 0x34 |
daniele | 2:540f6e142d59 | 46 | #define PICO_DHCPOPT_MSGTYPE 0x35 |
daniele | 2:540f6e142d59 | 47 | #define PICO_DHCPOPT_SERVERID 0x36 |
daniele | 2:540f6e142d59 | 48 | #define PICO_DHCPOPT_PARMLIST 0x37 |
daniele | 2:540f6e142d59 | 49 | #define PICO_DHCPOPT_MAXMSGSIZE 0x39 |
daniele | 2:540f6e142d59 | 50 | #define PICO_DHCPOPT_RENEWALTIME 0x3a |
daniele | 2:540f6e142d59 | 51 | #define PICO_DHCPOPT_REBINDINGTIME 0x3b |
daniele | 2:540f6e142d59 | 52 | #define PICO_DHCPOPT_DOMAINSEARCH 0x77 |
daniele | 2:540f6e142d59 | 53 | #define PICO_DHCPOPT_STATICROUTE 0x79 |
daniele | 2:540f6e142d59 | 54 | #define PICO_DHCPOPT_END 0xFF |
daniele | 2:540f6e142d59 | 55 | |
daniele | 2:540f6e142d59 | 56 | /* DHCP MESSAGE TYPE */ |
daniele | 2:540f6e142d59 | 57 | #define PICO_DHCP_MSG_DISCOVER 1 |
daniele | 2:540f6e142d59 | 58 | #define PICO_DHCP_MSG_OFFER 2 |
daniele | 2:540f6e142d59 | 59 | #define PICO_DHCP_MSG_REQUEST 3 |
daniele | 2:540f6e142d59 | 60 | #define PICO_DHCP_MSG_DECLINE 4 |
daniele | 2:540f6e142d59 | 61 | #define PICO_DHCP_MSG_ACK 5 |
daniele | 2:540f6e142d59 | 62 | #define PICO_DHCP_MSG_NAK 6 |
daniele | 2:540f6e142d59 | 63 | #define PICO_DHCP_MSG_RELEASE 7 |
daniele | 2:540f6e142d59 | 64 | #define PICO_DHCP_MSG_INFORM 8 |
daniele | 2:540f6e142d59 | 65 | |
daniele | 2:540f6e142d59 | 66 | |
daniele | 2:540f6e142d59 | 67 | enum dhcp_negotiation_state { |
daniele | 2:540f6e142d59 | 68 | DHCPSTATE_DISCOVER = 0, |
daniele | 2:540f6e142d59 | 69 | DHCPSTATE_OFFER, |
daniele | 2:540f6e142d59 | 70 | DHCPSTATE_REQUEST, |
daniele | 2:540f6e142d59 | 71 | DHCPSTATE_BOUND, |
daniele | 2:540f6e142d59 | 72 | DHCPSTATE_RENEWING |
daniele | 2:540f6e142d59 | 73 | }; |
daniele | 2:540f6e142d59 | 74 | |
daniele | 2:540f6e142d59 | 75 | |
daniele | 2:540f6e142d59 | 76 | struct __attribute__((packed)) pico_dhcphdr |
daniele | 2:540f6e142d59 | 77 | { |
daniele | 2:540f6e142d59 | 78 | uint8_t op; |
daniele | 2:540f6e142d59 | 79 | uint8_t htype; |
daniele | 2:540f6e142d59 | 80 | uint8_t hlen; |
daniele | 2:540f6e142d59 | 81 | uint8_t hops; //zero |
daniele | 2:540f6e142d59 | 82 | uint32_t xid; //store this in the request |
daniele | 2:540f6e142d59 | 83 | uint16_t secs; // ignore |
daniele | 2:540f6e142d59 | 84 | uint16_t flags; |
daniele | 2:540f6e142d59 | 85 | uint32_t ciaddr; // client address - if asking for renewal |
daniele | 2:540f6e142d59 | 86 | uint32_t yiaddr; // your address (client) |
daniele | 2:540f6e142d59 | 87 | uint32_t siaddr; // dhcp offered address |
daniele | 2:540f6e142d59 | 88 | uint32_t giaddr; // relay agent, bootp. |
daniele | 2:540f6e142d59 | 89 | uint8_t hwaddr[6]; |
daniele | 2:540f6e142d59 | 90 | uint8_t hwaddr_padding[10]; |
daniele | 2:540f6e142d59 | 91 | char hostname[64]; |
daniele | 2:540f6e142d59 | 92 | char bootp_filename[128]; |
daniele | 2:540f6e142d59 | 93 | uint32_t dhcp_magic; |
daniele | 2:540f6e142d59 | 94 | uint8_t options[0]; |
daniele | 2:540f6e142d59 | 95 | }; |
daniele | 2:540f6e142d59 | 96 | |
daniele | 2:540f6e142d59 | 97 | |
daniele | 2:540f6e142d59 | 98 | //common functions for client and server |
daniele | 2:540f6e142d59 | 99 | |
daniele | 2:540f6e142d59 | 100 | uint8_t dhcp_get_next_option(uint8_t *begin, uint8_t *data, int *len, uint8_t **nextopt); |
daniele | 2:540f6e142d59 | 101 | int is_options_valid(uint8_t *opt_buffer, int len); |
daniele | 2:540f6e142d59 | 102 | #endif |