This is a low-level network debugging utility that utilizes raw packet i/o to construct and deconstruct tcp, udp, ipv4, arp, and icmp packets over ethernet.

Dependencies:   mbed

Committer:
etherealflaim
Date:
Tue Oct 12 06:14:19 2010 +0000
Revision:
3:c32d9660b888
Parent:
2:e8e09adc41fc
Child:
6:66c4cd9073aa
Documentation updates

Who changed what in which revision?

UserRevisionLine numberNew contents of line
etherealflaim 0:d494b853ce97 1 #ifndef ETHERNET_H
etherealflaim 0:d494b853ce97 2 #define ETHERNET_H
etherealflaim 0:d494b853ce97 3
etherealflaim 0:d494b853ce97 4 #include "net.h"
etherealflaim 0:d494b853ce97 5
etherealflaim 2:e8e09adc41fc 6 /// \file Ethernet frames
etherealflaim 2:e8e09adc41fc 7
etherealflaim 3:c32d9660b888 8 /// Ethernet MAC address memory map
etherealflaim 0:d494b853ce97 9 typedef struct {
etherealflaim 2:e8e09adc41fc 10 unsigned char octet[6]; ///< Individual octsts of the MAC address
etherealflaim 0:d494b853ce97 11 } Ethernet_MAC;
etherealflaim 0:d494b853ce97 12
etherealflaim 3:c32d9660b888 13 /// Ethernet II Frame Header Memory map
etherealflaim 0:d494b853ce97 14 typedef struct {
etherealflaim 2:e8e09adc41fc 15 /// Destination MAC address (6 octets)
etherealflaim 0:d494b853ce97 16 Ethernet_MAC destination;
etherealflaim 2:e8e09adc41fc 17 /// Source MAC address (6 octets)
etherealflaim 0:d494b853ce97 18 Ethernet_MAC source;
etherealflaim 0:d494b853ce97 19 // (optional) VLAN Tag (unsupported)
etherealflaim 2:e8e09adc41fc 20 /// Ethernet type or length (only <0x600 or 0x0800 IPv4 supported)
etherealflaim 0:d494b853ce97 21 u16 ethertype;
etherealflaim 2:e8e09adc41fc 22 /// Payload (used for memory mapping; has zero size)
etherealflaim 0:d494b853ce97 23 unsigned char payload[];
etherealflaim 0:d494b853ce97 24 } Ethernet_FrameHeader;
etherealflaim 0:d494b853ce97 25
etherealflaim 2:e8e09adc41fc 26 /// Convert from wire to host or host to wire endian-ness
etherealflaim 0:d494b853ce97 27 inline void fix_endian_ethernet(Ethernet_FrameHeader *header)
etherealflaim 0:d494b853ce97 28 {
etherealflaim 0:d494b853ce97 29 fix_endian_u16(&header->ethertype);
etherealflaim 0:d494b853ce97 30 }
etherealflaim 0:d494b853ce97 31
etherealflaim 2:e8e09adc41fc 32 /// Print out an ethernet packet
etherealflaim 0:d494b853ce97 33 inline void print_ethernet(Ethernet_FrameHeader *frame)
etherealflaim 0:d494b853ce97 34 {
etherealflaim 0:d494b853ce97 35 main_log.printf("Ethernet frame:");
etherealflaim 0:d494b853ce97 36 u8 *src = frame->source.octet;
etherealflaim 0:d494b853ce97 37 u8 *dst = frame->destination.octet;
etherealflaim 0:d494b853ce97 38 main_log.printf(" Source: MAC - %02X:%02X:%02X:%02X:%02X:%02X", src[6], src[7], src[8], src[9], src[10], src[11]);
etherealflaim 0:d494b853ce97 39 main_log.printf(" Dest: MAC - %02X:%02X:%02X:%02X:%02X:%02X", dst[0], dst[1], dst[2], dst[3], dst[4], dst[5]);
etherealflaim 0:d494b853ce97 40 main_log.printf(" Ethertype: 0x%04X", frame->ethertype);
etherealflaim 0:d494b853ce97 41 }
etherealflaim 0:d494b853ce97 42
etherealflaim 0:d494b853ce97 43 #endif