1*8d67ca89SAndroid Build Coastguard Worker /* $NetBSD: if_ether.h,v 1.34 2007/12/25 18:33:46 perry Exp $ */ 2*8d67ca89SAndroid Build Coastguard Worker 3*8d67ca89SAndroid Build Coastguard Worker /* 4*8d67ca89SAndroid Build Coastguard Worker * Copyright (c) 1982, 1986, 1993 5*8d67ca89SAndroid Build Coastguard Worker * The Regents of the University of California. All rights reserved. 6*8d67ca89SAndroid Build Coastguard Worker * 7*8d67ca89SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 8*8d67ca89SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 9*8d67ca89SAndroid Build Coastguard Worker * are met: 10*8d67ca89SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright 11*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 12*8d67ca89SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 13*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 14*8d67ca89SAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 15*8d67ca89SAndroid Build Coastguard Worker * 3. Neither the name of the University nor the names of its contributors 16*8d67ca89SAndroid Build Coastguard Worker * may be used to endorse or promote products derived from this software 17*8d67ca89SAndroid Build Coastguard Worker * without specific prior written permission. 18*8d67ca89SAndroid Build Coastguard Worker * 19*8d67ca89SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20*8d67ca89SAndroid Build Coastguard Worker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21*8d67ca89SAndroid Build Coastguard Worker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22*8d67ca89SAndroid Build Coastguard Worker * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23*8d67ca89SAndroid Build Coastguard Worker * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24*8d67ca89SAndroid Build Coastguard Worker * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25*8d67ca89SAndroid Build Coastguard Worker * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26*8d67ca89SAndroid Build Coastguard Worker * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27*8d67ca89SAndroid Build Coastguard Worker * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28*8d67ca89SAndroid Build Coastguard Worker * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29*8d67ca89SAndroid Build Coastguard Worker * SUCH DAMAGE. 30*8d67ca89SAndroid Build Coastguard Worker * 31*8d67ca89SAndroid Build Coastguard Worker * @(#)if_ether.h 8.3 (Berkeley) 5/2/95 32*8d67ca89SAndroid Build Coastguard Worker */ 33*8d67ca89SAndroid Build Coastguard Worker 34*8d67ca89SAndroid Build Coastguard Worker #ifndef _NETINET_IF_ETHER_H_ 35*8d67ca89SAndroid Build Coastguard Worker #define _NETINET_IF_ETHER_H_ 36*8d67ca89SAndroid Build Coastguard Worker 37*8d67ca89SAndroid Build Coastguard Worker #include <sys/cdefs.h> 38*8d67ca89SAndroid Build Coastguard Worker #include <sys/types.h> 39*8d67ca89SAndroid Build Coastguard Worker 40*8d67ca89SAndroid Build Coastguard Worker #if defined(__USE_BSD) 41*8d67ca89SAndroid Build Coastguard Worker 42*8d67ca89SAndroid Build Coastguard Worker /* pull in Ethernet-specific definitions and packet structures */ 43*8d67ca89SAndroid Build Coastguard Worker 44*8d67ca89SAndroid Build Coastguard Worker #include <linux/if_ether.h> 45*8d67ca89SAndroid Build Coastguard Worker 46*8d67ca89SAndroid Build Coastguard Worker /* pull in ARP-specific definitions and packet structures */ 47*8d67ca89SAndroid Build Coastguard Worker 48*8d67ca89SAndroid Build Coastguard Worker #include <net/if_arp.h> 49*8d67ca89SAndroid Build Coastguard Worker 50*8d67ca89SAndroid Build Coastguard Worker #include <net/ethernet.h> 51*8d67ca89SAndroid Build Coastguard Worker 52*8d67ca89SAndroid Build Coastguard Worker /* ... and define some more which we don't need anymore: */ 53*8d67ca89SAndroid Build Coastguard Worker 54*8d67ca89SAndroid Build Coastguard Worker /* 55*8d67ca89SAndroid Build Coastguard Worker * Ethernet Address Resolution Protocol. 56*8d67ca89SAndroid Build Coastguard Worker * 57*8d67ca89SAndroid Build Coastguard Worker * See RFC 826 for protocol description. Structure below is not 58*8d67ca89SAndroid Build Coastguard Worker * used by our kernel!!! Only for userland programs which are externally 59*8d67ca89SAndroid Build Coastguard Worker * maintained and need it. 60*8d67ca89SAndroid Build Coastguard Worker */ 61*8d67ca89SAndroid Build Coastguard Worker 62*8d67ca89SAndroid Build Coastguard Worker struct ether_arp { 63*8d67ca89SAndroid Build Coastguard Worker struct arphdr ea_hdr; /* fixed-size header */ 64*8d67ca89SAndroid Build Coastguard Worker u_int8_t arp_sha[ETHER_ADDR_LEN]; /* sender hardware address */ 65*8d67ca89SAndroid Build Coastguard Worker u_int8_t arp_spa[4]; /* sender protocol address */ 66*8d67ca89SAndroid Build Coastguard Worker u_int8_t arp_tha[ETHER_ADDR_LEN]; /* target hardware address */ 67*8d67ca89SAndroid Build Coastguard Worker u_int8_t arp_tpa[4]; /* target protocol address */ 68*8d67ca89SAndroid Build Coastguard Worker } __packed; 69*8d67ca89SAndroid Build Coastguard Worker #define arp_hrd ea_hdr.ar_hrd 70*8d67ca89SAndroid Build Coastguard Worker #define arp_pro ea_hdr.ar_pro 71*8d67ca89SAndroid Build Coastguard Worker #define arp_hln ea_hdr.ar_hln 72*8d67ca89SAndroid Build Coastguard Worker #define arp_pln ea_hdr.ar_pln 73*8d67ca89SAndroid Build Coastguard Worker #define arp_op ea_hdr.ar_op 74*8d67ca89SAndroid Build Coastguard Worker 75*8d67ca89SAndroid Build Coastguard Worker /* 76*8d67ca89SAndroid Build Coastguard Worker * Macro to map an IP multicast address to an Ethernet multicast address. 77*8d67ca89SAndroid Build Coastguard Worker * The high-order 25 bits of the Ethernet address are statically assigned, 78*8d67ca89SAndroid Build Coastguard Worker * and the low-order 23 bits are taken from the low end of the IP address. 79*8d67ca89SAndroid Build Coastguard Worker */ 80*8d67ca89SAndroid Build Coastguard Worker #define ETHER_MAP_IP_MULTICAST(ipaddr, enaddr) \ 81*8d67ca89SAndroid Build Coastguard Worker /* struct in_addr *ipaddr; */ \ 82*8d67ca89SAndroid Build Coastguard Worker /* u_int8_t enaddr[ETHER_ADDR_LEN]; */ \ 83*8d67ca89SAndroid Build Coastguard Worker { \ 84*8d67ca89SAndroid Build Coastguard Worker (enaddr)[0] = 0x01; \ 85*8d67ca89SAndroid Build Coastguard Worker (enaddr)[1] = 0x00; \ 86*8d67ca89SAndroid Build Coastguard Worker (enaddr)[2] = 0x5e; \ 87*8d67ca89SAndroid Build Coastguard Worker (enaddr)[3] = ((u_int8_t *)ipaddr)[1] & 0x7f; \ 88*8d67ca89SAndroid Build Coastguard Worker (enaddr)[4] = ((u_int8_t *)ipaddr)[2]; \ 89*8d67ca89SAndroid Build Coastguard Worker (enaddr)[5] = ((u_int8_t *)ipaddr)[3]; \ 90*8d67ca89SAndroid Build Coastguard Worker } 91*8d67ca89SAndroid Build Coastguard Worker /* 92*8d67ca89SAndroid Build Coastguard Worker * Macro to map an IP6 multicast address to an Ethernet multicast address. 93*8d67ca89SAndroid Build Coastguard Worker * The high-order 16 bits of the Ethernet address are statically assigned, 94*8d67ca89SAndroid Build Coastguard Worker * and the low-order 32 bits are taken from the low end of the IP6 address. 95*8d67ca89SAndroid Build Coastguard Worker */ 96*8d67ca89SAndroid Build Coastguard Worker #define ETHER_MAP_IPV6_MULTICAST(ip6addr, enaddr) \ 97*8d67ca89SAndroid Build Coastguard Worker /* struct in6_addr *ip6addr; */ \ 98*8d67ca89SAndroid Build Coastguard Worker /* u_int8_t enaddr[ETHER_ADDR_LEN]; */ \ 99*8d67ca89SAndroid Build Coastguard Worker { \ 100*8d67ca89SAndroid Build Coastguard Worker (enaddr)[0] = 0x33; \ 101*8d67ca89SAndroid Build Coastguard Worker (enaddr)[1] = 0x33; \ 102*8d67ca89SAndroid Build Coastguard Worker (enaddr)[2] = ((u_int8_t *)ip6addr)[12]; \ 103*8d67ca89SAndroid Build Coastguard Worker (enaddr)[3] = ((u_int8_t *)ip6addr)[13]; \ 104*8d67ca89SAndroid Build Coastguard Worker (enaddr)[4] = ((u_int8_t *)ip6addr)[14]; \ 105*8d67ca89SAndroid Build Coastguard Worker (enaddr)[5] = ((u_int8_t *)ip6addr)[15]; \ 106*8d67ca89SAndroid Build Coastguard Worker } 107*8d67ca89SAndroid Build Coastguard Worker 108*8d67ca89SAndroid Build Coastguard Worker #endif /* __USE_BSD */ 109*8d67ca89SAndroid Build Coastguard Worker 110*8d67ca89SAndroid Build Coastguard Worker #endif /* !_NET_IF_ETHER_H_ */ 111