home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 4 / hacker04 / 04_HACK04.ISO / darwin / darwinx86.iso / usr / include / net / ethernet.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-09-30  |  3.2 KB  |  124 lines

  1. /*
  2.  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
  3.  *
  4.  * @APPLE_LICENSE_HEADER_START@
  5.  * 
  6.  * The contents of this file constitute Original Code as defined in and
  7.  * are subject to the Apple Public Source License Version 1.1 (the
  8.  * "License").  You may not use this file except in compliance with the
  9.  * License.  Please obtain a copy of the License at
  10.  * http://www.apple.com/publicsource and read it before using this file.
  11.  * 
  12.  * This Original Code and all software distributed under the License are
  13.  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  14.  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  15.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
  16.  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
  17.  * License for the specific language governing rights and limitations
  18.  * under the License.
  19.  * 
  20.  * @APPLE_LICENSE_HEADER_END@
  21.  */
  22. /*
  23.  * Fundamental constants relating to ethernet.
  24.  *
  25.  */
  26.  
  27. #ifndef _NET_ETHERNET_H_
  28. #define _NET_ETHERNET_H_
  29.  
  30. /*
  31.  * The number of bytes in an ethernet (MAC) address.
  32.  */
  33. #define    ETHER_ADDR_LEN        6
  34.  
  35. /*
  36.  * The number of bytes in the type field.
  37.  */
  38. #define    ETHER_TYPE_LEN        2
  39.  
  40. /*
  41.  * The number of bytes in the trailing CRC field.
  42.  */
  43. #define    ETHER_CRC_LEN        4
  44.  
  45. /*
  46.  * The length of the combined header.
  47.  */
  48. #define    ETHER_HDR_LEN        (ETHER_ADDR_LEN*2+ETHER_TYPE_LEN)
  49.  
  50. /*
  51.  * The minimum packet length.
  52.  */
  53. #define    ETHER_MIN_LEN        64
  54.  
  55. /*
  56.  * The maximum packet length.
  57.  */
  58. #define    ETHER_MAX_LEN        1518
  59.  
  60. /*
  61.  * A macro to validate a length with
  62.  */
  63. #define    ETHER_IS_VALID_LEN(foo)    \
  64.     ((foo) >= ETHER_MIN_LEN && (foo) <= ETHER_MAX_LEN)
  65.  
  66. /*
  67.  * Structure of a 10Mb/s Ethernet header.
  68.  */
  69. struct    ether_header {
  70.     u_char    ether_dhost[ETHER_ADDR_LEN];
  71.     u_char    ether_shost[ETHER_ADDR_LEN];
  72.     u_short    ether_type;
  73. };
  74.  
  75. /*
  76.  * Structure of a 48-bit Ethernet address.
  77.  */
  78. struct    ether_addr {
  79.     u_char octet[ETHER_ADDR_LEN];
  80. };
  81.  
  82. #define ether_addr_octet octet
  83.  
  84. #define    ETHERTYPE_PUP        0x0200    /* PUP protocol */
  85. #define    ETHERTYPE_IP        0x0800    /* IP protocol */
  86. #define ETHERTYPE_ARP        0x0806    /* Addr. resolution protocol */
  87. #define ETHERTYPE_REVARP    0x8035    /* reverse Addr. resolution protocol */
  88. #define    ETHERTYPE_VLAN        0x8100    /* IEEE 802.1Q VLAN tagging */
  89. #define ETHERTYPE_IPV6        0x86dd    /* IPv6 */
  90. #define    ETHERTYPE_LOOPBACK    0x9000    /* used to test interfaces */
  91. /* XXX - add more useful types here */
  92.  
  93. /*
  94.  * The ETHERTYPE_NTRAILER packet types starting at ETHERTYPE_TRAIL have
  95.  * (type-ETHERTYPE_TRAIL)*512 bytes of data followed
  96.  * by an ETHER type (as given above) and then the (variable-length) header.
  97.  */
  98. #define    ETHERTYPE_TRAIL        0x1000        /* Trailer packet */
  99. #define    ETHERTYPE_NTRAILER    16
  100.  
  101. #define    ETHERMTU    (ETHER_MAX_LEN-ETHER_HDR_LEN-ETHER_CRC_LEN)
  102. #define    ETHERMIN    (ETHER_MIN_LEN-ETHER_HDR_LEN-ETHER_CRC_LEN)
  103.  
  104. #if KERNEL
  105. struct    ether_addr *ether_aton __P((char *));
  106. #endif
  107.  
  108. #if !KERNEL
  109. #include <sys/cdefs.h>
  110.  
  111. /*
  112.  * Ethernet address conversion/parsing routines.
  113.  */
  114. __BEGIN_DECLS
  115.  
  116. int    ether_hostton __P((char *, struct ether_addr *));
  117. int    ether_line __P((char *, struct ether_addr *, char *));
  118. char     *ether_ntoa __P((struct ether_addr *));
  119. int    ether_ntohost __P((char *, struct ether_addr *));
  120. __END_DECLS
  121. #endif /* !KERNEL */
  122.  
  123. #endif /* !_NET_ETHERNET_H_ */
  124.