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_IPX 0x8137 /* IPX over DIX */ 36 #define ETH_P_802_3 0x0001 /* Dummy type for 802.3 frames */ 37 #define ETH_P_AX25 0x0002 /* Dummy protocol id for AX.25 */ 38 39 /* Define the Ethernet Broadcast Address (48 bits set to "1"). */ 40 #define ETH_A_BCAST "\377\377\377\377\377\377" 41 42 /* This is an Ethernet frame header. */ 43 struct ethhdr { 44 unsigned char h_dest[ETH_ALEN]; /* destination eth addr */ 45 unsigned char h_source[ETH_ALEN]; /* source ether addr */ 46 unsigned short h_proto; /* packet type ID field */ 47 }; 48 49 /* This is the complete Ethernet frame. */ 50 struct ethframe { 51 struct ethhdr f_hdr; /* frame header */ 52 char f_data[ETH_DLEN]; /* frame data (variable)*/ 53 }; 54 55 56 /* Receiver modes */ 57 #define ETH_MODE_MONITOR 1 /* Monitor mode - no receive */ 58 #define ETH_MODE_PHYS 2 /* Physical address receive only */ 59 #define ETH_MODE_BCAST 3 /* Broadcast receive + mode 2 */ 60 #define ETH_MODE_MCAST 4 /* Multicast receive + mode 3 */ 61 #define ETH_MODE_PROMISC 5 /* Promiscuous mode - receive all */ 62 63 64 /* Ethernet statistics collection data. */ 65 struct enet_statistics{ 66 int rx_packets; /* total packets received */ 67 int tx_packets; /* total packets transmitted */ 68 int rx_errors; /* bad packets received */ 69 int tx_errors; /* packet transmit problems */ 70 int rx_dropped; /* no space in linux buffers */ 71 int tx_dropped; /* no space available in linux */ 72 int multicast; /* multicast packets received */ 73 int collisions; 74 75 /* detailed rx_errors: */ 76 int rx_length_errors; 77 int rx_over_errors; /* receiver ring buff overflow */ 78 int rx_crc_errors; /* recved pkt with crc error */ 79 int rx_frame_errors; /* recv'd frame alignment error */ 80 int rx_fifo_errors; /* recv'r fifo overrun */ 81 int rx_missed_errors; /* receiver missed packet */ 82 83 /* detailed tx_errors */ 84 int tx_aborted_errors; 85 int tx_carrier_errors; 86 int tx_fifo_errors; 87 int tx_heartbeat_errors; 88 int tx_window_errors; 89 }; 90 91 #endif /* _LINUX_IF_ETHER_H */