Annotation of XNU/bsd/netinet/if_ether.h, revision 1.1

1.1     ! root        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:  * Copyright (c) 1982, 1986, 1993
        !            24:  *     The Regents of the University of California.  All rights reserved.
        !            25:  *
        !            26:  * Redistribution and use in source and binary forms, with or without
        !            27:  * modification, are permitted provided that the following conditions
        !            28:  * are met:
        !            29:  * 1. Redistributions of source code must retain the above copyright
        !            30:  *    notice, this list of conditions and the following disclaimer.
        !            31:  * 2. Redistributions in binary form must reproduce the above copyright
        !            32:  *    notice, this list of conditions and the following disclaimer in the
        !            33:  *    documentation and/or other materials provided with the distribution.
        !            34:  * 3. All advertising materials mentioning features or use of this software
        !            35:  *    must display the following acknowledgement:
        !            36:  *     This product includes software developed by the University of
        !            37:  *     California, Berkeley and its contributors.
        !            38:  * 4. Neither the name of the University nor the names of its contributors
        !            39:  *    may be used to endorse or promote products derived from this software
        !            40:  *    without specific prior written permission.
        !            41:  *
        !            42:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
        !            43:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            44:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            45:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            46:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            47:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            48:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            49:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            50:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            51:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            52:  * SUCH DAMAGE.
        !            53:  *
        !            54:  *     @(#)if_ether.h  8.3 (Berkeley) 5/2/95
        !            55:  */
        !            56: 
        !            57: #ifndef _NETINET_IF_ETHER_H_
        !            58: #define _NETINET_IF_ETHER_H_
        !            59: 
        !            60: 
        !            61: #include <net/ethernet.h>
        !            62: 
        !            63: #include <netinet/in.h>
        !            64: #include <net/if_arp.h>
        !            65: #include <net/etherdefs.h>
        !            66: #define ea_byte        ether_addr_octet
        !            67: 
        !            68: 
        !            69: /*
        !            70:  * Macro for looking up the ether_multi record for a given range of Ethernet
        !            71:  * multicast addresses connected to a given arpcom structure.  If no matching
        !            72:  * record is found, "enm" returns NULL.
        !            73:  */
        !            74: #define ETHER_LOOKUP_MULTI(addrlo, addrhi, ac, enm) \
        !            75:        /* u_char addrlo[6]; */ \
        !            76:        /* u_char addrhi[6]; */ \
        !            77:        /* struct arpcom *ac; */ \
        !            78:        /* struct ether_multi *enm; */ \
        !            79: { \
        !            80:        for ((enm) = (ac)->ac_multiaddrs; \
        !            81:            (enm) != NULL && \
        !            82:            (bcmp((enm)->enm_addrlo, (addrlo), 6) != 0 || \
        !            83:             bcmp((enm)->enm_addrhi, (addrhi), 6) != 0); \
        !            84:                (enm) = (enm)->enm_next); \
        !            85: }
        !            86: 
        !            87: /*
        !            88:  * Macro to step through all of the ether_multi records, one at a time.
        !            89:  * The current position is remembered in "step", which the caller must
        !            90:  * provide.  ETHER_FIRST_MULTI(), below, must be called to initialize "step"
        !            91:  * and get the first record.  Both macros return a NULL "enm" when there
        !            92:  * are no remaining records.
        !            93:  */
        !            94: #define ETHER_NEXT_MULTI(step, enm) \
        !            95:        /* struct ether_multistep step; */  \
        !            96:        /* struct ether_multi *enm; */  \
        !            97: { \
        !            98:        if (((enm) = (step).e_enm) != NULL) \
        !            99:                (step).e_enm = (enm)->enm_next; \
        !           100: }
        !           101: 
        !           102: #define ETHER_FIRST_MULTI(step, ac, enm) \
        !           103:        /* struct ether_multistep step; */ \
        !           104:        /* struct arpcom *ac; */ \
        !           105:        /* struct ether_multi *enm; */ \
        !           106: { \
        !           107:        (step).e_enm = (ac)->ac_multiaddrs; \
        !           108:        ETHER_NEXT_MULTI((step), (enm)); \
        !           109: }
        !           110: 
        !           111: /*
        !           112:  * Macro to map an IP multicast address to an Ethernet multicast address.
        !           113:  * The high-order 25 bits of the Ethernet address are statically assigned,
        !           114:  * and the low-order 23 bits are taken from the low end of the IP address.
        !           115:  */
        !           116: #define ETHER_MAP_IP_MULTICAST(ipaddr, enaddr) \
        !           117:        /* struct in_addr *ipaddr; */ \
        !           118:        /* u_char enaddr[ETHER_ADDR_LEN];          */ \
        !           119: { \
        !           120:        (enaddr)[0] = 0x01; \
        !           121:        (enaddr)[1] = 0x00; \
        !           122:        (enaddr)[2] = 0x5e; \
        !           123:        (enaddr)[3] = ((u_char *)ipaddr)[1] & 0x7f; \
        !           124:        (enaddr)[4] = ((u_char *)ipaddr)[2]; \
        !           125:        (enaddr)[5] = ((u_char *)ipaddr)[3]; \
        !           126: }
        !           127: 
        !           128: /*
        !           129:  * Ethernet Address Resolution Protocol.
        !           130:  *
        !           131:  * See RFC 826 for protocol description.  Structure below is adapted
        !           132:  * to resolving internet addresses.  Field names used correspond to
        !           133:  * RFC 826.
        !           134:  */
        !           135: struct ether_arp {
        !           136:        struct  arphdr ea_hdr;  /* fixed-size header */
        !           137:        u_char  arp_sha[ETHER_ADDR_LEN];        /* sender hardware address */
        !           138:        u_char  arp_spa[4];     /* sender protocol address */
        !           139:        u_char  arp_tha[ETHER_ADDR_LEN];        /* target hardware address */
        !           140:        u_char  arp_tpa[4];     /* target protocol address */
        !           141: };
        !           142: #define        arp_hrd ea_hdr.ar_hrd
        !           143: #define        arp_pro ea_hdr.ar_pro
        !           144: #define        arp_hln ea_hdr.ar_hln
        !           145: #define        arp_pln ea_hdr.ar_pln
        !           146: #define        arp_op  ea_hdr.ar_op
        !           147: 
        !           148: struct sockaddr_inarp {
        !           149:        u_char  sin_len;
        !           150:        u_char  sin_family;
        !           151:        u_short sin_port;
        !           152:        struct  in_addr sin_addr;
        !           153:        struct  in_addr sin_srcaddr;
        !           154:        u_short sin_tos;
        !           155:        u_short sin_other;
        !           156: #define SIN_PROXY 1
        !           157: };
        !           158: /*
        !           159:  * IP and ethernet specific routing flags
        !           160:  */
        !           161: #define        RTF_USETRAILERS RTF_PROTO1      /* use trailers */
        !           162: #define RTF_ANNOUNCE   RTF_PROTO2      /* announce new arp entry */
        !           163: 
        !           164: #ifdef KERNEL
        !           165: extern u_char  ether_ipmulticast_min[ETHER_ADDR_LEN];
        !           166: extern u_char  ether_ipmulticast_max[ETHER_ADDR_LEN];
        !           167: extern struct  ifqueue arpintrq;
        !           168: 
        !           169: int    arpresolve __P((struct arpcom *, struct rtentry *, struct mbuf *,
        !           170:                        struct sockaddr *, u_char *, struct rtentry *));
        !           171: void   arp_ifinit __P((struct arpcom *, struct ifaddr *));
        !           172: #endif
        !           173: 
        !           174: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.