diff --git a/isisd/include-netbsd/clnp.h b/isisd/include-netbsd/clnp.h
new file mode 100644
index 0000000..6bc3d25
--- /dev/null
+++ b/isisd/include-netbsd/clnp.h
@@ -0,0 +1,547 @@
+/*	$NetBSD: clnp.h,v 1.13 2001/08/20 12:00:54 wiz Exp $	*/
+
+/*-
+ * Copyright (c) 1991, 1993, 1994
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by the University of
+ *	California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)clnp.h	8.2 (Berkeley) 4/16/94
+ */
+
+/***********************************************************
+		Copyright IBM Corporation 1987
+
+                      All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of IBM not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+******************************************************************/
+
+/*
+ * ARGO Project, Computer Sciences Dept., University of Wisconsin - Madison
+ */
+
+/* should be config option but cpp breaks with too many #defines */
+#define	DECBIT
+
+/*
+ *	Return true if the mbuf is a cluster mbuf
+ */
+#define	IS_CLUSTER(m)	((m)->m_flags & M_EXT)
+
+/*
+ *	Move the halfword into the two characters
+ */
+#define	HTOC(msb, lsb, hword)\
+	(msb) = (u_char)((hword) >> 8);\
+	(lsb) = (u_char)((hword) & 0xff)
+/*
+ *	Move the two charcters into the halfword
+ */
+#define	CTOH(msb, lsb, hword)\
+	(hword) = ((msb) << 8) | (lsb)
+
+/*
+ *	Return true if the checksum has been set - ie. the checksum is
+ *	not zero
+ */
+#define	CKSUM_REQUIRED(clnp)\
+	(((clnp)->cnf_cksum_msb != 0) || ((clnp)->cnf_cksum_lsb != 0))
+
+/*
+ *	Fixed part of clnp header
+ */
+struct clnp_fixed {
+	u_char          cnf_proto_id;	/* network layer protocol identifier */
+	u_char          cnf_hdr_len;	/* length indicator (octets) */
+	u_char          cnf_vers;	/* version/protocol identifier
+					 * extension */
+	u_char          cnf_ttl;/* lifetime (500 milliseconds) */
+	u_char          cnf_type;	/* type code */
+	/* Includes err_ok, more_segs, and seg_ok */
+	u_char          cnf_seglen_msb;	/* pdu segment length (octets) high
+					 * byte */
+	u_char          cnf_seglen_lsb;	/* pdu segment length (octets) low
+					 * byte */
+	u_char          cnf_cksum_msb;	/* checksum high byte */
+	u_char          cnf_cksum_lsb;	/* checksum low byte */
+} __attribute__((packed));
+#define CNF_TYPE	0x1f
+#define CNF_ERR_OK	0x20
+#define CNF_MORE_SEGS	0x40
+#define CNF_SEG_OK	0x80
+
+#define CLNP_CKSUM_OFF	0x07	/* offset of checksum */
+
+#define	clnl_fixed	clnp_fixed
+
+/*
+ *	Segmentation part of clnp header
+ */
+struct clnp_segment {
+	u_short         cng_id;	/* data unit identifier */
+	u_short         cng_off;/* segment offset */
+	u_short         cng_tot_len;	/* total length */
+};
+
+/*
+ *	Clnp fragment reassembly structures:
+ *
+ *	All packets undergoing reassembly are linked together in
+ *	clnp_fragl structures. Each clnp_fragl structure contains a
+ *	pointer to the original clnp packet header, as well as a
+ *	list of packet fragments. Each packet fragment
+ *	is headed by a clnp_frag structure. This structure contains the
+ *	offset of the first and last byte of the fragment, as well as
+ *	a pointer to the data (an mbuf chain) of the fragment.
+ */
+
+/*
+ *	NOTE:
+ *		The clnp_frag structure is stored in an mbuf immedately
+ *		preceding the fragment data. Since there are words in
+ *		this struct, it must be word aligned.
+ *
+ *	NOTE:
+ *		All the fragment code assumes that the entire clnp header is
+ *		contained in the first mbuf.
+ */
+struct clnp_frag {
+	u_int           cfr_first;	/* offset of first byte of this frag */
+	u_int           cfr_last;	/* offset of last byte of this frag */
+	u_int           cfr_bytes;	/* bytes to shave to get to data */
+	struct mbuf    *cfr_data;	/* ptr to data for this frag */
+	struct clnp_frag *cfr_next;	/* next fragment in list */
+};
+
+struct clnp_fragl {
+	struct iso_addr cfl_src;/* source of the pkt */
+	struct iso_addr cfl_dst;/* destination of the pkt */
+	u_short         cfl_id;	/* id of the pkt */
+	u_char          cfl_ttl;/* current ttl of pkt */
+	u_short         cfl_last;	/* offset of last byte of packet */
+	struct mbuf    *cfl_orighdr;	/* ptr to original header */
+	struct clnp_frag *cfl_frags;	/* linked list of fragments for pkt */
+	struct clnp_fragl *cfl_next;	/* next pkt being reassembled */
+};
+
+/*
+ *	The following structure is used to index into an options section
+ *	of a clnp datagram. These values can be used without worry that
+ *	offset or length fields are invalid or too big, etc. That is,
+ *	the consistancy of the options will be guaranteed before this
+ *	structure is filled in. Any pointer (field ending in p) is
+ *	actually the offset from the beginning of the mbuf the option
+ *	is contained in.  A value of NULL for any pointer
+ *	means that the option is not present. The length any option
+ *	does not include the option code or option length fields.
+ */
+struct clnp_optidx {
+	u_short         cni_securep;	/* ptr to start of security option */
+	char            cni_secure_len;	/* length of entire security option */
+
+	u_short         cni_srcrt_s;	/* offset of start of src rt option */
+	u_short         cni_srcrt_len;	/* length of entire src rt option */
+
+	u_short         cni_recrtp;	/* ptr to beginning of recrt option */
+	char            cni_recrt_len;	/* length of entire recrt option */
+
+	char            cni_priorp;	/* ptr to priority option */
+
+	u_short         cni_qos_formatp;	/* ptr to format of qos
+						 * option */
+	char            cni_qos_len;	/* length of entire qos option */
+
+	u_char          cni_er_reason;	/* reason from ER pdu option */
+
+	/* ESIS options */
+
+	u_short         cni_esct;	/* value from ISH ESCT option */
+
+	u_short         cni_netmaskp;	/* ptr to beginning of netmask option */
+	char            cni_netmask_len;	/* length of entire netmask
+						 * option */
+
+	u_short         cni_snpamaskp;	/* ptr to start of snpamask option */
+	char            cni_snpamask_len;	/* length of entire snpamask
+						 * option */
+
+};
+
+#define	ER_INVALREAS	0xff	/* code for invalid ER pdu discard reason */
+
+/* given an mbuf and addr of option, return offset from data of mbuf */
+#define CLNP_OPTTOOFF(m, opt) ((u_short) (opt - mtod(m, caddr_t)))
+
+/* given an mbuf and offset of option, return address of option */
+#define CLNP_OFFTOOPT(m, off) ((caddr_t) (mtod(m, caddr_t) + off))
+
+/* return true iff src route is valid */
+#define	CLNPSRCRT_VALID(oidx) ((oidx) && (oidx->cni_srcrt_s))
+
+/* return the offset field of the src rt */
+#define CLNPSRCRT_OFF(oidx, options)\
+	(*((u_char *)(CLNP_OFFTOOPT(options, oidx->cni_srcrt_s) + 1)))
+
+/* return the type field of the src rt */
+#define CLNPSRCRT_TYPE(oidx, options)\
+	((u_char)(*(CLNP_OFFTOOPT(options, oidx->cni_srcrt_s))))
+
+/* return the length of the current address */
+#define CLNPSRCRT_CLEN(oidx, options)\
+	((u_char)(*(CLNP_OFFTOOPT(options, oidx->cni_srcrt_s) + CLNPSRCRT_OFF(oidx, options) - 1)))
+
+/* return the address of the current address */
+#define CLNPSRCRT_CADDR(oidx, options)\
+	((caddr_t)(CLNP_OFFTOOPT(options, oidx->cni_srcrt_s) + CLNPSRCRT_OFF(oidx, options)))
+
+/*
+ * return true if the src route has run out of routes this is true if the
+ * offset of next route is greater than the end of the rt
+ */
+#define	CLNPSRCRT_TERM(oidx, options)\
+	(CLNPSRCRT_OFF(oidx, options) > oidx->cni_srcrt_len)
+
+/*
+ *	Options a user can set/get
+ */
+#define	CLNPOPT_FLAGS	0x01	/* flags: seg permitted, no er xmit, etc  */
+#define	CLNPOPT_OPTS	0x02	/* datagram options */
+
+/*
+ *	Values for particular datagram options
+ */
+#define	CLNPOVAL_PAD		0xcc	/* padding */
+#define	CLNPOVAL_SECURE		0xc5	/* security */
+#define	CLNPOVAL_SRCRT		0xc8	/* source routing */
+#define	CLNPOVAL_RECRT		0xcb	/* record route */
+#define	CLNPOVAL_QOS		0xc3	/* quality of service */
+#define	CLNPOVAL_PRIOR		0xcd	/* priority */
+#define CLNPOVAL_ERREAS		0xc1	/* ER PDU ONLY: reason for discard */
+
+#define	CLNPOVAL_SRCSPEC	0x40	/* source address specific */
+#define	CLNPOVAL_DSTSPEC	0x80	/* destination address specific */
+#define	CLNPOVAL_GLOBAL		0xc0	/* globally unique */
+
+/* Globally Unique QOS */
+#define	CLNPOVAL_SEQUENCING	0x10	/* sequencing preferred */
+#define CLNPOVAL_CONGESTED	0x08	/* congestion experienced */
+#define CLNPOVAL_LOWDELAY	0x04	/* low transit delay */
+
+#define	CLNPOVAL_PARTRT		0x00	/* partial source routing */
+#define CLNPOVAL_COMPRT		0x01	/* complete source routing */
+
+/*
+ *	Clnp flags used in a control block flags field.
+ *	NOTE: these must be out of the range of bits defined in ../net/raw_cb.h
+ */
+#define	CLNP_NO_SEG		0x010	/* segmentation not permitted */
+#define	CLNP_NO_ER		0x020	/* do not generate ERs */
+#define CLNP_SEND_RAW		0x080	/* send pkt as RAW DT not TP DT */
+#define	CLNP_NO_CKSUM		0x100	/* don't use clnp checksum */
+#define CLNP_ECHO		0x200	/* send echo request */
+#define	CLNP_NOCACHE		0x400	/* don't store cache information */
+#define CLNP_ECHOR		0x800	/* send echo reply */
+
+/* valid clnp flags */
+#define CLNP_VFLAGS \
+	(CLNP_SEND_RAW|CLNP_NO_SEG|CLNP_NO_ER|CLNP_NO_CKSUM|\
+	 CLNP_ECHO|CLNP_NOCACHE|CLNP_ECHOR)
+
+/*
+ * Constants used by clnp
+ */
+#define	CLNP_HDR_MIN	(sizeof (struct clnp_fixed))
+#define	CLNP_HDR_MAX	(254)
+#define	CLNP_TTL_UNITS	2	/* 500 milliseconds */
+#define CLNP_TTL	15*CLNP_TTL_UNITS	/* time to live (seconds) */
+#define	ISO8473_V1	0x01
+
+/*
+ *	Clnp packet types
+ *	In order to test raw clnp and tp/clnp simultaneously, a third type of
+ *	packet has been defined: CLNP_RAW. This is done so that the input
+ *	routine can switch to the correct input routine (rclnp_input or
+ *	tpclnp_input) based on the type field. If clnp had a higher level
+ *	protocol field, this would not be necessary.
+ */
+#define	CLNP_DT			0x1C	/* normal data */
+#define	CLNP_ER			0x01	/* error report */
+#define	CLNP_RAW		0x1D	/* debug only */
+#define CLNP_EC			0x1E	/* echo packet */
+#define CLNP_ECR		0x1F	/* echo reply */
+
+/*
+ *	ER pdu error codes
+ */
+#define GEN_NOREAS		0x00	/* reason not specified */
+#define GEN_PROTOERR		0x01	/* protocol procedure error */
+#define GEN_BADCSUM		0x02	/* incorrect checksum */
+#define GEN_CONGEST		0x03	/* pdu discarded due to congestion */
+#define GEN_HDRSYNTAX		0x04	/* header syntax error */
+#define GEN_SEGNEEDED		0x05	/* need segmentation but not allowed */
+#define GEN_INCOMPLETE		0x06	/* incomplete pdu received */
+#define GEN_DUPOPT		0x07	/* duplicate option */
+
+/* address errors */
+#define ADDR_DESTUNREACH	0x80	/* destination address unreachable */
+#define ADDR_DESTUNKNOWN	0x81	/* destination address unknown */
+
+/* source routing */
+#define SRCRT_UNSPECERR		0x90	/* unspecified src rt error */
+#define SRCRT_SYNTAX		0x91	/* syntax error in src rt field */
+#define SRCRT_UNKNOWNADDR	0x92	/* unknown addr in src rt field */
+#define SRCRT_BADPATH		0x93	/* path not acceptable */
+
+/* lifetime */
+#define TTL_EXPTRANSIT		0xa0	/* lifetime expired during transit */
+#define TTL_EXPREASS		0xa1	/* lifetime expired during reassembly */
+
+/* pdu discarded */
+#define DISC_UNSUPPOPT		0xb0	/* unsupported option not specified? */
+#define DISC_UNSUPPVERS		0xb1	/* unsupported protocol version */
+#define DISC_UNSUPPSECURE	0xb2	/* unsupported security option */
+#define DISC_UNSUPPSRCRT	0xb3	/* unsupported src rt option */
+#define DISC_UNSUPPRECRT	0xb4	/* unsupported rec rt option */
+
+/* reassembly */
+#define REASS_INTERFERE		0xc0	/* reassembly interference */
+#define CLNP_ERRORS		22
+
+
+#ifdef CLNP_ER_CODES
+u_char          clnp_er_codes[CLNP_ERRORS] = {
+	GEN_NOREAS, GEN_PROTOERR, GEN_BADCSUM, GEN_CONGEST,
+	GEN_HDRSYNTAX, GEN_SEGNEEDED, GEN_INCOMPLETE, GEN_DUPOPT,
+	ADDR_DESTUNREACH, ADDR_DESTUNKNOWN,
+	SRCRT_UNSPECERR, SRCRT_SYNTAX, SRCRT_UNKNOWNADDR, SRCRT_BADPATH,
+	TTL_EXPTRANSIT, TTL_EXPREASS,
+	DISC_UNSUPPOPT, DISC_UNSUPPVERS, DISC_UNSUPPSECURE,
+	DISC_UNSUPPSRCRT, DISC_UNSUPPRECRT, REASS_INTERFERE
+};
+#endif
+
+#ifdef	TROLL
+
+#define	TR_DUPEND		0x01	/* duplicate end of fragment */
+#define TR_DUPPKT		0x02	/* duplicate entire packet */
+#define	TR_DROPPKT		0x04	/* drop packet on output */
+#define TR_TRIM			0x08	/* trim bytes from packet */
+#define TR_CHANGE		0x10	/* change bytes in packet */
+#define TR_MTU			0x20	/* delta to change device mtu */
+#define	TR_CHUCK		0x40	/* drop packet in rclnp_input */
+#define	TR_BLAST		0x80	/* force rclnp_output to blast many
+					 * packet */
+#define	TR_RAWLOOP		0x100	/* make if_loop call clnpintr
+					 * directly */
+struct troll {
+	int             tr_ops;	/* operations to perform */
+	float           tr_dup_size;	/* % to duplicate */
+	float           tr_dup_freq;	/* frequency to duplicate packets */
+	float           tr_drop_freq;	/* frequence to drop packets */
+	int             tr_mtu_adj;	/* delta to adjust if mtu */
+	int             tr_blast_cnt;	/* # of pkts to blast out */
+};
+
+#define	SN_OUTPUT(clcp, m)\
+	troll_output(clcp->clc_ifp, m, clcp->clc_firsthop, clcp->clc_rt)
+
+#define	SN_MTU(ifp, rt) (((rt && rt->rt_rmx.rmx_mtu) ?\
+	rt->rt_rmx.rmx_mtu : clnp_badmtu(ifp, rt, __LINE__, __FILE__))\
+		- trollctl.tr_mtu_adj)
+
+#ifdef _KERNEL
+extern float    troll_random;
+#endif
+
+#else				/* NO TROLL */
+
+#define	SN_OUTPUT(clcp, m)\
+	(*clcp->clc_ifp->if_output)(clcp->clc_ifp, m, clcp->clc_firsthop, \
+				    clcp->clc_rt)
+
+#define	SN_MTU(ifp, rt) (((rt && rt->rt_rmx.rmx_mtu) ?\
+	rt->rt_rmx.rmx_mtu : clnp_badmtu(ifp, rt, __LINE__, __FILE__)))
+
+#endif				/* TROLL */
+
+/*
+ *	Macro to remove an address from a clnp header
+ */
+#define CLNP_EXTRACT_ADDR(isoa, hoff, hend)\
+	{\
+		isoa.isoa_len = (u_char)*hoff;\
+		if ((((++hoff) + isoa.isoa_len) > hend) ||\
+			(isoa.isoa_len > 20) || (isoa.isoa_len == 0)) {\
+			hoff = (caddr_t)0;\
+		} else {\
+			(void) bcopy(hoff, (caddr_t)isoa.isoa_genaddr, \
+				     isoa.isoa_len);\
+			hoff += isoa.isoa_len;\
+		}\
+	}
+
+/*
+ *	Macro to insert an address into a clnp header
+ */
+#define CLNP_INSERT_ADDR(hoff, isoa)\
+	*hoff++ = (isoa).isoa_len;\
+	(void) bcopy((caddr_t)((isoa).isoa_genaddr), hoff, (isoa).isoa_len);\
+	hoff += (isoa).isoa_len;
+
+/*
+ *	Clnp hdr cache.	Whenever a clnp packet is sent, a copy of the
+ *	header is made and kept in this cache. In addition to a copy of
+ *	the cached clnp hdr, the cache contains
+ *	information necessary to determine whether the new packet
+ *	to send requires a new header to be built.
+ */
+struct clnp_cache {
+	/* these fields are used to check the validity of the cache */
+	struct iso_addr clc_dst;/* destination of packet */
+	struct mbuf    *clc_options;	/* ptr to options mbuf */
+	int             clc_flags;	/* flags passed to clnp_output */
+
+	/* these fields are state that clnp_output requires to finish the pkt */
+	int             clc_segoff;	/* offset of seg part of header */
+	struct rtentry *clc_rt;	/* ptr to rtentry (points into the route
+				 * structure) */
+	struct sockaddr *clc_firsthop;	/* first hop of packet */
+	struct ifnet   *clc_ifp;/* ptr to interface structure */
+	struct iso_ifaddr
+	               *clc_ifa;/* ptr to interface address */
+	struct mbuf    *clc_hdr;/* cached pkt hdr (finally)! */
+};
+
+#ifdef	_KERNEL
+struct iso_addr;
+struct sockaddr_iso;
+struct mbuf;
+struct clnp_segment;
+struct sockaddr;
+struct rt_entry;
+struct clnp_fragl;
+struct clnp_optidx;
+struct isopcb;
+struct snpa_hdr;
+struct iso_ifaddr;
+struct route_iso;
+
+/* clnp_debug.c */
+char *clnp_hexp __P((char *, int, char *));
+char *clnp_iso_addrp __P((struct iso_addr *));
+char *clnp_saddr_isop __P((struct sockaddr_iso *));
+
+/* clnp_er.c */
+void clnp_er_input __P((struct mbuf *, struct iso_addr *, u_int));
+void clnp_discard __P((struct mbuf *, u_int));
+void clnp_emit_er __P((struct mbuf *, u_int));
+int clnp_er_index __P((u_int));
+
+int clnp_fragment __P((struct ifnet *, struct mbuf *, struct sockaddr *,
+		       int, int, int, struct rtentry *));
+struct mbuf *clnp_reass __P((struct mbuf *, struct iso_addr *,
+			     struct iso_addr *, struct clnp_segment *));
+int clnp_newpkt __P((struct mbuf *, struct iso_addr *, struct iso_addr *,
+		     struct clnp_segment *));
+void clnp_insert_frag __P((struct clnp_fragl *, struct mbuf *,
+			   struct clnp_segment *));
+struct mbuf    *clnp_comp_pdu __P((struct clnp_fragl *));
+#ifdef TROLL
+float troll_random __P((void));
+int troll_output __P((struct ifnet *, struct mbuf *, struct sockaddr *,
+		      struct rtentry *));
+#endif
+
+/* clnp_input.c */
+void clnp_init  __P((void));
+void clnlintr    __P((void));
+void clnp_input __P((struct mbuf *, ...));
+
+/* clnp_options.c */
+void clnp_update_srcrt __P((struct mbuf *, struct clnp_optidx *));
+void clnp_dooptions __P((struct mbuf *, struct clnp_optidx *, struct ifnet *,
+			 struct iso_addr *));
+int clnp_set_opts __P((struct mbuf **, struct mbuf **));
+int clnp_opt_sanity __P((struct mbuf *, caddr_t, int, struct clnp_optidx *));
+
+/* clnp_output.c */
+int clnp_output __P((struct mbuf *, ...));
+void clnp_ctloutput __P((void));
+
+/* clnp_raw.c */
+void rclnp_input __P((struct mbuf *, ...));
+int rclnp_output __P((struct mbuf *, ...));
+int rclnp_ctloutput __P((int, struct socket *, int, int, struct mbuf **));
+int clnp_usrreq __P((struct socket *, int, struct mbuf *, struct mbuf *,
+		     struct mbuf *, struct proc *));
+
+/* clnp_subr.c */
+struct mbuf    *clnp_data_ck __P((struct mbuf *, int));
+caddr_t clnp_extract_addr __P((caddr_t, int, struct iso_addr *,
+			       struct iso_addr *));
+int clnp_ours   __P((struct iso_addr *));
+void clnp_forward __P((struct mbuf *, int, struct iso_addr *,
+		       struct clnp_optidx *, int, struct snpa_hdr *));
+caddr_t clnp_insert_addr __P((caddr_t, struct iso_addr *, struct iso_addr *));
+int clnp_route  __P((struct iso_addr *, struct route_iso *, int,
+		     struct sockaddr **, struct iso_ifaddr **));
+int clnp_srcroute __P((struct mbuf *, struct clnp_optidx *, struct route_iso *,
+		       struct sockaddr **, struct iso_ifaddr **,
+		       struct iso_addr *));
+int clnp_echoreply __P((struct mbuf *, int, struct sockaddr_iso *,
+		        struct sockaddr_iso *, struct clnp_optidx *));
+int clnp_badmtu __P((struct ifnet *, struct rtentry *, int, char *));
+void clnp_ypocb  __P((caddr_t, caddr_t, u_int));
+
+/* clnp_timer.c */
+struct clnp_fragl *clnp_freefrags __P((struct clnp_fragl *));
+void clnp_slowtimo __P((void));
+void clnp_drain __P((void));
+
+#ifdef	TROLL
+struct troll    trollctl;
+#endif /* TROLL */
+
+#endif /* _KERNEL */
diff --git a/isisd/include-netbsd/esis.h b/isisd/include-netbsd/esis.h
new file mode 100644
index 0000000..ded864e
--- /dev/null
+++ b/isisd/include-netbsd/esis.h
@@ -0,0 +1,146 @@
+/*	$NetBSD: esis.h,v 1.11 1997/11/03 15:01:19 is Exp $	*/
+
+/*-
+ * Copyright (c) 1991, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by the University of
+ *	California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)esis.h	8.1 (Berkeley) 6/10/93
+ */
+
+/***********************************************************
+		Copyright IBM Corporation 1987
+
+                      All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of IBM not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+******************************************************************/
+
+/*
+ * ARGO Project, Computer Sciences Dept., University of Wisconsin - Madison
+ */
+
+#include <machine/endian.h>
+
+#define	SNPAC_AGE		60	/* seconds */
+#define	ESIS_CONFIG		60	/* seconds */
+#define	ESIS_HT			(ESIS_CONFIG * 2)
+
+/*
+ *	Fixed part of an ESIS header
+ */
+struct esis_fixed {
+	u_char          esis_proto_id;	/* network layer protocol identifier */
+	u_char          esis_hdr_len;	/* length indicator (octets) */
+	u_char          esis_vers;	/* version/protocol identifier
+					 * extension */
+	u_char          esis_res1;	/* reserved */
+	u_char          esis_type;	/* type code */
+	/* technically, type should be &='d 0x1f */
+#define ESIS_ESH	0x02	/* End System Hello */
+#define ESIS_ISH	0x04	/* Intermediate System Hello */
+#define ESIS_RD		0x06	/* Redirect */
+	u_char          esis_ht_msb;	/* holding time (seconds) high byte */
+	u_char          esis_ht_lsb;	/* holding time (seconds) low byte */
+	u_char          esis_cksum_msb;	/* checksum high byte */
+	u_char          esis_cksum_lsb;	/* checksum low byte */
+} __attribute__((packed));
+/*
+ * Values for ESIS datagram options
+ */
+#define ESISOVAL_NETMASK	0xe1	/* address mask option, RD PDU only */
+#define ESISOVAL_SNPAMASK	0xe2	/* snpa mask option, RD PDU only */
+#define ESISOVAL_ESCT		0xc6	/* end system conf. timer, ISH PDU
+					 * only */
+
+
+#define	ESIS_CKSUM_OFF		0x07
+#define ESIS_CKSUM_REQUIRED(pdu)\
+	((pdu->esis_cksum_msb != 0) || (pdu->esis_cksum_lsb != 0))
+
+#define	ESIS_VERSION	1
+
+struct esis_stat {
+	u_short         es_nomem;	/* insufficient memory to send hello */
+	u_short         es_badcsum;	/* incorrect checksum */
+	u_short         es_badvers;	/* incorrect version number */
+	u_short         es_badtype;	/* unknown pdu type field */
+	u_short         es_toosmall;	/* packet too small */
+	u_short         es_eshsent;	/* ESH sent */
+	u_short         es_eshrcvd;	/* ESH rcvd */
+	u_short         es_ishsent;	/* ISH sent */
+	u_short         es_ishrcvd;	/* ISH rcvd */
+	u_short         es_rdsent;	/* RD sent */
+	u_short         es_rdrcvd;	/* RD rcvd */
+};
+
+#ifdef	_KERNEL
+struct esis_stat esis_stat;
+struct socket;
+struct mbuf;
+struct snpa_hdr;
+struct clnp_optidx;
+struct iso_addr;
+struct rtentry;
+struct sockaddr_dl;
+
+void esis_init __P((void));
+int esis_usrreq __P((struct socket *, int, struct mbuf *, struct mbuf *,
+		     struct mbuf *, struct proc *));
+void esis_input __P((struct mbuf *, ...));
+void esis_rdoutput __P((struct snpa_hdr *, struct mbuf *, struct clnp_optidx *,
+			struct iso_addr *, struct rtentry *));
+int esis_insert_addr __P((caddr_t *, int *, struct iso_addr *, struct mbuf *,
+			  int));
+void esis_eshinput __P((struct mbuf *, struct snpa_hdr *));
+void esis_ishinput __P((struct mbuf *, struct snpa_hdr *));
+void esis_rdinput __P((struct mbuf *, struct snpa_hdr *));
+void esis_config __P((void *));
+void esis_shoutput __P((struct ifnet *, int, int, caddr_t, int,
+	               struct iso_addr *));
+void isis_input __P((struct mbuf *, ...));
+int isis_output __P((struct mbuf *, ...));
+void *esis_ctlinput __P((int, struct sockaddr *, void *));
+#endif /* _KERNEL */
diff --git a/isisd/include-netbsd/iso.h b/isisd/include-netbsd/iso.h
new file mode 100644
index 0000000..714b42d
--- /dev/null
+++ b/isisd/include-netbsd/iso.h
@@ -0,0 +1,208 @@
+/*	$NetBSD: iso.h,v 1.13 2000/07/28 12:13:34 kleink Exp $	*/
+
+/*-
+ * Copyright (c) 1991, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by the University of
+ *	California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)iso.h	8.1 (Berkeley) 6/10/93
+ */
+
+/***********************************************************
+		Copyright IBM Corporation 1987
+
+                      All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of IBM not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+******************************************************************/
+
+/*
+ * ARGO Project, Computer Sciences Dept., University of Wisconsin - Madison
+ */
+
+#ifndef _NETISO_ISO_H_
+#define _NETISO_ISO_H_
+
+#if 0
+#include <sys/ansi.h>
+#endif
+
+#if 0
+#ifndef sa_family_t
+typedef __sa_family_t	sa_family_t;
+#define sa_family_t	__sa_family_t
+#endif
+#endif
+/*
+ *	Return true if this is a multicast address
+ *	This assumes that the bit transmission is lsb first. This
+ *	assumption is valid for 802.3 but not 802.5. There is a
+ *	kludge to get around this for 802.5 -- see if_lan.c
+ *	where subnetwork header is setup.
+ */
+#define	IS_MULTICAST(snpa)\
+	((snpa)[0] & 0x01)
+
+/*
+ * Protocols
+ */
+#define	ISOPROTO_TCP	6	/* IETF experiment */
+#define	ISOPROTO_UDP	17	/* IETF experiment */
+#define	ISOPROTO_TP0	25	/* connection oriented transport protocol */
+#define	ISOPROTO_TP1	26	/* not implemented */
+#define	ISOPROTO_TP2	27	/* not implemented */
+#define	ISOPROTO_TP3	28	/* not implemented */
+#define	ISOPROTO_TP4	29	/* connection oriented transport protocol */
+#define	ISOPROTO_TP		ISOPROTO_TP4	/* tp-4 with negotiation */
+#define	ISOPROTO_CLTP	30	/* connectionless transport (not yet impl.) */
+#define	ISOPROTO_CLNP	31	/* connectionless internetworking protocol */
+#define	ISOPROTO_X25	32	/* cons */
+#define	ISOPROTO_INACT_NL	33	/* inactive network layer! */
+#define	ISOPROTO_ESIS	34	/* ES-IS protocol */
+#define	ISOPROTO_INTRAISIS	35	/* IS-IS protocol */
+#define	ISOPROTO_IDRP	36	/* Interdomain Routing Protocol */
+
+#define	ISOPROTO_RAW	255	/* raw clnp */
+#define	ISOPROTO_MAX	256
+
+#define	ISO_PORT_RESERVED		1024
+#define	ISO_PORT_USERRESERVED	5000
+/*
+ * Port/socket numbers: standard network functions
+ * NOT PRESENTLY USED
+ */
+#define	ISO_PORT_MAINT		501
+#define	ISO_PORT_ECHO		507
+#define	ISO_PORT_DISCARD	509
+#define	ISO_PORT_SYSTAT		511
+#define	ISO_PORT_NETSTAT	515
+/*
+ * Port/socket numbers: non-standard application functions
+ */
+#define ISO_PORT_LOGIN		513
+/*
+ * Port/socket numbers: public use
+ */
+#define ISO_PORT_PUBLIC		1024	/* high bit set --> public */
+
+/*
+ *	Network layer protocol identifiers
+ */
+#define ISO8473_CLNP	0x81
+#define	ISO9542_ESIS	0x82
+#define ISO9542X25_ESIS	0x8a
+#define ISO10589_ISIS	0x83
+#define ISO8878A_CONS	0x84
+#define ISO10747_IDRP	0x85
+
+
+#ifndef IN_CLASSA_NET
+#include <netinet/in.h>
+#endif				/* IN_CLASSA_NET */
+
+
+
+/*
+ * The following looks like a sockaddr to facilitate using tree lookup
+ * routines
+ */
+struct iso_addr {
+	u_char          isoa_len;	/* length (in bytes) */
+	char            isoa_genaddr[20];	/* general opaque address */
+};
+
+struct sockaddr_iso {
+	u_char          siso_len;	/* length */
+	sa_family_t     siso_family;	/* family */
+	u_char          siso_plen;	/* presentation selector length */
+	u_char          siso_slen;	/* session selector length */
+	u_char          siso_tlen;	/* transport selector length */
+	struct iso_addr siso_addr;	/* network address */
+	u_char          siso_pad[6];	/* space for gosip v2 sels */
+	/* makes struct 32 bytes long */
+};
+#define siso_nlen siso_addr.isoa_len
+#define siso_data siso_addr.isoa_genaddr
+
+#define TSEL(s) ((caddr_t)((s)->siso_data + (s)->siso_nlen))
+
+#define SAME_ISOADDR(a, b) \
+	(bcmp((a)->siso_data, (b)->siso_data, (unsigned)(a)->siso_nlen)==0)
+#define SAME_ISOIFADDR(a, b) (bcmp((a)->siso_data, (b)->siso_data, \
+	(unsigned)((b)->siso_nlen - (b)->siso_tlen)) == 0)
+/*
+ * The following are specific values for siso->siso_data[0],
+ * otherwise known as the AFI:
+ */
+#define	AFI_37		0x37	/* bcd of "37" */
+#define AFI_OSINET	0x47	/* bcd of "47" */
+#define AFI_RFC986	0x47	/* bcd of "47" */
+#define	AFI_SNA		0x00	/* SubNetwork Address; invalid really... */
+
+#ifdef _KERNEL
+
+extern struct domain isodomain;
+extern struct protosw isosw[];
+
+#define	satosiso(sa)	((struct sockaddr_iso *)(sa))
+#define	sisotosa(siso)	((struct sockaddr *)(siso))
+
+#else
+/* user utilities definitions from the iso library */
+
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+struct iso_addr *iso_addr __P((const char *));
+char           *iso_ntoa __P((const struct iso_addr *));
+
+/* THESE DON'T EXIST YET */
+struct hostent *iso_gethostbyname __P((const char *));
+struct hostent *iso_gethostbyaddr __P((const char *, int, int));
+__END_DECLS
+
+#endif /* _KERNEL */
+
+#endif /* _NETISO_ISO_H_ */
