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 12 11:23:03 2011 +0000
Revision:
0:19f5f51584de
Child:
1:f4040665bc61
Initial release (alpha quality)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Benoit 0:19f5f51584de 1 /*
Benoit 0:19f5f51584de 2 * $Id: ARP.h 29 2011-06-11 14:53:08Z benoit $
Benoit 0:19f5f51584de 3 * $Author: benoit $
Benoit 0:19f5f51584de 4 * $Date: 2011-06-11 16:53:08 +0200 (sam., 11 juin 2011) $
Benoit 0:19f5f51584de 5 * $Rev: 29 $
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 __ARP_H__
Benoit 0:19f5f51584de 14 #define __ARP_H__
Benoit 0:19f5f51584de 15
Benoit 0:19f5f51584de 16
Benoit 0:19f5f51584de 17 #include "IPv4.h"
Benoit 0:19f5f51584de 18 #include "Ethernet.h"
Benoit 0:19f5f51584de 19
Benoit 0:19f5f51584de 20
Benoit 0:19f5f51584de 21 #define ARP_HW_TYPE_ENET 0x0001
Benoit 0:19f5f51584de 22
Benoit 0:19f5f51584de 23 #define ARP_OPERATION_REQUEST 0x0001
Benoit 0:19f5f51584de 24 #define ARP_OPERATION_REPLY 0x0002
Benoit 0:19f5f51584de 25
Benoit 0:19f5f51584de 26
Benoit 0:19f5f51584de 27 typedef uint16_t ARP_Type_t;
Benoit 0:19f5f51584de 28 typedef uint16_t ARP_Protocol_t;
Benoit 0:19f5f51584de 29 typedef uint16_t ARP_Operation_t;
Benoit 0:19f5f51584de 30
Benoit 0:19f5f51584de 31
Benoit 0:19f5f51584de 32 #pragma push
Benoit 0:19f5f51584de 33 #pragma pack(1)
Benoit 0:19f5f51584de 34 struct ARP_Header
Benoit 0:19f5f51584de 35 {
Benoit 0:19f5f51584de 36 ARP_Type_t type;
Benoit 0:19f5f51584de 37 ARP_Protocol_t protocol;
Benoit 0:19f5f51584de 38 uint8_t hardAddrLen;
Benoit 0:19f5f51584de 39 uint8_t protoAddrLen;
Benoit 0:19f5f51584de 40 ARP_Operation_t operation;
Benoit 0:19f5f51584de 41 };
Benoit 0:19f5f51584de 42 #pragma pop
Benoit 0:19f5f51584de 43 typedef struct ARP_Header ARP_Header_t;
Benoit 0:19f5f51584de 44
Benoit 0:19f5f51584de 45
Benoit 0:19f5f51584de 46 #pragma push
Benoit 0:19f5f51584de 47 #pragma pack(1)
Benoit 0:19f5f51584de 48 struct ARP_IPv4Data
Benoit 0:19f5f51584de 49 {
Benoit 0:19f5f51584de 50 Ethernet_Addr_t hwSource;
Benoit 0:19f5f51584de 51 IPv4_Addr_t ipSource;
Benoit 0:19f5f51584de 52 Ethernet_Addr_t hwDest;
Benoit 0:19f5f51584de 53 IPv4_Addr_t ipDest;
Benoit 0:19f5f51584de 54 };
Benoit 0:19f5f51584de 55 #pragma pop
Benoit 0:19f5f51584de 56 typedef struct ARP_IPv4Data ARP_IPv4Data_t;
Benoit 0:19f5f51584de 57
Benoit 0:19f5f51584de 58
Benoit 0:19f5f51584de 59 extern Protocol_Handler_t arp;
Benoit 0:19f5f51584de 60
Benoit 0:19f5f51584de 61
Benoit 0:19f5f51584de 62 CAPI int32_t ARP_ResolveIPv4Address(NetIF_t *netIF, IPv4_Addr_t address, Ethernet_Addr_t *ethernetAddr);
Benoit 0:19f5f51584de 63 CAPI int32_t ARP_AddStaticEntry(NetIF_t *netIF, IPv4_Addr_t address, const Ethernet_Addr_t *ethernetAddr);
Benoit 0:19f5f51584de 64 CAPI int32_t ARP_RemoveEntry(const NetIF_t *netIF, IPv4_Addr_t address);
Benoit 0:19f5f51584de 65 CAPI void ARP_InvalidateCache(Bool_t flushStaticEntries);
Benoit 0:19f5f51584de 66 CAPI void ARP_Timer(void);
Benoit 0:19f5f51584de 67 CAPI void ARP_DisplayCache(void);
Benoit 0:19f5f51584de 68 CAPI void ARP_DumpHeader(const char *prefix, ARP_Header_t *arpHeader);
Benoit 0:19f5f51584de 69
Benoit 0:19f5f51584de 70 #endif /* __ARP_H__ */