125 lines
4.0 KiB
C
125 lines
4.0 KiB
C
#ident "include/net/arp.h: $Revision: 1.7 $"
|
|
#ifndef _NET_ARP_H_
|
|
#define _NET_ARP_H_
|
|
#include <arcs/folder.h>
|
|
/*
|
|
* arp.h -- arp and ethernet definitions
|
|
*/
|
|
|
|
/*
|
|
* Structure of a 10Mb/s Ethernet header.
|
|
*/
|
|
struct ether_header {
|
|
u_char ether_dhost[6];
|
|
u_char ether_shost[6];
|
|
u_short ether_type;
|
|
};
|
|
|
|
#define ETHERTYPE_PUP 0x0200 /* PUP protocol */
|
|
#define ETHERTYPE_IP 0x0800 /* IP protocol */
|
|
#define ETHERTYPE_ARP 0x0806 /* Addr. resolution protocol */
|
|
|
|
/*
|
|
* The ETHERTYPE_NTRAILER packet types starting at ETHERTYPE_TRAIL have
|
|
* (type-ETHERTYPE_TRAIL)*512 bytes of data followed
|
|
* by an ETHER type (as given above) and then the (variable-length) header.
|
|
*/
|
|
#define ETHERTYPE_TRAIL 0x1000 /* Trailer packet */
|
|
#define ETHERTYPE_NTRAILER 16
|
|
|
|
#define ETHERMTU 1500
|
|
#define ETHERMIN (60-14)
|
|
|
|
/*
|
|
* Structure defining a network interface.
|
|
*/
|
|
struct ifnet {
|
|
short if_unit; /* sub-unit for lower level driver */
|
|
short if_mtu; /* maximum transmission unit */
|
|
short if_flags; /* up/down, broadcast, etc. */
|
|
short if_timer; /* time 'til if_watchdog called */
|
|
struct sockaddr if_addr; /* address of interface */
|
|
union {
|
|
struct sockaddr ifu_broadaddr;
|
|
struct sockaddr ifu_dstaddr;
|
|
} if_ifu;
|
|
/* procedure handles */
|
|
int (*if_output)(struct ifnet *,
|
|
struct mbuf *,
|
|
struct sockaddr*); /* output routine */
|
|
int (*if_ioctl)(IOBLOCK *); /* ioctl routine */
|
|
void (*if_poll)(IOBLOCK *); /* input poll routine */
|
|
/* generic interface statistics */
|
|
int if_ipackets; /* packets received on interface */
|
|
int if_ierrors; /* input errors on interface */
|
|
int if_opackets; /* packets sent on interface */
|
|
int if_oerrors; /* output errors on interface */
|
|
int if_collisions; /* collisions on csma interfaces */
|
|
};
|
|
|
|
/*
|
|
* short hand
|
|
*/
|
|
#define if_broadaddr if_ifu.ifu_broadaddr /* broadcast address */
|
|
#define if_dstaddr if_ifu.ifu_dstaddr /* other end of p-to-p link */
|
|
|
|
#define IFF_UP 0x1 /* interface is up */
|
|
#define IFF_BROADCAST 0x2 /* broadcast address valid */
|
|
#define IFF_DEBUG 0x4 /* turn on debugging */
|
|
#define IFF_LOOPBACK 0x8 /* is a loopback net */
|
|
#define IFF_POINTOPOINT 0x10 /* interface is point-to-point link */
|
|
#define IFF_NOTRAILERS 0x20 /* avoid use of trailers */
|
|
#define IFF_RUNNING 0x40 /* resources allocated */
|
|
#define IFF_NOARP 0x80 /* no address resolution protocol */
|
|
/* next two not supported now, but reserved: */
|
|
#define IFF_PROMISC 0x100 /* receive all packets */
|
|
#define IFF_ALLMULTI 0x200 /* receive all multicast packets */
|
|
/* flags set internally only: */
|
|
#define IFF_CANTCHANGE (IFF_BROADCAST | IFF_POINTOPOINT | IFF_RUNNING)
|
|
|
|
/*
|
|
* Ethernet Address Resolution Protocol.
|
|
*
|
|
* See RFC 826 for protocol description. Structure below is adapted
|
|
* to resolving internet addresses. Field names used correspond to
|
|
* RFC 826.
|
|
*/
|
|
struct ether_arp {
|
|
u_short arp_hrd; /* format of hardware address */
|
|
#define ARPHRD_ETHER 1 /* ethernet hardware address */
|
|
u_short arp_pro; /* format of proto. address (ETHERTYPE_IP) */
|
|
u_char arp_hln; /* length of hardware address (6) */
|
|
u_char arp_pln; /* length of protocol address (4) */
|
|
u_short arp_op;
|
|
#define ARPOP_REQUEST 1 /* request to resolve address */
|
|
#define ARPOP_REPLY 2 /* response to previous request */
|
|
u_char arp_sha[6]; /* sender hardware address */
|
|
u_char arp_spa[4]; /* sender protocol address */
|
|
u_char arp_tha[6]; /* target hardware address */
|
|
u_char arp_tpa[4]; /* target protocol address */
|
|
};
|
|
|
|
/*
|
|
* Structure shared between the ethernet driver modules and
|
|
* the address resolution code. For example, each ec_softc or il_softc
|
|
* begins with this structure.
|
|
*/
|
|
struct arpcom {
|
|
struct ifnet ac_if; /* network-visible interface */
|
|
u_char ac_enaddr[6]; /* ethernet hardware address */
|
|
};
|
|
|
|
struct ether_addr {
|
|
u_char ea_addr[6];
|
|
};
|
|
#define ETHADDR struct ether_addr
|
|
|
|
#define ARP_TRIES 3 /* number of attempts to resolve address */
|
|
#define ARP_TIME 2 /* seconds before re-attempting arp request */
|
|
|
|
extern void arpwhohas(struct arpcom *, struct in_addr *);
|
|
extern void _arpresolve(struct arpcom *, struct in_addr *, u_char *);
|
|
extern void _arpinput(struct arpcom *, struct mbuf *);
|
|
|
|
#endif
|