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.
Socket/bsd/proxy_endpoint.h@26:dc3e7f96338f, 2013-06-15 (annotated)
- 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?
User | Revision | Line number | New 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 |