|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T g
Length: 6107 (0x17db)
Types: TextFile
Names: »gw.h«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
└─⟦3b20aab50⟧ »EurOpenD3/network/snmp/kip-snmp.91.tar.Z«
└─⟦b503a39fe⟧
└─⟦this⟧ »kip/gw.h«
/*
* AppleTalk / Ethernet gateway definitions.
*
* (c) 1984, Stanford Univ. SUMEX project.
* May be used but not sold without permission.
*
* (c) 1986, Kinetics, Inc.
* May be used but not sold without permission.
*
* $Header: gw.h,v 4.1 88/11/01 19:49:21 sw0l Locked $
*/
#include "mung_gw.h"
#ifdef noprepend
#define end _end
#define begin _begin
#define edata _edata
#endif
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short n_short;
typedef unsigned long n_time;
#define ntohs(a) (a)
#define ntohl(a) (a)
#define htons(a) (a)
#define htonl(a) (a)
typedef char * caddr_t; /* 'core' address type */
typedef long iaddr_t; /* internet address type */
#define NULL 0
/*
* Configuration structure.
*/
struct conf {
iaddr_t ipaddr; /* IP address of gateway */
iaddr_t ipadmin; /* addr of admin host */
iaddr_t iproutedef; /* default route */
u_char etheraddr[6]; /* ethernet hardware address */
u_short ready; /* ready flag */
#define confPrefix 20 /* manditory config prefix length */
#define confReady 0x1234 /* magic flag value in 'ready' field*/
iaddr_t ipbroad; /* broadcast addr on ether */
iaddr_t ipname; /* address of name server */
iaddr_t ipdebug; /* address of debug host */
iaddr_t ipfile; /* address of file server */
u_long ipother[4]; /* other addresses passed via IPGP */
#define ipsmask anetet /* old use for this field */
u_short anetet; /* ethertalk net number of enet */
#define ipsshift startddpWKSUnix /* old: subnet shift (unused) */
u_short startddpWKSUnix; /* start of unix WKS udp ports */
u_long flags; /* various bit flags */
#define conf_stayinzone 0x1 /* no looking at other zones */
#define conf_laserfilter 0x2 /* NBP filtering for LaserWriters */
#define conf_tildefilter 0x4 /* NBP filtering, "name~" */
u_short ipstatic; /* number of static IP addrs */
u_short ipdynamic; /* number of dynamic IP addrs */
u_short atneta; /* atalk net #, appletalk */
u_short atnete; /* atalk net #, ethernet */
};
/*
* Network interface structure.
*/
struct ifnet {
char if_name[8];
short if_unit; /* unit is port now */
iaddr_t if_addr; /* IP address */
short if_addrform; /* ARP address format for IP */
short if_haddrlen; /* hardware address length */
short if_haddrform; /* ARP hardware addr format */
int (*if_output)(); /* packet output routine */
int (*if_matchus)(); /* match us routine */
u_char if_flags; /* flags */
#define IF_APPLETYPE 0x1 /* send ALAP or ELAP out */
#define IF_ALAP 0x2 /* send outgoing as ALAP (LocalTalk) */
#define IF_IPUDP 0x4 /* send outgoing as IP/UDP */
u_char if_dnode; /* ddp node # */
u_short if_dnet; /* ddp net # */
char if_haddr[8]; /* big enough to hold any haddr */
iaddr_t if_addrnet; /* IP address, net part */
struct ifnet *if_next; /* next if */
};
/*
* Address families understood by interface output encapsulation
* routine (*if_output)();
*/
#define AF_IP 0 /* address family IP */
#define AF_DDP 1 /* .. .. DDP */
#define AF_LINK 2 /* link level (Ethernet or AppleTalk) */
#define AF_ARP 3 /* address resolution proto */
#define AF_SDDP 4 /* short DDP */
#define AF_RTMP 5 /* RTMP */
/* Private field(s) used in packet buffer header */
#define p_if(p) (*(struct ifnet **)&((p)->p_head[0])) /* interface ptr */
/* fast copy of ether address, assumes address on an even boundary */
#define eaddrcopy(src,dst) { \
*((long *)dst) = *((long *)src); \
*((short *)(((char *)dst) + 4)) = *((short *)(((char *)src) + 4));}
/*
* AppleTalk route table.
*/
/*
* This would be cleaner, and we could dispatch faster, if there was
* a pointer to the interface structure with each routing entry.
* Unfortunately we probably can't afford the 256 bytes of storage
* that would take.
*/
struct aroute {
long node; /* atalk node number OR IP addr */
u_short net; /* atalk net number, 0 if unused */
u_char flags; /* flags */
u_char hops; /* # hops to this net */
u_char zone; /* index+1 of slot in azone */
u_char age; /* age of entry in 20 second ticks */
u_char port; /* port route came in on */
/* byte is used anyway for alignment */
};
/* room for 3 main ports */
#define MAX_PORT 3
#define NAROUTE 16 /* max # table entries */
#ifdef notdef
#define ETALK_ROUTE 0x100
#define arouteIP(ar) ((ar)->node & 0xFFFFFE00) /* true if route via internet*/
#define arouteET(ar) ((ar)->node & ETALK_ROUTE)/* true if route vi Ethertalk */
#endif
#define arouteIP(ar) (porttoif[(ar)->port]->if_flags & IF_IPUDP)
#define arouteBad(ar) (arouteIP(ar) ? ((ar)->age > 15) : ((ar)->age > 1))
/* also see flags defined in struct arouteTuple (file gwctl.h) */
#define NAZONE 32 /* max number of zone names for now */
/* Magic ZONE name string. If a zone is given this name then it will receive */
/* all NBP requests - that is, a host on this net can be in any zone */
/* This is probably only useful for CAP nets where the zone is hardwired */
#define ALLZONES "ALL"
/*
* IP dynamic address assignment table.
*
* Index into the table is the offset from conf.ipaddr + conf.ipstatic.
*/
struct ipdad {
u_short net; /* appletalk net number of last user */
u_char node;
u_char flags; /* flags */
u_short timer; /* ticks since last used */
};
#define NIPDAD 12 /* max number of table entries */
#define ipdadTimerMax 0x7FFF
#define ipdadTimerMin 5 /* unused for 5 minutes before reassigned */
/*
* Statistics.
*/
struct stats {
int dropabin; /* dropped ab in pkts */
int dropiein;
int droprouteip; /* pkts dropped by routeip */
int droprouteddp;
};
/*
* IP address macros.
*/
#define ipsub(ia) (((ia)>>ipsubshift) & ipsubmask)
#define ipbroadcast(ia) (((ia) & 0xFF) == 0xFF) /* Jeff would complain */
#define ipnetpart(ia) (IN_CLASSA((ia)) ? ((ia) & IN_CLASSA_NET) : \
(IN_CLASSB((ia)) ? ((ia) & IN_CLASSB_NET) : ((ia) & IN_CLASSC_NET)))
#define iphostpart(ia) (IN_CLASSA((ia)) ? ((ia) & IN_CLASSA_HOST) : \
(IN_CLASSB((ia)) ? ((ia) & IN_CLASSB_HOST) : ((ia) & IN_CLASSC_HOST)))