CDC/ECM driver for mbed, based on USBDevice by mbed-official. Uses PicoTCP to access Ethernet USB device. License: GPLv2

Dependents:   USBEthernet_TEST

Fork of USB_Ethernet by Daniele Lacamera

Committer:
daniele
Date:
Sat Aug 03 13:16:14 2013 +0000
Revision:
2:540f6e142d59
Moved to single package

Who changed what in which revision?

UserRevisionLine numberNew 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