// ------------------------------------------------------------------------- // ethernet.h // // 21.12.2003, J. Ahrensfeld // // ------------------------------------------------------------------------- #ifndef ETHERNET_H #define ETHERNET_H #include #include #include #include #include #include #include #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