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
PicoTCP. Copyright (c) 2013 TASS Belgium NV.
Released under the GNU General Public License, version 2.
Different licensing models may exist, at the sole discretion of the Copyright holders.
Official homepage: http://www.picotcp.com
Bug tracker: https://github.com/tass-belgium/picotcp/issues
Development steps:
initial integration with mbed RTOSgeneric mbed Ethernet driverhigh performance NXP LPC1768 specific Ethernet driverMulti-threading support for mbed RTOSBerkeley sockets and integration with the New Socket APIFork of the apps running on top of the New Socket APIScheduling optimizations- Debugging/benchmarking/testing
Demo application (measuring TCP sender performance):
Import programlpc1768-picotcp-demo
A PicoTCP demo app testing the ethernet throughput on the lpc1768 mbed board.
modules/pico_dhcp_common.h@152:a3d286bf94e5, 2015-09-28 (annotated)
- Committer:
- tass
- Date:
- Mon Sep 28 13:16:18 2015 +0200
- Revision:
- 152:a3d286bf94e5
- Parent:
- 149:5f4cb161cec3
- Child:
- 154:6c0e92a80c4a
Mercurial: latest development version of PicoTCP
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tass | 68:0847e35d08a6 | 1 | /********************************************************************* |
tass | 152:a3d286bf94e5 | 2 | PicoTCP. Copyright (c) 2012-2015 Altran Intelligent Systems. Some rights reserved. |
TASS Belgium NV |
131:4758606c9316 | 3 | See LICENSE and COPYING for usage. |
tass | 68:0847e35d08a6 | 4 | |
TASS Belgium NV |
131:4758606c9316 | 5 | . |
tass | 68:0847e35d08a6 | 6 | |
TASS Belgium NV |
131:4758606c9316 | 7 | *********************************************************************/ |
tass picotcp@tass.be | 149:5f4cb161cec3 | 8 | #ifndef INCLUDE_PICO_DHCP_COMMON |
tass picotcp@tass.be | 149:5f4cb161cec3 | 9 | #define INCLUDE_PICO_DHCP_COMMON |
tass picotcp@tass.be | 149:5f4cb161cec3 | 10 | #include "pico_config.h" |
tass | 68:0847e35d08a6 | 11 | #include "pico_addressing.h" |
tass | 68:0847e35d08a6 | 12 | |
tass | 68:0847e35d08a6 | 13 | #define PICO_DHCPD_PORT (short_be(67)) |
tass | 68:0847e35d08a6 | 14 | #define PICO_DHCP_CLIENT_PORT (short_be(68)) |
tass | 68:0847e35d08a6 | 15 | #define PICO_DHCPD_MAGIC_COOKIE (long_be(0x63825363)) |
tass | 68:0847e35d08a6 | 16 | #define PICO_DHCP_HTYPE_ETH 1 |
tass | 68:0847e35d08a6 | 17 | |
tass | 68:0847e35d08a6 | 18 | /* flags */ |
tass | 68:0847e35d08a6 | 19 | #define PICO_DHCP_FLAG_BROADCAST 0x8000 |
tass | 68:0847e35d08a6 | 20 | |
tass | 68:0847e35d08a6 | 21 | /* options */ |
tass | 68:0847e35d08a6 | 22 | #define PICO_DHCP_OPT_PAD 0x00 |
tass | 68:0847e35d08a6 | 23 | #define PICO_DHCP_OPT_NETMASK 0x01 |
tass | 68:0847e35d08a6 | 24 | #define PICO_DHCP_OPT_TIME 0x02 |
tass | 68:0847e35d08a6 | 25 | #define PICO_DHCP_OPT_ROUTER 0x03 |
tass | 68:0847e35d08a6 | 26 | #define PICO_DHCP_OPT_DNS 0x06 |
tass | 68:0847e35d08a6 | 27 | #define PICO_DHCP_OPT_HOSTNAME 0x0c |
tass | 68:0847e35d08a6 | 28 | #define PICO_DHCP_OPT_DOMAINNAME 0x0f |
tass | 68:0847e35d08a6 | 29 | #define PICO_DHCP_OPT_MTU 0x1a |
tass | 68:0847e35d08a6 | 30 | #define PICO_DHCP_OPT_BROADCAST 0x1c |
tass | 68:0847e35d08a6 | 31 | #define PICO_DHCP_OPT_NETBIOSNS 0x2c |
tass | 68:0847e35d08a6 | 32 | #define PICO_DHCP_OPT_NETBIOSSCOPE 0x2f |
tass | 68:0847e35d08a6 | 33 | #define PICO_DHCP_OPT_REQIP 0x32 |
tass | 68:0847e35d08a6 | 34 | #define PICO_DHCP_OPT_LEASETIME 0x33 |
tass | 68:0847e35d08a6 | 35 | #define PICO_DHCP_OPT_OPTOVERLOAD 0x34 |
tass | 68:0847e35d08a6 | 36 | #define PICO_DHCP_OPT_MSGTYPE 0x35 |
tass | 68:0847e35d08a6 | 37 | #define PICO_DHCP_OPT_SERVERID 0x36 |
tass | 68:0847e35d08a6 | 38 | #define PICO_DHCP_OPT_PARAMLIST 0x37 |
tass | 68:0847e35d08a6 | 39 | #define PICO_DHCP_OPT_MESSAGE 0x38 |
tass | 68:0847e35d08a6 | 40 | #define PICO_DHCP_OPT_MAXMSGSIZE 0x39 |
tass | 68:0847e35d08a6 | 41 | #define PICO_DHCP_OPT_RENEWALTIME 0x3a |
tass | 68:0847e35d08a6 | 42 | #define PICO_DHCP_OPT_REBINDINGTIME 0x3b |
tass | 68:0847e35d08a6 | 43 | #define PICO_DHCP_OPT_VENDORID 0x3c |
tass | 68:0847e35d08a6 | 44 | #define PICO_DHCP_OPT_CLIENTID 0x3d |
tass | 68:0847e35d08a6 | 45 | #define PICO_DHCP_OPT_DOMAINSEARCH 0x77 |
tass | 68:0847e35d08a6 | 46 | #define PICO_DHCP_OPT_STATICROUTE 0x79 |
tass | 68:0847e35d08a6 | 47 | #define PICO_DHCP_OPT_END 0xFF |
tass | 68:0847e35d08a6 | 48 | |
tass | 68:0847e35d08a6 | 49 | /* options len */ |
tass | 68:0847e35d08a6 | 50 | #define PICO_DHCP_OPTLEN_HDR 2 /* account for code and len field */ |
tass | 68:0847e35d08a6 | 51 | #define PICO_DHCP_OPTLEN_NETMASK 6 |
tass | 68:0847e35d08a6 | 52 | #define PICO_DHCP_OPTLEN_ROUTER 6 |
tass | 68:0847e35d08a6 | 53 | #define PICO_DHCP_OPTLEN_DNS 6 |
tass | 68:0847e35d08a6 | 54 | #define PICO_DHCP_OPTLEN_BROADCAST 6 |
tass | 68:0847e35d08a6 | 55 | #define PICO_DHCP_OPTLEN_REQIP 6 |
tass | 68:0847e35d08a6 | 56 | #define PICO_DHCP_OPTLEN_LEASETIME 6 |
tass | 68:0847e35d08a6 | 57 | #define PICO_DHCP_OPTLEN_OPTOVERLOAD 3 |
tass | 68:0847e35d08a6 | 58 | #define PICO_DHCP_OPTLEN_MSGTYPE 3 |
tass | 68:0847e35d08a6 | 59 | #define PICO_DHCP_OPTLEN_SERVERID 6 |
tass | 152:a3d286bf94e5 | 60 | #define PICO_DHCP_OPTLEN_PARAMLIST 9 /* PicoTCP specific */ |
tass | 68:0847e35d08a6 | 61 | #define PICO_DHCP_OPTLEN_MAXMSGSIZE 4 |
tass | 68:0847e35d08a6 | 62 | #define PICO_DHCP_OPTLEN_RENEWALTIME 6 |
tass | 68:0847e35d08a6 | 63 | #define PICO_DHCP_OPTLEN_REBINDINGTIME 6 |
tass | 68:0847e35d08a6 | 64 | #define PICO_DHCP_OPTLEN_END 1 |
tass | 68:0847e35d08a6 | 65 | |
tass | 68:0847e35d08a6 | 66 | /* op codes */ |
tass | 68:0847e35d08a6 | 67 | #define PICO_DHCP_OP_REQUEST 1 |
tass | 68:0847e35d08a6 | 68 | #define PICO_DHCP_OP_REPLY 2 |
tass | 68:0847e35d08a6 | 69 | |
tass | 68:0847e35d08a6 | 70 | /* rfc message types */ |
tass | 68:0847e35d08a6 | 71 | #define PICO_DHCP_MSG_DISCOVER 1 |
tass | 68:0847e35d08a6 | 72 | #define PICO_DHCP_MSG_OFFER 2 |
tass | 68:0847e35d08a6 | 73 | #define PICO_DHCP_MSG_REQUEST 3 |
tass | 68:0847e35d08a6 | 74 | #define PICO_DHCP_MSG_DECLINE 4 |
tass | 68:0847e35d08a6 | 75 | #define PICO_DHCP_MSG_ACK 5 |
tass | 68:0847e35d08a6 | 76 | #define PICO_DHCP_MSG_NAK 6 |
tass | 68:0847e35d08a6 | 77 | #define PICO_DHCP_MSG_RELEASE 7 |
tass | 68:0847e35d08a6 | 78 | #define PICO_DHCP_MSG_INFORM 8 |
tass | 68:0847e35d08a6 | 79 | |
tass | 68:0847e35d08a6 | 80 | /* custom message types */ |
tass | 68:0847e35d08a6 | 81 | #define PICO_DHCP_EVENT_T1 9 |
tass | 68:0847e35d08a6 | 82 | #define PICO_DHCP_EVENT_T2 10 |
tass | 68:0847e35d08a6 | 83 | #define PICO_DHCP_EVENT_LEASE 11 |
tass | 68:0847e35d08a6 | 84 | #define PICO_DHCP_EVENT_RETRANSMIT 12 |
tass | 152:a3d286bf94e5 | 85 | #define PICO_DHCP_EVENT_NONE 0xff |
tass | 68:0847e35d08a6 | 86 | |
tass picotcp@tass.be | 149:5f4cb161cec3 | 87 | PACKED_STRUCT_DEF pico_dhcp_hdr |
tass | 68:0847e35d08a6 | 88 | { |
TASS Belgium NV |
131:4758606c9316 | 89 | uint8_t op; |
TASS Belgium NV |
131:4758606c9316 | 90 | uint8_t htype; |
TASS Belgium NV |
131:4758606c9316 | 91 | uint8_t hlen; |
TASS Belgium NV |
131:4758606c9316 | 92 | uint8_t hops; /* zero */ |
TASS Belgium NV |
131:4758606c9316 | 93 | uint32_t xid; /* store this in the request */ |
TASS Belgium NV |
131:4758606c9316 | 94 | uint16_t secs; /* ignore */ |
TASS Belgium NV |
131:4758606c9316 | 95 | uint16_t flags; |
TASS Belgium NV |
131:4758606c9316 | 96 | uint32_t ciaddr; /* client address - if asking for renewal */ |
TASS Belgium NV |
131:4758606c9316 | 97 | uint32_t yiaddr; /* your address (client) */ |
TASS Belgium NV |
131:4758606c9316 | 98 | uint32_t siaddr; /* dhcp offered address */ |
TASS Belgium NV |
131:4758606c9316 | 99 | uint32_t giaddr; /* relay agent, bootp. */ |
TASS Belgium NV |
131:4758606c9316 | 100 | uint8_t hwaddr[6]; |
TASS Belgium NV |
131:4758606c9316 | 101 | uint8_t hwaddr_padding[10]; |
TASS Belgium NV |
131:4758606c9316 | 102 | char hostname[64]; |
TASS Belgium NV |
131:4758606c9316 | 103 | char bootp_filename[128]; |
TASS Belgium NV |
131:4758606c9316 | 104 | uint32_t dhcp_magic; |
tass picotcp@tass.be | 149:5f4cb161cec3 | 105 | uint8_t options[0]; |
tass | 68:0847e35d08a6 | 106 | }; |
tass | 68:0847e35d08a6 | 107 | |
tass picotcp@tass.be | 149:5f4cb161cec3 | 108 | PACKED_STRUCT_DEF pico_dhcp_opt |
tass | 68:0847e35d08a6 | 109 | { |
TASS Belgium NV |
131:4758606c9316 | 110 | uint8_t code; |
TASS Belgium NV |
131:4758606c9316 | 111 | uint8_t len; |
tass | 152:a3d286bf94e5 | 112 | PACKED_UNION_DEF dhcp_opt_ext_u { |
tass | 152:a3d286bf94e5 | 113 | PEDANTIC_STRUCT_DEF netmask_s { |
TASS Belgium NV |
131:4758606c9316 | 114 | struct pico_ip4 ip; |
TASS Belgium NV |
131:4758606c9316 | 115 | } netmask; |
tass | 152:a3d286bf94e5 | 116 | PEDANTIC_STRUCT_DEF router_s { |
TASS Belgium NV |
131:4758606c9316 | 117 | struct pico_ip4 ip; |
TASS Belgium NV |
131:4758606c9316 | 118 | } router; |
tass | 152:a3d286bf94e5 | 119 | PEDANTIC_STRUCT_DEF dns_s { |
TASS Belgium NV |
131:4758606c9316 | 120 | struct pico_ip4 ip; |
tass | 152:a3d286bf94e5 | 121 | } dns1; |
tass | 152:a3d286bf94e5 | 122 | struct dns_s dns2; |
tass | 152:a3d286bf94e5 | 123 | PEDANTIC_STRUCT_DEF broadcast_s { |
TASS Belgium NV |
131:4758606c9316 | 124 | struct pico_ip4 ip; |
TASS Belgium NV |
131:4758606c9316 | 125 | } broadcast; |
tass | 152:a3d286bf94e5 | 126 | PEDANTIC_STRUCT_DEF req_ip_s { |
TASS Belgium NV |
131:4758606c9316 | 127 | struct pico_ip4 ip; |
TASS Belgium NV |
131:4758606c9316 | 128 | } req_ip; |
tass | 152:a3d286bf94e5 | 129 | PEDANTIC_STRUCT_DEF lease_time_s { |
TASS Belgium NV |
131:4758606c9316 | 130 | uint32_t time; |
TASS Belgium NV |
131:4758606c9316 | 131 | } lease_time; |
tass | 152:a3d286bf94e5 | 132 | PEDANTIC_STRUCT_DEF opt_overload_s { |
TASS Belgium NV |
131:4758606c9316 | 133 | uint8_t value; |
TASS Belgium NV |
131:4758606c9316 | 134 | } opt_overload; |
tass | 152:a3d286bf94e5 | 135 | PEDANTIC_STRUCT_DEF tftp_server_s { |
TASS Belgium NV |
131:4758606c9316 | 136 | char name[1]; |
TASS Belgium NV |
131:4758606c9316 | 137 | } tftp_server; |
tass | 152:a3d286bf94e5 | 138 | PEDANTIC_STRUCT_DEF bootfile_s { |
TASS Belgium NV |
131:4758606c9316 | 139 | char name[1]; |
TASS Belgium NV |
131:4758606c9316 | 140 | } bootfile; |
tass | 152:a3d286bf94e5 | 141 | PEDANTIC_STRUCT_DEF msg_type_s { |
TASS Belgium NV |
131:4758606c9316 | 142 | uint8_t type; |
TASS Belgium NV |
131:4758606c9316 | 143 | } msg_type; |
tass | 152:a3d286bf94e5 | 144 | PEDANTIC_STRUCT_DEF server_id_s { |
TASS Belgium NV |
131:4758606c9316 | 145 | struct pico_ip4 ip; |
TASS Belgium NV |
131:4758606c9316 | 146 | } server_id; |
tass | 152:a3d286bf94e5 | 147 | PEDANTIC_STRUCT_DEF param_list_s { |
TASS Belgium NV |
131:4758606c9316 | 148 | uint8_t code[1]; |
TASS Belgium NV |
131:4758606c9316 | 149 | } param_list; |
tass | 152:a3d286bf94e5 | 150 | PEDANTIC_STRUCT_DEF message_s { |
TASS Belgium NV |
131:4758606c9316 | 151 | char error[1]; |
TASS Belgium NV |
131:4758606c9316 | 152 | } message; |
tass | 152:a3d286bf94e5 | 153 | PEDANTIC_STRUCT_DEF max_msg_size_s { |
TASS Belgium NV |
131:4758606c9316 | 154 | uint16_t size; |
TASS Belgium NV |
131:4758606c9316 | 155 | } max_msg_size; |
tass | 152:a3d286bf94e5 | 156 | PEDANTIC_STRUCT_DEF renewal_time_s { |
TASS Belgium NV |
131:4758606c9316 | 157 | uint32_t time; |
TASS Belgium NV |
131:4758606c9316 | 158 | } renewal_time; |
tass | 152:a3d286bf94e5 | 159 | PEDANTIC_STRUCT_DEF rebinding_time_s { |
TASS Belgium NV |
131:4758606c9316 | 160 | uint32_t time; |
TASS Belgium NV |
131:4758606c9316 | 161 | } rebinding_time; |
tass | 152:a3d286bf94e5 | 162 | PEDANTIC_STRUCT_DEF vendor_id_s { |
TASS Belgium NV |
131:4758606c9316 | 163 | uint8_t id[1]; |
TASS Belgium NV |
131:4758606c9316 | 164 | } vendor_id; |
tass | 152:a3d286bf94e5 | 165 | PEDANTIC_STRUCT_DEF client_id_s { |
TASS Belgium NV |
131:4758606c9316 | 166 | uint8_t id[1]; |
TASS Belgium NV |
131:4758606c9316 | 167 | } client_id; |
TASS Belgium NV |
131:4758606c9316 | 168 | } ext; |
tass | 68:0847e35d08a6 | 169 | }; |
tass | 68:0847e35d08a6 | 170 | |
tass | 68:0847e35d08a6 | 171 | uint8_t dhcp_get_next_option(uint8_t *begin, uint8_t *data, int *len, uint8_t **nextopt); |
tass | 68:0847e35d08a6 | 172 | struct pico_dhcp_opt *pico_dhcp_next_option(struct pico_dhcp_opt **ptr); |
tass | 70:cd218dd180e5 | 173 | uint8_t pico_dhcp_are_options_valid(void *ptr, int32_t len); |
tass | 68:0847e35d08a6 | 174 | |
tass | 70:cd218dd180e5 | 175 | uint8_t pico_dhcp_opt_netmask(void *ptr, struct pico_ip4 *ip); |
tass | 70:cd218dd180e5 | 176 | uint8_t pico_dhcp_opt_router(void *ptr, struct pico_ip4 *ip); |
tass | 70:cd218dd180e5 | 177 | uint8_t pico_dhcp_opt_dns(void *ptr, struct pico_ip4 *ip); |
tass | 70:cd218dd180e5 | 178 | uint8_t pico_dhcp_opt_broadcast(void *ptr, struct pico_ip4 *ip); |
tass | 70:cd218dd180e5 | 179 | uint8_t pico_dhcp_opt_reqip(void *ptr, struct pico_ip4 *ip); |
tass | 70:cd218dd180e5 | 180 | uint8_t pico_dhcp_opt_leasetime(void *ptr, uint32_t time); |
tass | 70:cd218dd180e5 | 181 | uint8_t pico_dhcp_opt_msgtype(void *ptr, uint8_t type); |
tass | 70:cd218dd180e5 | 182 | uint8_t pico_dhcp_opt_serverid(void *ptr, struct pico_ip4 *ip); |
tass | 70:cd218dd180e5 | 183 | uint8_t pico_dhcp_opt_paramlist(void *ptr); |
tass | 70:cd218dd180e5 | 184 | uint8_t pico_dhcp_opt_maxmsgsize(void *ptr, uint16_t size); |
tass | 70:cd218dd180e5 | 185 | uint8_t pico_dhcp_opt_end(void *ptr); |
tass | 68:0847e35d08a6 | 186 | #endif |