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: ICMPv4.h 23 2011-06-06 06:03:23Z benoit $
Benoit 0:19f5f51584de 3 * $Author: benoit $
Benoit 0:19f5f51584de 4 * $Date: 2011-06-06 08:03:23 +0200 (lun., 06 juin 2011) $
Benoit 0:19f5f51584de 5 * $Rev: 23 $
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 __ICMPV4_H__
Benoit 0:19f5f51584de 14 #define __ICMPV4_H__
Benoit 0:19f5f51584de 15
Benoit 0:19f5f51584de 16
Benoit 0:19f5f51584de 17 #include "NetIF.h"
Benoit 0:19f5f51584de 18 #include "IPv4.h"
Benoit 0:19f5f51584de 19
Benoit 0:19f5f51584de 20
Benoit 0:19f5f51584de 21 #define ICMPV4_TYPE_ECHO_REPLY 0
Benoit 0:19f5f51584de 22 #define ICMPV4_TYPE_ECHO_REQUEST 8
Benoit 0:19f5f51584de 23
Benoit 0:19f5f51584de 24
Benoit 0:19f5f51584de 25 typedef uint8_t ICMPv4_Type_t;
Benoit 0:19f5f51584de 26 typedef uint8_t ICMPv4_Code_t;
Benoit 0:19f5f51584de 27
Benoit 0:19f5f51584de 28
Benoit 0:19f5f51584de 29 #pragma push
Benoit 0:19f5f51584de 30 #pragma pack(1)
Benoit 0:19f5f51584de 31 struct ICMPv4_Header
Benoit 0:19f5f51584de 32 {
Benoit 0:19f5f51584de 33 uint8_t type;
Benoit 0:19f5f51584de 34 uint8_t code;
Benoit 0:19f5f51584de 35 uint16_t crc;
Benoit 0:19f5f51584de 36 union
Benoit 0:19f5f51584de 37 {
Benoit 0:19f5f51584de 38 uint32_t restOfHeader;
Benoit 0:19f5f51584de 39 struct
Benoit 0:19f5f51584de 40 {
Benoit 0:19f5f51584de 41 uint16_t id,
Benoit 0:19f5f51584de 42 sequence;
Benoit 0:19f5f51584de 43 } ping;
Benoit 0:19f5f51584de 44 } rest;
Benoit 0:19f5f51584de 45 };
Benoit 0:19f5f51584de 46 #pragma pop
Benoit 0:19f5f51584de 47 typedef struct ICMPv4_Header ICMPv4_Header_t;
Benoit 0:19f5f51584de 48
Benoit 0:19f5f51584de 49
Benoit 0:19f5f51584de 50 extern Protocol_Handler_t icmpv4;
Benoit 0:19f5f51584de 51
Benoit 0:19f5f51584de 52
Benoit 1:f4040665bc61 53 uint16_t ICMPv4_ComputeCRC(ICMPv4_Header_t *packet, int32_t length);
Benoit 1:f4040665bc61 54 Bool_t ICMPv4_CheckCRC(ICMPv4_Header_t *packet, int32_t length);
Benoit 1:f4040665bc61 55 void ICMPv4_DumpHeader(const char *prefix, IPv4_Header_t *ipv4Header);
Benoit 0:19f5f51584de 56
Benoit 0:19f5f51584de 57 #endif /* __ICMPV4_H__ */