199767f8919635c4928607450d9e0abb932109ceToomas Soome/*-
199767f8919635c4928607450d9e0abb932109ceToomas Soome * Copyright (c) 1982, 1986, 1993
199767f8919635c4928607450d9e0abb932109ceToomas Soome * The Regents of the University of California. All rights reserved.
199767f8919635c4928607450d9e0abb932109ceToomas Soome *
199767f8919635c4928607450d9e0abb932109ceToomas Soome * Redistribution and use in source and binary forms, with or without
199767f8919635c4928607450d9e0abb932109ceToomas Soome * modification, are permitted provided that the following conditions
199767f8919635c4928607450d9e0abb932109ceToomas Soome * are met:
199767f8919635c4928607450d9e0abb932109ceToomas Soome * 1. Redistributions of source code must retain the above copyright
199767f8919635c4928607450d9e0abb932109ceToomas Soome * notice, this list of conditions and the following disclaimer.
199767f8919635c4928607450d9e0abb932109ceToomas Soome * 2. Redistributions in binary form must reproduce the above copyright
199767f8919635c4928607450d9e0abb932109ceToomas Soome * notice, this list of conditions and the following disclaimer in the
199767f8919635c4928607450d9e0abb932109ceToomas Soome * documentation and/or other materials provided with the distribution.
199767f8919635c4928607450d9e0abb932109ceToomas Soome * 4. Neither the name of the University nor the names of its contributors
199767f8919635c4928607450d9e0abb932109ceToomas Soome * may be used to endorse or promote products derived from this software
199767f8919635c4928607450d9e0abb932109ceToomas Soome * without specific prior written permission.
199767f8919635c4928607450d9e0abb932109ceToomas Soome *
199767f8919635c4928607450d9e0abb932109ceToomas Soome * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
199767f8919635c4928607450d9e0abb932109ceToomas Soome * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
199767f8919635c4928607450d9e0abb932109ceToomas Soome * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
199767f8919635c4928607450d9e0abb932109ceToomas Soome * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
199767f8919635c4928607450d9e0abb932109ceToomas Soome * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
199767f8919635c4928607450d9e0abb932109ceToomas Soome * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
199767f8919635c4928607450d9e0abb932109ceToomas Soome * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
199767f8919635c4928607450d9e0abb932109ceToomas Soome * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
199767f8919635c4928607450d9e0abb932109ceToomas Soome * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
199767f8919635c4928607450d9e0abb932109ceToomas Soome * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
199767f8919635c4928607450d9e0abb932109ceToomas Soome * SUCH DAMAGE.
199767f8919635c4928607450d9e0abb932109ceToomas Soome *
199767f8919635c4928607450d9e0abb932109ceToomas Soome * @(#)if_ether.h 8.3 (Berkeley) 5/2/95
199767f8919635c4928607450d9e0abb932109ceToomas Soome * $FreeBSD$
199767f8919635c4928607450d9e0abb932109ceToomas Soome */
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#ifndef _NETINET_IF_ETHER_H_
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define _NETINET_IF_ETHER_H_
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#include <net/ethernet.h>
199767f8919635c4928607450d9e0abb932109ceToomas Soome#include <net/if_arp.h>
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome/*
199767f8919635c4928607450d9e0abb932109ceToomas Soome * Macro to map an IP multicast address to an Ethernet multicast address.
199767f8919635c4928607450d9e0abb932109ceToomas Soome * The high-order 25 bits of the Ethernet address are statically assigned,
199767f8919635c4928607450d9e0abb932109ceToomas Soome * and the low-order 23 bits are taken from the low end of the IP address.
199767f8919635c4928607450d9e0abb932109ceToomas Soome */
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define ETHER_MAP_IP_MULTICAST(ipaddr, enaddr) \
199767f8919635c4928607450d9e0abb932109ceToomas Soome /* struct in_addr *ipaddr; */ \
199767f8919635c4928607450d9e0abb932109ceToomas Soome /* u_char enaddr[ETHER_ADDR_LEN]; */ \
199767f8919635c4928607450d9e0abb932109ceToomas Soome{ \
199767f8919635c4928607450d9e0abb932109ceToomas Soome (enaddr)[0] = 0x01; \
199767f8919635c4928607450d9e0abb932109ceToomas Soome (enaddr)[1] = 0x00; \
199767f8919635c4928607450d9e0abb932109ceToomas Soome (enaddr)[2] = 0x5e; \
199767f8919635c4928607450d9e0abb932109ceToomas Soome (enaddr)[3] = ((const u_char *)ipaddr)[1] & 0x7f; \
199767f8919635c4928607450d9e0abb932109ceToomas Soome (enaddr)[4] = ((const u_char *)ipaddr)[2]; \
199767f8919635c4928607450d9e0abb932109ceToomas Soome (enaddr)[5] = ((const u_char *)ipaddr)[3]; \
199767f8919635c4928607450d9e0abb932109ceToomas Soome}
199767f8919635c4928607450d9e0abb932109ceToomas Soome/*
199767f8919635c4928607450d9e0abb932109ceToomas Soome * Macro to map an IP6 multicast address to an Ethernet multicast address.
199767f8919635c4928607450d9e0abb932109ceToomas Soome * The high-order 16 bits of the Ethernet address are statically assigned,
199767f8919635c4928607450d9e0abb932109ceToomas Soome * and the low-order 32 bits are taken from the low end of the IP6 address.
199767f8919635c4928607450d9e0abb932109ceToomas Soome */
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define ETHER_MAP_IPV6_MULTICAST(ip6addr, enaddr) \
199767f8919635c4928607450d9e0abb932109ceToomas Soome/* struct in6_addr *ip6addr; */ \
199767f8919635c4928607450d9e0abb932109ceToomas Soome/* u_char enaddr[ETHER_ADDR_LEN]; */ \
199767f8919635c4928607450d9e0abb932109ceToomas Soome{ \
199767f8919635c4928607450d9e0abb932109ceToomas Soome (enaddr)[0] = 0x33; \
199767f8919635c4928607450d9e0abb932109ceToomas Soome (enaddr)[1] = 0x33; \
199767f8919635c4928607450d9e0abb932109ceToomas Soome (enaddr)[2] = ((const u_char *)ip6addr)[12]; \
199767f8919635c4928607450d9e0abb932109ceToomas Soome (enaddr)[3] = ((const u_char *)ip6addr)[13]; \
199767f8919635c4928607450d9e0abb932109ceToomas Soome (enaddr)[4] = ((const u_char *)ip6addr)[14]; \
199767f8919635c4928607450d9e0abb932109ceToomas Soome (enaddr)[5] = ((const u_char *)ip6addr)[15]; \
199767f8919635c4928607450d9e0abb932109ceToomas Soome}
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome/*
199767f8919635c4928607450d9e0abb932109ceToomas Soome * Ethernet Address Resolution Protocol.
199767f8919635c4928607450d9e0abb932109ceToomas Soome *
199767f8919635c4928607450d9e0abb932109ceToomas Soome * See RFC 826 for protocol description. Structure below is adapted
199767f8919635c4928607450d9e0abb932109ceToomas Soome * to resolving internet addresses. Field names used correspond to
199767f8919635c4928607450d9e0abb932109ceToomas Soome * RFC 826.
199767f8919635c4928607450d9e0abb932109ceToomas Soome */
199767f8919635c4928607450d9e0abb932109ceToomas Soomestruct ether_arp {
199767f8919635c4928607450d9e0abb932109ceToomas Soome struct arphdr ea_hdr; /* fixed-size header */
199767f8919635c4928607450d9e0abb932109ceToomas Soome u_char arp_sha[ETHER_ADDR_LEN]; /* sender hardware address */
199767f8919635c4928607450d9e0abb932109ceToomas Soome u_char arp_spa[4]; /* sender protocol address */
199767f8919635c4928607450d9e0abb932109ceToomas Soome u_char arp_tha[ETHER_ADDR_LEN]; /* target hardware address */
199767f8919635c4928607450d9e0abb932109ceToomas Soome u_char arp_tpa[4]; /* target protocol address */
199767f8919635c4928607450d9e0abb932109ceToomas Soome};
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define arp_hrd ea_hdr.ar_hrd
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define arp_pro ea_hdr.ar_pro
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define arp_hln ea_hdr.ar_hln
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define arp_pln ea_hdr.ar_pln
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define arp_op ea_hdr.ar_op
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#ifndef BURN_BRIDGES /* Can be used by third party software. */
199767f8919635c4928607450d9e0abb932109ceToomas Soomestruct sockaddr_inarp {
199767f8919635c4928607450d9e0abb932109ceToomas Soome u_char sin_len;
199767f8919635c4928607450d9e0abb932109ceToomas Soome u_char sin_family;
199767f8919635c4928607450d9e0abb932109ceToomas Soome u_short sin_port;
199767f8919635c4928607450d9e0abb932109ceToomas Soome struct in_addr sin_addr;
199767f8919635c4928607450d9e0abb932109ceToomas Soome struct in_addr sin_srcaddr;
199767f8919635c4928607450d9e0abb932109ceToomas Soome u_short sin_tos;
199767f8919635c4928607450d9e0abb932109ceToomas Soome u_short sin_other;
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define SIN_PROXY 1
199767f8919635c4928607450d9e0abb932109ceToomas Soome};
199767f8919635c4928607450d9e0abb932109ceToomas Soome#endif /* !BURN_BRIDGES */
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome/*
199767f8919635c4928607450d9e0abb932109ceToomas Soome * IP and ethernet specific routing flags
199767f8919635c4928607450d9e0abb932109ceToomas Soome */
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define RTF_USETRAILERS RTF_PROTO1 /* use trailers */
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define RTF_ANNOUNCE RTF_PROTO2 /* announce new arp entry */
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#ifdef _KERNEL
199767f8919635c4928607450d9e0abb932109ceToomas Soomeextern u_char ether_ipmulticast_min[ETHER_ADDR_LEN];
199767f8919635c4928607450d9e0abb932109ceToomas Soomeextern u_char ether_ipmulticast_max[ETHER_ADDR_LEN];
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soomestruct ifaddr;
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soomeint arpresolve(struct ifnet *ifp, int is_gw, struct mbuf *m,
199767f8919635c4928607450d9e0abb932109ceToomas Soome const struct sockaddr *dst, u_char *desten, uint32_t *pflags);
199767f8919635c4928607450d9e0abb932109ceToomas Soomevoid arprequest(struct ifnet *, const struct in_addr *,
199767f8919635c4928607450d9e0abb932109ceToomas Soome const struct in_addr *, u_char *);
199767f8919635c4928607450d9e0abb932109ceToomas Soomevoid arp_ifinit(struct ifnet *, struct ifaddr *);
199767f8919635c4928607450d9e0abb932109ceToomas Soomevoid arp_ifinit2(struct ifnet *, struct ifaddr *, u_char *);
199767f8919635c4928607450d9e0abb932109ceToomas Soome#endif
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#endif