75 lines
2.0 KiB
C
75 lines
2.0 KiB
C
// -------------------------------------------------------------------------
|
|
// ethernet.h
|
|
//
|
|
// 21.12.2003, J. Ahrensfeld
|
|
//
|
|
// -------------------------------------------------------------------------
|
|
#ifndef ETHERNET_H
|
|
#define ETHERNET_H
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <signal.h>
|
|
#include <time.h>
|
|
#include <sys/time.h>
|
|
#include <sys/types.h>
|
|
#include "libsys.h"
|
|
|
|
#define ETH_PACKET_MIN_SIZE 64
|
|
#define ETH_PACKET_MAX_SIZE 1500
|
|
|
|
// -------------------------------------------------------------------------
|
|
#define ARP_REQUEST 0x0001
|
|
#define ARP_REPLY 0x0002
|
|
|
|
#define TYPE_HW_ETH10 0x0001
|
|
#define TYPE_HW_ETH3 0x0002
|
|
#define TYPE_HW_AX25 0x0003
|
|
#define TYPE_HW_TKRNG 0x0004
|
|
#define TYPE_HW_CHAOS 0x0005
|
|
#define TYPE_HW_IEEE 0x0006
|
|
#define TYPE_HW_ARCNET 0x0007
|
|
|
|
#define TYPE_PROTO_IP 0x0800
|
|
#define TYPE_PROTO_X75 0x0801
|
|
#define TYPE_PROTO_NBS 0x0802
|
|
#define TYPE_PROTO_ECMA 0x0803
|
|
#define TYPE_PROTO_CHAOS 0x0804
|
|
#define TYPE_PROTO_X25 0x0805
|
|
#define TYPE_PROTO_ARP 0x0806
|
|
#define TYPE_PROTO_XNS 0x0807
|
|
#define TYPE_PROTO_LOOP 0x9000
|
|
|
|
#define HTONS(n) ((((uint16_t)((n) & 0xff)) << 8) | (((n) & 0xff00) >> 8))
|
|
|
|
// -------------------------------------------------------------------------
|
|
typedef struct _seth_hdr_t
|
|
{
|
|
uint8_t eth_addr_dst[6], eth_addr_src[6];
|
|
uint16_t proto;
|
|
|
|
} __attribute__ ((__packed__)) eth_hdr_t;
|
|
|
|
typedef struct _spacket_t
|
|
{
|
|
uint8_t pkt_buf[1516];
|
|
uint16_t size;
|
|
uint8_t *pData;
|
|
|
|
} packet_t;
|
|
|
|
// -------------------------------------------------------------------------
|
|
void EthInit(void);
|
|
uint8_t *Eth_pkt_create(packet_t *pPacket, uint16_t proto, uint8_t *pHwAddr_src, uint8_t *pHwAddr_dst);
|
|
uint8_t *Eth_pkt_append(packet_t *pPacket, uint32_t size);
|
|
uint8_t *Eth_pkt_buffer_get(packet_t *pPacket);
|
|
|
|
uint32_t Eth_pkt_send(packet_t *pPacket);
|
|
uint32_t Eth_pkt_recv(uint8_t *pData);
|
|
|
|
uint16_t htons(uint16_t a);
|
|
|
|
// -------------------------------------------------------------------------
|
|
#endif // ETHERNET_H
|