Rewrite from scratch a TCP/IP stack for mbed. So far the following parts are usable: Drivers: - EMAC driver (from CMSIS 2.0) Protocols: - Ethernet protocol - ARP over ethernet for IPv4 - IPv4 over Ethernet - ICMPv4 over IPv4 - UDPv4 over IPv4 APIs: - Sockets for UDPv4 The structure of this stack is designed to be very modular. Each protocol can register one or more protocol to handle its payload, and in each protocol, an API can be hooked (like Sockets for example). This is an early release.

Committer:
Benoit
Date:
Sun Jun 26 09:56:31 2011 +0000
Revision:
7:8e12f7357b9f
Parent:
1:f4040665bc61
Added IPv4 global broadcast address to processed frames inside IPv4 layer.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Benoit 0:19f5f51584de 1 /*
Benoit 0:19f5f51584de 2 * $Id: Sockets.h 27 2011-06-09 12:55:57Z benoit $
Benoit 0:19f5f51584de 3 * $Author: benoit $
Benoit 0:19f5f51584de 4 * $Date: 2011-06-09 14:55:57 +0200 (jeu., 09 juin 2011) $
Benoit 0:19f5f51584de 5 * $Rev: 27 $
Benoit 0:19f5f51584de 6 *
Benoit 0:19f5f51584de 7 *
Benoit 0:19f5f51584de 8 *
Benoit 0:19f5f51584de 9 *
Benoit 0:19f5f51584de 10 *
Benoit 0:19f5f51584de 11 */
Benoit 0:19f5f51584de 12
Benoit 0:19f5f51584de 13 #ifndef __SOCKETS_H__
Benoit 0:19f5f51584de 14 #define __SOCKETS_H__
Benoit 0:19f5f51584de 15
Benoit 0:19f5f51584de 16
Benoit 0:19f5f51584de 17 #include <stdint.h>
Benoit 0:19f5f51584de 18 #include "NetIF.h"
Benoit 0:19f5f51584de 19
Benoit 0:19f5f51584de 20
Benoit 0:19f5f51584de 21 typedef int32_t Socket_t;
Benoit 0:19f5f51584de 22
Benoit 0:19f5f51584de 23 enum Socket_Family
Benoit 0:19f5f51584de 24 {
Benoit 0:19f5f51584de 25 AF_INET = 0,
Benoit 0:19f5f51584de 26 AF_INET6,
Benoit 0:19f5f51584de 27 Socket_Family_Count,
Benoit 0:19f5f51584de 28 };
Benoit 0:19f5f51584de 29 typedef enum Socket_Family Socket_Family_t;
Benoit 0:19f5f51584de 30
Benoit 0:19f5f51584de 31
Benoit 0:19f5f51584de 32 enum Socket_Protocol
Benoit 0:19f5f51584de 33 {
Benoit 0:19f5f51584de 34 SOCK_DGRAM = 0,
Benoit 0:19f5f51584de 35 SOCK_STREAM,
Benoit 0:19f5f51584de 36 SOCK_RAW,
Benoit 0:19f5f51584de 37 Socket_Protocol_Count,
Benoit 0:19f5f51584de 38 };
Benoit 0:19f5f51584de 39 typedef enum Socket_Protocol Socket_Protocol_t;
Benoit 0:19f5f51584de 40
Benoit 0:19f5f51584de 41
Benoit 0:19f5f51584de 42 #pragma push
Benoit 0:19f5f51584de 43 #pragma pack(1)
Benoit 0:19f5f51584de 44 struct Socket_Addr
Benoit 0:19f5f51584de 45 {
Benoit 0:19f5f51584de 46 Socket_Family_t family;
Benoit 0:19f5f51584de 47 uint16_t len;
Benoit 0:19f5f51584de 48 };
Benoit 0:19f5f51584de 49 #pragma pop
Benoit 0:19f5f51584de 50 typedef struct Socket_Addr Socket_Addr_t;
Benoit 0:19f5f51584de 51
Benoit 0:19f5f51584de 52
Benoit 0:19f5f51584de 53 #pragma push
Benoit 0:19f5f51584de 54 #pragma pack(1)
Benoit 0:19f5f51584de 55 struct Socket_AddrIn
Benoit 0:19f5f51584de 56 {
Benoit 0:19f5f51584de 57 Socket_Family_t family;
Benoit 0:19f5f51584de 58 uint16_t len;
Benoit 0:19f5f51584de 59 IPv4_Addr_t address;
Benoit 0:19f5f51584de 60 uint16_t port;
Benoit 0:19f5f51584de 61 };
Benoit 0:19f5f51584de 62 #pragma pop
Benoit 0:19f5f51584de 63 typedef struct Socket_AddrIn Socket_AddrIn_t;
Benoit 0:19f5f51584de 64
Benoit 0:19f5f51584de 65
Benoit 0:19f5f51584de 66 extern Net_API_t sockets;
Benoit 0:19f5f51584de 67
Benoit 0:19f5f51584de 68
Benoit 1:f4040665bc61 69 Socket_t Sockets_Open(Socket_Family_t family, Socket_Protocol_t protocol, int32_t options);
Benoit 1:f4040665bc61 70 int32_t Sockets_Bind(Socket_t socket, Socket_Addr_t *addr, int32_t addrLen);
Benoit 1:f4040665bc61 71 int32_t Sockets_Send(Socket_t socket, uint8_t *data, int32_t length, int32_t flags);
Benoit 1:f4040665bc61 72 int32_t Sockets_SendTo(Socket_t socket, uint8_t *data, int32_t length, int32_t flags, const Socket_Addr_t *remoteAddr, int32_t addrLen);
Benoit 1:f4040665bc61 73 int32_t Sockets_Recv(Socket_t socket, uint8_t *data, int32_t length, int32_t flags);
Benoit 1:f4040665bc61 74 int32_t Sockets_RecvFrom(Socket_t socket, uint8_t *data, int32_t length, int32_t flags, Socket_Addr_t *remoteAddr, int32_t *addrLen);
Benoit 1:f4040665bc61 75 int32_t Sockets_Close(Socket_t socket);
Benoit 0:19f5f51584de 76
Benoit 0:19f5f51584de 77
Benoit 0:19f5f51584de 78 #endif /* __SOCKET_H__ */