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:
Sat Jun 15 18:38:26 2013 +0000
Revision:
26:dc3e7f96338f
Parent:
19:c7debad9a20a
Child:
27:26c168f5aa97
Socket interface rewritten again

Who changed what in which revision?

UserRevisionLine numberNew contents of line
daniele 19:c7debad9a20a 1 /*********************************************************************
daniele 19:c7debad9a20a 2 PicoTCP. Copyright (c) 2013 TASS Belgium NV. Some rights reserved.
daniele 19:c7debad9a20a 3 See LICENSE and COPYING for usage.
daniele 19:c7debad9a20a 4
daniele 19:c7debad9a20a 5 Author: Daniele Lacamera <daniele.lacamera@tass.be>
daniele 19:c7debad9a20a 6 *********************************************************************/
daniele 19:c7debad9a20a 7
daniele 19:c7debad9a20a 8 #ifndef __PICOTCP_BSD_LAYER
daniele 19:c7debad9a20a 9 #define __PICOTCP_BSD_LAYER
daniele 19:c7debad9a20a 10
daniele 19:c7debad9a20a 11 extern "C" {
daniele 19:c7debad9a20a 12 #include "pico_stack.h"
daniele 19:c7debad9a20a 13 #include "pico_tree.h"
daniele 19:c7debad9a20a 14 #include "pico_dns_client.h"
daniele 19:c7debad9a20a 15 #include "pico_socket.h"
daniele 19:c7debad9a20a 16 #include "pico_addressing.h"
daniele 19:c7debad9a20a 17 #include "pico_protocol.h"
daniele 19:c7debad9a20a 18 #include "pico_config.h"
daniele 19:c7debad9a20a 19 #include "pico_ipv4.h"
daniele 19:c7debad9a20a 20 #include "pico_device.h"
daniele 19:c7debad9a20a 21 };
daniele 19:c7debad9a20a 22 #include "mbed.h"
daniele 19:c7debad9a20a 23 #include "rtos.h"
daniele 19:c7debad9a20a 24 #include "Queue.h"
daniele 19:c7debad9a20a 25 #include "PicoCondition.h"
daniele 19:c7debad9a20a 26
daniele 19:c7debad9a20a 27 struct sockaddr;
daniele 19:c7debad9a20a 28
daniele 19:c7debad9a20a 29 struct ip_addr_s {
daniele 19:c7debad9a20a 30 uint32_t s_addr;
daniele 19:c7debad9a20a 31 };
daniele 19:c7debad9a20a 32
daniele 19:c7debad9a20a 33 typedef struct ip_addr_s ip_addr_t;
daniele 19:c7debad9a20a 34
daniele 19:c7debad9a20a 35 struct sockaddr_in
daniele 19:c7debad9a20a 36 {
daniele 19:c7debad9a20a 37 ip_addr_t sin_addr;
daniele 19:c7debad9a20a 38 uint16_t sin_family;
daniele 19:c7debad9a20a 39 uint16_t sin_port;
daniele 19:c7debad9a20a 40 };
daniele 19:c7debad9a20a 41
daniele 19:c7debad9a20a 42 struct timeval {
daniele 19:c7debad9a20a 43 uint32_t tv_sec;
daniele 19:c7debad9a20a 44 uint32_t tv_usec;
daniele 19:c7debad9a20a 45 };
daniele 19:c7debad9a20a 46
daniele 19:c7debad9a20a 47 /* Description of data base entry for a single host. */
daniele 19:c7debad9a20a 48 struct hostent
daniele 19:c7debad9a20a 49 {
daniele 19:c7debad9a20a 50 char *h_name; /* Official name of host. */
daniele 19:c7debad9a20a 51 char **h_aliases; /* Alias list. */
daniele 19:c7debad9a20a 52 int h_addrtype; /* Host address type. */
daniele 19:c7debad9a20a 53 int h_length; /* Length of address. */
daniele 19:c7debad9a20a 54 char **h_addr_list; /* List of addresses from name server. */
daniele 19:c7debad9a20a 55 # define h_addr h_addr_list[0] /* Address, for backward compatibility.*/
daniele 19:c7debad9a20a 56 };
daniele 19:c7debad9a20a 57
daniele 19:c7debad9a20a 58 #ifndef PF_INET
daniele 19:c7debad9a20a 59 #define PF_INET 2
daniele 19:c7debad9a20a 60 #define PF_INET6 10
daniele 19:c7debad9a20a 61 #define AF_INET PF_INET
daniele 19:c7debad9a20a 62 #define AF_INET6 PF_INET6
daniele 19:c7debad9a20a 63
daniele 19:c7debad9a20a 64 #define SOCK_STREAM 1
daniele 19:c7debad9a20a 65 #define SOCK_DGRAM 2
daniele 19:c7debad9a20a 66
daniele 19:c7debad9a20a 67 #define SOL_SOCKET 1
daniele 19:c7debad9a20a 68 #define SO_BROADCAST 6
daniele 19:c7debad9a20a 69
daniele 19:c7debad9a20a 70 #define INADDR_ANY 0u
daniele 19:c7debad9a20a 71
daniele 19:c7debad9a20a 72 #endif
daniele 19:c7debad9a20a 73
daniele 19:c7debad9a20a 74 enum socket_state_e {
daniele 19:c7debad9a20a 75 SOCK_OPEN,
daniele 19:c7debad9a20a 76 SOCK_BOUND,
daniele 19:c7debad9a20a 77 SOCK_LISTEN,
daniele 19:c7debad9a20a 78 SOCK_CONNECTED,
daniele 19:c7debad9a20a 79 SOCK_CLOSED
daniele 19:c7debad9a20a 80 };
daniele 19:c7debad9a20a 81
daniele 19:c7debad9a20a 82 typedef int socklen_t;
daniele 19:c7debad9a20a 83
daniele 19:c7debad9a20a 84 void picotcp_init(void);
daniele 19:c7debad9a20a 85
daniele 19:c7debad9a20a 86 struct stack_endpoint * picotcp_socket(uint16_t net, uint16_t proto, uint16_t flags);
daniele 19:c7debad9a20a 87 int picotcp_state(struct stack_endpoint *);
daniele 19:c7debad9a20a 88 int picotcp_bind(struct stack_endpoint *, struct sockaddr *local_addr, socklen_t len);
daniele 19:c7debad9a20a 89
daniele 19:c7debad9a20a 90 int picotcp_listen(struct stack_endpoint *, int queue);
daniele 19:c7debad9a20a 91 int picotcp_connect(struct stack_endpoint *, struct sockaddr *srv_addr, socklen_t len);
daniele 19:c7debad9a20a 92 struct stack_endpoint * picotcp_accept(struct stack_endpoint *, struct sockaddr *orig, socklen_t *);
daniele 19:c7debad9a20a 93 int picotcp_select(struct stack_endpoint *, struct timeval *timeout, int read, int write);
daniele 19:c7debad9a20a 94
daniele 19:c7debad9a20a 95 int picotcp_send(struct stack_endpoint *,void * buff, int len, int flags);
daniele 19:c7debad9a20a 96 int picotcp_recv(struct stack_endpoint *,void * buff, int len, int flags);
daniele 19:c7debad9a20a 97 int picotcp_sendto(struct stack_endpoint *,void * buff, int len, struct sockaddr*,socklen_t);
daniele 19:c7debad9a20a 98 int picotcp_recvfrom(struct stack_endpoint *,void * buff, int len, struct sockaddr *, socklen_t *);
daniele 19:c7debad9a20a 99 int picotcp_read(struct stack_endpoint *,void *buf, int len);
daniele 19:c7debad9a20a 100 int picotcp_write(struct stack_endpoint *,void *buf, int len);
daniele 19:c7debad9a20a 101 int picotcp_setsockopt(struct stack_endpoint *, int option, void *value);
daniele 19:c7debad9a20a 102 int picotcp_getsockopt(struct stack_endpoint *, int option, void *value);
daniele 19:c7debad9a20a 103 struct hostent * picotcp_gethostbyname(const char *url);
daniele 19:c7debad9a20a 104 char * picotcp_gethostbyaddr(const char *ip);
daniele 19:c7debad9a20a 105 int picotcp_close(struct stack_endpoint *);
daniele 19:c7debad9a20a 106 // set blocking
daniele 19:c7debad9a20a 107 int picotcp_setblocking(struct stack_endpoint *,int blocking);
daniele 19:c7debad9a20a 108 int picotcp_join_multicast(struct stack_endpoint *,const char* address,const char* local);
daniele 19:c7debad9a20a 109
daniele 26:dc3e7f96338f 110 int picotcp_async_interrupt(void);
daniele 26:dc3e7f96338f 111
daniele 19:c7debad9a20a 112
daniele 19:c7debad9a20a 113 #endif