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 RTOS
  • generic mbed Ethernet driver
  • high performance NXP LPC1768 specific Ethernet driver
  • Multi-threading support for mbed RTOS
  • Berkeley sockets and integration with the New Socket API
  • Fork of the apps running on top of the New Socket API
  • Scheduling 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.

Committer:
daniele
Date:
Fri May 24 15:25:25 2013 +0000
Revision:
3:b4047e8a0123
Child:
51:ab4529a384a6
Updated from main repo + fixed Mutexes;

Who changed what in which revision?

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