1 /* 2 * INET An implementation of the TCP/IP protocol suite for the LINUX 3 * operating system. INET is implemented using the BSD Socket 4 * interface as the means of communication with the user level. 5 * 6 * Global definitions for the Ethernet IEE 802.3 interface. 7 * 8 * Version: @(#)if_ether.h 1.0.1 03/15/93 9 * 10 * Author: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> 11 * 12 * This program is free software; you can redistribute it and/or 13 * modify it under the terms of the GNU General Public License 14 * as published by the Free Software Foundation; either version 15 * 2 of the License, or (at your option) any later version. 16 */ 17 #ifndef _LINUX_IF_ETHER_H 18 #define _LINUX_IF_ETHER_H 19 20 21 /* IEEE 802.3 Ethernet magic constants. */ 22 #define ETH_ALEN 6 /* #bytes in eth addr */ 23 #define ETH_HLEN 14 /* #bytes in eth header */ 24 #define ETH_ZLEN 64 /* min #bytes in frame */ 25 #define ETH_FLEN 1536 /* max #bytes in frame */ 26 #define ETH_DLEN (ETH_FLEN - ETH_HLEN) /* max #bytes of data */ 27 28 /* These are the defined Ethernet Protocol ID's. */ 29 #define ETH_P_LOOP 0x0060 /* Ethernet Loopback packet */ 30 #define ETH_P_ECHO 0x0200 /* Ethernet Echo packet */ 31 #define ETH_P_PUP 0x0400 /* Xerox PUP packet */ 32 #define ETH_P_IP 0x0800 /* Internet Protocol packet */ 33 #define ETH_P_ARP 0x0806 /* Address Resolution packet */ 34 #define ETH_P_RARP 0x0835 /* Reverse Addr Res packet */ 35 #define ETH_P_802_3 0x0001 /* Dummy type for 802.3 frames */ 36 37 /* Define the Ethernet Broadcast Address (48 bits set to "1"). */ 38 #define ETH_A_BCAST "\377\377\377\377\377\377" 39 40 /* This is an Ethernet frame header. */ 41 struct ethhdr { 42 unsigned char h_dest[ETH_ALEN]; /* destination eth addr */ 43 unsigned char h_source[ETH_ALEN]; /* source ether addr */ 44 unsigned short h_proto; /* packet type ID field */ 45 }; 46 47 /* This is the complete Ethernet frame. */ 48 struct ethframe { 49 struct ethhdr f_hdr; /* frame header */ 50 char f_data[ETH_DLEN]; /* frame data (variable)*/ 51 }; 52 53 54 /* Receiver modes */ 55 #define ETH_MODE_MONITOR 1 /* Monitor mode - no receive */ 56 #define ETH_MODE_PHYS 2 /* Physical address receive only */ 57 #define ETH_MODE_BCAST 3 /* Broadcast receive + mode 2 */ 58 #define ETH_MODE_MCAST 4 /* Multicast receive + mode 3 */ 59 #define ETH_MODE_PROMISC 5 /* Promiscuous mode - receive all */ 60 61 62 /* Ethernet statistics collection data. */ 63 struct enet_statistics{ 64 int rx_packets; /* total packets received */ 65 int tx_packets; /* total packets transmitted */ 66 int rx_errors; /* bad packets received */ 67 int tx_errors; /* packet transmit problems */ 68 int rx_dropped; /* no space in linux buffers */ 69 int tx_dropped; /* no space available in linux */ 70 int multicast; /* multicast packets received */ 71 int collisions; 72 73 /* detailed rx_errors: */ 74 int rx_length_errors; 75 int rx_over_errors; /* receiver ring buff overflow */ 76 int rx_crc_errors; /* recved pkt with crc error */ 77 int rx_frame_errors; /* recv'd frame alignment error */ 78 int rx_fifo_errors; /* recv'r fifo overrun */ 79 int rx_missed_errors; /* receiver missed packet */ 80 81 /* detailed tx_errors */ 82 int tx_aborted_errors; 83 int tx_carrier_errors; 84 int tx_fifo_errors; 85 int tx_heartbeat_errors; 86 int tx_window_errors; 87 }; 88 89 #endif /* _LINUX_IF_ETHER_H */