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

net/ethernet.h

Committer:
etherealflaim
Date:
2010-10-12
Revision:
8:1c1f6ce348c6
Parent:
6:66c4cd9073aa

File content as of revision 8:1c1f6ce348c6:

#ifndef ETHERNET_H
#define ETHERNET_H

#include "net.h"

/**
  \file ethernet.h
  \brief Ethernet frame header
  
  This file contains the memory map and associated functions for Ethernet frame header
  creation and deconstruction. 
*/

/// Ethernet MAC address memory map
typedef struct {
  unsigned char octet[6]; ///< Individual octsts of the MAC address
} Ethernet_MAC;

/// Ethernet II Frame Header Memory map
typedef struct {
  /// Destination MAC address (6 octets)
  Ethernet_MAC destination;
  /// Source MAC address (6 octets)
  Ethernet_MAC source;
  // (optional) VLAN Tag (unsupported)
  /// Ethernet type or length (only <0x600 or 0x0800 IPv4 supported)
  u16 ethertype;
  /// Payload (used for memory mapping; has zero size)
  unsigned char payload[];
} Ethernet_FrameHeader;

/// Convert from wire to host or host to wire endian-ness
inline void fix_endian_ethernet(Ethernet_FrameHeader *header)
{
  fix_endian_u16(&header->ethertype);
}

/// Print out an ethernet packet
inline void print_ethernet(Ethernet_FrameHeader *frame)
{
  main_log.printf("Ethernet frame:");
  u8 *src = frame->source.octet;
  u8 *dst = frame->destination.octet;
  main_log.printf("  Source:    MAC - %02X:%02X:%02X:%02X:%02X:%02X", src[6], src[7], src[8], src[9], src[10], src[11]);
  main_log.printf("  Dest:      MAC - %02X:%02X:%02X:%02X:%02X:%02X", dst[0], dst[1], dst[2], dst[3], dst[4], dst[5]);
  main_log.printf("  Ethertype: 0x%04X", frame->ethertype);
}

#endif