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: IPv4.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 __IPV4_H__
Benoit 0:19f5f51584de 14 #define __IPV4_H__
Benoit 0:19f5f51584de 15
Benoit 0:19f5f51584de 16 #include "NetIF.h"
Benoit 0:19f5f51584de 17
Benoit 0:19f5f51584de 18
Benoit 0:19f5f51584de 19 #define IPV4_PROTO_ICMPV4 1
Benoit 0:19f5f51584de 20 #define IPV4_PROTO_TCPV4 6
Benoit 0:19f5f51584de 21 #define IPV4_PROTO_UDPV4 17
Benoit 0:19f5f51584de 22
Benoit 0:19f5f51584de 23
Benoit 0:19f5f51584de 24 #define IPV4_VERSION 4
Benoit 0:19f5f51584de 25 #define IPV4_FLAG_DF 0x02
Benoit 0:19f5f51584de 26 #define IPV4_FLAG_MF 0x04
Benoit 0:19f5f51584de 27
Benoit 0:19f5f51584de 28 typedef uint16_t IPv4_Proto_t;
Benoit 0:19f5f51584de 29
Benoit 0:19f5f51584de 30
Benoit 0:19f5f51584de 31 #pragma push
Benoit 0:19f5f51584de 32 #pragma pack(1)
Benoit 0:19f5f51584de 33 struct IPv4_Header
Benoit 0:19f5f51584de 34 {
Benoit 0:19f5f51584de 35 uint8_t ihl :4;
Benoit 0:19f5f51584de 36 uint8_t version :4;
Benoit 0:19f5f51584de 37 uint8_t tos;
Benoit 0:19f5f51584de 38 uint16_t totalLength;
Benoit 0:19f5f51584de 39 uint16_t id;
Benoit 0:19f5f51584de 40 uint16_t fragmentFlags;
Benoit 0:19f5f51584de 41 uint8_t ttl;
Benoit 0:19f5f51584de 42 uint8_t protocol;
Benoit 0:19f5f51584de 43 uint16_t crc;
Benoit 0:19f5f51584de 44 IPv4_Addr_t source,
Benoit 0:19f5f51584de 45 dest;
Benoit 0:19f5f51584de 46 };
Benoit 0:19f5f51584de 47 #pragma pop
Benoit 0:19f5f51584de 48 typedef struct IPv4_Header IPv4_Header_t;
Benoit 0:19f5f51584de 49
Benoit 0:19f5f51584de 50
Benoit 0:19f5f51584de 51 extern Protocol_Handler_t ipv4;
Benoit 0:19f5f51584de 52
Benoit 0:19f5f51584de 53
Benoit 1:f4040665bc61 54 void IPv4_DumpIPv4Header(const char *prefix, IPv4_Header_t *ipv4Packet);
Benoit 1:f4040665bc61 55 uint16_t IPv4_ComputeCRC(IPv4_Header_t *ipv4Header);
Benoit 0:19f5f51584de 56
Benoit 0:19f5f51584de 57
Benoit 0:19f5f51584de 58 #endif /* __IPV4_H__ */
Benoit 0:19f5f51584de 59