added watt32 headers and brought the DOS version up to parity with UNIX
authorJohn Tsiombikas <nuclear@member.fsf.org>
Thu, 26 Jan 2023 12:18:01 +0000 (14:18 +0200)
committerJohn Tsiombikas <nuclear@member.fsf.org>
Thu, 26 Jan 2023 12:18:01 +0000 (14:18 +0200)
156 files changed:
.gitignore
Makefile
libs/watt32/arpa/ftp.h [new file with mode: 0644]
libs/watt32/arpa/inet.h [new file with mode: 0644]
libs/watt32/arpa/nameser.h [new file with mode: 0644]
libs/watt32/arpa/telnet.h [new file with mode: 0644]
libs/watt32/arpa/tftp.h [new file with mode: 0644]
libs/watt32/copying.bsd [new file with mode: 0644]
libs/watt32/err.h [new file with mode: 0644]
libs/watt32/net/bpf.h [new file with mode: 0644]
libs/watt32/net/bpfdesc.h [new file with mode: 0644]
libs/watt32/net/ethertyp.h [new file with mode: 0644]
libs/watt32/net/if.h [new file with mode: 0644]
libs/watt32/net/if_arc.h [new file with mode: 0644]
libs/watt32/net/if_arp.h [new file with mode: 0644]
libs/watt32/net/if_atm.h [new file with mode: 0644]
libs/watt32/net/if_dl.h [new file with mode: 0644]
libs/watt32/net/if_ether.h [new file with mode: 0644]
libs/watt32/net/if_fddi.h [new file with mode: 0644]
libs/watt32/net/if_llc.h [new file with mode: 0644]
libs/watt32/net/if_media.h [new file with mode: 0644]
libs/watt32/net/if_packe.h [new file with mode: 0644]
libs/watt32/net/if_ppp.h [new file with mode: 0644]
libs/watt32/net/if_pppva.h [new file with mode: 0644]
libs/watt32/net/if_slvar.h [new file with mode: 0644]
libs/watt32/net/if_strip.h [new file with mode: 0644]
libs/watt32/net/if_tun.h [new file with mode: 0644]
libs/watt32/net/if_types.h [new file with mode: 0644]
libs/watt32/net/netisr.h [new file with mode: 0644]
libs/watt32/net/pfil.h [new file with mode: 0644]
libs/watt32/net/ppp-comp.h [new file with mode: 0644]
libs/watt32/net/ppp_defs.h [new file with mode: 0644]
libs/watt32/net/radix.h [new file with mode: 0644]
libs/watt32/net/raw_cb.h [new file with mode: 0644]
libs/watt32/net/route.h [new file with mode: 0644]
libs/watt32/net/slcompre.h [new file with mode: 0644]
libs/watt32/net/slip.h [new file with mode: 0644]
libs/watt32/netdb.h [new file with mode: 0644]
libs/watt32/netinet/icmp6.h [new file with mode: 0644]
libs/watt32/netinet/icmp_var.h [new file with mode: 0644]
libs/watt32/netinet/if_ether.h [new file with mode: 0644]
libs/watt32/netinet/if_fddi.h [new file with mode: 0644]
libs/watt32/netinet/igmp.h [new file with mode: 0644]
libs/watt32/netinet/igmp_var.h [new file with mode: 0644]
libs/watt32/netinet/in.h [new file with mode: 0644]
libs/watt32/netinet/in_pcb.h [new file with mode: 0644]
libs/watt32/netinet/in_systm.h [new file with mode: 0644]
libs/watt32/netinet/in_var.h [new file with mode: 0644]
libs/watt32/netinet/ip.h [new file with mode: 0644]
libs/watt32/netinet/ip6.h [new file with mode: 0644]
libs/watt32/netinet/ip_fw.h [new file with mode: 0644]
libs/watt32/netinet/ip_icmp.h [new file with mode: 0644]
libs/watt32/netinet/ip_mrout.h [new file with mode: 0644]
libs/watt32/netinet/ip_var.h [new file with mode: 0644]
libs/watt32/netinet/ipv6.h [new file with mode: 0644]
libs/watt32/netinet/tcp.h [new file with mode: 0644]
libs/watt32/netinet/tcp_debu.h [new file with mode: 0644]
libs/watt32/netinet/tcp_fsm.h [new file with mode: 0644]
libs/watt32/netinet/tcp_scor.h [new file with mode: 0644]
libs/watt32/netinet/tcp_seq.h [new file with mode: 0644]
libs/watt32/netinet/tcp_time.h [new file with mode: 0644]
libs/watt32/netinet/tcp_var.h [new file with mode: 0644]
libs/watt32/netinet/tcpip.h [new file with mode: 0644]
libs/watt32/netinet/udp.h [new file with mode: 0644]
libs/watt32/netinet/udp_var.h [new file with mode: 0644]
libs/watt32/netinet6/ah.h [new file with mode: 0644]
libs/watt32/netinet6/ah6.h [new file with mode: 0644]
libs/watt32/netinet6/esp.h [new file with mode: 0644]
libs/watt32/netinet6/esp6.h [new file with mode: 0644]
libs/watt32/netinet6/esp_rijn.h [new file with mode: 0644]
libs/watt32/netinet6/in6.h [new file with mode: 0644]
libs/watt32/netinet6/in6_gif.h [new file with mode: 0644]
libs/watt32/netinet6/in6_ifat.h [new file with mode: 0644]
libs/watt32/netinet6/in6_pcb.h [new file with mode: 0644]
libs/watt32/netinet6/in6_pref.h [new file with mode: 0644]
libs/watt32/netinet6/in6_var.h [new file with mode: 0644]
libs/watt32/netinet6/ip6.h [new file with mode: 0644]
libs/watt32/netinet6/ip6_ecn.h [new file with mode: 0644]
libs/watt32/netinet6/ip6_fw.h [new file with mode: 0644]
libs/watt32/netinet6/ip6_mrou.h [new file with mode: 0644]
libs/watt32/netinet6/ip6_var.h [new file with mode: 0644]
libs/watt32/netinet6/ip6proto.h [new file with mode: 0644]
libs/watt32/netinet6/ipcomp.h [new file with mode: 0644]
libs/watt32/netinet6/ipcomp6.h [new file with mode: 0644]
libs/watt32/netinet6/ipsec.h [new file with mode: 0644]
libs/watt32/netinet6/ipsec6.h [new file with mode: 0644]
libs/watt32/netinet6/mld6_var.h [new file with mode: 0644]
libs/watt32/netinet6/nd6.h [new file with mode: 0644]
libs/watt32/netinet6/pim6.h [new file with mode: 0644]
libs/watt32/netinet6/pim6_var.h [new file with mode: 0644]
libs/watt32/netinet6/raw_ip6.h [new file with mode: 0644]
libs/watt32/netinet6/scope6_v.h [new file with mode: 0644]
libs/watt32/netinet6/tcp6_var.h [new file with mode: 0644]
libs/watt32/netinet6/udp6_var.h [new file with mode: 0644]
libs/watt32/protocol/dumprest.h [new file with mode: 0644]
libs/watt32/protocol/routed.h [new file with mode: 0644]
libs/watt32/protocol/rwhod.h [new file with mode: 0644]
libs/watt32/protocol/talkd.h [new file with mode: 0644]
libs/watt32/protocol/timed.h [new file with mode: 0644]
libs/watt32/resolv.h [new file with mode: 0644]
libs/watt32/rpc/auth.h [new file with mode: 0644]
libs/watt32/rpc/auth_des.h [new file with mode: 0644]
libs/watt32/rpc/auth_uni.h [new file with mode: 0644]
libs/watt32/rpc/clnt.h [new file with mode: 0644]
libs/watt32/rpc/key_prot.h [new file with mode: 0644]
libs/watt32/rpc/pmap_cln.h [new file with mode: 0644]
libs/watt32/rpc/pmap_pro.h [new file with mode: 0644]
libs/watt32/rpc/pmap_rmt.h [new file with mode: 0644]
libs/watt32/rpc/rpc.h [new file with mode: 0644]
libs/watt32/rpc/rpc_msg.h [new file with mode: 0644]
libs/watt32/rpc/svc.h [new file with mode: 0644]
libs/watt32/rpc/svc_auth.h [new file with mode: 0644]
libs/watt32/rpc/types.h [new file with mode: 0644]
libs/watt32/rpc/xdr.h [new file with mode: 0644]
libs/watt32/rpcsvc/yp_prot.h [new file with mode: 0644]
libs/watt32/rpcsvc/ypclnt.h [new file with mode: 0644]
libs/watt32/sys/borlandc.err [new file with mode: 0644]
libs/watt32/sys/cdefs.h [new file with mode: 0644]
libs/watt32/sys/digmars.err [new file with mode: 0644]
libs/watt32/sys/djgpp.err [new file with mode: 0644]
libs/watt32/sys/errno.h [new file with mode: 0644]
libs/watt32/sys/highc.err [new file with mode: 0644]
libs/watt32/sys/ioctl.h [new file with mode: 0644]
libs/watt32/sys/ladsoft.err [new file with mode: 0644]
libs/watt32/sys/lcc.err [new file with mode: 0644]
libs/watt32/sys/mingw32.err [new file with mode: 0644]
libs/watt32/sys/packoff.h [new file with mode: 0644]
libs/watt32/sys/packon.h [new file with mode: 0644]
libs/watt32/sys/param.h [new file with mode: 0644]
libs/watt32/sys/pellesc.err [new file with mode: 0644]
libs/watt32/sys/poll.h [new file with mode: 0644]
libs/watt32/sys/queue.h [new file with mode: 0644]
libs/watt32/sys/quickc.err [new file with mode: 0644]
libs/watt32/sys/select.h [new file with mode: 0644]
libs/watt32/sys/so_ioctl.h [new file with mode: 0644]
libs/watt32/sys/socket.h [new file with mode: 0644]
libs/watt32/sys/swap.h [new file with mode: 0644]
libs/watt32/sys/syslog.h [new file with mode: 0644]
libs/watt32/sys/turboc.err [new file with mode: 0644]
libs/watt32/sys/uio.h [new file with mode: 0644]
libs/watt32/sys/visualc.err [new file with mode: 0644]
libs/watt32/sys/w32api.h [new file with mode: 0644]
libs/watt32/sys/watcom.err [new file with mode: 0644]
libs/watt32/sys/werrno.h [new file with mode: 0644]
libs/watt32/sys/wtime.h [new file with mode: 0644]
libs/watt32/sys/wtypes.h [new file with mode: 0644]
libs/watt32/syslog.h [new file with mode: 0644]
libs/watt32/tcp.h [new file with mode: 0644]
libs/watt32/winsock.h [new file with mode: 0644]
libs/watt32/winsock2.h [new file with mode: 0644]
libs/watt32/ws2tcpip.h [new file with mode: 0644]
src/dos/input.c
src/dos/tgfx.c
src/ftp.c
src/ftp.h
src/main.c

index 30c0671..a0365a7 100644 (file)
@@ -7,3 +7,5 @@ oftp
 *.lnk
 *.map
 *.log
+*.lib
+*.a
index 442fc10..9eb1515 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2,11 +2,11 @@ obj = main.obj tgfx.obj tui.obj tui_list.obj darray.obj util.obj input.obj ftp.o
 bin = oftp.exe
 
 !ifdef __UNIX__
-incpath = -Isrc -Isrc/dos -I$(WATT_ROOT)/inc
-libs = library $(WATT_ROOT)/lib/wattcpwf.lib
+incpath = -Isrc -Isrc/dos -Ilibs/watt32
+libs = library libs/watt32/wattcpwf.lib
 !else
-incpath = -Isrc -Isrc\dos -I$(%WATT_ROOT)\inc
-libs = library $(%WATT_ROOT)\lib\wattcpwf.lib
+incpath = -Isrc -Isrc\dos -Ilibs\watt32
+libs = library libs\watt32\wattcpwf.lib
 !endif
 
 #opt = -otexan
diff --git a/libs/watt32/arpa/ftp.h b/libs/watt32/arpa/ftp.h
new file mode 100644 (file)
index 0000000..8ddade0
--- /dev/null
@@ -0,0 +1,134 @@
+/*!\file arpa/ftp.h
+ * FTP definitions.
+ */
+
+/*
+ * Copyright (c) 1983, 1989 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.
+ *
+ *      @(#)ftp.h       8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef __ARPA_FTP_H
+#define __ARPA_FTP_H
+
+/* Definitions for FTP; see RFC-765. */
+
+/*
+ * Reply codes.
+ */
+#define PRELIM          1       /* positive preliminary */
+#define COMPLETE        2       /* positive completion */
+#define CONTINUE        3       /* positive intermediate */
+#define TRANSIENT       4       /* transient negative completion */
+#undef  ERROR                   /* <wingdi.h> */
+#define ERROR           5       /* permanent negative completion */
+
+/*
+ * Type codes
+ */
+#define TYPE_A          1       /* ASCII */
+#define TYPE_E          2       /* EBCDIC */
+#define TYPE_I          3       /* image */
+#define TYPE_L          4       /* local byte size */
+
+#ifdef FTP_NAMES
+const char *typenames[] =  {"0", "ASCII", "EBCDIC", "Image", "Local" };
+#endif
+
+/*
+ * Form codes
+ */
+#define FORM_N          1       /* non-print */
+#define FORM_T          2       /* telnet format effectors */
+#define FORM_C          3       /* carriage control (ASA) */
+#ifdef FTP_NAMES
+const char *formnames[] =  {"0", "Nonprint", "Telnet", "Carriage-control" };
+#endif
+
+/*
+ * Structure codes
+ */
+#define STRU_F          1       /* file (no record structure) */
+#define STRU_R          2       /* record structure */
+#define STRU_P          3       /* page structure */
+#ifdef FTP_NAMES
+const char *strunames[] =  {"0", "File", "Record", "Page" };
+#endif
+
+/*
+ * Mode types
+ */
+#define MODE_S          1       /* stream */
+#define MODE_B          2       /* block */
+#define MODE_C          3       /* compressed */
+#ifdef FTP_NAMES
+const char *modenames[] =  {"0", "Stream", "Block", "Compressed" };
+#endif
+
+/*
+ * Protection levels
+ */
+#define PROT_C          1       /* clear */
+#define PROT_S          2       /* safe */
+#define PROT_P          3       /* private */
+#define PROT_E          4       /* confidential */
+
+#ifdef FTP_NAMES
+const char *levelnames[] =  {"0", "Clear", "Safe", "Private", "Confidential" };
+#endif
+
+#if defined(KERBEROS) && defined(NOENCRYPTION)
+ /* Define away krb_rd_priv and krb_mk_priv.  Don't need them anyway.
+  * This might not be the best place for this ...
+  */
+  #define krb_rd_priv(o,l,ses,s,h,c,m) krb_rd_safe(o,l,s,h,c,m)
+  #define krb_mk_priv(i,o,l,ses,s,h,c) krb_mk_safe(i,o,l,s,h,c)
+#endif
+
+/*
+ * Record Tokens
+ */
+#define REC_ESC         '\377'  /* Record-mode Escape */
+#define REC_EOR         '\001'  /* Record-mode End-of-Record */
+#define REC_EOF         '\002'  /* Record-mode End-of-File */
+
+/*
+ * Block Header
+ */
+#define BLK_EOR         0x80    /* Block is End-of-Record */
+#define BLK_EOF         0x40    /* Block is End-of-File */
+#define BLK_ERRORS      0x20    /* Block is suspected of containing errors */
+#define BLK_RESTART     0x10    /* Block is Restart Marker */
+
+#define BLK_BYTECOUNT   2       /* Bytes in this block */
+
+#endif
diff --git a/libs/watt32/arpa/inet.h b/libs/watt32/arpa/inet.h
new file mode 100644 (file)
index 0000000..48d1f9d
--- /dev/null
@@ -0,0 +1,83 @@
+/*!\file arpa/inet.h
+ * Address conversions.
+ */
+
+/* Modified for emx by hv and em 1994
+ *
+ * Copyright (c) 1983, 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.
+ *
+ *      @(#)inet.h      8.1 (Berkeley) 6/2/93
+ *      From: Id: inet.h,v 8.5 1997/01/29 08:48:09 vixie Exp $
+ */
+
+#ifndef __ARPA_INET_H
+#define __ARPA_INET_H
+
+#ifndef __SYS_W32API_H
+#include <sys/w32api.h>
+#endif
+
+#ifndef __SYS_TYPES_H
+#include <sys/wtypes.h>
+#endif
+
+#ifndef __SYS_CDEFS_H
+#include <sys/cdefs.h>
+#endif
+
+#ifndef __NETINET_IN_H
+#include <netinet/in.h>
+#endif
+
+
+__BEGIN_DECLS
+
+W32_FUNC int            ascii2addr   (int, const char *, void *);
+W32_FUNC char          *addr2ascii   (int, const void *, int, char *);
+
+W32_FUNC struct in_addr W32_CALL inet_makeaddr (u_long, u_long);
+W32_FUNC u_long         W32_CALL inet_addr     (const char*);
+W32_FUNC u_long         W32_CALL inet_lnaof    (struct in_addr);
+W32_FUNC u_long         W32_CALL inet_netof    (struct in_addr);
+W32_FUNC u_long         W32_CALL inet_network  (const char*);
+W32_FUNC int            W32_CALL inet_aton     (const char *s, struct in_addr *adr);
+W32_FUNC char*          W32_CALL inet_ntoa     (struct in_addr);
+W32_FUNC char*          W32_CALL inet_ntoa_r   (struct in_addr adr, char *buf, int buflen);
+
+W32_FUNC char          *W32_CALL inet_nsap_ntoa(int binlen, const u_char *binary, char *ascii);
+W32_FUNC u_int          W32_CALL inet_nsap_addr(const char *ascii, u_char *binary, int maxlen);
+W32_FUNC const char    *W32_CALL inet_ntop     (int af, const void *src, char *dst, size_t size);
+W32_FUNC int            W32_CALL inet_pton     (int af, const char *src, void *dst);
+
+__END_DECLS
+
+#endif  /* !__ARPA_INET_H_ */
diff --git a/libs/watt32/arpa/nameser.h b/libs/watt32/arpa/nameser.h
new file mode 100644 (file)
index 0000000..7598cfc
--- /dev/null
@@ -0,0 +1,322 @@
+/*!\file arpa/nameser.h
+ * Nameserver API.
+ */
+
+/*
+ * Copyright (c) 1983, 1989, 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.
+ *
+ * -
+ * Portions Copyright (c) 1993 by Digital Equipment Corporation.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies, and that
+ * the name of Digital Equipment Corporation not be used in advertising or
+ * publicity pertaining to distribution of the document or software without
+ * specific, written prior permission.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
+ * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
+ * -
+ * --Copyright--
+ *
+ *      @(#)nameser.h        8.2 (Berkeley) 2/16/94
+ *        From Id: nameser.h,v 4.9.1.15 1994/07/19 22:51:24 vixie Exp
+ *        $Id: nameser.h,v 1.8 1996/08/29 20:01:00 peter Exp $
+ */
+
+#ifndef __ARPA_NAMESER_H
+#define __ARPA_NAMESER_H
+
+#ifndef __SYS_W32API_H
+#include <sys/w32api.h>
+#endif
+
+#ifndef __SYS_PARAM_H
+#include <sys/param.h>
+#endif
+
+#ifndef __SYS_WTYPES_H
+#include <sys/wtypes.h>
+#endif
+
+#ifndef __SYS_CDEFS_H
+#include <sys/cdefs.h>
+#endif
+
+/*
+ * revision information.  this is the release date in YYYYMMDD format.
+ * it can change every day so the right thing to do with it is use it
+ * in preprocessor commands such as "#if (__BIND > 19931104)".  do not
+ * compare for equality; rather, use it to determine whether your resolver
+ * is new enough to contain a certain feature.
+ */
+
+#define __BIND    19960801  /* interface version stamp */
+
+/*
+ * Define constants based on rfc883
+ */
+#define PACKETSZ     512               /* maximum packet size */
+#define MAXDNAME    1025               /* maximum domain name */
+#define MAXCDNAME    255               /* maximum compressed domain name */
+#define MAXLABEL      63               /* maximum length of domain label */
+#define HFIXEDSZ      12               /* #/bytes of fixed data in header */
+#define QFIXEDSZ       4               /* #/bytes of fixed data in query */
+#define RRFIXEDSZ     10               /* #/bytes of fixed data in r record */
+#define INT32SZ        4               /* for systems without 32-bit ints */
+#define INT16SZ        2               /* for systems without 16-bit ints */
+#define INADDRSZ       4               /* IPv4 T_A */
+#define IN6ADDRSZ     16               /* IPv6 T_AAAA */
+
+
+/*
+ * Internet nameserver port number
+ */
+#define NAMESERVER_PORT  53
+
+/*
+ * Currently defined opcodes
+ */
+#define QUERY          0x0             /* standard query */
+#define IQUERY         0x1             /* inverse query */
+#define STATUS         0x2             /* nameserver status query */
+#define NS_NOTIFY_OP   0x4             /* notify secondary of SOA change */
+
+#ifdef ALLOW_UPDATES
+        /* non standard - supports ALLOW_UPDATES stuff from Mike Schwartz */
+# define UPDATEA       0x9             /* add resource record */
+# define UPDATED       0xa             /* delete a specific resource record */
+# define UPDATEDA      0xb             /* delete all named resource record */
+# define UPDATEM       0xc             /* modify a specific resource record */
+# define UPDATEMA      0xd             /* modify all named resource record */
+# define ZONEINIT      0xe             /* initial zone transfer */
+# define ZONEREF       0xf             /* incremental zone referesh */
+#endif
+
+/*
+ * Currently defined response codes
+ */
+#if !defined(WIN32) && !defined(_WIN32)  /* <winerror.h> value is okay */
+#define NOERROR        0               /* no error */
+#endif
+#define FORMERR        1               /* format error */
+#define SERVFAIL       2               /* server failure */
+#define NXDOMAIN       3               /* non existent domain */
+#define NOTIMP         4               /* not implemented */
+#define REFUSED        5               /* query refused */
+
+#ifdef ALLOW_UPDATES
+        /* non standard */
+# define NOCHANGE      0xf             /* update failed to change db */
+#endif
+
+/*
+ * Type values for resources and queries
+ */
+#define T_A            1               /* host address */
+#define T_NS           2               /* authoritative server */
+#define T_MD           3               /* mail destination */
+#define T_MF           4               /* mail forwarder */
+#define T_CNAME        5               /* canonical name */
+#define T_SOA          6               /* start of authority zone */
+#define T_MB           7               /* mailbox domain name */
+#define T_MG           8               /* mail group member */
+#define T_MR           9               /* mail rename name */
+#define T_NULL         10              /* null resource record */
+#define T_WKS          11              /* well known service */
+#define T_PTR          12              /* domain name pointer */
+#define T_HINFO        13              /* host information */
+#define T_MINFO        14              /* mailbox information */
+#define T_MX           15              /* mail routing information */
+#define T_TXT          16              /* text strings */
+#define T_RP           17              /* responsible person */
+#define T_AFSDB        18              /* AFS cell database */
+#define T_X25          19              /* X_25 calling address */
+#define T_ISDN         20              /* ISDN calling address */
+#define T_RT           21              /* router */
+#define T_NSAP         22              /* NSAP address */
+#define T_NSAP_PTR     23              /* reverse NSAP lookup (deprecated) */
+#define T_SIG          24              /* security signature */
+#define T_KEY          25              /* security key */
+#define T_PX           26              /* X.400 mail mapping */
+#define T_GPOS         27              /* geographical position (withdrawn) */
+#define T_AAAA         28              /* IP6 Address */
+#define T_LOC          29              /* Location Information */
+#define T_NXT          30              /* Next Valid Name in Zone */
+#define T_EID          31              /* Endpoint identifier */
+#define T_NIMLOC       32              /* Nimrod locator */
+#define T_SRV          33              /* Server selection */
+#define T_ATMA         34              /* ATM Address */
+#define T_NAPTR        35              /* Naming Authority PoinTeR */
+        /* non standard */
+#define T_UINFO       100              /* user (finger) information */
+#define T_UID         101              /* user ID */
+#define T_GID         102              /* group ID */
+#define T_UNSPEC      103              /* Unspecified format (binary data) */
+        /* Query type values which do not appear in resource records */
+#define T_IXFR        251              /* incremental zone transfer */
+#define T_AXFR        252              /* transfer zone of authority */
+#define T_MAILB       253              /* transfer mailbox records */
+#define T_MAILA       254              /* transfer mail agent records */
+#define T_ANY         255              /* wildcard match */
+
+#define T_WINS        0xFF01           /* WINS name lookup */
+#define T_WINSR       0xFF02           /* WINS reverse lookup */
+
+/*
+ * Values for class field
+ */
+
+#define C_IN          1                /* the arpa internet */
+#define C_CHAOS       3                /* for chaos net (MIT) */
+#define C_HS          4                /* for Hesiod name server (MIT) (XXX) */
+        /* Query class values which do not appear in resource records */
+#define C_ANY         255              /* wildcard match */
+
+/*
+ * Status return codes for T_UNSPEC conversion routines
+ */
+#define CONV_SUCCESS    0
+#define CONV_OVERFLOW   (-1)
+#define CONV_BADFMT     (-2)
+#define CONV_BADCKSUM   (-3)
+#define CONV_BADBUFLEN  (-4)
+
+#include <sys/packon.h>
+
+/*
+ * Structure for query header.  The order of the fields is machine- and
+ * compiler-dependent, depending on the byte/bit order and the layout
+ * of bit fields.  We use bit fields only in int variables, as this
+ * is all ANSI requires.  This requires a somewhat confusing rearrangement.
+ */
+
+typedef struct {
+        unsigned  id :16;          /* query identification number */
+
+        /* fields in third byte */
+        unsigned  rd :1;           /* recursion desired */
+        unsigned  tc :1;           /* truncated message */
+        unsigned  aa :1;           /* authoritative answer */
+        unsigned  opcode :4;       /* purpose of message */
+        unsigned  qr :1;           /* response flag */
+
+        /* fields in fourth byte */
+        unsigned  rcode :4;        /* response code */
+        unsigned  cd: 1;           /* checking disabled by resolver */
+        unsigned  ad: 1;           /* authentic data from named */
+        unsigned  unused :1;       /* unused bits (MBZ as of 4.9.3a3) */
+        unsigned  ra :1;           /* recursion available */
+
+        /* remaining bytes */
+        unsigned  qdcount :16;     /* number of question entries */
+        unsigned  ancount :16;     /* number of answer entries */
+        unsigned  nscount :16;     /* number of authority entries */
+        unsigned  arcount :16;     /* number of resource entries */
+      } HEADER;
+
+
+/*
+ * Defines for handling compressed domain names
+ */
+#define INDIR_MASK  0xc0
+
+/*
+ * Structure for passing resource records around.
+ */
+struct rrec {
+       u_short  r_zone;            /* zone number */
+       u_short  r_class;           /* class number */
+       u_short  r_type;            /* type number */
+       u_long   r_ttl;             /* time to live */
+       int      r_size;            /* size of data area */
+       char    *r_data;            /* pointer to data */
+     };
+
+#include <sys/packoff.h>
+
+
+__BEGIN_DECLS
+
+W32_FUNC u_short _getshort (const u_char *);
+W32_FUNC u_long  _getlong  (const u_char *);
+
+__END_DECLS
+
+/*
+ * Inline versions of get/put short/long.  Pointer is advanced.
+ *
+ * These macros demonstrate the property of C whereby it can be
+ * portable or it can be elegant but rarely both.
+ */
+#define GETSHORT(s, cp) do { \
+        register u_char *t_cp = (u_char *)(cp); \
+        (s) = ((u_short)t_cp[0] << 8) \
+            | ((u_short)t_cp[1]); \
+        (cp) += INT16SZ; \
+      } while (0)
+
+#define GETLONG(l, cp) do { \
+        register u_char *t_cp = (u_char *)(cp); \
+        (l) = ((u_long)t_cp[0] << 24) \
+            | ((u_long)t_cp[1] << 16) \
+            | ((u_long)t_cp[2] << 8) \
+            | ((u_long)t_cp[3]); \
+        (cp) += INT32SZ; \
+      } while (0)
+
+#define PUTSHORT(s, cp) do { \
+        register u_short t_s = (u_short)(s); \
+        register u_char *t_cp = (u_char *)(cp); \
+        *t_cp++ = (u_char) (t_s >> 8); \
+        *t_cp   = (u_char) t_s; \
+        (cp) += INT16SZ; \
+      } while (0)
+
+#define PUTLONG(l, cp) do { \
+        register u_long t_l = (u_long)(l); \
+        register u_char *t_cp = (u_char *)(cp); \
+        *t_cp++ = (u_char) (t_l >> 24); \
+        *t_cp++ = (u_char) (t_l >> 16); \
+        *t_cp++ = (u_char) (t_l >> 8); \
+        *t_cp   = (u_char) t_l; \
+        (cp) += INT32SZ; \
+      } while (0)
+
+#endif
diff --git a/libs/watt32/arpa/telnet.h b/libs/watt32/arpa/telnet.h
new file mode 100644 (file)
index 0000000..bd3396a
--- /dev/null
@@ -0,0 +1,347 @@
+/*!\file arpa/telnet.h
+ * Telnet definitions.
+ */
+
+/*
+ * Copyright (c) 1983, 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.
+ *
+ *      @(#)telnet.h    8.2 (Berkeley) 12/15/93
+ */
+
+#ifndef __ARPA_TELNET_H
+#define __ARPA_TELNET_H
+
+#ifndef __SYS_W32API_H
+#include <sys/w32api.h>
+#endif
+
+/*
+ * Definitions for the TELNET protocol.
+ */
+#define IAC     255             /* interpret as command: */
+#define DONT    254             /* you are not to use option */
+#define DO      253             /* please, you use option */
+#define WONT    252             /* I won't use option */
+#define WILL    251             /* I will use option */
+#define SB      250             /* interpret as subnegotiation */
+#define GA      249             /* you may reverse the line */
+#define EL      248             /* erase the current line */
+#define EC      247             /* erase the current character */
+#define AYT     246             /* are you there */
+#define AO      245             /* abort output--but let prog finish */
+#define IP      244             /* interrupt process--permanently */
+#define BREAK   243             /* break */
+#define DM      242             /* data mark--for connect. cleaning */
+#define NOP     241             /* nop */
+#define SE      240             /* end sub negotiation */
+#define EOR     239             /* end of record (transparent mode) */
+#define ABORT   238             /* Abort process */
+#define SUSP    237             /* Suspend process */
+#define xEOF    236             /* End of file: EOF is already used... */
+
+#define SYNCH   242             /* for telfunc calls */
+
+#ifdef TELCMDS
+  const char *telcmds[] = {
+             "EOF", "SUSP", "ABORT", "EOR",
+             "SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC",
+             "EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC", 0
+           };
+#else
+  W32_DATA const char *telcmds[];
+#endif
+
+#define TELCMD_FIRST    xEOF
+#define TELCMD_LAST     IAC
+#define TELCMD_OK(x)    ((unsigned int)(x) <= TELCMD_LAST && \
+                         (unsigned int)(x) >= TELCMD_FIRST)
+#define TELCMD(x)       telcmds[(x)-TELCMD_FIRST]
+
+/* telnet options
+ */
+#define TELOPT_BINARY         0   /* 8-bit data path */
+#define TELOPT_ECHO           1   /* echo */
+#define TELOPT_RCP            2   /* prepare to reconnect */
+#define TELOPT_SGA            3   /* suppress go ahead */
+#define TELOPT_NAMS           4   /* approximate message size */
+#define TELOPT_STATUS         5   /* give status */
+#define TELOPT_TM             6   /* timing mark */
+#define TELOPT_RCTE           7   /* remote controlled transmission and echo */
+#define TELOPT_NAOL           8   /* negotiate about output line width */
+#define TELOPT_NAOP           9   /* negotiate about output page size */
+#define TELOPT_NAOCRD         10  /* negotiate about CR disposition */
+#define TELOPT_NAOHTS         11  /* negotiate about horizontal tabstops */
+#define TELOPT_NAOHTD         12  /* negotiate about horizontal tab disposition */
+#define TELOPT_NAOFFD         13  /* negotiate about formfeed disposition */
+#define TELOPT_NAOVTS         14  /* negotiate about vertical tab stops */
+#define TELOPT_NAOVTD         15  /* negotiate about vertical tab disposition */
+#define TELOPT_NAOLFD         16  /* negotiate about output LF disposition */
+#define TELOPT_XASCII         17  /* extended ascic character set */
+#define TELOPT_LOGOUT         18  /* force logout */
+#define TELOPT_BM             19  /* byte macro */
+#define TELOPT_DET            20  /* data entry terminal */
+#define TELOPT_SUPDUP         21  /* supdup protocol */
+#define TELOPT_SUPDUPOUTPUT   22  /* supdup output */
+#define TELOPT_SNDLOC         23  /* send location */
+#define TELOPT_TTYPE          24  /* terminal type */
+#define TELOPT_EOR            25  /* end or record */
+#define TELOPT_TUID           26  /* TACACS user identification */
+#define TELOPT_OUTMRK         27  /* output marking */
+#define TELOPT_TTYLOC         28  /* terminal location number */
+#define TELOPT_3270REGIME     29  /* 3270 regime */
+#define TELOPT_X3PAD          30  /* X.3 PAD */
+#define TELOPT_NAWS           31  /* window size */
+#define TELOPT_TSPEED         32  /* terminal speed */
+#define TELOPT_LFLOW          33  /* remote flow control */
+#define TELOPT_LINEMODE       34  /* Linemode option */
+#define TELOPT_XDISPLOC       35  /* X Display Location */
+#define TELOPT_OLD_ENVIRON    36  /* Old - Environment variables */
+#define TELOPT_AUTHENTICATION 37  /* Authenticate */
+#define TELOPT_ENCRYPT        38  /* Encryption option */
+#define TELOPT_NEW_ENVIRON    39  /* New - Environment variables */
+#define TELOPT_EXOPL         255  /* extended-options-list */
+
+#define NTELOPTS   (1+TELOPT_NEW_ENVIRON)
+
+#ifdef TELOPTS
+  const char *telopts[NTELOPTS+1] = {
+        "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME",
+        "STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP",
+        "NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS",
+        "NAOVTD", "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO",
+        "DATA ENTRY TERMINAL", "SUPDUP", "SUPDUP OUTPUT",
+        "SEND LOCATION", "TERMINAL TYPE", "END OF RECORD",
+        "TACACS UID", "OUTPUT MARKING", "TTYLOC",
+        "3270 REGIME", "X.3 PAD", "NAWS", "TSPEED", "LFLOW",
+        "LINEMODE", "XDISPLOC", "OLD-ENVIRON", "AUTHENTICATION",
+        "ENCRYPT", "NEW-ENVIRON", 0
+      };
+  #define TELOPT_FIRST    TELOPT_BINARY
+  #define TELOPT_LAST     TELOPT_NEW_ENVIRON
+  #define TELOPT_OK(x)    ((unsigned int)(x) <= TELOPT_LAST)
+  #define TELOPT(x)       telopts[(x)-TELOPT_FIRST]
+#endif
+
+/* sub-option qualifiers
+ */
+#define TELQUAL_IS         0       /* option is... */
+#define TELQUAL_SEND       1       /* send option */
+#define TELQUAL_INFO       2       /* ENVIRON: informational version of IS */
+#define TELQUAL_REPLY      2       /* AUTHENTICATION: client version of IS */
+#define TELQUAL_NAME       3       /* AUTHENTICATION: client version of IS */
+
+#define LFLOW_OFF          0       /* Disable remote flow control */
+#define LFLOW_ON           1       /* Enable remote flow control */
+#define LFLOW_RESTART_ANY  2       /* Restart output on any char */
+#define LFLOW_RESTART_XON  3       /* Restart output only on XON */
+
+/* LINEMODE suboptions
+ */
+#define LM_MODE         1
+#define LM_FORWARDMASK  2
+#define LM_SLC          3
+
+#define MODE_EDIT       0x01
+#define MODE_TRAPSIG    0x02
+#define MODE_ACK        0x04
+#define MODE_SOFT_TAB   0x08
+#define MODE_LIT_ECHO   0x10
+
+#define MODE_MASK       0x1f
+
+/* Not part of protocol, but needed to simplify things...
+ */
+#define MODE_FLOW       0x0100
+#define MODE_ECHO       0x0200
+#define MODE_INBIN      0x0400
+#define MODE_OUTBIN     0x0800
+#define MODE_FORCE      0x1000
+
+#define SLC_SYNCH       1
+#define SLC_BRK         2
+#define SLC_IP          3
+#define SLC_AO          4
+#define SLC_AYT         5
+#define SLC_EOR         6
+#define SLC_ABORT       7
+#define SLC_EOF         8
+#define SLC_SUSP        9
+#define SLC_EC          10
+#define SLC_EL          11
+#define SLC_EW          12
+#define SLC_RP          13
+#define SLC_LNEXT       14
+#define SLC_XON         15
+#define SLC_XOFF        16
+#define SLC_FORW1       17
+#define SLC_FORW2       18
+#define SLC_MCL         19
+#define SLC_MCR         20
+#define SLC_MCWL        21
+#define SLC_MCWR        22
+#define SLC_MCBOL       23
+#define SLC_MCEOL       24
+#define SLC_INSRT       25
+#define SLC_OVER        26
+#define SLC_ECR         27
+#define SLC_EWR         28
+#define SLC_EBOL        29
+#define SLC_EEOL        30
+
+#define NSLC            30
+
+/*
+ * For backwards compatability, we define SLC_NAMES to be the
+ * list of names if SLC_NAMES is not defined.
+ */
+#define SLC_NAMELIST    "0", "SYNCH", "BRK", "IP", "AO", "AYT", "EOR",  \
+                        "ABORT", "EOF", "SUSP", "EC", "EL", "EW", "RP", \
+                        "LNEXT", "XON", "XOFF", "FORW1", "FORW2",       \
+                        "MCL", "MCR", "MCWL", "MCWR", "MCBOL",          \
+                        "MCEOL", "INSRT", "OVER", "ECR", "EWR",         \
+                        "EBOL", "EEOL",                                 \
+                        0
+#ifdef SLC_NAMES
+  const char *slc_names[] = { SLC_NAMELIST };
+#else
+  W32_DATA const char *slc_names[];
+  #define SLC_NAMES SLC_NAMELIST
+#endif
+
+#define SLC_NAME_OK(x)  ((unsigned int)(x) <= NSLC)
+#define SLC_NAME(x)     slc_names[x]
+
+#define SLC_NOSUPPORT   0
+#define SLC_CANTCHANGE  1
+#define SLC_VARIABLE    2
+#define SLC_DEFAULT     3
+#define SLC_LEVELBITS   0x03
+
+#define SLC_FUNC        0
+#define SLC_FLAGS       1
+#define SLC_VALUE       2
+
+#define SLC_ACK         0x80
+#define SLC_FLUSHIN     0x40
+#define SLC_FLUSHOUT    0x20
+
+#define OLD_ENV_VAR     1
+#define OLD_ENV_VALUE   0
+#define NEW_ENV_VAR     0
+#define NEW_ENV_VALUE   1
+#define ENV_ESC         2
+#define ENV_USERVAR     3
+
+/*
+ * AUTHENTICATION suboptions
+ */
+
+/* Who is authenticating who ...
+ */
+#define AUTH_WHO_CLIENT         0       /* Client authenticating server */
+#define AUTH_WHO_SERVER         1       /* Server authenticating client */
+#define AUTH_WHO_MASK           1
+
+/* Amount of authentication done
+ */
+#define AUTH_HOW_ONE_WAY        0
+#define AUTH_HOW_MUTUAL         2
+#define AUTH_HOW_MASK           2
+
+#define AUTHTYPE_NULL           0
+#define AUTHTYPE_KERBEROS_V4    1
+#define AUTHTYPE_KERBEROS_V5    2
+#define AUTHTYPE_SPX            3
+#define AUTHTYPE_MINK           4
+#define AUTHTYPE_SRP            5
+#define AUTHTYPE_CNT            6
+
+#define AUTHTYPE_TEST           99
+
+#ifdef  AUTH_NAMES
+  const char *authtype_names[] = {
+             "NULL", "KERBEROS_V4", "KERBEROS_V5", "SPX", "MINK", "SRP", 0
+           };
+#else
+  W32_DATA const char *authtype_names[];
+#endif
+
+#define AUTHTYPE_NAME_OK(x)     ((unsigned int)(x) < AUTHTYPE_CNT)
+#define AUTHTYPE_NAME(x)        authtype_names[x]
+
+/*
+ * ENCRYPTion suboptions
+ */
+#define ENCRYPT_IS              0       /* I pick encryption type ... */
+#define ENCRYPT_SUPPORT         1       /* I support encryption types ... */
+#define ENCRYPT_REPLY           2       /* Initial setup response */
+#define ENCRYPT_START           3       /* Am starting to send encrypted */
+#define ENCRYPT_END             4       /* Am ending encrypted */
+#define ENCRYPT_REQSTART        5       /* Request you start encrypting */
+#define ENCRYPT_REQEND          6       /* Request you send encrypting */
+#define ENCRYPT_ENC_KEYID       7
+#define ENCRYPT_DEC_KEYID       8
+#define ENCRYPT_CNT             9
+
+#define ENCTYPE_ANY             0
+#define ENCTYPE_DES_CFB64       1
+#define ENCTYPE_DES_OFB64       2
+#define ENCTYPE_CAST5_40_CFB64  8
+#define ENCTYPE_CAST5_40_OFB64  9
+#define ENCTYPE_CAST128_CFB64   10
+#define ENCTYPE_CAST128_OFB64   11
+#define ENCTYPE_CNT             12
+
+#ifdef  ENCRYPT_NAMES
+  const char *encrypt_names[] = {
+        "IS", "SUPPORT", "REPLY", "START", "END",
+        "REQUEST-START", "REQUEST-END", "ENC-KEYID", "DEC-KEYID",
+        0
+  };
+  const char *enctype_names[] = {
+        "ANY", "DES_CFB64",  "DES_OFB64",  "UNKNOWN",  "UNKNOWN",  "UNKNOWN",
+        "UNKNOWN",  "UNKNOWN",  "CAST5_40_CFB64",  "CAST5_40_OFB64",
+        "CAST128_CFB64",  "CAST128_OFB64",  0,
+  };
+#else
+  W32_DATA const char *encrypt_names[];
+  W32_DATA const char *enctype_names[];
+#endif
+
+
+#define ENCRYPT_NAME_OK(x)  ((unsigned int)(x) < ENCRYPT_CNT)
+#define ENCRYPT_NAME(x)     encrypt_names[x]
+
+#define ENCTYPE_NAME_OK(x)  ((unsigned int)(x) < ENCTYPE_CNT)
+#define ENCTYPE_NAME(x)     enctype_names[x]
+
+#endif
diff --git a/libs/watt32/arpa/tftp.h b/libs/watt32/arpa/tftp.h
new file mode 100644 (file)
index 0000000..75f1b5a
--- /dev/null
@@ -0,0 +1,92 @@
+/*!\file arpa/tftp.h
+ * TFTP definitions.
+ */
+
+/*
+ * Copyright (c) 1983, 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.
+ *
+ *      @(#)tftp.h      8.1 (Berkeley) 6/2/93
+ * $FreeBSD: /repoman/r/ncvs/src/include/arpa/tftp.h,v 1.3.6.1 2002/08/14 21:59:26 peter Exp $
+ */
+
+#ifndef __ARPA_TFTP_H
+#define __ARPA_TFTP_H
+
+/*
+ * Trivial File Transfer Protocol (IEN-133)
+ */
+#define SEGSIZE         512             /* data segment size */
+
+/*
+ * Packet types.
+ */
+#define RRQ     01                      /* read request */
+#define WRQ     02                      /* write request */
+#define DATA    03                      /* data packet */
+#define ACK     04                      /* acknowledgement */
+#undef  ERROR                           /* In <wingdi.h> */
+#define ERROR   05                      /* error code */
+#define OACK    06                      /* option acknowledgement */
+
+#include <sys/packon.h>
+
+struct tftphdr {
+       unsigned short   th_opcode;      /* packet type */
+       union {
+         unsigned short tu_block;       /* block # */
+         unsigned short tu_code;        /* error code */
+         char           tu_stuff[1];    /* request packet stuff */
+       } th_u;
+       char             th_data[1];     /* data or error string */
+     };
+
+#include <sys/packoff.h>
+
+#define th_block        th_u.tu_block
+#define th_code         th_u.tu_code
+#define th_stuff        th_u.tu_stuff
+#define th_msg          th_data
+
+/*
+ * Error codes.
+ */
+#define EUNDEF          0               /* not defined */
+#define ENOTFOUND       1               /* file not found */
+#define EACCESS         2               /* access violation */
+#define ENOSPACE        3               /* disk full or allocation exceeded */
+#define EBADOP          4               /* illegal TFTP operation */
+#define EBADID          5               /* unknown transfer ID */
+#define EEXISTS         6               /* file already exists */
+#define ENOUSER         7               /* no such user */
+#define EOPTNEG         8               /* option negotiation failed */
+
+#endif
diff --git a/libs/watt32/copying.bsd b/libs/watt32/copying.bsd
new file mode 100644 (file)
index 0000000..6716190
--- /dev/null
@@ -0,0 +1,30 @@
+Copyright (c) 1987 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.
diff --git a/libs/watt32/err.h b/libs/watt32/err.h
new file mode 100644 (file)
index 0000000..dd87f7e
--- /dev/null
@@ -0,0 +1,8 @@
+/*!\file err.h
+ *
+ * Compatibility header (for Net/FreeBSD programs)
+ */
+#ifndef __SYS_WERRNO_H
+#include <sys/werrno.h>
+#endif
+
diff --git a/libs/watt32/net/bpf.h b/libs/watt32/net/bpf.h
new file mode 100644 (file)
index 0000000..0fb97ae
--- /dev/null
@@ -0,0 +1,271 @@
+/*!\file net/bpf.h
+ * Berkeley Packet Filter.
+ */
+/*
+ * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ *      The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from the Stanford/CMU enet packet filter,
+ * (net/enet.c) distributed as part of 4.3BSD, and code contributed
+ * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence
+ * Berkeley Laboratory.
+ *
+ * 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.
+ *
+ *     @(#)bpf.h       8.1 (Berkeley) 6/10/93
+ * @(#) Header: bpf.h,v 1.36 97/06/12 14:29:53 leres Exp  (LBL)
+ */
+
+#ifndef __NET_BPF_H
+#define __NET_BPF_H
+
+#ifndef __SYS_WTYPES_H
+#include <sys/wtypes.h>
+#endif
+
+#ifndef __SYS_WTIME_H
+#include <sys/wtime.h>
+#endif
+
+/* BSD style release date */
+#define BPF_RELEASE 199606
+
+typedef long      bpf_int32;
+typedef u_int32_t bpf_u_int32;
+
+/*
+ * Alignment macros.  BPF_WORDALIGN rounds up to the next 
+ * even multiple of BPF_ALIGNMENT. 
+ */
+#define BPF_ALIGNMENT    sizeof(long)
+#define BPF_WORDALIGN(x) (((x)+(BPF_ALIGNMENT-1)) & ~(BPF_ALIGNMENT-1))
+
+#define BPF_MAXINSNS     512
+#define BPF_MAXBUFSIZE   0x8000
+#define BPF_MINBUFSIZE   32
+
+/*
+ *  Structure for BIOCSETF.
+ */
+struct bpf_program {
+       u_int            bf_len;
+       struct bpf_insn *bf_insns;
+     };
+/*
+ * Struct returned by BIOCGSTATS.
+ */
+struct bpf_stat {
+       u_int bs_recv;          /* number of packets received */
+       u_int bs_drop;          /* number of packets dropped */
+     };
+
+/*
+ * Struct return by BIOCVERSION.  This represents the version number of 
+ * the filter language described by the instruction encodings below.
+ * bpf understands a program iff kernel_major == filter_major &&
+ * kernel_minor >= filter_minor, that is, if the value returned by the
+ * running kernel has the same major number and a minor number equal
+ * equal to or less than the filter being downloaded.  Otherwise, the
+ * results are undefined, meaning an error may be returned or packets
+ * may be accepted haphazardly.
+ * It has nothing to do with the source code version.
+ */
+struct bpf_version {
+       u_short bv_major;
+       u_short bv_minor;
+     };
+
+/* Current version number of filter architecture. */
+#define BPF_MAJOR_VERSION 1
+#define BPF_MINOR_VERSION 1
+
+/*
+ * BPF ioctls
+ *
+ * The first set is for compatibility with Sun's pcc style
+ * header files.  If your using gcc, we assume that you
+ * have run fixincludes so the latter set should work.
+ */
+#if (defined(sun) || defined(ibm032)) && !defined(__GNUC__)
+#  define BIOCGBLEN       _IOR(B,102, u_int)
+#  define BIOCSBLEN       _IOWR(B,102, u_int)
+#  define BIOCSETF        _IOW(B,103, struct bpf_program)
+#  define BIOCFLUSH       _IO(B,104)
+#  define BIOCPROMISC     _IO(B,105)
+#  define BIOCGDLT        _IOR(B,106, u_int)
+#  define BIOCGETIF       _IOR(B,107, struct ifreq)
+#  define BIOCSETIF       _IOW(B,108, struct ifreq)
+#  define BIOCSRTIMEOUT   _IOW(B,109, struct timeval)
+#  define BIOCGRTIMEOUT   _IOR(B,110, struct timeval)
+#  define BIOCGSTATS      _IOR(B,111, struct bpf_stat)
+#  define BIOCIMMEDIATE   _IOW(B,112, u_int)
+#  define BIOCVERSION     _IOR(B,113, struct bpf_version)
+#  define BIOCSTCPF       _IOW(B,114, struct bpf_program)
+#  define BIOCSUDPF       _IOW(B,115, struct bpf_program)
+#else
+#  define BIOCGBLEN       _IOR('B',102, u_int)
+#  define BIOCSBLEN       _IOWR('B',102, u_int)
+#  define BIOCSETF        _IOW('B',103, struct bpf_program)
+#  define BIOCFLUSH       _IO('B',104)
+#  define BIOCPROMISC     _IO('B',105)
+#  define BIOCGDLT        _IOR('B',106, u_int)
+#  define BIOCGETIF       _IOR('B',107, struct ifreq)
+#  define BIOCSETIF       _IOW('B',108, struct ifreq)
+#  define BIOCSRTIMEOUT   _IOW('B',109, struct timeval)
+#  define BIOCGRTIMEOUT   _IOR('B',110, struct timeval)
+#  define BIOCGSTATS      _IOR('B',111, struct bpf_stat)
+#  define BIOCIMMEDIATE   _IOW('B',112, u_int)
+#  define BIOCVERSION     _IOR('B',113, struct bpf_version)
+#  define BIOCSTCPF       _IOW('B',114, struct bpf_program)
+#  define BIOCSUDPF       _IOW('B',115, struct bpf_program)
+#endif
+
+/*
+ * Structure prepended to each packet.
+ */
+struct bpf_hdr {
+       struct timeval bh_tstamp;      /* time stamp */
+       u_int32_t      bh_caplen;      /* length of captured portion */
+       u_int32_t      bh_datalen;     /* original length of packet */
+       u_int16_t      bh_hdrlen;      /* length of bpf header (this struct */
+     };                               /* plus alignment padding) */
+
+/*
+ * Because the structure above is not a multiple of 4 bytes, some compilers
+ * will insist on inserting padding; hence, sizeof(struct bpf_hdr) won't work.
+ * Only the kernel needs to know about it; applications use bh_hdrlen.
+ * XXX To save a few bytes on 32-bit machines, we avoid end-of-struct
+ * XXX padding by using the size of the header data elements.  This is
+ * XXX fail-safe: on new machines, we just use the 'safe' sizeof.
+ */
+#define SIZEOF_BPF_HDR sizeof(struct bpf_hdr)
+
+/*
+ * Data-link level type codes.
+ */
+#define DLT_NULL       0       /* no link-layer encapsulation */
+#define DLT_EN10MB     1       /* Ethernet (10Mb) */
+#define DLT_EN3MB      2       /* Experimental Ethernet (3Mb) */
+#define DLT_AX25       3       /* Amateur Radio AX.25 */
+#define DLT_PRONET     4       /* Proteon ProNET Token Ring */
+#define DLT_CHAOS      5       /* Chaos */
+#define DLT_IEEE802    6       /* IEEE 802 Networks */
+#define DLT_ARCNET     7       /* ARCNET */
+#define DLT_SLIP       8       /* Serial Line IP */
+#define DLT_PPP                9       /* Point-to-point Protocol */
+#define DLT_FDDI       10      /* FDDI */
+#define DLT_ATM_RFC1483        11      /* LLC/SNAP encapsulated atm */
+#define DLT_RAW                12      /* raw IP */
+#define DLT_SLIP_BSDOS 13      /* BSD/OS Serial Line IP */
+#define DLT_PPP_BSDOS  14      /* BSD/OS Point-to-point Protocol */
+#define DLT_LANE8023    15      /* LANE 802.3(Ethernet) */
+#define DLT_CIP         16      /* ATM Classical IP */
+
+/*
+ * The instruction encondings.
+ */
+/* instruction classes */
+#define BPF_CLASS(code) ((code) & 0x07)
+#define                BPF_LD          0x00
+#define                BPF_LDX         0x01
+#define                BPF_ST          0x02
+#define                BPF_STX         0x03
+#define                BPF_ALU         0x04
+#define                BPF_JMP         0x05
+#define                BPF_RET         0x06
+#define                BPF_MISC        0x07
+
+/* ld/ldx fields */
+#define BPF_SIZE(code) ((code) & 0x18)
+#define                BPF_W           0x00
+#define                BPF_H           0x08
+#define                BPF_B           0x10
+#define BPF_MODE(code) ((code) & 0xe0)
+#define                BPF_IMM         0x00
+#define                BPF_ABS         0x20
+#define                BPF_IND         0x40
+#define                BPF_MEM         0x60
+#define                BPF_LEN         0x80
+#define                BPF_MSH         0xa0
+
+/* alu/jmp fields */
+#define BPF_OP(code)   ((code) & 0xf0)
+#define                BPF_ADD         0x00
+#define                BPF_SUB         0x10
+#define                BPF_MUL         0x20
+#define                BPF_DIV         0x30
+#define                BPF_OR          0x40
+#define                BPF_AND         0x50
+#define                BPF_LSH         0x60
+#define                BPF_RSH         0x70
+#define                BPF_NEG         0x80
+#define                BPF_JA          0x00
+#define                BPF_JEQ         0x10
+#define                BPF_JGT         0x20
+#define                BPF_JGE         0x30
+#define                BPF_JSET        0x40
+#define BPF_SRC(code)  ((code) & 0x08)
+#define                BPF_K           0x00
+#define                BPF_X           0x08
+
+/* ret - BPF_K and BPF_X also apply */
+#define BPF_RVAL(code) ((code) & 0x18)
+#define                BPF_A           0x10
+
+/* misc */
+#define BPF_MISCOP(code) ((code) & 0xf8)
+#define                BPF_TAX         0x00
+#define                BPF_TXA         0x80
+
+/*
+ * The instruction data structure.
+ */
+struct bpf_insn {
+       u_int16_t code;
+       u_char    jt;
+       u_char    jf;
+       int32_t   k;
+     };
+
+/*
+ * Macros for insn array initializers.
+ */
+#define BPF_STMT(code, k)          { (u_int16_t)(code), 0, 0, k }
+#define BPF_JUMP(code, k, jt, jf)  { (u_int16_t)(code), jt, jf, k }
+
+u_int bpf_filter (struct bpf_insn *, u_char *, u_int, u_int);
+
+/*
+ * Number of scratch memory words (for BPF_LD|BPF_MEM and BPF_ST).
+ */
+#define BPF_MEMWORDS 16
+
+#endif
diff --git a/libs/watt32/net/bpfdesc.h b/libs/watt32/net/bpfdesc.h
new file mode 100644 (file)
index 0000000..7e71ec3
--- /dev/null
@@ -0,0 +1,107 @@
+/*!\file net/bpfdesc.h
+ * Berkeley Packet Filter definitions.
+ */
+
+/*      $NetBSD: bpfdesc.h,v 1.13 1997/10/09 18:58:12 christos Exp $    */
+
+/*
+ * Copyright (c) 1990, 1991, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from the Stanford/CMU enet packet filter,
+ * (net/enet.c) distributed as part of 4.3BSD, and code contributed
+ * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence
+ * Berkeley Laboratory.
+ *
+ * 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.
+ *
+ *     @(#)bpfdesc.h   8.1 (Berkeley) 6/10/93
+ *
+ * @(#) Header: bpfdesc.h,v 1.14 96/06/16 22:28:07 leres Exp  (LBL)
+ */
+
+#ifndef __NET_BPF_DESC_H
+#define __NET_BPF_DESC_H
+
+/*
+ * Descriptor associated with each open bpf file.
+ */
+struct bpf_d {
+       struct bpf_d    *bd_next;       /* Linked list of descriptors */
+       /*
+        * Buffer slots: two mbuf clusters buffer the incoming packets.
+        *   The model has three slots.  Sbuf is always occupied.
+        *   sbuf (store) - Receive interrupt puts packets here.
+        *   hbuf (hold) - When sbuf is full, put cluster here and
+        *                 wakeup read (replace sbuf with fbuf).
+        *   fbuf (free) - When read is done, put cluster here.
+        * On receiving, if sbuf is full and fbuf is 0, packet is dropped.
+        */
+       caddr_t         bd_sbuf;        /* store slot */
+       caddr_t         bd_hbuf;        /* hold slot */
+       caddr_t         bd_fbuf;        /* free slot */
+       int             bd_slen;        /* current length of store buffer */
+       int             bd_hlen;        /* current length of hold buffer */
+
+       int             bd_bufsize;     /* absolute length of buffers */
+
+       struct bpf_if * bd_bif;         /* interface descriptor */
+       u_long          bd_rtout;       /* Read timeout in 'ticks' */
+       struct bpf_insn *bd_filter;     /* filter code */
+       u_long          bd_rcount;      /* number of packets received */
+       u_long          bd_dcount;      /* number of packets dropped */
+
+       u_char          bd_promisc;     /* true if listening promiscuously */
+       u_char          bd_state;       /* idle, waiting, or timed out */
+       u_char          bd_immediate;   /* true to return on packet arrival */
+       int             bd_async;       /* non-zero if packet reception should generate signal */
+        int             bd_pgid;        /* process or group id for signal */
+#if BSD < 199103
+       u_char          bd_selcoll;     /* true if selects collide */
+       int             bd_timedout;
+       struct proc *   bd_selproc;     /* process that last selected us */
+#else
+       u_char          bd_pad;         /* explicit alignment */
+       struct selinfo  bd_sel;         /* bsd select info */
+#endif
+};
+
+/*
+ * Descriptor associated with each attached hardware interface.
+ */
+struct bpf_if {
+       struct bpf_if *bif_next;        /* list of all interfaces */
+       struct bpf_d *bif_dlist;        /* descriptor list */
+       struct bpf_if **bif_driverp;    /* pointer into softc */
+       u_int bif_dlt;                  /* link layer type */
+       u_int bif_hdrlen;               /* length of header (with padding) */
+       struct ifnet *bif_ifp;          /* correspoding interface */
+};
+
+#endif
diff --git a/libs/watt32/net/ethertyp.h b/libs/watt32/net/ethertyp.h
new file mode 100644 (file)
index 0000000..6a176ba
--- /dev/null
@@ -0,0 +1,68 @@
+/*!\file net/ethertyp.h
+ * Ethernet protocol types.
+ */
+
+/*      $NetBSD: ethertypes.h,v 1.2 1997/03/15 18:12:19 is Exp $        */
+
+/*
+ * Copyright (c) 1982, 1986, 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.
+ *
+ *     @(#)if_ether.h  8.1 (Berkeley) 6/10/93
+ */
+
+/*
+ * Ethernet protocol types.
+ *
+ * According to "assigned numbers", the Ethernet protocol numbers are also
+ * used as ARP protocol type numbers.
+ *
+ * I factor them out here to avoid pulling all the Ethernet header file
+ * into the hardware independent ARP code. -is
+ */
+
+#ifndef __NET_ETHERTYPE_H
+#define __NET_ETHERTYPE_H
+
+#define        ETHERTYPE_PUP           0x0200  /* PUP protocol */
+#define        ETHERTYPE_IP            0x0800  /* IP protocol */
+#define        ETHERTYPE_ARP           0x0806  /* address resolution protocol */
+#define        ETHERTYPE_REVARP        0x8035  /* reverse 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
+
+#endif
diff --git a/libs/watt32/net/if.h b/libs/watt32/net/if.h
new file mode 100644 (file)
index 0000000..cd20672
--- /dev/null
@@ -0,0 +1,354 @@
+/*!\file net/if.h
+ * Network interface data.
+ */
+
+/*      $NetBSD: if.h,v 1.29 1997/10/02 19:41:57 is Exp $       */
+
+/*
+ * Copyright (c) 1982, 1986, 1989, 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.
+ *
+ *     @(#)if.h        8.1 (Berkeley) 6/10/93
+ */
+
+#ifndef __NET_IF_H
+#define __NET_IF_H
+
+#include <sys/queue.h>
+
+/*
+ * Structures defining a network interface, providing a packet
+ * transport mechanism (ala level 0 of the PUP protocols).
+ *
+ * Each interface accepts output datagrams of a specified maximum
+ * length, and provides higher level routines with input datagrams
+ * received from its medium.
+ *
+ * Output occurs when the routine if_output is called, with four parameters:
+ *     (*ifp->if_output)(ifp, m, dst, rt)
+ * Here m is the mbuf chain to be sent and dst is the destination address.
+ * The output routine encapsulates the supplied datagram if necessary,
+ * and then transmits it on its medium.
+ *
+ * On input, each interface unwraps the data received by it, and either
+ * places it on the input queue of a internetwork datagram routine
+ * and posts the associated software interrupt, or passes the datagram to a raw
+ * packet input routine.
+ *
+ * Routines exist for locating interfaces by their addresses
+ * or for locating a interface on a certain network, as well as more general
+ * routing and gateway routines maintaining information used to locate
+ * interfaces.  These routines live in the files if.c and route.c
+ */
+#ifndef __SYS_WTIME_H
+#include <sys/wtime.h>
+#endif
+
+struct mbuf;
+struct rtentry;
+struct ether_header;
+struct proc   { int dummy; };
+struct socket { int dummy; };
+
+/*
+ * Structure defining statistics and other data kept regarding a network
+ * interface.
+ */
+struct if_data {
+       /* generic interface information */
+       u_char  ifi_type;               /* ethernet, tokenring, etc. */
+       u_char  ifi_addrlen;            /* media address length */
+       u_char  ifi_hdrlen;             /* media header length */
+       u_long  ifi_mtu;                /* maximum transmission unit */
+       u_long  ifi_metric;             /* routing metric (external only) */
+       u_long  ifi_baudrate;           /* linespeed */
+       /* volatile statistics */
+       u_long  ifi_ipackets;           /* packets received on interface */
+       u_long  ifi_ierrors;            /* input errors on interface */
+       u_long  ifi_opackets;           /* packets sent on interface */
+       u_long  ifi_oerrors;            /* output errors on interface */
+       u_long  ifi_collisions;         /* collisions on csma interfaces */
+       u_long  ifi_ibytes;             /* total number of octets received */
+       u_long  ifi_obytes;             /* total number of octets sent */
+       u_long  ifi_imcasts;            /* packets received via multicast */
+       u_long  ifi_omcasts;            /* packets sent via multicast */
+       u_long  ifi_iqdrops;            /* dropped on input, this interface */
+       u_long  ifi_noproto;            /* destined for unsupported protocol */
+        struct  timeval ifi_lastchange; /* last updated */
+};
+
+/*
+ * Structure defining a queue for a network interface.
+ *
+ * (Would like to call this struct ``if'', but C isn't PL/1.)
+ */
+TAILQ_HEAD(ifnet_head, ifnet);          /* the actual queue head */
+
+/*
+ * Length of interface external name, including terminating '\0'.
+ * Note: this is the same size as a generic device's external name.
+ */
+#define        IFNAMSIZ        16
+
+#ifndef IF_NAMESIZE
+#define IF_NAMESIZE     IFNAMSIZ
+#endif
+
+struct ifnet {                         /* and the entries */
+       void    *if_softc;              /* lower-level data for this if */
+        TAILQ_ENTRY(ifnet) if_list;         /* all struct ifnets are chained */
+        TAILQ_HEAD(xx, ifaddr) if_addrlist; /* linked list of addresses per if */
+       char    if_xname[IFNAMSIZ];     /* external name (name + unit) */
+       int     if_pcount;              /* number of promiscuous listeners */
+       caddr_t if_bpf;                 /* packet filter structure */
+       u_short if_index;               /* numeric abbreviation for this if */
+       short   if_timer;               /* time 'til if_watchdog called */
+       short   if_flags;               /* up/down, broadcast, etc. */
+       short   if__pad1;               /* be nice to m68k ports */
+       struct  if_data if_data;        /* statistics and other data about if */
+/* procedure handles */
+       int     (*if_output)            /* output routine (enqueue) */
+                (struct ifnet *, struct mbuf *, struct sockaddr *,
+                 struct rtentry *);
+       void    (*if_start)             /* initiate output routine */
+                (struct ifnet *);
+       int     (*if_ioctl)             /* ioctl routine */
+                (struct ifnet *, u_long, caddr_t);
+       int     (*if_reset)             /* XXX bus reset routine */
+                (struct ifnet *);
+       void    (*if_watchdog)          /* timer routine */
+                (struct ifnet *);
+       struct  ifqueue {
+                  struct  mbuf *ifq_head;
+                  struct  mbuf *ifq_tail;
+                  int     ifq_len;
+                  int     ifq_maxlen;
+                  int     ifq_drops;
+                } if_snd;               /* output queue */
+       struct  sockaddr_dl *if_sadl;   /* pointer to our sockaddr_dl */
+       u_int8_t *if_broadcastaddr;     /* linklevel broadcast bytestring */
+};
+
+#define        if_mtu          if_data.ifi_mtu
+#define        if_type         if_data.ifi_type
+#define        if_addrlen      if_data.ifi_addrlen
+#define        if_hdrlen       if_data.ifi_hdrlen
+#define        if_metric       if_data.ifi_metric
+#define        if_baudrate     if_data.ifi_baudrate
+#define        if_ipackets     if_data.ifi_ipackets
+#define        if_ierrors      if_data.ifi_ierrors
+#define        if_opackets     if_data.ifi_opackets
+#define        if_oerrors      if_data.ifi_oerrors
+#define        if_collisions   if_data.ifi_collisions
+#define        if_ibytes       if_data.ifi_ibytes
+#define        if_obytes       if_data.ifi_obytes
+#define        if_imcasts      if_data.ifi_imcasts
+#define        if_omcasts      if_data.ifi_omcasts
+#define        if_iqdrops      if_data.ifi_iqdrops
+#define        if_noproto      if_data.ifi_noproto
+#define        if_lastchange   if_data.ifi_lastchange
+
+#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 */
+#define        IFF_PROMISC     0x100           /* receive all packets */
+#define        IFF_ALLMULTI    0x200           /* receive all multicast packets */
+#define        IFF_OACTIVE     0x400           /* transmission in progress */
+#define        IFF_SIMPLEX     0x800           /* can't hear own transmissions */
+#define        IFF_LINK0       0x1000          /* per link layer defined bit */
+#define        IFF_LINK1       0x2000          /* per link layer defined bit */
+#define        IFF_LINK2       0x4000          /* per link layer defined bit */
+#define        IFF_MULTICAST   0x8000          /* supports multicast */
+
+/* flags set internally only: */
+#define        IFF_CANTCHANGE \
+       (IFF_BROADCAST|IFF_POINTOPOINT|IFF_RUNNING|IFF_OACTIVE|\
+           IFF_SIMPLEX|IFF_MULTICAST|IFF_ALLMULTI)
+
+/*
+ * Output queues (ifp->if_snd) and internetwork datagram level (pup level 1)
+ * input routines have queues of messages stored on ifqueue structures
+ * (defined above).  Entries are added to and deleted from these structures
+ * by these macros, which should be called with ipl raised to splimp().
+ */
+#define        IF_QFULL(ifq)           ((ifq)->ifq_len >= (ifq)->ifq_maxlen)
+#define        IF_DROP(ifq)            ((ifq)->ifq_drops++)
+#define        IF_ENQUEUE(ifq, m) { \
+       (m)->m_nextpkt = 0; \
+       if ((ifq)->ifq_tail == 0) \
+               (ifq)->ifq_head = m; \
+       else \
+               (ifq)->ifq_tail->m_nextpkt = m; \
+       (ifq)->ifq_tail = m; \
+       (ifq)->ifq_len++; \
+}
+#define        IF_PREPEND(ifq, m) { \
+       (m)->m_nextpkt = (ifq)->ifq_head; \
+       if ((ifq)->ifq_tail == 0) \
+               (ifq)->ifq_tail = (m); \
+       (ifq)->ifq_head = (m); \
+       (ifq)->ifq_len++; \
+}
+#define        IF_DEQUEUE(ifq, m) { \
+       (m) = (ifq)->ifq_head; \
+       if (m) { \
+               if (((ifq)->ifq_head = (m)->m_nextpkt) == 0) \
+                       (ifq)->ifq_tail = 0; \
+               (m)->m_nextpkt = 0; \
+               (ifq)->ifq_len--; \
+       } \
+}
+
+#define        IFQ_MAXLEN      50
+#define        IFNET_SLOWHZ    1               /* granularity is 1 second */
+
+/*
+ * The ifaddr structure contains information about one address
+ * of an interface.  They are maintained by the different address families,
+ * are allocated and attached when an address is set, and are linked
+ * together so all addresses for an interface can be located.
+ */
+struct ifaddr {
+       struct  sockaddr *ifa_addr;     /* address of interface */
+       struct  sockaddr *ifa_dstaddr;  /* other end of p-to-p link */
+#define        ifa_broadaddr   ifa_dstaddr     /* broadcast address interface */
+       struct  sockaddr *ifa_netmask;  /* used to determine subnet */
+       struct  ifnet *ifa_ifp;         /* back-pointer to interface */
+        TAILQ_ENTRY(ifaddr) ifa_list;   /* list of addresses for interface */
+       void    (*ifa_rtrequest)        /* check or clean routes (+ or -)'d */
+                (int, struct rtentry *, struct sockaddr *);
+       u_short ifa_flags;              /* mostly rt_flags for cloning */
+       short   ifa_refcnt;             /* count of references */
+       int     ifa_metric;             /* cost of going out this interface */
+};
+#define        IFA_ROUTE       RTF_UP          /* route installed */
+
+/*
+ * Message format for use in obtaining information about interfaces
+ * from sysctl and the routing socket.
+ */
+struct if_msghdr {
+       u_short ifm_msglen;     /* to skip over non-understood messages */
+       u_char  ifm_version;    /* future binary compatability */
+       u_char  ifm_type;       /* message type */
+       int     ifm_addrs;      /* like rtm_addrs */
+       int     ifm_flags;      /* value of if_flags */
+       u_short ifm_index;      /* index for associated ifp */
+       struct  if_data ifm_data;/* statistics and other data about if */
+};
+
+/*
+ * Message format for use in obtaining information about interface addresses
+ * from sysctl and the routing socket.
+ */
+struct ifa_msghdr {
+       u_short ifam_msglen;    /* to skip over non-understood messages */
+       u_char  ifam_version;   /* future binary compatability */
+       u_char  ifam_type;      /* message type */
+       int     ifam_addrs;     /* like rtm_addrs */
+       int     ifam_flags;     /* value of ifa_flags */
+       u_short ifam_index;     /* index for associated ifp */
+       int     ifam_metric;    /* value of ifa_metric */
+};
+
+/*
+ * Interface request structure used for socket
+ * ioctl's.  All interface ioctl's must have parameter
+ * definitions which begin with ifr_name.  The
+ * remainder may be interface specific.
+ */
+struct ifreq {
+       char    ifr_name[IFNAMSIZ];             /* if name, e.g. "en0" */
+       union {
+               struct  sockaddr ifru_addr;
+               struct  sockaddr ifru_dstaddr;
+                struct  sockaddr ifru_hwaddr;
+               struct  sockaddr ifru_broadaddr;
+               short   ifru_flags;
+               int     ifru_metric;
+               int     ifru_mtu;
+               caddr_t ifru_data;
+       } ifr_ifru;
+#define        ifr_addr        ifr_ifru.ifru_addr      /* address */
+#define        ifr_dstaddr     ifr_ifru.ifru_dstaddr   /* other end of p-to-p link */
+#define ifr_hwaddr      ifr_ifru.ifru_hwaddr    /* hardware address */
+#define ifr_broadaddr   ifr_ifru.ifru_broadaddr /* broadcast address */
+#define        ifr_flags       ifr_ifru.ifru_flags     /* flags */
+#define        ifr_metric      ifr_ifru.ifru_metric    /* metric */
+#define        ifr_mtu         ifr_ifru.ifru_mtu       /* mtu */
+#define        ifr_media       ifr_ifru.ifru_metric    /* media options (overload) */
+#define        ifr_data        ifr_ifru.ifru_data      /* for use by interface */
+};
+
+struct ifaliasreq {
+       char    ifra_name[IFNAMSIZ];            /* if name, e.g. "en0" */
+       struct  sockaddr ifra_addr;
+       struct  sockaddr ifra_dstaddr;
+#define        ifra_broadaddr  ifra_dstaddr
+       struct  sockaddr ifra_mask;
+};
+
+struct ifmediareq {
+        char    ifm_name[IFNAMSIZ];     /* if name, e.g. "en0" */
+        int     ifm_current;            /* current media options */
+        int     ifm_mask;               /* don't care mask */
+        int     ifm_status;             /* media status */
+        int     ifm_active;             /* active options */
+        int     ifm_count;              /* # entries in ifm_ulist array */
+        int     *ifm_ulist;             /* media words */
+};
+
+/*
+ * Structure used in SIOCGIFCONF request.
+ * Used to retrieve interface configuration
+ * for machine (useful for programs which
+ * must know all networks accessible).
+ */
+struct ifconf {
+       int     ifc_len;                /* size of associated buffer */
+       union {
+               caddr_t ifcu_buf;
+               struct  ifreq *ifcu_req;
+       } ifc_ifcu;
+#define        ifc_buf ifc_ifcu.ifcu_buf       /* buffer address */
+#define        ifc_req ifc_ifcu.ifcu_req       /* array of structures returned */
+};
+
+#ifndef __NET_IF_ARP_H
+#include <net/if_arp.h>
+#endif
+
+#endif
diff --git a/libs/watt32/net/if_arc.h b/libs/watt32/net/if_arc.h
new file mode 100644 (file)
index 0000000..5403514
--- /dev/null
@@ -0,0 +1,123 @@
+/*!\file net/if_arc.h
+ * ARC-net definitions.
+ */
+
+/*      $NetBSD: if_arc.h,v 1.6 1997/03/15 18:12:30 is Exp $    */
+
+/*
+ * Copyright (c) 1982, 1986, 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.
+ *
+ * from: NetBSD: if_ether.h,v 1.10 1994/06/29 06:37:55 cgd Exp
+ *       @(#)if_ether.h        8.1 (Berkeley) 6/10/93
+ */
+
+#ifndef __NET_IF_ARC_H
+#define __NET_IF_ARC_H
+
+#include <sys/packon.h>
+
+/*
+ * Arcnet address - 1 octets
+ * don't know who uses this.
+ */
+struct arc_addr {
+       u_int8_t  arc_addr_octet[1];
+};
+
+/*
+ * Structure of a 2.5MB/s Arcnet header.
+ * as given to interface code.
+ */
+struct arc_header {
+       u_int8_t  arc_shost;
+       u_int8_t  arc_dhost;
+       u_int8_t  arc_type;
+       /*
+        * only present for newstyle encoding with LL fragmentation.
+        * Don't use sizeof(anything), use ARC_HDR{,NEW}LEN instead.
+        */
+       u_int8_t  arc_flag;
+       u_int16_t arc_seqid;
+
+       /*
+        * only present in exception packets (arc_flag == 0xff)
+        */
+       u_int8_t  arc_type2;    /* same as arc_type */
+       u_int8_t  arc_flag2;    /* real flag value */
+       u_int16_t arc_seqid2;   /* real seqid value */
+};
+
+#define        ARC_ADDR_LEN            1
+
+#define        ARC_HDRLEN              3
+#define        ARC_HDRNEWLEN           6
+
+/* these lengths are data link layer length - 2*ARC_ADDR_LEN */
+#define        ARC_MIN_LEN             1
+#define        ARC_MIN_FORBID_LEN      254
+#define        ARC_MAX_FORBID_LEN      256
+#define        ARC_MAX_LEN             508
+
+
+/* RFC 1051 */
+#define        ARCTYPE_IP_OLD          240     /* IP protocol */
+#define        ARCTYPE_ARP_OLD         241     /* address resolution protocol */
+
+/* RFC 1201 */
+#define        ARCTYPE_IP              212     /* IP protocol */
+#define        ARCTYPE_ARP             213     /* address resolution protocol */
+#define        ARCTYPE_REVARP          214     /* reverse addr resolution protocol */
+
+#define        ARCTYPE_ATALK           221     /* Appletalk */
+#define        ARCTYPE_BANIAN          247     /* Banyan Vines */
+#define        ARCTYPE_IPX             250     /* Novell IPX */
+
+#define        ARCMTU                  507
+#define        ARCMIN                  0
+
+struct arccom {
+       struct    ifnet ac_if;          /* network-visible interface */
+
+       u_int16_t ac_seqid;             /* seq. id used by PHDS encap. */
+
+       struct ac_frag {
+               u_int8_t  af_maxflag;   /* from first packet */
+               u_int8_t  af_lastseen;  /* last split flag seen */
+               u_int16_t af_seqid;     
+               struct mbuf *af_packet;
+       } ac_fragtab[256];              /* indexed by sender ll address */
+
+};
+
+#include <sys/packoff.h>
+
+#endif
diff --git a/libs/watt32/net/if_arp.h b/libs/watt32/net/if_arp.h
new file mode 100644 (file)
index 0000000..cb948d0
--- /dev/null
@@ -0,0 +1,117 @@
+/*!\file net/if_arp.h
+ * ARP definitions.
+ */
+
+/*      $NetBSD: if_arp.h,v 1.12 1997/09/08 02:06:30 mikel Exp $        */
+
+/*
+ * Copyright (c) 1986, 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.
+ *
+ *     @(#)if_arp.h    8.1 (Berkeley) 6/10/93
+ */
+
+#ifndef __NET_IF_ARP_H
+#define __NET_IF_ARP_H
+/*
+ * Address Resolution Protocol.
+ *
+ * See RFC 826 for protocol description.  ARP packets are variable
+ * in size; the arphdr structure defines the fixed-length portion.
+ * Protocol type values are the same as those for 10 Mb/s Ethernet.
+ * It is followed by the variable-sized fields ar_sha, arp_spa,
+ * arp_tha and arp_tpa in that order, according to the lengths
+ * specified.  Field names used correspond to RFC 826.
+ */
+
+#include <sys/packon.h>
+
+struct arphdr {
+       u_int16_t ar_hrd;       /* format of hardware address */
+#define ARPHRD_ETHER   1       /* ethernet hardware format */
+#define ARPHRD_TOKEN    6       /* TokenRing hardware format */
+#define ARPHRD_ARCNET  7       /* ethernet hardware format */
+#define ARPHRD_FRELAY  15      /* frame relay hardware format */
+#define ARPHRD_STRIP   23      /* Ricochet Starmode Radio hardware format */
+       u_int16_t ar_pro;       /* format of protocol address */
+       u_int8_t  ar_hln;       /* length of hardware address */
+       u_int8_t  ar_pln;       /* length of protocol address */
+       u_int16_t ar_op;        /* one of: */
+#define        ARPOP_REQUEST   1       /* request to resolve address */
+#define        ARPOP_REPLY     2       /* response to previous request */
+#define        ARPOP_REVREQUEST 3      /* request protocol address given hardware */
+#define        ARPOP_REVREPLY  4       /* response giving protocol address */
+#define        ARPOP_INVREQUEST 8      /* request to identify peer */
+#define        ARPOP_INVREPLY  9       /* response identifying peer */
+/*
+ * The remaining fields are variable in size,
+ * according to the sizes above.
+ */
+#ifdef COMMENT_ONLY
+       u_int8_t  ar_sha[];     /* sender hardware address */
+       u_int8_t  ar_spa[];     /* sender protocol address */
+       u_int8_t  ar_tha[];     /* target hardware address */
+       u_int8_t  ar_tpa[];     /* target protocol address */
+#endif
+#ifdef __GNUC__                 /* only GNU C allows zero arrays */
+        u_int8_t  ar_remain[0]; /* minimum size, normally bigger */
+  #define ar_sha(ap) (((ap)->ar_remain)+0)
+  #define ar_spa(ap) (((ap)->ar_remain)+(ap)->ar_hln)
+  #define ar_tha(ap) (((ap)->ar_remain)+(ap)->ar_hln+(ap)->ar_pln)
+  #define ar_tpa(ap) (((ap)->ar_remain)+2*(ap)->ar_hln+(ap)->ar_pln)
+#else
+  #define ar_sha(ap) (((ap)->ar_op)+2)
+  #define ar_spa(ap) (((ap)->ar_op)+2+(ap)->ar_hln)
+  #define ar_tha(ap) (((ap)->ar_op)+2+(ap)->ar_hln+(ap)->ar_pln)
+  #define ar_tpa(ap) (((ap)->ar_op)+2+2*(ap)->ar_hln+(ap)->ar_pln)
+#endif
+};
+
+
+/*
+ * ARP ioctl request
+ */
+struct arpreq {
+       struct  sockaddr arp_pa;                /* protocol address */
+       struct  sockaddr arp_ha;                /* hardware address */
+       int     arp_flags;                      /* flags */
+};
+
+#include <sys/packoff.h>
+
+/*  arp_flags and at_flags field values */
+#define        ATF_INUSE       0x01    /* entry in use */
+#define ATF_COM                0x02    /* completed entry (enaddr valid) */
+#define        ATF_PERM        0x04    /* permanent entry */
+#define        ATF_PUBL        0x08    /* publish entry (respond for other host) */
+#define        ATF_USETRAILERS 0x10    /* has requested trailers */
+
+#endif
diff --git a/libs/watt32/net/if_atm.h b/libs/watt32/net/if_atm.h
new file mode 100644 (file)
index 0000000..d06d53f
--- /dev/null
@@ -0,0 +1,110 @@
+/*!\file net/if_atm.h
+ * ATM definitions.
+ */
+
+/*      $NetBSD: if_atm.h,v 1.7 1996/11/09 23:02:27 chuck Exp $       */
+
+/*
+ *
+ * Copyright (c) 1996 Charles D. Cranor and Washington University.
+ * 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 Charles D. Cranor and
+ *     Washington University.
+ * 4. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+ */
+
+/*
+ * net/if_atm.h
+ */
+
+#ifndef __NET_IF_ATM_H
+#define __NET_IF_ATM_H
+
+#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__)
+#define RTALLOC1(A,B)          rtalloc1((A),(B))
+#elif defined(__FreeBSD__)
+#define RTALLOC1(A,B)          rtalloc1((A),(B),0UL)
+#endif
+
+#include <sys/packon.h>
+
+/*
+ * pseudo header for packet transmission
+ */
+
+struct atm_pseudohdr {
+  u_int8_t atm_ph[4];  /* flags+VPI+VCI1(msb)+VCI2(lsb) */
+};
+
+#define ATM_PH_FLAGS(X)        ((X)->atm_ph[0])
+#define ATM_PH_VPI(X)  ((X)->atm_ph[1])
+#define ATM_PH_VCI(X)  ((((X)->atm_ph[2]) << 8) | ((X)->atm_ph[3]))
+#define ATM_PH_SETVCI(X,V) { \
+       (X)->atm_ph[2] = ((V) >> 8) & 0xff; \
+       (X)->atm_ph[3] = ((V) & 0xff); \
+}
+
+#define ATM_PH_AAL5    0x01    /* use AAL5? (0 == aal0) */
+#define ATM_PH_LLCSNAP 0x02    /* use the LLC SNAP encoding (iff aal5) */
+
+#define ATM_PH_DRIVER7  0x40   /* reserve for driver's use */
+#define ATM_PH_DRIVER8  0x80   /* reserve for driver's use */
+
+#define ATMMTU         9180    /* ATM MTU size for IP */
+                               /* XXX: could be 9188 with LLC/SNAP according
+                                       to comer */
+
+/* user's ioctl hook for raw atm mode */
+#define SIOCRAWATM     _IOWR('a', 122, int)    /* set driver's raw mode */
+
+/* atm_pseudoioctl: turns on and off RX VCIs  [for internal use only!] */
+struct atm_pseudoioctl {
+  struct atm_pseudohdr aph;
+  void *rxhand;
+};
+#define SIOCATMENA     _IOWR('a', 123, struct atm_pseudoioctl) /* enable */
+#define SIOCATMDIS     _IOWR('a', 124, struct atm_pseudoioctl) /* disable */
+
+/*
+ * XXX forget all the garbage in if_llc.h and do it the easy way
+ */
+
+#define ATMLLC_HDR "\252\252\3\0\0\0"
+struct atmllc {
+  u_int8_t llchdr[6];  /* aa.aa.03.00.00.00 */
+  u_int8_t type[2];    /* "ethernet" type */
+};
+
+#include <sys/packoff.h>
+
+/* ATM_LLC macros: note type code in host byte order */
+#define ATM_LLC_TYPE(X) (((X)->type[0] << 8) | ((X)->type[1]))
+#define ATM_LLC_SETTYPE(X,V) { \
+       (X)->type[1] = ((V) >> 8) & 0xff; \
+       (X)->type[0] = ((V) & 0xff); \
+}
+
+#endif
diff --git a/libs/watt32/net/if_dl.h b/libs/watt32/net/if_dl.h
new file mode 100644 (file)
index 0000000..fa7b799
--- /dev/null
@@ -0,0 +1,95 @@
+/*!\file net/if_dl.h
+ * Link-level sockaddr_dl definition.
+ */
+
+/*      $NetBSD: if_dl.h,v 1.8 1995/03/26 20:30:13 jtc Exp $    */
+
+/*
+ * Copyright (c) 1990, 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.
+ *
+ *     @(#)if_dl.h     8.1 (Berkeley) 6/10/93
+ */
+#ifndef __NET_IF_DL_H
+#define __NET_IF_DL_H
+
+#ifndef __SYS_W32API_H
+#include <sys/w32api.h>
+#endif
+
+#ifndef __SYS_CDEFS_H
+#include <sys/cdefs.h>
+#endif
+
+/*
+ * A Link-Level Sockaddr may specify the interface in one of two
+ * ways: either by means of a system-provided index number (computed
+ * anew and possibly differently on every reboot), or by a human-readable
+ * string such as "il0" (for managerial convenience).
+ *
+ * Census taking actions, such as something akin to SIOCGCONF would return
+ * both the index and the human name.
+ *
+ * High volume transactions (such as giving a link-level ``from'' address
+ * in a recvfrom or recvmsg call) may be likely only to provide the indexed
+ * form, (which requires fewer copy operations and less space).
+ *
+ * The form and interpretation  of the link-level address is purely a matter
+ * of convention between the device driver and its consumers; however, it is
+ * expected that all drivers for an interface of a given if_type will agree.
+ */
+
+/*
+ * Structure of a Link-Level sockaddr:
+ */
+struct sockaddr_dl {
+       u_char    sdl_len;      /* Total length of sockaddr */
+       u_char    sdl_family;   /* AF_DLI */
+       u_int16_t sdl_index;    /* if != 0, system given index for interface */
+       u_char    sdl_type;     /* interface type */
+       u_char    sdl_nlen;     /* interface name length, no trailing 0 reqd. */
+       u_char    sdl_alen;     /* link level address length */
+       u_char    sdl_slen;     /* link layer selector length */
+       char      sdl_data[12]; /* minimum work area, can be larger;
+                                  contains both if name and ll address */
+};
+
+#define LLADDR(s) ((caddr_t)((s)->sdl_data + (s)->sdl_nlen))
+
+
+__BEGIN_DECLS
+
+W32_FUNC void  link_addr (const char *, struct sockaddr_dl *);
+W32_FUNC char *link_ntoa (const struct sockaddr_dl *);
+
+__END_DECLS
+
+#endif
diff --git a/libs/watt32/net/if_ether.h b/libs/watt32/net/if_ether.h
new file mode 100644 (file)
index 0000000..fb5aa63
--- /dev/null
@@ -0,0 +1,5 @@
+/*!\file net/if_ether.h
+ * Compatability header.
+ */
+#include <netinet/if_ether.h>
+
diff --git a/libs/watt32/net/if_fddi.h b/libs/watt32/net/if_fddi.h
new file mode 100644 (file)
index 0000000..0233511
--- /dev/null
@@ -0,0 +1,4 @@
+/*!\file inc/net/if_fddi.h
+ * Compatability header.
+ */
+#include <netinet/if_fddi.h>
diff --git a/libs/watt32/net/if_llc.h b/libs/watt32/net/if_llc.h
new file mode 100644 (file)
index 0000000..2d3d148
--- /dev/null
@@ -0,0 +1,164 @@
+/*!\file net/if_llc.h
+ * IEEE 802.2 Link Level Control.
+ */
+
+/*      $NetBSD: if_llc.h,v 1.9 1997/05/02 21:08:54 christos Exp $      */
+
+/*
+ * Copyright (c) 1988, 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.
+ *
+ *     @(#)if_llc.h    8.1 (Berkeley) 6/10/93
+ */
+#ifndef __NET_IF_LLC_H
+#define __NET_IF_LLC_H
+
+/*
+ * IEEE 802.2 Link Level Control headers, for use in conjunction with
+ * 802.{3,4,5} media access control methods.
+ *
+ * Headers here do not use bit fields due to shortcommings in many
+ * compilers.
+ */
+
+#include <sys/packon.h>
+
+struct llc {
+       u_int8_t llc_dsap;
+       u_int8_t llc_ssap;
+       union {
+           struct {
+               u_int8_t control;
+               u_int8_t format_id;
+               u_int8_t class;
+               u_int8_t window_x2;
+           } type_u;
+           struct {
+               u_int8_t num_snd_x2;
+               u_int8_t num_rcv_x2;
+           } type_i;
+           struct {
+               u_int8_t control;
+               u_int8_t num_rcv_x2;
+           } type_s;
+           struct {
+               u_int8_t control;
+               /*
+                * We cannot put the following fields in a structure because
+                * the structure rounding might cause padding.
+                */
+               u_int8_t frmr_rej_pdu0;
+               u_int8_t frmr_rej_pdu1;
+               u_int8_t frmr_control;
+               u_int8_t frmr_control_ext;
+               u_int8_t frmr_cause;
+           } type_frmr;
+           struct {
+               u_int8_t  control;
+               u_int8_t  org_code[3];
+               u_int16_t ether_type;
+           } type_snap;
+           struct {
+               u_int8_t control;
+               u_int8_t control_ext;
+           } type_raw;
+       } llc_un;
+};
+
+struct frmrinfo {
+       u_int8_t frmr_rej_pdu0;
+       u_int8_t frmr_rej_pdu1;
+       u_int8_t frmr_control;
+       u_int8_t frmr_control_ext;
+       u_int8_t frmr_cause;
+};
+
+#include <sys/packoff.h>
+
+#define        llc_control             llc_un.type_u.control
+#define        llc_control_ext         llc_un.type_raw.control_ext
+#define        llc_fid                 llc_un.type_u.format_id
+#define        llc_class               llc_un.type_u.class
+#define        llc_window              llc_un.type_u.window_x2
+#define        llc_frmrinfo            llc_un.type_frmr.frmr_rej_pdu0
+#define        llc_frmr_pdu0           llc_un.type_frmr.frmr_rej_pdu0
+#define        llc_frmr_pdu1           llc_un.type_frmr.frmr_rej_pdu1
+#define        llc_frmr_control        llc_un.type_frmr.frmr_control
+#define        llc_frmr_control_ext    llc_un.type_frmr.frmr_control_ext
+#define        llc_frmr_cause          llc_un.type_frmr.frmr_cause
+
+/*
+ * Don't use sizeof(struct llc_un) for LLC header sizes
+ */
+#define LLC_ISFRAMELEN 4
+#define LLC_UFRAMELEN  3
+#define LLC_FRMRLEN    7
+
+/*
+ * Unnumbered LLC format commands
+ */
+#define LLC_UI         0x3
+#define LLC_UI_P       0x13
+#define LLC_DISC       0x43
+#define        LLC_DISC_P      0x53
+#define LLC_UA         0x63
+#define LLC_UA_P       0x73
+#define LLC_TEST       0xe3
+#define LLC_TEST_P     0xf3
+#define LLC_FRMR       0x87
+#define        LLC_FRMR_P      0x97
+#define LLC_DM         0x0f
+#define        LLC_DM_P        0x1f
+#define LLC_XID                0xaf
+#define LLC_XID_P      0xbf
+#define LLC_SABME      0x6f
+#define LLC_SABME_P    0x7f
+
+/*
+ * Supervisory LLC commands
+ */
+#define        LLC_RR          0x01
+#define        LLC_RNR         0x05
+#define        LLC_REJ         0x09
+
+/*
+ * Info format - dummy only
+ */
+#define        LLC_INFO        0x00
+
+/*
+ * ISO PDTR 10178 contains among others
+ */
+#define LLC_X25_LSAP   0x7e
+#define LLC_SNAP_LSAP  0xaa
+#define LLC_ISO_LSAP   0xfe
+
+#endif
diff --git a/libs/watt32/net/if_media.h b/libs/watt32/net/if_media.h
new file mode 100644 (file)
index 0000000..6b57346
--- /dev/null
@@ -0,0 +1,258 @@
+/*!\file net/if_media.h
+ * Network interface media selection.
+ */
+
+/*      $NetBSD: if_media.h,v 1.3 1997/03/26 01:19:27 thorpej Exp $     */
+
+/*
+ * Copyright (c) 1997
+ *     Jonathan Stone and Jason R. Thorpe.  All rights reserved.
+ *
+ * This software is derived from information provided by Matt Thomas.
+ *
+ * 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 Jonathan Stone
+ *     and Jason R. Thorpe for the NetBSD Project.
+ * 4. The names of the authors may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHOR 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.
+ */
+
+#ifndef __NET_IF_MEDIA_H
+#define __NET_IF_MEDIA_H
+
+/*
+ * Prototypes and definitions for BSD/OS-compatible network interface
+ * media selection.
+ *
+ * Where it is safe to do so, this code strays slightly from the BSD/OS
+ * design.  Software which uses the API (device drivers, basically)
+ * shouldn't notice any difference.
+ *
+ * Many thanks to Matt Thomas for providing the information necessary
+ * to implement this interface.
+ */
+
+
+/*
+ * if_media Options word:
+ *     Bits    Use
+ *     ----    -------
+ *     0-3     Media variant
+ *     4       RFU
+ *     5-7     Media type
+ *     8-15    Type specific options
+ *     16-19   RFU
+ *     20-27   Shared (global) options
+ *     28-31   Instance
+ */
+
+/*
+ * Ethernet
+ */
+#define IFM_ETHER      0x00000020
+#define        IFM_10_T        3               /* 10BaseT - RJ45 */
+#define        IFM_10_2        4               /* 10Base2 - Thinnet */
+#define        IFM_10_5        5               /* 10Base5 - AUI */
+#define        IFM_100_TX      6               /* 100BaseTX - RJ45 */
+#define        IFM_100_FX      7               /* 100BaseFX - Fiber */
+#define        IFM_100_T4      8               /* 100BaseT4 - 4 pair cat 3 */
+#define        IFM_100_VG      9               /* 100VG-AnyLAN */
+#define        IFM_100_T2      10              /* 100BaseT2 */
+
+/*
+ * Token ring
+ */
+#define        IFM_TOKEN       0x00000040
+#define        IFM_TOK_STP4    3               /* Shielded twisted pair 4m - DB9 */
+#define        IFM_TOK_STP16   4               /* Shielded twisted pair 16m - DB9 */
+#define        IFM_TOK_UTP4    5               /* Unshielded twisted pair 4m - RJ45 */
+#define        IFM_TOK_UTP16   6               /* Unshielded twisted pair 16m - RJ45 */
+#define        IFM_TOK_ETR     0x00000200      /* Early token release */
+#define        IFM_TOK_SRCRT   0x00000400      /* Enable source routing features */
+#define        IFM_TOK_ALLR    0x00000800      /* All routes / Single route bcast */
+
+/*
+ * FDDI
+ */
+#define        IFM_FDDI        0x00000060
+#define        IFM_FDDI_SMF    3               /* Single-mode fiber */
+#define        IFM_FDDI_MMF    4               /* Multi-mode fiber */
+#define IFM_FDDI_UTP   5               /* CDDI / UTP */
+#define IFM_FDDI_DA    0x00000100      /* Dual attach / single attach */
+
+/*
+ * Shared media sub-types
+ */
+#define        IFM_AUTO        0               /* Autoselect best media */
+#define        IFM_MANUAL      1               /* Jumper/dipswitch selects media */
+#define        IFM_NONE        2               /* Deselect all media */
+
+/*
+ * Shared options
+ */
+#define IFM_FDX                0x00100000      /* Force full duplex */
+#define        IFM_HDX         0x00200000      /* Force half duplex */
+#define IFM_FLAG0      0x01000000      /* Driver defined flag */
+#define IFM_FLAG1      0x02000000      /* Driver defined flag */
+#define IFM_FLAG2      0x04000000      /* Driver defined flag */
+#define        IFM_LOOP        0x08000000      /* Put hardware in loopback */
+
+/*
+ * Masks
+ */
+#define        IFM_NMASK       0x000000e0      /* Network type */
+#define        IFM_TMASK       0x0000000f      /* Media sub-type */
+#define        IFM_IMASK       0xf0000000      /* Instance */
+#define        IFM_ISHIFT      28              /* Instance shift */
+#define        IFM_OMASK       0x0000ff00      /* Type specific options */
+#define        IFM_GMASK       0x0ff00000      /* Global options */
+
+/*
+ * Status bits
+ */
+#define        IFM_AVALID      0x00000001      /* Active bit valid */
+#define        IFM_ACTIVE      0x00000002      /* Interface attached to working net */
+
+/*
+ * Macros to extract various bits of information from the media word.
+ */
+#define        IFM_TYPE(x)     ((x) & IFM_NMASK)
+#define        IFM_SUBTYPE(x)  ((x) & IFM_TMASK)
+#define        IFM_INST(x)     (((x) & IFM_IMASK) >> IFM_ISHIFT)
+
+/*
+ * NetBSD extension not defined in the BSDI API.  This is used in various
+ * places to get the canonical description for a given type/subtype.
+ *
+ * NOTE: all but the top-level type descriptions must contain NO whitespace!
+ * Otherwise, parsing these in ifconfig(8) would be a nightmare.
+ */
+struct ifmedia_description {
+       int     ifmt_word;              /* word value; may be masked */
+       const char *ifmt_string;        /* description */
+};
+
+#define        IFM_TYPE_DESCRIPTIONS {                                         \
+       { IFM_ETHER,    "Ethernet" },                                   \
+       { IFM_TOKEN,    "Token ring" },                                 \
+       { IFM_FDDI,     "FDDI" },                                       \
+       { 0, NULL },                                                    \
+}
+
+#define        IFM_SUBTYPE_ETHERNET_DESCRIPTIONS {                             \
+       { IFM_10_T,     "10baseT/UTP" },                                \
+       { IFM_10_2,     "10base2/BNC" },                                \
+       { IFM_10_5,     "10base5/AUI" },                                \
+       { IFM_100_TX,   "100baseTX" },                                  \
+       { IFM_100_FX,   "100baseFX" },                                  \
+       { IFM_100_T4,   "100baseT4" },                                  \
+       { IFM_100_VG,   "100baseVG" },                                  \
+       { IFM_100_T2,   "100baseT2" },                                  \
+       { 0, NULL },                                                    \
+}
+
+#define        IFM_SUBTYPE_ETHERNET_ALIASES {                                  \
+       { IFM_10_T,     "UTP" },                                        \
+       { IFM_10_T,     "10UTP" },                                      \
+       { IFM_10_2,     "BNC" },                                        \
+       { IFM_10_2,     "10BNC" },                                      \
+       { IFM_10_5,     "AUI" },                                        \
+       { IFM_10_5,     "10AUI" },                                      \
+       { IFM_100_TX,   "100TX" },                                      \
+       { IFM_100_FX,   "100FX" },                                      \
+       { IFM_100_T4,   "100T4" },                                      \
+       { IFM_100_VG,   "100VG" },                                      \
+       { IFM_100_T2,   "100T2" },                                      \
+       { 0, NULL },                                                    \
+}
+
+#define        IFM_SUBTYPE_ETHERNET_OPTION_DESCRIPTIONS {                      \
+       { 0, NULL },                                                    \
+}
+
+#define        IFM_SUBTYPE_TOKENRING_DESCRIPTIONS {                            \
+       { IFM_TOK_STP4, "DB9/4Mbit" },                                  \
+       { IFM_TOK_STP16, "DB9/16Mbit" },                                \
+       { IFM_TOK_UTP4, "UTP/4Mbit" },                                  \
+       { IFM_TOK_UTP16, "UTP/16Mbit" },                                \
+       { 0, NULL },                                                    \
+}
+
+#define        IFM_SUBTYPE_TOKENRING_ALIASES {                                 \
+       { IFM_TOK_STP4, "4STP" },                                       \
+       { IFM_TOK_STP16, "16STP" },                                     \
+       { IFM_TOK_UTP4, "4UTP" },                                       \
+       { IFM_TOK_UTP16, "16UTP" },                                     \
+       { 0, NULL },                                                    \
+}
+
+#define        IFM_SUBTYPE_TOKENRING_OPTION_DESCRIPTIONS {                     \
+       { IFM_TOK_ETR,  "EarlyTokenRelease" },                          \
+       { IFM_TOK_SRCRT, "SourceRouting" },                             \
+       { IFM_TOK_ALLR, "AllRoutes" },                                  \
+       { 0, NULL },                                                    \
+}
+
+#define        IFM_SUBTYPE_FDDI_DESCRIPTIONS {                                 \
+       { IFM_FDDI_SMF, "Single-mode" },                                \
+       { IFM_FDDI_MMF, "Multi-mode" },                                 \
+       { IFM_FDDI_UTP, "UTP" },                                        \
+       { 0, NULL },                                                    \
+}
+
+#define        IFM_SUBTYPE_FDDI_ALIASES {                                      \
+       { IFM_FDDI_SMF, "SMF" },                                        \
+       { IFM_FDDI_MMF, "MMF" },                                        \
+       { IFM_FDDI_UTP, "CDDI" },                                       \
+       { 0, NULL },                                                    \
+}
+
+#define        IFM_SUBTYPE_FDDI_OPTION_DESCRIPTIONS {                          \
+       { IFM_FDDI_DA, "Dual-attach" },                                 \
+       { 0, NULL },                                                    \
+}
+
+#define        IFM_SUBTYPE_SHARED_DESCRIPTIONS {                               \
+       { IFM_AUTO,     "autoselect" },                                 \
+       { IFM_MANUAL,   "manual" },                                     \
+       { IFM_NONE,     "none" },                                       \
+       { 0, NULL },                                                    \
+}
+
+#define        IFM_SUBTYPE_SHARED_ALIASES {                                    \
+       { IFM_AUTO,     "auto" },                                       \
+       { 0, NULL },                                                    \
+}
+
+#define        IFM_SHARED_OPTION_DESCRIPTIONS {                                \
+       { IFM_FDX,      "full-duplex" },                                \
+       { IFM_HDX,      "half-duplex" },                                \
+       { IFM_FLAG0,    "flag0" },                                      \
+       { IFM_FLAG1,    "flag1" },                                      \
+       { IFM_FLAG2,    "flag2" },                                      \
+       { IFM_LOOP,     "hw-loopback" },                                \
+       { 0, NULL },                                                    \
+}
+
+#endif
diff --git a/libs/watt32/net/if_packe.h b/libs/watt32/net/if_packe.h
new file mode 100644 (file)
index 0000000..d3d7f5e
--- /dev/null
@@ -0,0 +1,108 @@
+/*!\file net/if_packe.h
+ *
+ * Linux compatability header.
+ */
+#ifndef __LINUX_IF_PACKET_H
+#define __LINUX_IF_PACKET_H
+
+struct sockaddr_pkt
+{
+    unsigned short spkt_family;
+    unsigned char  spkt_device[14];
+    unsigned short spkt_protocol;
+};
+
+struct sockaddr_ll
+{
+    unsigned short   sll_family;
+    unsigned short   sll_protocol;
+    int              sll_ifindex;
+    unsigned short   sll_hatype;
+    unsigned char    sll_pkttype;
+    unsigned char    sll_halen;
+    unsigned char    sll_addr[8];
+};
+
+/* Packet types */
+
+#define PACKET_HOST         0        /* To us */
+#define PACKET_BROADCAST    1        /* To all */
+#define PACKET_MULTICAST    2        /* To group */
+#define PACKET_OTHERHOST    3        /* To someone else */
+#define PACKET_OUTGOING     4        /* Outgoing of any type */
+
+/* These ones are invisible by user level */
+#define PACKET_LOOPBACK     5        /* MC/BRD frame looped back */
+#define PACKET_FASTROUTE    6        /* Fastrouted frame */
+
+/* Packet socket options */
+
+#define PACKET_ADD_MEMBERSHIP   1
+#define PACKET_DROP_MEMBERSHIP  2
+#define PACKET_RECV_OUTPUT      3
+
+/* Value 4 is still used by obsolete turbo-packet. */
+#define PACKET_RX_RING          5
+#define PACKET_STATISTICS       6
+#define PACKET_COPY_THRESH      7
+
+struct tpacket_stats
+{
+    unsigned int    tp_packets;
+    unsigned int    tp_drops;
+};
+
+struct tpacket_hdr
+{
+    unsigned long    tp_status;
+#define TP_STATUS_KERNEL        0
+#define TP_STATUS_USER          1
+#define TP_STATUS_COPY          2
+#define TP_STATUS_LOSING        4
+#define TP_STATUS_CSUMNOTREADY  8
+    unsigned int    tp_len;
+    unsigned int    tp_snaplen;
+    unsigned short  tp_mac;
+    unsigned short  tp_net;
+    unsigned int    tp_sec;
+    unsigned int    tp_usec;
+};
+
+#define TPACKET_ALIGNMENT  16
+#define TPACKET_ALIGN(x)  (((x)+TPACKET_ALIGNMENT-1) & ~(TPACKET_ALIGNMENT-1))
+#define TPACKET_HDRLEN    (TPACKET_ALIGN(sizeof(struct tpacket_hdr)) + sizeof(struct sockaddr_ll))
+
+/*
+   Frame structure:
+
+   - Start. Frame must be aligned to TPACKET_ALIGNMENT=16
+   - struct tpacket_hdr
+   - pad to TPACKET_ALIGNMENT=16
+   - struct sockaddr_ll
+   - Gap, chosen so that packet data (Start+tp_net) alignes to TPACKET_ALIGNMENT=16
+   - Start+tp_mac: [ Optional MAC header ]
+   - Start+tp_net: Packet data, aligned to TPACKET_ALIGNMENT=16.
+   - Pad to align to TPACKET_ALIGNMENT=16
+ */
+
+struct tpacket_req
+{
+    unsigned int    tp_block_size;  /* Minimal size of contiguous block */
+    unsigned int    tp_block_nr;    /* Number of blocks */
+    unsigned int    tp_frame_size;  /* Size of frame */
+    unsigned int    tp_frame_nr;    /* Total number of frames */
+};
+
+struct packet_mreq
+{
+    int             mr_ifindex;
+    unsigned short  mr_type;
+    unsigned short  mr_alen;
+    unsigned char   mr_address[8];
+};
+
+#define PACKET_MR_MULTICAST  0
+#define PACKET_MR_PROMISC    1
+#define PACKET_MR_ALLMULTI   2
+
+#endif
diff --git a/libs/watt32/net/if_ppp.h b/libs/watt32/net/if_ppp.h
new file mode 100644 (file)
index 0000000..1bf7050
--- /dev/null
@@ -0,0 +1,133 @@
+/*!\file net/if_ppp.h
+ * PPP definitions.
+ */
+
+/*      $NetBSD: if_ppp.h,v 1.14 1997/05/17 21:12:02 christos Exp $     */
+/*     Id: if_ppp.h,v 1.16 1997/04/30 05:46:04 paulus Exp      */
+
+/*
+ * if_ppp.h - Point-to-Point Protocol definitions.
+ *
+ * Copyright (c) 1989 Carnegie Mellon University.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by Carnegie Mellon University.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef __NET_IF_PPP_H
+#define __NET_IF_PPP_H
+
+/*
+ * Bit definitions for flags.
+ */
+#define SC_COMP_PROT   0x00000001      /* protocol compression (output) */
+#define SC_COMP_AC     0x00000002      /* header compression (output) */
+#define        SC_COMP_TCP     0x00000004      /* TCP (VJ) compression (output) */
+#define SC_NO_TCP_CCID 0x00000008      /* disable VJ connection-id comp. */
+#define SC_REJ_COMP_AC 0x00000010      /* reject adrs/ctrl comp. on input */
+#define SC_REJ_COMP_TCP        0x00000020      /* reject TCP (VJ) comp. on input */
+#define SC_CCP_OPEN    0x00000040      /* Look at CCP packets */
+#define SC_CCP_UP      0x00000080      /* May send/recv compressed packets */
+#define SC_DEBUG       0x00010000      /* enable debug messages */
+#define SC_LOG_INPKT   0x00020000      /* log contents of good pkts recvd */
+#define SC_LOG_OUTPKT  0x00040000      /* log contents of pkts sent */
+#define SC_LOG_RAWIN   0x00080000      /* log all chars received */
+#define SC_LOG_FLUSH   0x00100000      /* log all chars flushed */
+#define SC_RCV_B7_0    0x01000000      /* have rcvd char with bit 7 = 0 */
+#define SC_RCV_B7_1    0x02000000      /* have rcvd char with bit 7 = 1 */
+#define SC_RCV_EVNP    0x04000000      /* have rcvd char with even parity */
+#define SC_RCV_ODDP    0x08000000      /* have rcvd char with odd parity */
+#define        SC_MASK         0x0fff00ff      /* bits that user can change */
+
+/*
+ * State bits in sc_flags, not changeable by user.
+ */
+#define SC_TIMEOUT     0x00000400      /* timeout is currently pending */
+#define SC_VJ_RESET    0x00000800      /* need to reset VJ decomp */
+#define SC_COMP_RUN    0x00001000      /* compressor has been inited */
+#define SC_DECOMP_RUN  0x00002000      /* decompressor has been inited */
+#define SC_DC_ERROR    0x00004000      /* non-fatal decomp error detected */
+#define SC_DC_FERROR   0x00008000      /* fatal decomp error detected */
+#define SC_TBUSY       0x10000000      /* xmitter doesn't need a packet yet */
+#define SC_PKTLOST     0x20000000      /* have lost or dropped a packet */
+#define        SC_FLUSH        0x40000000      /* flush input until next PPP_FLAG */
+#define        SC_ESCAPED      0x80000000      /* saw a PPP_ESCAPE */
+
+/*
+ * Ioctl definitions.
+ */
+
+struct npioctl {
+    int                protocol;       /* PPP procotol, e.g. PPP_IP */
+    enum NPmode        mode;
+};
+
+/* Structure describing a CCP configuration option, for PPPIOCSCOMPRESS */
+struct ppp_option_data {
+       u_char  *ptr;
+       u_int   length;
+       int     transmit;
+};
+
+struct ifpppstatsreq {
+    char ifr_name[IFNAMSIZ];
+    struct ppp_stats stats;
+};
+
+struct ifpppcstatsreq {
+    char ifr_name[IFNAMSIZ];
+    struct ppp_comp_stats stats;
+};
+
+/*
+ * Ioctl definitions.
+ */
+
+#define        PPPIOCGFLAGS    _IOR('t', 90, int)      /* get configuration flags */
+#define        PPPIOCSFLAGS    _IOW('t', 89, int)      /* set configuration flags */
+#define        PPPIOCGASYNCMAP _IOR('t', 88, int)      /* get async map */
+#define        PPPIOCSASYNCMAP _IOW('t', 87, int)      /* set async map */
+#define        PPPIOCGUNIT     _IOR('t', 86, int)      /* get ppp unit number */
+#define        PPPIOCGRASYNCMAP _IOR('t', 85, int)     /* get receive async map */
+#define        PPPIOCSRASYNCMAP _IOW('t', 84, int)     /* set receive async map */
+#define        PPPIOCGMRU      _IOR('t', 83, int)      /* get max receive unit */
+#define        PPPIOCSMRU      _IOW('t', 82, int)      /* set max receive unit */
+#define        PPPIOCSMAXCID   _IOW('t', 81, int)      /* set VJ max slot ID */
+#define PPPIOCGXASYNCMAP _IOR('t', 80, ext_accm) /* get extended ACCM */
+#define PPPIOCSXASYNCMAP _IOW('t', 79, ext_accm) /* set extended ACCM */
+#define PPPIOCXFERUNIT _IO('t', 78)            /* transfer PPP unit */
+#define PPPIOCSCOMPRESS        _IOW('t', 77, struct ppp_option_data)
+#define PPPIOCGNPMODE  _IOWR('t', 76, struct npioctl) /* get NP mode */
+#define PPPIOCSNPMODE  _IOW('t', 75, struct npioctl)  /* set NP mode */
+#define PPPIOCGIDLE    _IOR('t', 74, struct ppp_idle) /* get idle time */
+#ifdef PPP_FILTER
+#define PPPIOCSPASS    _IOW('t', 71, struct bpf_program) /* set pass filter */
+#define PPPIOCSACTIVE  _IOW('t', 70, struct bpf_program) /* set active filt */
+#endif /* PPP_FILTER */
+
+/* PPPIOC[GS]MTU are alternatives to SIOC[GS]IFMTU, used under Ultrix */
+#define PPPIOCGMTU     _IOR('t', 73, int)      /* get interface MTU */
+#define PPPIOCSMTU     _IOW('t', 72, int)      /* set interface MTU */
+
+/*
+ * These two are interface ioctls so that pppstats can do them on
+ * a socket without having to open the serial device.
+ */
+#define SIOCGPPPSTATS  _IOWR('i', 123, struct ifpppstatsreq)
+#define SIOCGPPPCSTATS _IOWR('i', 122, struct ifpppcstatsreq)
+
+#ifndef ifr_mtu
+#define ifr_mtu        ifr_ifru.ifru_metric
+#endif
+
+#endif
diff --git a/libs/watt32/net/if_pppva.h b/libs/watt32/net/if_pppva.h
new file mode 100644 (file)
index 0000000..447bf7d
--- /dev/null
@@ -0,0 +1,110 @@
+/*!\file net/if_pppva.h
+ * PPP structures and declarations.
+ */
+
+/*      $NetBSD: if_pppvar.h,v 1.7 1997/05/17 21:12:03 christos Exp $   */
+/*     Id: if_pppvar.h,v 1.3 1996/07/01 01:04:37 paulus Exp     */
+
+/*
+ * if_pppvar.h - private structures and declarations for PPP.
+ *
+ * Copyright (c) 1994 The Australian National University.
+ * All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation is hereby granted, provided that the above copyright
+ * notice appears in all copies.  This software is provided without any
+ * warranty, express or implied. The Australian National University
+ * makes no representations about the suitability of this software for
+ * any purpose.
+ *
+ * IN NO EVENT SHALL THE AUSTRALIAN NATIONAL UNIVERSITY BE LIABLE TO ANY
+ * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
+ * THE AUSTRALIAN NATIONAL UNIVERSITY HAVE BEEN ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * THE AUSTRALIAN NATIONAL UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE AUSTRALIAN NATIONAL UNIVERSITY HAS NO
+ * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
+ * OR MODIFICATIONS.
+ *
+ * Copyright (c) 1989 Carnegie Mellon University.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by Carnegie Mellon University.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef __NET_IF_PPPVAR_H
+#define __NET_IF_PPPVAR_H
+
+/*
+ * Supported network protocols.  These values are used for
+ * indexing sc_npmode.
+ */
+#define NP_IP  0               /* Internet Protocol */
+#define NUM_NP 1               /* Number of NPs. */
+
+/*
+ * Structure describing each ppp unit.
+ */
+struct ppp_softc {
+       struct  ifnet sc_if;            /* network-visible interface */
+       int     sc_unit;                /* XXX unit number */
+       u_int   sc_flags;               /* control/status bits; see if_ppp.h */
+       void    *sc_devp;               /* pointer to device-dep structure */
+       void    (*sc_start) __P((struct ppp_softc *));  /* start output proc */
+       void    (*sc_ctlp) __P((struct ppp_softc *)); /* rcvd control pkt */
+       void    (*sc_relinq) __P((struct ppp_softc *)); /* relinquish ifunit */
+       u_int16_t sc_mru;               /* max receive unit */
+        int     sc_xfer;                /* used in transferring unit */
+       struct  ifqueue sc_rawq;        /* received packets */
+       struct  ifqueue sc_inq;         /* queue of input packets for daemon */
+       struct  ifqueue sc_fastq;       /* interactive output packet q */
+       struct  mbuf *sc_togo;          /* output packet ready to go */
+       struct  mbuf *sc_npqueue;       /* output packets not to be sent yet */
+       struct  mbuf **sc_npqtail;      /* ptr to last next ptr in npqueue */
+       struct  pppstat sc_stats;       /* count of bytes/pkts sent/rcvd */
+       caddr_t sc_bpf;                 /* hook for BPF */
+       enum    NPmode sc_npmode[NUM_NP]; /* what to do with each NP */
+       struct  compressor *sc_xcomp;   /* transmit compressor */
+       void    *sc_xc_state;           /* transmit compressor state */
+       struct  compressor *sc_rcomp;   /* receive decompressor */
+       void    *sc_rc_state;           /* receive decompressor state */
+       time_t  sc_last_sent;           /* time (secs) last NP pkt sent */
+       time_t  sc_last_recv;           /* time (secs) last NP pkt rcvd */
+#ifdef PPP_FILTER
+       struct  bpf_program sc_pass_filt;   /* filter for packets to pass */
+       struct  bpf_program sc_active_filt; /* filter for "non-idle" packets */
+#endif /* PPP_FILTER */
+#ifdef VJC
+       struct  slcompress *sc_comp;    /* vjc control buffer */
+#endif
+
+       /* Device-dependent part for async lines. */
+       ext_accm sc_asyncmap;           /* async control character map */
+       u_int32_t sc_rasyncmap;         /* receive async control char map */
+       struct  mbuf *sc_outm;          /* mbuf chain currently being output */
+       struct  mbuf *sc_m;             /* pointer to input mbuf chain */
+       struct  mbuf *sc_mc;            /* pointer to current input mbuf */
+       char    *sc_mp;                 /* ptr to next char in input mbuf */
+       u_int16_t sc_ilen;              /* length of input packet so far */
+       u_int16_t sc_fcs;               /* FCS so far (input) */
+       u_int16_t sc_outfcs;            /* FCS so far for output packet */
+       u_char  sc_rawin[16];           /* chars as received */
+       int     sc_rawin_count;         /* # in sc_rawin */
+};
+
+#endif
diff --git a/libs/watt32/net/if_slvar.h b/libs/watt32/net/if_slvar.h
new file mode 100644 (file)
index 0000000..901aec7
--- /dev/null
@@ -0,0 +1,85 @@
+/*!\file net/if_slvar.h
+ * SLIP interface structures.
+ */
+
+/*      $NetBSD: if_slvar.h,v 1.17 1997/03/27 20:36:17 thorpej 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.
+ *
+ *     @(#)if_slvar.h  8.3 (Berkeley) 2/1/94
+ */
+#ifndef __NET_IF_SLVAR_H
+#define __NET_IF_SLVAR_H
+
+/*
+ * Definitions for SLIP interface data structures
+ * 
+ * (This exists so programs like slstats can get at the definition
+ *  of sl_softc.)
+ */
+
+struct sl_softc {
+       struct  ifnet sc_if;            /* network-visible interface */
+       int     sc_unit;                /* XXX unit number */
+       struct  ifqueue sc_fastq;       /* interactive output queue */
+       struct  tty *sc_ttyp;           /* pointer to tty structure */
+       u_char  *sc_mp;                 /* pointer to next available buf char */
+       u_char  *sc_ep;                 /* pointer to last available buf char */
+       u_char  *sc_buf;                /* input buffer */
+       u_char  *sc_xxx;                /* XXX don't ask... */
+       u_int   sc_flags;               /* see below */
+       u_int   sc_escape;      /* =1 if last char input was FRAME_ESCAPE */
+       long    sc_lasttime;            /* last time a char arrived */
+       long    sc_abortcount;          /* number of abort esacpe chars */
+       long    sc_starttime;           /* time of first abort in window */
+       long    sc_oqlen;               /* previous output queue size */
+       long    sc_otimeout;            /* number of times output's stalled */
+#ifdef NetBSD
+       int     sc_oldbufsize;          /* previous output buffer size */
+       int     sc_oldbufquot;          /* previous output buffer quoting */
+#endif
+#ifdef INET                            /* XXX */
+       struct  slcompress sc_comp;     /* tcp compression data */
+#endif
+       caddr_t sc_bpf;                 /* BPF data */
+};
+
+/* internal flags */
+#define        SC_ERROR        0x0001          /* had an input error */
+
+/* visible flags */
+#define        SC_COMPRESS     IFF_LINK0       /* compress TCP traffic */
+#define        SC_NOICMP       IFF_LINK1       /* supress ICMP traffic */
+#define        SC_AUTOCOMP     IFF_LINK2       /* auto-enable TCP compression */
+
+#endif
diff --git a/libs/watt32/net/if_strip.h b/libs/watt32/net/if_strip.h
new file mode 100644 (file)
index 0000000..01a7ccd
--- /dev/null
@@ -0,0 +1,60 @@
+/*!\file net/if_strip.h
+ * SLIP interface structures.
+ */
+
+/*      $NetBSD: if_stripvar.h,v 1.4.8.1 1997/11/17 23:36:16 thorpej Exp $      */
+
+/*
+ * Definitions for SLIP interface data structures
+ * 
+ * (This exists so programs like slstats can get at the definition
+ *  of sl_softc.)
+ */
+
+#ifndef __NET_IF_STRIP_H
+#define __NET_IF_STRIP_H
+
+struct strip_softc {
+       struct  ifnet sc_if;            /* network-visible interface */
+       int     sc_unit;                /* XXX unit number */
+       struct  ifqueue sc_fastq;       /* interactive output queue */
+       struct  tty *sc_ttyp;           /* pointer to tty structure */
+       u_char  *sc_mp;                 /* pointer to next available buf char */
+       u_char  *sc_ep;                 /* pointer to last available buf char */
+       u_char  *sc_buf;                /* input buffer */
+       u_char  *sc_rxbuf;              /* input destuffing buffer */
+       u_char  *sc_txbuf;              /* output stuffing buffer */
+       u_char  *sc_xxx;                /* XXX don't ask... */
+       u_int   sc_flags;               /* see below */
+       long    sc_oqlen;               /* previous output queue size */
+       long    sc_otimeout;            /* number of times output's stalled */
+#ifdef __NetBSD__
+       int     sc_oldbufsize;          /* previous output buffer size */
+       int     sc_oldbufquot;          /* previous output buffer quoting */
+#endif
+#ifdef INET                            /* XXX */
+       struct  slcompress sc_comp;     /* tcp compression data */
+#endif
+
+       int sc_state;                   /* Radio reset state-machine */
+#define ST_ALIVE       0x0             /*    answered  probe */
+#define ST_PROBE_SENT  0x1             /*    probe sent, answer pending */
+#define ST_DEAD                0x2             /*    no answer to probe; do reset */
+
+       long sc_statetimo;              /* When (secs) current state ends */
+
+       caddr_t sc_bpf;                 /* BPF data */
+};
+
+
+/* Internal flags */
+#define        SC_ERROR        0x0001          /* Incurred error reading current pkt*/
+
+#define SC_TIMEOUT     0x00000400      /* timeout is currently pending */
+
+/* visible flags */
+#define        SC_COMPRESS     IFF_LINK0       /* compress TCP traffic */
+#define        SC_NOICMP       IFF_LINK1       /* supress ICMP traffic */
+#define        SC_AUTOCOMP     IFF_LINK2       /* auto-enable TCP compression */
+
+#endif
diff --git a/libs/watt32/net/if_tun.h b/libs/watt32/net/if_tun.h
new file mode 100644 (file)
index 0000000..0c9c5ee
--- /dev/null
@@ -0,0 +1,58 @@
+/*!\file net/if_tun.h
+ * Interface tunneling.
+ */
+
+/*      $NetBSD: if_tun.h,v 1.6 1996/06/25 22:15:18 pk Exp $    */
+
+/*
+ * Copyright (c) 1988, Julian Onions <jpo@cs.nott.ac.uk>
+ * Nottingham University 1987.
+ *
+ * This source may be freely distributed, however I would be interested
+ * in any changes that are made.
+ *
+ * This driver takes packets off the IP i/f and hands them up to a
+ * user process to have it's wicked way with. This driver has it's
+ * roots in a similar driver written by Phil Cockcroft (formerly) at
+ * UCL. This driver is based much more on read/write/select mode of
+ * operation though.
+ * 
+ * : $Header: if_tnreg.h,v 1.1.2.1 1992/07/16 22:39:16 friedl Exp
+ */
+
+#ifndef __NET_IF_TUN_H
+#define __NET_IF_TUN_H
+
+struct tun_softc {
+       u_short tun_flags;              /* misc flags */
+#define        TUN_OPEN        0x0001
+#define        TUN_INITED      0x0002
+#define        TUN_RCOLL       0x0004
+#define        TUN_IASET       0x0008
+#define        TUN_DSTADDR     0x0010
+#define        TUN_RWAIT       0x0040
+#define        TUN_ASYNC       0x0080
+#define        TUN_NBIO        0x0100
+#define        TUN_PREPADDR    0x0200
+
+#define        TUN_READY       (TUN_OPEN | TUN_INITED | TUN_IASET)
+
+       struct  ifnet tun_if;           /* the interface */
+       int     tun_pgrp;               /* the process group - if any */
+       struct  selinfo tun_rsel;       /* read select */
+       struct  selinfo tun_wsel;       /* write select (not used) */
+#if NBPFILTER > 0
+       caddr_t         tun_bpf;
+#endif
+};
+
+/* Maximum packet size */
+#define        TUNMTU          1500
+
+/* ioctl's for get/set debug */
+#define        TUNSDEBUG       _IOW('t', 90, int)
+#define        TUNGDEBUG       _IOR('t', 89, int)
+#define        TUNSIFMODE      _IOW('t', 88, int)
+#define        TUNSLMODE       _IOW('t', 87, int)
+
+#endif
diff --git a/libs/watt32/net/if_types.h b/libs/watt32/net/if_types.h
new file mode 100644 (file)
index 0000000..c0a390e
--- /dev/null
@@ -0,0 +1,105 @@
+/*!\file net/if_types.h
+ * Network interface types.
+ */
+
+/*      $NetBSD: if_types.h,v 1.7 1995/02/27 09:10:24 glass Exp $       */
+
+/*
+ * Copyright (c) 1989, 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.
+ *
+ *     @(#)if_types.h  8.2 (Berkeley) 4/20/94
+ */
+
+/*
+ * Interface types for benefit of parsing media address headers.
+ * This list is derived from the SNMP list of ifTypes, currently
+ * documented in RFC1573.
+ */
+#ifndef __NET_IF_TYPES_H
+#define __NET_IF_TYPES_H
+
+#define        IFT_OTHER       0x1             /* none of the following */
+#define        IFT_1822        0x2             /* old-style arpanet imp */
+#define        IFT_HDH1822     0x3             /* HDH arpanet imp */
+#define        IFT_X25DDN      0x4             /* x25 to imp */
+#define        IFT_X25         0x5             /* PDN X25 interface (RFC877) */
+#define        IFT_ETHER       0x6             /* Ethernet CSMACD */
+#define        IFT_ISO88023    0x7             /* CMSA CD */
+#define        IFT_ISO88024    0x8             /* Token Bus */
+#define        IFT_ISO88025    0x9             /* Token Ring */
+#define        IFT_ISO88026    0xa             /* MAN */
+#define        IFT_STARLAN     0xb
+#define        IFT_P10         0xc             /* Proteon 10MBit ring */
+#define        IFT_P80         0xd             /* Proteon 80MBit ring */
+#define        IFT_HY          0xe             /* Hyperchannel */
+#define        IFT_FDDI        0xf
+#define        IFT_LAPB        0x10
+#define        IFT_SDLC        0x11
+#define        IFT_T1          0x12
+#define        IFT_CEPT        0x13            /* E1 - european T1 */
+#define        IFT_ISDNBASIC   0x14
+#define        IFT_ISDNPRIMARY 0x15
+#define        IFT_PTPSERIAL   0x16            /* Proprietary PTP serial */
+#define        IFT_PPP         0x17            /* RFC 1331 */
+#define        IFT_LOOP        0x18            /* loopback */
+#define        IFT_EON         0x19            /* ISO over IP */
+#define        IFT_XETHER      0x1a            /* obsolete 3MB experimental ethernet */
+#define        IFT_NSIP        0x1b            /* XNS over IP */
+#define        IFT_SLIP        0x1c            /* IP over generic TTY */
+#define        IFT_ULTRA       0x1d            /* Ultra Technologies */
+#define        IFT_DS3         0x1e            /* Generic T3 */
+#define        IFT_SIP         0x1f            /* SMDS */
+#define        IFT_FRELAY      0x20            /* Frame Relay DTE only */
+#define        IFT_RS232       0x21
+#define        IFT_PARA        0x22            /* parallel-port */
+#define        IFT_ARCNET      0x23
+#define        IFT_ARCNETPLUS  0x24
+#define        IFT_ATM         0x25            /* ATM cells */
+#define        IFT_MIOX25      0x26
+#define        IFT_SONET       0x27            /* SONET or SDH */
+#define        IFT_X25PLE      0x28
+#define        IFT_ISO88022LLC 0x29
+#define        IFT_LOCALTALK   0x2a
+#define        IFT_SMDSDXI     0x2b
+#define        IFT_FRELAYDCE   0x2c            /* Frame Relay DCE */
+#define        IFT_V35         0x2d
+#define        IFT_HSSI        0x2e
+#define        IFT_HIPPI       0x2f
+#define        IFT_MODEM       0x30            /* Generic Modem */
+#define        IFT_AAL5        0x31            /* AAL5 over ATM */
+#define        IFT_SONETPATH   0x32
+#define        IFT_SONETVT     0x33
+#define        IFT_SMDSICIP    0x34            /* SMDS InterCarrier Interface */
+#define        IFT_PROPVIRTUAL 0x35            /* Proprietary Virtual/internal */
+#define        IFT_PROPMUX     0x36            /* Proprietary Multiplexing */
+
+#endif
diff --git a/libs/watt32/net/netisr.h b/libs/watt32/net/netisr.h
new file mode 100644 (file)
index 0000000..4c3ab1c
--- /dev/null
@@ -0,0 +1,78 @@
+/*!\file net/netisr.h
+ *
+ */
+
+/*      $NetBSD: netisr.h,v 1.15 1997/04/02 21:23:29 christos Exp $     */
+
+/*
+ * Copyright (c) 1980, 1986, 1989, 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.
+ *
+ *      @(#)netisr.h    8.1 (Berkeley) 6/10/93
+ */
+
+#ifndef __NET_NETISR_H
+#define __NET_NETISR_H
+
+/*
+ * The networking code runs off software interrupts.
+ *
+ * You can switch into the network by doing splsoftnet() and return by splx().
+ * The software interrupt level for the network is higher than the software
+ * level for the clock (so you can enter the network in routines called
+ * at timeout time).
+ *
+ * The routine to request a network software interrupt, setsoftnet(),
+ * is defined in the machine-specific include files.
+ */
+
+/*
+ * Each ``pup-level-1'' input queue has a bit in a ``netisr'' status
+ * word which is used to de-multiplex a single software
+ * interrupt used for scheduling the network code to calls
+ * on the lowest level routine of each protocol.
+ */
+#define NETISR_IP       2               /* same as AF_INET */
+#define NETISR_IMP      3               /* same as AF_IMPLINK */
+#define NETISR_NS       6               /* same as AF_NS */
+#define NETISR_ISO      7               /* same as AF_ISO */
+#define NETISR_CCITT    10              /* same as AF_CCITT */
+#define NETISR_ATALK    16              /* same as AF_APPLETALK */
+#define NETISR_ARP      18              /* same as AF_LINK */
+#define NETISR_ISDN     26              /* same as AF_E164 */
+#define NETISR_NATM     27              /* same as AF_NATM */
+#define NETISR_PPP      28              /* for PPP processing */
+
+#define schednetisr(anisr)      { netisr |= 1<<(anisr); setsoftnet(); }
+
+extern int netisr;         /* scheduling bits for network */
+
+#endif
diff --git a/libs/watt32/net/pfil.h b/libs/watt32/net/pfil.h
new file mode 100644 (file)
index 0000000..0b0d1e7
--- /dev/null
@@ -0,0 +1,47 @@
+/*!\file net/pfil.h
+ *
+ */
+
+/*      $NetBSD: pfil.h,v 1.8 1997/10/10 05:40:26 mrg Exp $     */
+
+/*
+ * Copyright (c) 1996 Matthew R. Green
+ * 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. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+ */
+
+#ifndef __NET_PFIL_H
+#define __NET_PFIL_H
+
+/* note: this file needs <net/if.h> and <sys/mbuf.h> */
+
+#if NIPFILTER > 0
+#ifdef PFIL_HOOKS
+#undef PFIL_HOOKS
+#endif
+#define PFIL_HOOKS
+#endif /* NIPFILTER */
+
+#endif
diff --git a/libs/watt32/net/ppp-comp.h b/libs/watt32/net/ppp-comp.h
new file mode 100644 (file)
index 0000000..79298d1
--- /dev/null
@@ -0,0 +1,180 @@
+/*!\file net/ppp-comp.h
+ * PPP compression.
+ */
+
+/*      $NetBSD: ppp-comp.h,v 1.3 1997/03/12 20:26:55 christos Exp $    */
+
+/*
+ * ppp-comp.h - Definitions for doing PPP packet compression.
+ *
+ * Copyright (c) 1994 The Australian National University.
+ * All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation is hereby granted, provided that the above copyright
+ * notice appears in all copies.  This software is provided without any
+ * warranty, express or implied. The Australian National University
+ * makes no representations about the suitability of this software for
+ * any purpose.
+ *
+ * IN NO EVENT SHALL THE AUSTRALIAN NATIONAL UNIVERSITY BE LIABLE TO ANY
+ * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
+ * THE AUSTRALIAN NATIONAL UNIVERSITY HAVE BEEN ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * THE AUSTRALIAN NATIONAL UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE AUSTRALIAN NATIONAL UNIVERSITY HAS NO
+ * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
+ * OR MODIFICATIONS.
+ *
+ * Id: ppp-comp.h,v 1.10 1996/09/26 06:30:11 paulus Exp
+ */
+
+#ifndef __NET_PPP_COMP_H
+#define __NET_PPP_COMP_H
+
+/*
+ * The following symbols control whether we include code for
+ * various compression methods.
+ */
+#ifndef DO_BSD_COMPRESS
+#define DO_BSD_COMPRESS        1       /* by default, include BSD-Compress */
+#endif
+
+#ifndef DO_DEFLATE
+#define DO_DEFLATE     1       /* by default, include Deflate */
+#endif
+
+#define DO_PREDICTOR_1 0
+#define DO_PREDICTOR_2 0
+
+/*
+ * Structure giving methods for compression/decompression.
+ */
+#ifdef PACKETPTR
+struct compressor {
+       int     compress_proto; /* CCP compression protocol number */
+
+       /* Allocate space for a compressor (transmit side) */
+       void    *(*comp_alloc) (u_char *options, int opt_len);
+
+       /* Free space used by a compressor */
+       void    (*comp_free) (void *state);
+
+       /* Initialize a compressor */
+       int     (*comp_init) (void *state, u_char *options, int opt_len,
+                             int unit, int hdrlen, int debug);
+       /* Reset a compressor */
+       void    (*comp_reset) (void *state);
+
+       /* Compress a packet */
+       int     (*compress) (void *state, PACKETPTR *mret,
+                            PACKETPTR mp, int orig_len, int max_len);
+
+       /* Return compression statistics */
+       void    (*comp_stat) (void *state, struct compstat *stats);
+
+       /* Allocate space for a decompressor (receive side) */
+       void    *(*decomp_alloc) (u_char *options, int opt_len);
+
+       /* Free space used by a decompressor */
+       void    (*decomp_free) (void *state);
+
+       /* Initialize a decompressor */
+       int     (*decomp_init) (void *state, u_char *options, int opt_len,
+                               int unit, int hdrlen, int mru, int debug);
+       /* Reset a decompressor */
+       void    (*decomp_reset) (void *state);
+
+       /* Decompress a packet. */
+       int     (*decompress) (void *state, PACKETPTR mp, PACKETPTR *dmpp);
+
+       /* Update state for an incompressible packet received */
+       void    (*incomp) (void *state, PACKETPTR mp);
+
+       /* Return decompression statistics */
+       void    (*decomp_stat) (void *state, struct compstat *stats);
+};
+#endif /* PACKETPTR */
+
+/*
+ * Return values for decompress routine.
+ * We need to make these distinctions so that we can disable certain
+ * useful functionality, namely sending a CCP reset-request as a result
+ * of an error detected after decompression.  This is to avoid infringing
+ * a patent held by Motorola.
+ * Don't you just lurve software patents.
+ */
+#define DECOMP_OK              0       /* everything went OK */
+#define DECOMP_ERROR           1       /* error detected before decomp. */
+#define DECOMP_FATALERROR      2       /* error detected after decomp. */
+
+/*
+ * CCP codes.
+ */
+#define CCP_CONFREQ    1
+#define CCP_CONFACK    2
+#define CCP_TERMREQ    5
+#define CCP_TERMACK    6
+#define CCP_RESETREQ   14
+#define CCP_RESETACK   15
+
+/*
+ * Max # bytes for a CCP option
+ */
+#define CCP_MAX_OPTION_LENGTH  32
+
+/*
+ * Parts of a CCP packet.
+ */
+#define CCP_CODE(dp)           ((dp)[0])
+#define CCP_ID(dp)             ((dp)[1])
+#define CCP_LENGTH(dp)         (((dp)[2] << 8) + (dp)[3])
+#define CCP_HDRLEN             4
+
+#define CCP_OPT_CODE(dp)       ((dp)[0])
+#define CCP_OPT_LENGTH(dp)     ((dp)[1])
+#define CCP_OPT_MINLEN         2
+
+/*
+ * Definitions for BSD-Compress.
+ */
+#define CI_BSD_COMPRESS                21      /* config. option for BSD-Compress */
+#define CILEN_BSD_COMPRESS     3       /* length of config. option */
+
+/* Macros for handling the 3rd byte of the BSD-Compress config option. */
+#define BSD_NBITS(x)           ((x) & 0x1F)    /* number of bits requested */
+#define BSD_VERSION(x)         ((x) >> 5)      /* version of option format */
+#define BSD_CURRENT_VERSION    1               /* current version number */
+#define BSD_MAKE_OPT(v, n)     (((v) << 5) | (n))
+
+#define BSD_MIN_BITS           9       /* smallest code size supported */
+#define BSD_MAX_BITS           15      /* largest code size supported */
+
+/*
+ * Definitions for Deflate.
+ */
+#define CI_DEFLATE             24      /* config option for Deflate */
+#define CILEN_DEFLATE          4       /* length of its config option */
+
+#define DEFLATE_MIN_SIZE       8
+#define DEFLATE_MAX_SIZE       15
+#define DEFLATE_METHOD_VAL     8
+#define DEFLATE_SIZE(x)                (((x) >> 4) + DEFLATE_MIN_SIZE)
+#define DEFLATE_METHOD(x)      ((x) & 0x0F)
+#define DEFLATE_MAKE_OPT(w)    ((((w) - DEFLATE_MIN_SIZE) << 4) \
+                                + DEFLATE_METHOD_VAL)
+#define DEFLATE_CHK_SEQUENCE   0
+
+/*
+ * Definitions for other, as yet unsupported, compression methods.
+ */
+#define CI_PREDICTOR_1         1       /* config option for Predictor-1 */
+#define CILEN_PREDICTOR_1      2       /* length of its config option */
+#define CI_PREDICTOR_2         2       /* config option for Predictor-2 */
+#define CILEN_PREDICTOR_2      2       /* length of its config option */
+
+#endif
diff --git a/libs/watt32/net/ppp_defs.h b/libs/watt32/net/ppp_defs.h
new file mode 100644 (file)
index 0000000..299ea8b
--- /dev/null
@@ -0,0 +1,195 @@
+/*!\file net/ppp_defs.h
+ * PPP definitions.
+ */
+
+/*      $Id: ppp_defs.h,v 1.11 1997/04/30 05:46:24 paulus Exp $ */
+
+/*
+ * ppp_defs.h - PPP definitions.
+ *
+ * Copyright (c) 1994 The Australian National University.
+ * All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation is hereby granted, provided that the above copyright
+ * notice appears in all copies.  This software is provided without any
+ * warranty, express or implied. The Australian National University
+ * makes no representations about the suitability of this software for
+ * any purpose.
+ *
+ * IN NO EVENT SHALL THE AUSTRALIAN NATIONAL UNIVERSITY BE LIABLE TO ANY
+ * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
+ * THE AUSTRALIAN NATIONAL UNIVERSITY HAVE BEEN ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * THE AUSTRALIAN NATIONAL UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE AUSTRALIAN NATIONAL UNIVERSITY HAS NO
+ * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
+ * OR MODIFICATIONS.
+ */
+
+#ifndef __NET_PPP_DEFS_H
+#define __NET_PPP_DEFS_H
+
+/*
+ * The basic PPP frame.
+ */
+#define PPP_HDRLEN     4       /* octets for standard ppp header */
+#define PPP_FCSLEN     2       /* octets for FCS */
+
+/*
+ * Packet sizes
+ *
+ * Note - lcp shouldn't be allowed to negotiate stuff outside these
+ *       limits.  See lcp.h in the pppd directory.
+ * (XXX - these constants should simply be shared by lcp.c instead
+ *       of living in lcp.h)
+ */
+#define        PPP_MTU         1500    /* Default MTU (size of Info field) */
+#define PPP_MAXMTU     65535 - (PPP_HDRLEN + PPP_FCSLEN)
+#define PPP_MINMTU     64
+#define PPP_MRU                1500    /* default MRU = max length of info field */
+#define PPP_MAXMRU     65000   /* Largest MRU we allow */
+#define PPP_MINMRU     128
+
+#define PPP_ADDRESS(p) (((u_char *)(p))[0])
+#define PPP_CONTROL(p) (((u_char *)(p))[1])
+#define PPP_PROTOCOL(p)        ((((u_char *)(p))[2] << 8) + ((u_char *)(p))[3])
+
+/*
+ * Significant octet values.
+ */
+#define        PPP_ALLSTATIONS 0xff    /* All-Stations broadcast address */
+#define        PPP_UI          0x03    /* Unnumbered Information */
+#define        PPP_FLAG        0x7e    /* Flag Sequence */
+#define        PPP_ESCAPE      0x7d    /* Asynchronous Control Escape */
+#define        PPP_TRANS       0x20    /* Asynchronous transparency modifier */
+
+/*
+ * Protocol field values.
+ */
+#define PPP_IP          0x0021  /* Raw IP */
+#define PPP_OSI         0x0023  /* OSI Network Layer */
+#define PPP_NS          0x0025  /* Xerox NS IDP */
+#define PPP_DECNET      0x0027  /* DECnet Phase IV */
+#define PPP_APPLE       0x0029  /* Appletalk */
+#define PPP_IPX         0x002b  /* Novell IPX */
+#define PPP_VJC         0x002d  /* Van Jacobson Compressed TCP/IP */
+#define PPP_VJNC        0x002f  /* Van Jacobson Uncompressed TCP/IP */
+#define PPP_VJC_COMP    PPP_VJC
+#define PPP_VJC_UNCOMP  PPP_VJNC
+#define PPP_BRPDU       0x0031  /* Bridging PDU */
+#define PPP_STII        0x0033  /* Stream Protocol (ST-II) */
+#define PPP_VINES       0x0035  /* Banyan Vines */
+#define PPP_IPV6        0x0057  /* Internet Protocol Version 6 */
+#define PPP_COMP        0x00fd  /* compressed packet */
+
+#define PPP_HELLO       0x0201  /* 802.1d Hello Packets */
+#define PPP_LUXCOM      0x0231  /* Luxcom */
+#define PPP_SNS         0x0233  /* Sigma Network Systems */
+
+#define PPP_IPCP        0x8021  /* IP Control Protocol */
+#define PPP_OSICP       0x8023  /* OSI Network Layer Control Protocol */
+#define PPP_NSCP        0x8025  /* Xerox NS IDP Control Protocol */
+#define PPP_DECNETCP    0x8027  /* DECnet Control Protocol */
+#define PPP_ATCP       0x8029  /* AppleTalk Control Protocol */
+#define PPP_IPXCP       0x802b  /* IPX Control Protocol */
+#define PPP_STIICP      0x8033  /* Strean Protocol Control Protocol */
+#define PPP_VINESCP     0x8035  /* Banyan Vines Control Protocol */
+#define PPP_CCP         0x80fd  /* Compression Control Protocol */
+
+#define PPP_LCP         0xc021  /* Link Control Protocol */
+#define PPP_PAP                0xc023  /* Password Authentication Protocol */
+#define PPP_LQR                0xc025  /* Link Quality Report protocol */
+#define PPP_CHAP       0xc223  /* Cryptographic Handshake Auth. Protocol */
+#define PPP_CBCP       0xc029  /* Callback Control Protocol */
+
+/*
+ * Values for FCS calculations.
+ */
+#define PPP_INITFCS    0xffff  /* Initial FCS value */
+#define PPP_GOODFCS    0xf0b8  /* Good final FCS value */
+#define PPP_FCS(fcs, c)        (((fcs) >> 8) ^ fcstab[((fcs) ^ (c)) & 0xff])
+
+/*
+ * A 32-bit unsigned integral type.
+ */
+#if !defined(__BIT_TYPES_DEFINED__) && !defined(_BITYPES) && !defined(__SYS_WTYPES_H)
+  #ifdef UINT32_T
+    typedef UINT32_T       u_int32_t;
+  #else
+    typedef unsigned long  u_int32_t;
+  #endif
+#endif
+
+/*
+ * Extended asyncmap - allows any character to be escaped.
+ */
+typedef u_int32_t  ext_accm[8];
+
+/*
+ * What to do with network protocol (NP) packets.
+ */
+enum NPmode {
+    NPMODE_PASS,               /* pass the packet through */
+    NPMODE_DROP,               /* silently drop the packet */
+    NPMODE_ERROR,              /* return an error */
+    NPMODE_QUEUE               /* save it up for later. */
+};
+
+/*
+ * Statistics.
+ */
+struct pppstat {
+    unsigned int ppp_ibytes;   /* bytes received */
+    unsigned int ppp_ipackets; /* packets received */
+    unsigned int ppp_ierrors;  /* receive errors */
+    unsigned int ppp_obytes;   /* bytes sent */
+    unsigned int ppp_opackets; /* packets sent */
+    unsigned int ppp_oerrors;  /* transmit errors */
+};
+
+struct vjstat {
+    unsigned int vjs_packets;  /* outbound packets */
+    unsigned int vjs_compressed; /* outbound compressed packets */
+    unsigned int vjs_searches; /* searches for connection state */
+    unsigned int vjs_misses;   /* times couldn't find conn. state */
+    unsigned int vjs_uncompressedin; /* inbound uncompressed packets */
+    unsigned int vjs_compressedin; /* inbound compressed packets */
+    unsigned int vjs_errorin;  /* inbound unknown type packets */
+    unsigned int vjs_tossed;   /* inbound packets tossed because of error */
+};
+
+struct ppp_stats {
+    struct pppstat p;          /* basic PPP statistics */
+    struct vjstat vj;          /* VJ header compression statistics */
+};
+
+struct compstat {
+    unsigned int unc_bytes;    /* total uncompressed bytes */
+    unsigned int unc_packets;  /* total uncompressed packets */
+    unsigned int comp_bytes;   /* compressed bytes */
+    unsigned int comp_packets; /* compressed packets */
+    unsigned int inc_bytes;    /* incompressible bytes */
+    unsigned int inc_packets;  /* incompressible packets */
+    unsigned int ratio;                /* recent compression ratio << 8 */
+};
+
+struct ppp_comp_stats {
+    struct compstat c;         /* packet compression statistics */
+    struct compstat d;         /* packet decompression statistics */
+};
+
+/*
+ * The following structure records the time in seconds since
+ * the last NP packet was sent or received.
+ */
+struct ppp_idle {
+    time_t xmit_idle;          /* time since last NP packet sent */
+    time_t recv_idle;          /* time since last NP packet received */
+};
+
+#endif
diff --git a/libs/watt32/net/radix.h b/libs/watt32/net/radix.h
new file mode 100644 (file)
index 0000000..4e7fb14
--- /dev/null
@@ -0,0 +1,167 @@
+/*!\file net/radix.h
+ * Radix search trees.
+ */
+
+/*      $NetBSD: radix.h,v 1.9 1997/04/02 21:17:31 christos Exp $       */
+
+/*
+ * Copyright (c) 1988, 1989, 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.
+ *
+ *     @(#)radix.h     8.2 (Berkeley) 10/31/94
+ */
+
+#ifndef _NET_RADIX_H_
+#define        _NET_RADIX_H_
+
+/*
+ * Radix search tree node layout.
+ */
+
+struct radix_node {
+       struct  radix_mask *rn_mklist;  /* list of masks contained in subtree */
+       struct  radix_node *rn_p;       /* parent */
+       short   rn_b;                   /* bit offset; -1-index(netmask) */
+       char    rn_bmask;               /* node: mask for bit test*/
+       u_char  rn_flags;               /* enumerated next */
+#define RNF_NORMAL     1               /* leaf contains normal route */
+#define RNF_ROOT       2               /* leaf is root leaf for tree */
+#define RNF_ACTIVE     4               /* This node is alive (for rtfree) */
+       union {
+               struct {                        /* leaf only data: */
+                       caddr_t rn_Key;         /* object of search */
+                       caddr_t rn_Mask;        /* netmask, if present */
+                       struct  radix_node *rn_Dupedkey;
+               } rn_leaf;
+               struct {                        /* node only data: */
+                       int     rn_Off;         /* where to start compare */
+                       struct  radix_node *rn_L;/* progeny */
+                       struct  radix_node *rn_R;/* progeny */
+               } rn_node;
+       } rn_u;
+#ifdef RN_DEBUG
+       int rn_info;
+       struct radix_node *rn_twin;
+       struct radix_node *rn_ybro;
+#endif
+};
+
+#define rn_dupedkey rn_u.rn_leaf.rn_Dupedkey
+#define rn_key rn_u.rn_leaf.rn_Key
+#define rn_mask rn_u.rn_leaf.rn_Mask
+#define rn_off rn_u.rn_node.rn_Off
+#define rn_l rn_u.rn_node.rn_L
+#define rn_r rn_u.rn_node.rn_R
+
+/*
+ * Annotations to tree concerning potential routes applying to subtrees.
+ */
+
+extern struct radix_mask {
+       short   rm_b;                   /* bit offset; -1-index(netmask) */
+       char    rm_unused;              /* cf. rn_bmask */
+       u_char  rm_flags;               /* cf. rn_flags */
+       struct  radix_mask *rm_mklist;  /* more masks to try */
+       union   {
+               caddr_t rmu_mask;               /* the mask */
+               struct  radix_node *rmu_leaf;   /* for normal routes */
+       }       rm_rmu;
+       int     rm_refs;                /* # of references to this struct */
+} *rn_mkfreelist;
+
+#define rm_mask rm_rmu.rmu_mask
+#define rm_leaf rm_rmu.rmu_leaf                /* extra field would make 32 bytes */
+
+#define MKGet(m) {\
+       if (rn_mkfreelist) {\
+               m = rn_mkfreelist; \
+               rn_mkfreelist = (m)->rm_mklist; \
+       } else \
+               R_Malloc(m, struct radix_mask *, sizeof (*(m))); }\
+
+#define MKFree(m) { (m)->rm_mklist = rn_mkfreelist; rn_mkfreelist = (m);}
+
+struct radix_node_head {
+       struct  radix_node *rnh_treetop;
+       int     rnh_addrsize;           /* permit, but not require fixed keys */
+       int     rnh_pktsize;            /* permit, but not require fixed keys */
+       struct  radix_node *(*rnh_addaddr)      /* add based on sockaddr */
+               __P((void *v, void *mask,
+                    struct radix_node_head *head, struct radix_node nodes[]));
+       struct  radix_node *(*rnh_addpkt)       /* add based on packet hdr */
+               __P((void *v, void *mask,
+                    struct radix_node_head *head, struct radix_node nodes[]));
+       struct  radix_node *(*rnh_deladdr)      /* remove based on sockaddr */
+               __P((void *v, void *mask, struct radix_node_head *head));
+       struct  radix_node *(*rnh_delpkt)       /* remove based on packet hdr */
+               __P((void *v, void *mask, struct radix_node_head *head));
+       struct  radix_node *(*rnh_matchaddr)    /* locate based on sockaddr */
+               __P((void *v, struct radix_node_head *head));
+       struct  radix_node *(*rnh_lookup)       /* locate based on sockaddr */
+               __P((void *v, void *mask, struct radix_node_head *head));
+       struct  radix_node *(*rnh_matchpkt)     /* locate based on packet hdr */
+               __P((void *v, struct radix_node_head *head));
+       int     (*rnh_walktree)                 /* traverse tree */
+               __P((struct radix_node_head *,
+                    int (*)(struct radix_node *, void *), void *));
+       struct  radix_node rnh_nodes[3];        /* empty tree for common case */
+};
+
+
+#define Bcmp(a,b,n)     memcmp (a,b,n)
+#define Bcopy(a,b,n)    memcpy (b,a,n)
+#define Bzero(p,n)      memset ((void*)(p),0,(int)(n));
+#define R_Malloc(p,t,n) (p = (t) malloc((unsigned int)(n)))
+#define Free(p)         free ((void*)p);
+
+__BEGIN_DECLS
+
+void rn_init     (void);
+int  rn_inithead (void **, int);
+int  rn_refines  (void *, void *);
+int  rn_walktree (struct radix_node_head *,
+                  int (*)(struct radix_node *, void *),
+                  void *);
+
+struct radix_node *rn_addroute (void *, void *, struct radix_node_head *, struct radix_node [2]);
+struct radix_node *rn_insert (void *, struct radix_node_head *, int *, struct radix_node [2]);
+struct radix_node *rn_newpair (void *, int, struct radix_node[2]);
+
+struct radix_node *rn_addmask (void *, int, int);
+struct radix_node *rn_delete (void *, void *, struct radix_node_head *);
+struct radix_node *rn_lookup (void *, void *, struct radix_node_head *);
+struct radix_node *rn_match (void *, struct radix_node_head *);
+struct radix_node *rn_search (void *, struct radix_node *);
+struct radix_node *rn_search_m (void *, struct radix_node *, void *);
+
+__END_DECLS
+
+#endif /* _NET_RADIX_H_ */
diff --git a/libs/watt32/net/raw_cb.h b/libs/watt32/net/raw_cb.h
new file mode 100644 (file)
index 0000000..94955c7
--- /dev/null
@@ -0,0 +1,65 @@
+/*!\file net/raw_cb.h
+ *
+ */
+
+/*      $NetBSD: raw_cb.h,v 1.11 1996/05/28 23:24:50 pk Exp $   */
+
+/*
+ * Copyright (c) 1980, 1986, 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.
+ *
+ *      @(#)raw_cb.h    8.1 (Berkeley) 6/10/93
+ */
+
+#ifndef __NET_RAW_CB_H
+#define __NET_RAW_CB_H
+
+/*
+ * Raw protocol interface control block.  Used
+ * to tie a socket to the generic raw interface.
+ */
+struct rawcb {
+        LIST_ENTRY(rawcb) rcb_list;     /* doubly linked list */
+        struct  socket *rcb_socket;     /* back pointer to socket */
+        struct  sockaddr *rcb_faddr;    /* destination address */
+        struct  sockaddr *rcb_laddr;    /* socket's address */
+        struct  sockproto rcb_proto;    /* protocol family, protocol */
+};
+
+#define sotorawcb(so)   ((struct rawcb *)(so)->so_pcb)
+
+/*
+ * Nominal space allocated to a raw socket.
+ */
+#define RAWSNDQ         8192
+#define RAWRCVQ         8192
+
+#endif
diff --git a/libs/watt32/net/route.h b/libs/watt32/net/route.h
new file mode 100644 (file)
index 0000000..05dbfee
--- /dev/null
@@ -0,0 +1,236 @@
+/*!\file net/route.h
+ * Route handling.
+ */
+
+/*      $NetBSD: route.h,v 1.11 1997/04/02 21:17:29 christos Exp $      */
+
+/*
+ * Copyright (c) 1980, 1986, 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.
+ *
+ *     @(#)route.h     8.5 (Berkeley) 2/8/95
+ */
+
+#ifndef __NET_ROUTE_H
+#define __NET_ROUTE_H
+/*
+ * Kernel resident routing tables.
+ * 
+ * The routing tables are initialized when interface addresses
+ * are set by making entries for all directly connected interfaces.
+ */
+
+/*
+ * A route consists of a destination address and a reference
+ * to a routing entry.  These are often held by protocols
+ * in their control blocks, e.g. inpcb.
+ */
+struct route {
+       struct  rtentry *ro_rt;
+       struct  sockaddr ro_dst;
+};
+
+/*
+ * These numbers are used by reliable protocols for determining
+ * retransmission behavior and are included in the routing structure.
+ */
+struct rt_metrics {
+       u_long  rmx_locks;      /* Kernel must leave these values alone */
+       u_long  rmx_mtu;        /* MTU for this path */
+       u_long  rmx_hopcount;   /* max hops expected */
+       u_long  rmx_expire;     /* lifetime for route, e.g. redirect */
+       u_long  rmx_recvpipe;   /* inbound delay-bandwith product */
+       u_long  rmx_sendpipe;   /* outbound delay-bandwith product */
+       u_long  rmx_ssthresh;   /* outbound gateway buffer limit */
+       u_long  rmx_rtt;        /* estimated round trip time */
+       u_long  rmx_rttvar;     /* estimated rtt variance */
+       u_long  rmx_pksent;     /* packets sent using this route */
+};
+
+/*
+ * rmx_rtt and rmx_rttvar are stored as microseconds;
+ * RTTTOPRHZ(rtt) converts to a value suitable for use
+ * by a protocol slowtimo counter.
+ */
+#define        RTM_RTTUNIT     1000000 /* units for rtt, rttvar, as units per sec */
+#define        RTTTOPRHZ(r)    ((r) / (RTM_RTTUNIT / PR_SLOWHZ))
+
+/*
+ * We distinguish between routes to hosts and routes to networks,
+ * preferring the former if available.  For each route we infer
+ * the interface to use from the gateway address supplied when
+ * the route was entered.  Routes that forward packets through
+ * gateways are marked so that the output routines know to address the
+ * gateway rather than the ultimate destination.
+ */
+#ifndef RNF_NORMAL
+#include <net/radix.h>
+#endif
+
+struct rtentry {
+       struct  radix_node rt_nodes[2]; /* tree glue, and other values */
+#define        rt_key(r)       ((struct sockaddr *)((r)->rt_nodes->rn_key))
+#define        rt_mask(r)      ((struct sockaddr *)((r)->rt_nodes->rn_mask))
+       struct  sockaddr *rt_gateway;   /* value */
+       short   rt_flags;               /* up/down?, host/net */
+       short   rt_refcnt;              /* # held references */
+       u_long  rt_use;                 /* raw # packets forwarded */
+       struct  ifnet *rt_ifp;          /* the answer: interface to use */
+       struct  ifaddr *rt_ifa;         /* the answer: interface to use */
+       struct  sockaddr *rt_genmask;   /* for generation of cloned routes */
+       caddr_t rt_llinfo;              /* pointer to link level info cache */
+       struct  rt_metrics rt_rmx;      /* metrics used by rx'ing protocols */
+       struct  rtentry *rt_gwroute;    /* implied entry for gatewayed routes */
+};
+
+/*
+ * Following structure necessary for 4.3 compatibility;
+ * We should eventually move it to a compat file.
+ */
+struct ortentry {
+       u_int32_t rt_hash;              /* to speed lookups */
+       struct  sockaddr rt_dst;        /* key */
+       struct  sockaddr rt_gateway;    /* value */
+       int16_t rt_flags;               /* up/down?, host/net */
+       int16_t rt_refcnt;              /* # held references */
+       u_int32_t rt_use;               /* raw # packets forwarded */
+       struct  ifnet *rt_ifp;          /* the answer: interface to use */
+};
+
+#define        RTF_UP          0x1             /* route usable */
+#define        RTF_GATEWAY     0x2             /* destination is a gateway */
+#define        RTF_HOST        0x4             /* host entry (net otherwise) */
+#define        RTF_REJECT      0x8             /* host or net unreachable */
+#define        RTF_DYNAMIC     0x10            /* created dynamically (by redirect) */
+#define        RTF_MODIFIED    0x20            /* modified dynamically (by redirect) */
+#define RTF_DONE       0x40            /* message confirmed */
+#define RTF_MASK       0x80            /* subnet mask present */
+#define RTF_CLONING    0x100           /* generate new routes on use */
+#define RTF_XRESOLVE   0x200           /* external daemon resolves name */
+#define RTF_LLINFO     0x400           /* generated by ARP or ESIS */
+#define RTF_STATIC     0x800           /* manually added */
+#define RTF_BLACKHOLE  0x1000          /* just discard pkts (during updates) */
+#define RTF_PROTO2     0x4000          /* protocol specific routing flag */
+#define RTF_PROTO1     0x8000          /* protocol specific routing flag */
+
+
+/*
+ * Routing statistics.
+ */
+struct rtstat {
+       short   rts_badredirect;        /* bogus redirect calls */
+       short   rts_dynamic;            /* routes created by redirects */
+       short   rts_newgateway;         /* routes modified by redirects */
+       short   rts_unreach;            /* lookups which failed */
+       short   rts_wildcard;           /* lookups satisfied by a wildcard */
+};
+/*
+ * Structures for routing messages.
+ */
+struct rt_msghdr {
+       u_short rtm_msglen;     /* to skip over non-understood messages */
+       u_char  rtm_version;    /* future binary compatibility */
+       u_char  rtm_type;       /* message type */
+       u_short rtm_index;      /* index for associated ifp */
+       int     rtm_flags;      /* flags, incl. kern & message, e.g. DONE */
+       int     rtm_addrs;      /* bitmask identifying sockaddrs in msg */
+        int     rtm_pid;        /* identify sender */
+       int     rtm_seq;        /* for sender to identify action */
+       int     rtm_errno;      /* why failed */
+       int     rtm_use;        /* from rtentry */
+       u_long  rtm_inits;      /* which metrics we are initializing */
+       struct  rt_metrics rtm_rmx; /* metrics themselves */
+};
+
+#define RTM_VERSION    3       /* Up the ante and ignore older versions */
+
+#define RTM_ADD                0x1     /* Add Route */
+#define RTM_DELETE     0x2     /* Delete Route */
+#define RTM_CHANGE     0x3     /* Change Metrics or flags */
+#define RTM_GET                0x4     /* Report Metrics */
+#define RTM_LOSING     0x5     /* Kernel Suspects Partitioning */
+#define RTM_REDIRECT   0x6     /* Told to use different route */
+#define RTM_MISS       0x7     /* Lookup failed on this address */
+#define RTM_LOCK       0x8     /* fix specified metrics */
+#define RTM_OLDADD     0x9     /* caused by SIOCADDRT */
+#define RTM_OLDDEL     0xa     /* caused by SIOCDELRT */
+#define RTM_RESOLVE    0xb     /* req to resolve dst to LL addr */
+#define RTM_NEWADDR    0xc     /* address being added to iface */
+#define RTM_DELADDR    0xd     /* address being removed from iface */
+#define RTM_IFINFO     0xe     /* iface going up/down etc. */
+
+#define RTV_MTU                0x1     /* init or lock _mtu */
+#define RTV_HOPCOUNT   0x2     /* init or lock _hopcount */
+#define RTV_EXPIRE     0x4     /* init or lock _hopcount */
+#define RTV_RPIPE      0x8     /* init or lock _recvpipe */
+#define RTV_SPIPE      0x10    /* init or lock _sendpipe */
+#define RTV_SSTHRESH   0x20    /* init or lock _ssthresh */
+#define RTV_RTT                0x40    /* init or lock _rtt */
+#define RTV_RTTVAR     0x80    /* init or lock _rttvar */
+
+/*
+ * Bitmask values for rtm_addr.
+ */
+#define RTA_DST                0x1     /* destination sockaddr present */
+#define RTA_GATEWAY    0x2     /* gateway sockaddr present */
+#define RTA_NETMASK    0x4     /* netmask sockaddr present */
+#define RTA_GENMASK    0x8     /* cloning mask sockaddr present */
+#define RTA_IFP                0x10    /* interface name sockaddr present */
+#define RTA_IFA                0x20    /* interface addr sockaddr present */
+#define RTA_AUTHOR     0x40    /* sockaddr for author of redirect */
+#define RTA_BRD                0x80    /* for NEWADDR, broadcast or p-p dest addr */
+
+/*
+ * Index offsets for sockaddr array for alternate internal encoding.
+ */
+#define RTAX_DST       0       /* destination sockaddr present */
+#define RTAX_GATEWAY   1       /* gateway sockaddr present */
+#define RTAX_NETMASK   2       /* netmask sockaddr present */
+#define RTAX_GENMASK   3       /* cloning mask sockaddr present */
+#define RTAX_IFP       4       /* interface name sockaddr present */
+#define RTAX_IFA       5       /* interface addr sockaddr present */
+#define RTAX_AUTHOR    6       /* sockaddr for author of redirect */
+#define RTAX_BRD       7       /* for NEWADDR, broadcast or p-p dest addr */
+#define RTAX_MAX       8       /* size of array to allocate */
+
+struct rt_addrinfo {
+       int     rti_addrs;
+       struct  sockaddr *rti_info[RTAX_MAX];
+};
+
+struct route_cb {
+       int     ip_count;
+       int     ns_count;
+       int     iso_count;
+       int     any_count;
+};
+
+#endif
diff --git a/libs/watt32/net/slcompre.h b/libs/watt32/net/slcompre.h
new file mode 100644 (file)
index 0000000..45c3c2b
--- /dev/null
@@ -0,0 +1,175 @@
+/*!\file net/slcompre.h
+ * SLIP/PPP compression.
+ */
+
+/*      $NetBSD: slcompress.h,v 1.11 1997/05/17 21:12:11 christos Exp $ */
+/*     Id: slcompress.h,v 1.4 1994/09/21 06:50:08 paulus Exp   */
+
+/*
+ * Copyright (c) 1989, 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.
+ *
+ *     @(#)slcompress.h        8.1 (Berkeley) 6/10/93
+ */
+
+/*
+ * Definitions for tcp compression routines.
+ *
+ * Van Jacobson (van@helios.ee.lbl.gov), Dec 31, 1989:
+ *     - Initial distribution.
+ */
+
+#ifndef __NET_SLCOMPRESS_H
+#define __NET_SLCOMPRESS_H
+
+#ifndef MLEN
+#define MLEN 128
+#endif
+
+#define MAX_STATES 16          /* must be > 2 and < 256 */
+#define MAX_HDR    MLEN         /* XXX 4bsd-ism: should really be 128 */
+
+/*
+ * Compressed packet format:
+ *
+ * The first octet contains the packet type (top 3 bits), TCP
+ * 'push' bit, and flags that indicate which of the 4 TCP sequence
+ * numbers have changed (bottom 5 bits).  The next octet is a
+ * conversation number that associates a saved IP/TCP header with
+ * the compressed packet.  The next two octets are the TCP checksum
+ * from the original datagram.  The next 0 to 15 octets are
+ * sequence number changes, one change per bit set in the header
+ * (there may be no changes and there are two special cases where
+ * the receiver implicitly knows what changed -- see below).
+ * 
+ * There are 5 numbers which can change (they are always inserted
+ * in the following order): TCP urgent pointer, window,
+ * acknowlegement, sequence number and IP ID.  (The urgent pointer
+ * is different from the others in that its value is sent, not the
+ * change in value.)  Since typical use of SLIP links is biased
+ * toward small packets (see comments on MTU/MSS below), changes
+ * use a variable length coding with one octet for numbers in the
+ * range 1 - 255 and 3 octets (0, MSB, LSB) for numbers in the
+ * range 256 - 65535 or 0.  (If the change in sequence number or
+ * ack is more than 65535, an uncompressed packet is sent.)
+ */
+
+/*
+ * Packet types (must not conflict with IP protocol version)
+ *
+ * The top nibble of the first octet is the packet type.  There are
+ * three possible types: IP (not proto TCP or tcp with one of the
+ * control flags set); uncompressed TCP (a normal IP/TCP packet but
+ * with the 8-bit protocol field replaced by an 8-bit connection id --
+ * this type of packet syncs the sender & receiver); and compressed
+ * TCP (described above).
+ *
+ * LSB of 4-bit field is TCP "PUSH" bit (a worthless anachronism) and
+ * is logically part of the 4-bit "changes" field that follows.  Top
+ * three bits are actual packet type.  For backward compatibility
+ * and in the interest of conserving bits, numbers are chosen so the
+ * IP protocol version number (4) which normally appears in this nibble
+ * means "IP packet".
+ */
+
+/* packet types */
+#define TYPE_IP               0x40
+#define TYPE_UNCOMPRESSED_TCP 0x70
+#define TYPE_COMPRESSED_TCP   0x80
+#define TYPE_ERROR            0x00
+
+/* Bits in first octet of compressed packet */
+#define NEW_C  0x40    /* flag bits for what changed in a packet */
+#define NEW_I  0x20
+#define NEW_S  0x08
+#define NEW_A  0x04
+#define NEW_W  0x02
+#define NEW_U  0x01
+
+/* reserved, special-case values of above */
+#define SPECIAL_I     (NEW_S|NEW_W|NEW_U)       /* echoed interactive traffic */
+#define SPECIAL_D     (NEW_S|NEW_A|NEW_W|NEW_U) /* unidirectional data */
+#define SPECIALS_MASK (NEW_S|NEW_A|NEW_W|NEW_U)
+
+#define TCP_PUSH_BIT 0x10
+
+
+/*
+ * "state" data for each active tcp conversation on the wire.  This is
+ * basically a copy of the entire IP/TCP header from the last packet
+ * we saw from the conversation together with a small identifier
+ * the transmit & receive ends of the line use to locate saved header.
+ */
+struct cstate {
+       struct cstate *cs_next; /* next most recently used cstate (xmit only) */
+       u_int16_t cs_hlen;      /* size of hdr (receive only) */
+       u_char cs_id;           /* connection # associated with this state */
+       u_char cs_filler;
+       union {
+          char csu_hdr[MAX_HDR];
+          struct ip csu_ip;     /* ip/tcp hdr from most recent packet */
+       } slcs_u;
+};
+#define cs_ip slcs_u.csu_ip
+#define cs_hdr slcs_u.csu_hdr
+
+/*
+ * all the state data for one serial line (we need one of these
+ * per line).
+ */
+struct slcompress {
+       struct cstate *last_cs; /* most recently used tstate */
+       u_char last_recv;       /* last rcvd conn. id */
+       u_char last_xmit;       /* last sent conn. id */
+       u_int16_t flags;
+#ifndef SL_NO_STATS
+       int sls_packets;        /* outbound packets */
+       int sls_compressed;     /* outbound compressed packets */
+       int sls_searches;       /* searches for connection state */
+       int sls_misses;         /* times couldn't find conn. state */
+       int sls_uncompressedin; /* inbound uncompressed packets */
+       int sls_compressedin;   /* inbound compressed packets */
+       int sls_errorin;        /* inbound unknown type packets */
+       int sls_tossed;         /* inbound packets tossed because of error */
+#endif
+       struct cstate tstate[MAX_STATES];       /* xmit connection states */
+       struct cstate rstate[MAX_STATES];       /* receive connection states */
+};
+/* flag values */
+#define SLF_TOSS 1             /* tossing rcvd frames because of input err */
+
+void  sl_compress_init (struct slcompress *);
+void  sl_compress_setup (struct slcompress *, int);
+u_int sl_compress_tcp (struct mbuf *, struct ip *, struct slcompress *, int);
+int   sl_uncompress_tcp (u_char **, int, u_int, struct slcompress *);
+int   sl_uncompress_tcp_core (u_char *, int, int, u_int, struct slcompress *, u_char **, u_int *);
+
+#endif
diff --git a/libs/watt32/net/slip.h b/libs/watt32/net/slip.h
new file mode 100644 (file)
index 0000000..92a1995
--- /dev/null
@@ -0,0 +1,62 @@
+/*!\file net/slip.h
+ * BPF SLIP definitions.
+ */
+
+/*      $NetBSD: slip.h,v 1.6 1994/06/29 06:36:53 cgd Exp $     */
+
+/*-
+ * Copyright (c) 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.
+ *
+ *     @(#)slip.h      8.1 (Berkeley) 2/12/94
+ */
+
+#ifndef __NET_SLIP_H
+#define __NET_SLIP_H
+
+/* Ioctls operating on SLIP ttys. */
+#define        SLIOCGUNIT      _IOR('t', 88, int)      /* get slip unit number */
+
+/*
+ * Definitions of the pseudo-link-level header attached to slip
+ * packets grabbed by the packet filter (bpf) traffic monitor.
+ */
+#define        SLIP_HDRLEN     16              /* BPF SLIP header length */
+
+/* Offsets into BPF SLIP header. */
+#define        SLX_DIR         0               /* direction; see below */
+#define        SLX_CHDR        1               /* compressed header data */
+#define        CHDR_LEN        15              /* length of compressed header data */
+
+#define        SLIPDIR_IN      0               /* incoming */
+#define        SLIPDIR_OUT     1               /* outgoing */
+
+#endif
diff --git a/libs/watt32/netdb.h b/libs/watt32/netdb.h
new file mode 100644 (file)
index 0000000..78be784
--- /dev/null
@@ -0,0 +1,310 @@
+/*!\file netdb.h
+ * BSD netdb functions.
+ */
+
+/*-
+ * Copyright (c) 1980, 1983, 1988, 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.
+ *
+ *      @(#)netdb.h     8.1 (Berkeley) 6/2/93
+ *      $Id: netdb.h,v 1.5 1996/08/29 20:00:56 peter Exp $
+ * -
+ * Portions Copyright (c) 1993 by Digital Equipment Corporation.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies, and that
+ * the name of Digital Equipment Corporation not be used in advertising or
+ * publicity pertaining to distribution of the document or software without
+ * specific, written prior permission.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
+ * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
+ * -
+ * --Copyright--
+ */
+
+#ifndef __NETDB_H
+#define __NETDB_H
+
+#ifndef _PATH_HEQUIV
+#define _PATH_HEQUIV    "/etc/hosts.equiv"
+#endif
+
+#ifndef _PATH_HOSTS
+#define _PATH_HOSTS     "/etc/hosts"
+#endif
+
+#ifndef _PATH_NETWORKS
+#define _PATH_NETWORKS  "/etc/networks"
+#endif
+
+#ifndef _PATH_PROTOCOLS
+#define _PATH_PROTOCOLS "/etc/protocols"
+#endif
+
+#ifndef _PATH_SERVICES
+#define _PATH_SERVICES  "/etc/services"
+#endif
+
+#ifndef __SYS_W32API_H
+#include <sys/w32api.h>
+#endif
+
+#ifndef __SYS_SOCKET_H
+#include <sys/socket.h> /* struct sockaddr */
+#endif
+
+#ifndef __SYS_CDEFS_H
+#include <sys/cdefs.h>
+#endif
+
+
+/*
+ * Structures returned by network data base library.  All addresses are
+ * supplied in host order, and returned in network order (suitable for
+ * use in system calls).
+ */
+struct hostent {
+        char    *h_name;        /* official name of host */
+        char    **h_aliases;    /* alias list */
+        int     h_addrtype;     /* host address type */
+        int     h_length;       /* length of address */
+        char    **h_addr_list;  /* list of addresses from name server */
+#define h_addr  h_addr_list[0]  /* address, for backward compatiblity */
+};
+
+/*
+ * Assumption here is that a network number
+ * fits in 32 bits -- probably a poor one.
+ */
+struct netent {
+       char            *n_name;        /* official name of net */
+       char            **n_aliases;    /* alias list */
+       int             n_addrtype;     /* net address type */
+       unsigned long   n_net;          /* network # */
+     };
+
+struct servent {
+       char    *s_name;        /* official service name */
+       char    **s_aliases;    /* alias list */
+       int     s_port;         /* port # */
+       char    *s_proto;       /* protocol to use */
+     };
+
+struct protoent {
+       char    *p_name;        /* official protocol name */
+       char    **p_aliases;    /* alias list */
+       int     p_proto;        /* protocol # */
+     };
+
+struct addrinfo {
+       int     ai_flags;       /* AI_PASSIVE, AI_CANONNAME */
+       int     ai_family;      /* PF_xxx */
+       int     ai_socktype;    /* SOCK_xxx */
+       int     ai_protocol;    /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
+       int     ai_addrlen;     /* length of ai_addr */
+       char   *ai_canonname;   /* canonical name for hostname */
+       struct sockaddr  *ai_addr; /* binary address */
+       struct addrinfo  *ai_next; /* next structure in linked list */
+     };
+
+/*
+ * Error return codes from gethostbyname() and gethostbyaddr()
+ * (left in extern int h_errno).
+ */
+W32_DATA int h_errno;
+
+#define NETDB_INTERNAL  -1      /* see errno */
+#define NETDB_SUCCESS   0       /* no problem */
+#define HOST_NOT_FOUND  1       /* Authoritative Answer Host not found */
+#define TRY_AGAIN       2       /* Non-Authoritive Host not found, or SERVERFAIL */
+#define NO_RECOVERY     3       /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */
+#define NO_DATA         4       /* Valid name, no data record of requested type */
+#define NO_ADDRESS      NO_DATA /* no address, look for MX record */
+
+
+/*
+ * Error return codes from getaddrinfo()
+ */
+#define EAI_ADDRFAMILY   1  /* address family for hostname not supported */
+#define EAI_AGAIN        2  /* temporary failure in name resolution */
+#define EAI_BADFLAGS     3  /* invalid value for ai_flags */
+#define EAI_FAIL         4  /* non-recoverable failure in name resolution */
+#define EAI_FAMILY       5  /* ai_family not supported */
+#define EAI_MEMORY       6  /* memory allocation failure */
+#define EAI_NODATA       7  /* no address associated with hostname */
+#define EAI_NONAME       8  /* hostname nor servname provided, or not known */
+#define EAI_SERVICE      9  /* servname not supported for ai_socktype */
+#define EAI_SOCKTYPE    10  /* ai_socktype not supported */
+#define EAI_SYSTEM      11  /* system error returned in errno */
+#define EAI_BADHINTS    12
+#define EAI_PROTOCOL    13
+#define EAI_MAX         14
+
+/*
+ * Flag values for getaddrinfo()
+ */
+#define AI_PASSIVE      0x00000001 /* get address to use bind() */
+#define AI_CANONNAME    0x00000002 /* fill ai_canonname */
+#define AI_NUMERICHOST  0x00000004 /* prevent name resolution */
+
+/* valid flags for addrinfo
+ */
+#define AI_MASK         (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)
+
+#define AI_ALL          0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */
+#define AI_V4MAPPED_CFG 0x00000200 /* accept IPv4-mapped if kernel supports */
+#define AI_ADDRCONFIG   0x00000400 /* only if any address is assigned */
+#define AI_V4MAPPED     0x00000800 /* accept IPv4-mapped IPv6 address */
+
+/* special recommended flags for getipnodebyname
+ */
+#define AI_DEFAULT      (AI_V4MAPPED_CFG | AI_ADDRCONFIG)
+
+/*
+ * Constants for getnameinfo()
+ */
+#define NI_MAXHOST      1025
+#define NI_MAXSERV      32
+
+/*
+ * Flag values for getnameinfo()
+ */
+#define NI_NOFQDN       0x00000001
+#define NI_NUMERICHOST  0x00000002
+#define NI_NAMEREQD     0x00000004
+#define NI_NUMERICSERV  0x00000008
+#define NI_DGRAM        0x00000010
+#define NI_WITHSCOPEID  0x00000020
+
+/*
+ * Scope delimit character
+ */
+#define SCOPE_DELIMITER '%'
+
+__BEGIN_DECLS
+
+W32_FUNC void              W32_CALL endhostent     (void);
+W32_FUNC void              W32_CALL endnetent      (void);
+W32_FUNC void              W32_CALL endprotoent    (void);
+W32_FUNC void              W32_CALL endservent     (void);
+
+W32_FUNC struct hostent  * W32_CALL gethostbyaddr  (const char *, int, int);
+W32_FUNC struct hostent  * W32_CALL gethostbyname  (const char *);
+W32_FUNC struct hostent  * W32_CALL gethostbyname2 (const char *, int af);
+W32_FUNC struct hostent  * W32_CALL gethostent     (void);
+W32_FUNC struct hostent  * W32_CALL getipnodebyaddr(const void *, size_t, int, int *);
+W32_FUNC struct hostent  * W32_CALL getipnodebyname(const char *, int, int, int *);
+W32_FUNC struct netent   * W32_CALL getnetbyaddr   (long, int);
+W32_FUNC struct netent   * W32_CALL getnetbyname   (const char *);
+W32_FUNC struct netent   * W32_CALL getnetent      (void);
+W32_FUNC struct protoent * W32_CALL getprotobyname (const char *);
+W32_FUNC struct protoent * W32_CALL getprotobynumber (int);
+W32_FUNC struct protoent * W32_CALL getprotoent    (void);
+W32_FUNC struct servent  * W32_CALL getservbyname  (const char *, const char *);
+W32_FUNC struct servent  * W32_CALL getservbyport  (int, const char *);
+W32_FUNC struct servent  * W32_CALL getservent     (void);
+W32_FUNC void              W32_CALL herror         (const char *);
+W32_FUNC const char      * W32_CALL hstrerror      (int);
+W32_FUNC void              W32_CALL sethostent     (int);
+W32_FUNC void              W32_CALL setnetent      (int);
+W32_FUNC void              W32_CALL setprotoent    (int);
+W32_FUNC void              W32_CALL setservent     (int);
+
+W32_FUNC int W32_CALL getnameinfo (const struct sockaddr *sa, int salen,
+                                   char *host, int hostlen,
+                                   char *serv, int servlen, int flags);
+
+W32_FUNC int W32_CALL getaddrinfo (const char *hostname, const char *servname,
+                                   const struct addrinfo *hints, struct addrinfo **res);
+
+W32_FUNC void   W32_CALL freeaddrinfo (struct addrinfo *ai);
+W32_FUNC void   W32_CALL freehostent  (struct hostent *);
+W32_FUNC char * W32_CALL gai_strerror (int ecode);
+
+W32_FUNC int    W32_CALL if_nametoindex (const char *);
+W32_FUNC char * W32_CALL if_indextoname (int, char *);
+
+W32_FUNC int  * W32_CALL __h_errno_location (void);
+
+#if defined(_REENTRANT)
+W32_FUNC struct hostent * W32_CALL gethostbyaddr_r (
+  const char *addr, int len, int type, struct hostent *result,
+  char *buffer, int buflen, int *h_errnop);
+
+W32_FUNC struct hostent * W32_CALL gethostbyname_r (
+  const char *name, struct hostent *result,
+  char *buffer, int buflen, int *h_errnop);
+
+W32_FUNC struct hostent * W32_CALL gethostent_r (
+  struct hostent *result, char *buffer, int buflen, int *h_errnop);
+
+W32_FUNC struct netent * W32_CALL getnetbyaddr_r (
+  long net, int type, struct netent *result, char *buffer, int buflen);
+
+W32_FUNC struct netent * W32_CALL getnetbyname_r (
+  const char *name, struct netent *result, char *buffer, int buflen);
+
+W32_FUNC struct netent * W32_CALL getnetent_r (
+  struct netent *result, char *buffer, int buflen);
+
+W32_FUNC struct protoent * W32_CALL getprotobyname_r (
+  const char *name, struct protoent *result, char *buffer, int buflen);
+
+W32_FUNC struct protoent * W32_CALL getprotobynumber_r (
+  int proto, struct protoent *result, char *buffer, int buflen);
+
+W32_FUNC struct protoent * W32_CALL getprotoent_r (
+  struct protoent *result, char *buffer, int buflen);
+
+W32_FUNC struct servent * W32_CALL getservbyname_r (
+  const char *name, const char *proto, struct servent *result,
+  char *buffer, int buflen);
+
+W32_FUNC struct servent * W32_CALL getservbyport_r (
+  int port, const char *proto, struct servent *result,
+  char *buffer, int buflen);
+
+W32_FUNC struct servent * W32_CALL getservent_r (
+  struct servent *result, char *buffer, int buflen);
+
+#endif /* _REENTRANT */
+
+__END_DECLS
+
+#endif
diff --git a/libs/watt32/netinet/icmp6.h b/libs/watt32/netinet/icmp6.h
new file mode 100644 (file)
index 0000000..361757e
--- /dev/null
@@ -0,0 +1,739 @@
+/*!\file netinet/icmp6.h
+ * ICMP for IPv6.
+ */
+
+/*      $FreeBSD: src/sys/netinet/icmp6.h,v 1.8 2002/05/06 16:28:25 ume Exp $   */
+/*      $KAME: icmp6.h,v 1.46 2001/04/27 15:09:48 itojun Exp $  */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 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.
+ *
+ *      @(#)ip_icmp.h   8.1 (Berkeley) 6/10/93
+ */
+
+#ifndef _NETINET_ICMP6_H_
+#define _NETINET_ICMP6_H_
+
+#ifndef __SYS_WTYPES_H
+#include <sys/wtypes.h>
+#endif
+
+#define ICMPV6_PLD_MAXLEN       1232    /* IPV6_MMTU - sizeof(struct ip6_hdr)
+                                           - sizeof(struct icmp6_hdr) */
+#include <sys/packon.h>
+
+struct icmp6_hdr {
+        u_int8_t        icmp6_type;     /* type field */
+        u_int8_t        icmp6_code;     /* code field */
+        u_int16_t       icmp6_cksum;    /* checksum field */
+        union {
+          u_int32_t     icmp6_un_data32[1]; /* type-specific field */
+          u_int16_t     icmp6_un_data16[2]; /* type-specific field */
+          u_int8_t      icmp6_un_data8[4];  /* type-specific field */
+        } icmp6_dataun;
+};
+
+#define icmp6_data32    icmp6_dataun.icmp6_un_data32
+#define icmp6_data16    icmp6_dataun.icmp6_un_data16
+#define icmp6_data8     icmp6_dataun.icmp6_un_data8
+#define icmp6_pptr      icmp6_data32[0]         /* parameter prob */
+#define icmp6_mtu       icmp6_data32[0]         /* packet too big */
+#define icmp6_id        icmp6_data16[0]         /* echo request/reply */
+#define icmp6_seq       icmp6_data16[1]         /* echo request/reply */
+#define icmp6_maxdelay  icmp6_data16[0]         /* mcast group membership */
+
+#define ICMP6_DST_UNREACH               1       /* dest unreachable, codes: */
+#define ICMP6_PACKET_TOO_BIG            2       /* packet too big */
+#define ICMP6_TIME_EXCEEDED             3       /* time exceeded, code: */
+#define ICMP6_PARAM_PROB                4       /* ip6 header bad */
+
+#define ICMP6_ECHO_REQUEST              128     /* echo service */
+#define ICMP6_ECHO_REPLY                129     /* echo reply */
+#define ICMP6_MEMBERSHIP_QUERY          130     /* group membership query */
+#define MLD_LISTENER_QUERY              130     /* multicast listener query */
+#define ICMP6_MEMBERSHIP_REPORT         131     /* group membership report */
+#define MLD_LISTENER_REPORT             131     /* multicast listener report */
+#define ICMP6_MEMBERSHIP_REDUCTION      132     /* group membership termination */
+#define MLD_LISTENER_DONE               132     /* multicast listener done */
+
+#ifndef _KERNEL
+/* the followings are for backward compatibility to old KAME apps. */
+#define MLD6_LISTENER_QUERY     MLD_LISTENER_QUERY
+#define MLD6_LISTENER_REPORT    MLD_LISTENER_REPORT
+#define MLD6_LISTENER_DONE      MLD_LISTENER_DONE
+#endif
+
+#define ND_ROUTER_SOLICIT               133     /* router solicitation */
+#define ND_ROUTER_ADVERT                134     /* router advertisment */
+#define ND_NEIGHBOR_SOLICIT             135     /* neighbor solicitation */
+#define ND_NEIGHBOR_ADVERT              136     /* neighbor advertisment */
+#define ND_REDIRECT                     137     /* redirect */
+
+#define ICMP6_ROUTER_RENUMBERING        138     /* router renumbering */
+
+#define ICMP6_WRUREQUEST                139     /* who are you request */
+#define ICMP6_WRUREPLY                  140     /* who are you reply */
+#define ICMP6_FQDN_QUERY                139     /* FQDN query */
+#define ICMP6_FQDN_REPLY                140     /* FQDN reply */
+#define ICMP6_NI_QUERY                  139     /* node information request */
+#define ICMP6_NI_REPLY                  140     /* node information reply */
+
+/* The definitions below are experimental. TBA */
+#define MLD_MTRACE_RESP                 200     /* mtrace resp (to sender) */
+#define MLD_MTRACE                      201     /* mtrace messages */
+
+#define ICMP6_HADISCOV_REQUEST          202     /* XXX To be defined */
+#define ICMP6_HADISCOV_REPLY            203     /* XXX To be defined */
+  
+#ifndef _KERNEL
+#define MLD6_MTRACE_RESP        MLD_MTRACE_RESP
+#define MLD6_MTRACE             MLD_MTRACE
+#endif
+
+#define ICMP6_MAXTYPE                   203
+
+#define ICMP6_DST_UNREACH_NOROUTE       0       /* no route to destination */
+#define ICMP6_DST_UNREACH_ADMIN         1       /* administratively prohibited */
+#define ICMP6_DST_UNREACH_NOTNEIGHBOR   2       /* not a neighbor(obsolete) */
+#define ICMP6_DST_UNREACH_BEYONDSCOPE   2       /* beyond scope of source address */
+#define ICMP6_DST_UNREACH_ADDR          3       /* address unreachable */
+#define ICMP6_DST_UNREACH_NOPORT        4       /* port unreachable */
+
+#define ICMP6_TIME_EXCEED_TRANSIT       0       /* ttl==0 in transit */
+#define ICMP6_TIME_EXCEED_REASSEMBLY    1       /* ttl==0 in reass */
+
+#define ICMP6_PARAMPROB_HEADER          0       /* erroneous header field */
+#define ICMP6_PARAMPROB_NEXTHEADER      1       /* unrecognized next header */
+#define ICMP6_PARAMPROB_OPTION          2       /* unrecognized option */
+
+#define ICMP6_INFOMSG_MASK              0x80    /* all informational messages */
+
+#define ICMP6_NI_SUBJ_IPV6      0       /* Query Subject is an IPv6 address */
+#define ICMP6_NI_SUBJ_FQDN      1       /* Query Subject is a Domain name */
+#define ICMP6_NI_SUBJ_IPV4      2       /* Query Subject is an IPv4 address */
+
+#define ICMP6_NI_SUCCESS        0       /* node information successful reply */
+#define ICMP6_NI_REFUSED        1       /* node information request is refused */
+#define ICMP6_NI_UNKNOWN        2       /* unknown Qtype */
+
+#define ICMP6_ROUTER_RENUMBERING_COMMAND  0     /* rr command */
+#define ICMP6_ROUTER_RENUMBERING_RESULT   1     /* rr result */
+#define ICMP6_ROUTER_RENUMBERING_SEQNUM_RESET   255     /* rr seq num reset */
+
+/* Used in kernel only */
+#define ND_REDIRECT_ONLINK      0       /* redirect to an on-link node */
+#define ND_REDIRECT_ROUTER      1       /* redirect to a better router */
+
+/*
+ * Multicast Listener Discovery
+ */
+struct mld_hdr {
+       struct icmp6_hdr  mld_icmp6_hdr;
+       struct in6_addr   mld_addr; /* multicast address */
+      };
+
+/* definitions to provide backward compatibility to old KAME applications */
+#ifndef _KERNEL
+#define mld6_hdr        mld_hdr
+#define mld6_type       mld_type
+#define mld6_code       mld_code
+#define mld6_cksum      mld_cksum
+#define mld6_maxdelay   mld_maxdelay
+#define mld6_reserved   mld_reserved
+#define mld6_addr       mld_addr
+#endif
+
+/* shortcut macro definitions */
+#define mld_type        mld_icmp6_hdr.icmp6_type
+#define mld_code        mld_icmp6_hdr.icmp6_code
+#define mld_cksum       mld_icmp6_hdr.icmp6_cksum
+#define mld_maxdelay    mld_icmp6_hdr.icmp6_data16[0]
+#define mld_reserved    mld_icmp6_hdr.icmp6_data16[1]
+
+/*
+ * Neighbor Discovery
+ */
+
+struct nd_router_solicit {      /* router solicitation */
+       struct icmp6_hdr        nd_rs_hdr;
+       /* could be followed by options */
+     };
+
+#define nd_rs_type      nd_rs_hdr.icmp6_type
+#define nd_rs_code      nd_rs_hdr.icmp6_code
+#define nd_rs_cksum     nd_rs_hdr.icmp6_cksum
+#define nd_rs_reserved  nd_rs_hdr.icmp6_data32[0]
+
+struct nd_router_advert {       /* router advertisement */
+       struct icmp6_hdr nd_ra_hdr;
+       u_int32_t        nd_ra_reachable;        /* reachable time */
+       u_int32_t        nd_ra_retransmit;       /* retransmit timer */
+       /* could be followed by options */
+     };
+
+#define nd_ra_type              nd_ra_hdr.icmp6_type
+#define nd_ra_code              nd_ra_hdr.icmp6_code
+#define nd_ra_cksum             nd_ra_hdr.icmp6_cksum
+#define nd_ra_curhoplimit       nd_ra_hdr.icmp6_data8[0]
+#define nd_ra_flags_reserved    nd_ra_hdr.icmp6_data8[1]
+#define ND_RA_FLAG_MANAGED      0x80
+#define ND_RA_FLAG_OTHER        0x40
+#define ND_RA_FLAG_HA           0x20
+
+/*
+ * Router preference values based on draft-draves-ipngwg-router-selection-01.
+ * These are non-standard definitions.
+ */
+#define ND_RA_FLAG_RTPREF_MASK  0x18 /* 00011000 */
+
+#define ND_RA_FLAG_RTPREF_HIGH  0x08 /* 00001000 */
+#define ND_RA_FLAG_RTPREF_MEDIUM        0x00 /* 00000000 */
+#define ND_RA_FLAG_RTPREF_LOW   0x18 /* 00011000 */
+#define ND_RA_FLAG_RTPREF_RSV   0x10 /* 00010000 */
+
+#define nd_ra_router_lifetime   nd_ra_hdr.icmp6_data16[1]
+
+struct nd_neighbor_solicit {    /* neighbor solicitation */
+       struct icmp6_hdr  nd_ns_hdr;
+       struct in6_addr   nd_ns_target;   /*target address */
+       /* could be followed by options */
+     };
+
+#define nd_ns_type              nd_ns_hdr.icmp6_type
+#define nd_ns_code              nd_ns_hdr.icmp6_code
+#define nd_ns_cksum             nd_ns_hdr.icmp6_cksum
+#define nd_ns_reserved          nd_ns_hdr.icmp6_data32[0]
+
+struct nd_neighbor_advert {     /* neighbor advertisement */
+       struct icmp6_hdr  nd_na_hdr;
+       struct in6_addr   nd_na_target;   /* target address */
+       /* could be followed by options */
+     };
+
+#define nd_na_type              nd_na_hdr.icmp6_type
+#define nd_na_code              nd_na_hdr.icmp6_code
+#define nd_na_cksum             nd_na_hdr.icmp6_cksum
+#define nd_na_flags_reserved    nd_na_hdr.icmp6_data32[0]
+#if BYTE_ORDER == BIG_ENDIAN
+#define ND_NA_FLAG_ROUTER               0x80000000
+#define ND_NA_FLAG_SOLICITED            0x40000000
+#define ND_NA_FLAG_OVERRIDE             0x20000000
+#else
+#if BYTE_ORDER == LITTLE_ENDIAN
+#define ND_NA_FLAG_ROUTER               0x80
+#define ND_NA_FLAG_SOLICITED            0x40
+#define ND_NA_FLAG_OVERRIDE             0x20
+#endif
+#endif
+
+struct nd_redirect {            /* redirect */
+       struct icmp6_hdr nd_rd_hdr;
+       struct in6_addr  nd_rd_target;   /* target address */
+       struct in6_addr  nd_rd_dst;      /* destination address */
+       /* could be followed by options */
+     };
+
+#define nd_rd_type      nd_rd_hdr.icmp6_type
+#define nd_rd_code      nd_rd_hdr.icmp6_code
+#define nd_rd_cksum     nd_rd_hdr.icmp6_cksum
+#define nd_rd_reserved  nd_rd_hdr.icmp6_data32[0]
+
+struct nd_opt_hdr {             /* Neighbor discovery option header */
+       u_int8_t  nd_opt_type;
+       u_int8_t  nd_opt_len;
+       /* followed by option specific data*/
+     };
+
+#define ND_OPT_SOURCE_LINKADDR          1
+#define ND_OPT_TARGET_LINKADDR          2
+#define ND_OPT_PREFIX_INFORMATION       3
+#define ND_OPT_REDIRECTED_HEADER        4
+#define ND_OPT_MTU                      5
+
+#define ND_OPT_ROUTE_INFO               200     /* draft-ietf-ipngwg-router-preference, not officially assigned yet */
+
+struct nd_opt_prefix_info {     /* prefix information */
+       u_int8_t        nd_opt_pi_type;
+       u_int8_t        nd_opt_pi_len;
+       u_int8_t        nd_opt_pi_prefix_len;
+       u_int8_t        nd_opt_pi_flags_reserved;
+       u_int32_t       nd_opt_pi_valid_time;
+       u_int32_t       nd_opt_pi_preferred_time;
+       u_int32_t       nd_opt_pi_reserved2;
+       struct in6_addr nd_opt_pi_prefix;
+     };
+
+#define ND_OPT_PI_FLAG_ONLINK           0x80
+#define ND_OPT_PI_FLAG_AUTO             0x40
+
+struct nd_opt_rd_hdr {          /* redirected header */
+       u_int8_t        nd_opt_rh_type;
+       u_int8_t        nd_opt_rh_len;
+       u_int16_t       nd_opt_rh_reserved1;
+       u_int32_t       nd_opt_rh_reserved2;
+       /* followed by IP header and data */
+     };
+
+struct nd_opt_mtu {             /* MTU option */
+       u_int8_t        nd_opt_mtu_type;
+       u_int8_t        nd_opt_mtu_len;
+       u_int16_t       nd_opt_mtu_reserved;
+       u_int32_t       nd_opt_mtu_mtu;
+     };
+
+struct nd_opt_route_info {      /* route info */
+       u_int8_t        nd_opt_rti_type;
+       u_int8_t        nd_opt_rti_len;
+       u_int8_t        nd_opt_rti_prefixlen;
+       u_int8_t        nd_opt_rti_flags;
+       u_int32_t       nd_opt_rti_lifetime;
+       /* prefix follows */
+     };
+
+/*
+ * icmp6 namelookup
+ */
+
+struct icmp6_namelookup {
+       struct icmp6_hdr icmp6_nl_hdr;
+       u_int8_t         icmp6_nl_nonce[8];
+       int32_t          icmp6_nl_ttl;
+#if 0
+       u_int8_t         icmp6_nl_len;
+       u_int8_t         icmp6_nl_name[3];
+#endif
+       /* could be followed by options */
+     };
+
+/*
+ * icmp6 node information
+ */
+struct icmp6_nodeinfo {
+       struct icmp6_hdr icmp6_ni_hdr;
+       u_int8_t icmp6_ni_nonce[8];
+       /* could be followed by reply data */
+     };
+
+#define ni_type         icmp6_ni_hdr.icmp6_type
+#define ni_code         icmp6_ni_hdr.icmp6_code
+#define ni_cksum        icmp6_ni_hdr.icmp6_cksum
+#define ni_qtype        icmp6_ni_hdr.icmp6_data16[0]
+#define ni_flags        icmp6_ni_hdr.icmp6_data16[1]
+
+#define NI_QTYPE_NOOP           0 /* NOOP  */
+#define NI_QTYPE_SUPTYPES       1 /* Supported Qtypes */
+#define NI_QTYPE_FQDN           2 /* FQDN (draft 04) */
+#define NI_QTYPE_DNSNAME        2 /* DNS Name */
+#define NI_QTYPE_NODEADDR       3 /* Node Addresses */
+#define NI_QTYPE_IPV4ADDR       4 /* IPv4 Addresses */
+
+#if BYTE_ORDER == BIG_ENDIAN
+#define NI_SUPTYPE_FLAG_COMPRESS        0x1
+#define NI_FQDN_FLAG_VALIDTTL           0x1
+#elif BYTE_ORDER == LITTLE_ENDIAN
+#define NI_SUPTYPE_FLAG_COMPRESS        0x0100
+#define NI_FQDN_FLAG_VALIDTTL           0x0100
+#endif
+
+#ifdef NAME_LOOKUPS_04
+#if BYTE_ORDER == BIG_ENDIAN
+#define NI_NODEADDR_FLAG_LINKLOCAL      0x1
+#define NI_NODEADDR_FLAG_SITELOCAL      0x2
+#define NI_NODEADDR_FLAG_GLOBAL         0x4
+#define NI_NODEADDR_FLAG_ALL            0x8
+#define NI_NODEADDR_FLAG_TRUNCATE       0x10
+#define NI_NODEADDR_FLAG_ANYCAST        0x20 /* just experimental. not in spec */
+#elif BYTE_ORDER == LITTLE_ENDIAN
+#define NI_NODEADDR_FLAG_LINKLOCAL      0x0100
+#define NI_NODEADDR_FLAG_SITELOCAL      0x0200
+#define NI_NODEADDR_FLAG_GLOBAL         0x0400
+#define NI_NODEADDR_FLAG_ALL            0x0800
+#define NI_NODEADDR_FLAG_TRUNCATE       0x1000
+#define NI_NODEADDR_FLAG_ANYCAST        0x2000 /* just experimental. not in spec */
+#endif
+#else  /* draft-ietf-ipngwg-icmp-name-lookups-05 (and later?) */
+#if BYTE_ORDER == BIG_ENDIAN
+#define NI_NODEADDR_FLAG_TRUNCATE       0x1
+#define NI_NODEADDR_FLAG_ALL            0x2
+#define NI_NODEADDR_FLAG_COMPAT         0x4
+#define NI_NODEADDR_FLAG_LINKLOCAL      0x8
+#define NI_NODEADDR_FLAG_SITELOCAL      0x10
+#define NI_NODEADDR_FLAG_GLOBAL         0x20
+#define NI_NODEADDR_FLAG_ANYCAST        0x40 /* just experimental. not in spec */
+#elif BYTE_ORDER == LITTLE_ENDIAN
+#define NI_NODEADDR_FLAG_TRUNCATE       0x0100
+#define NI_NODEADDR_FLAG_ALL            0x0200
+#define NI_NODEADDR_FLAG_COMPAT         0x0400
+#define NI_NODEADDR_FLAG_LINKLOCAL      0x0800
+#define NI_NODEADDR_FLAG_SITELOCAL      0x1000
+#define NI_NODEADDR_FLAG_GLOBAL         0x2000
+#define NI_NODEADDR_FLAG_ANYCAST        0x4000 /* just experimental. not in spec */
+#endif
+#endif
+
+struct ni_reply_fqdn {
+       u_int32_t ni_fqdn_ttl;      /* TTL */
+       u_int8_t  ni_fqdn_namelen;  /* length in octets of the FQDN */
+       u_int8_t  ni_fqdn_name[3];  /* XXX: alignment */
+     };
+
+/*
+ * Router Renumbering. as router-renum-08.txt
+ */
+struct icmp6_router_renum {     /* router renumbering header */
+       struct icmp6_hdr        rr_hdr;
+       u_int8_t        rr_segnum;
+       u_int8_t        rr_flags;
+       u_int16_t       rr_maxdelay;
+       u_int32_t       rr_reserved;
+     };
+
+#define ICMP6_RR_FLAGS_TEST             0x80
+#define ICMP6_RR_FLAGS_REQRESULT        0x40
+#define ICMP6_RR_FLAGS_FORCEAPPLY       0x20
+#define ICMP6_RR_FLAGS_SPECSITE         0x10
+#define ICMP6_RR_FLAGS_PREVDONE         0x08
+
+#define rr_type         rr_hdr.icmp6_type
+#define rr_code         rr_hdr.icmp6_code
+#define rr_cksum        rr_hdr.icmp6_cksum
+#define rr_seqnum       rr_hdr.icmp6_data32[0]
+
+struct rr_pco_match {           /* match prefix part */
+       u_int8_t        rpm_code;
+       u_int8_t        rpm_len;
+       u_int8_t        rpm_ordinal;
+       u_int8_t        rpm_matchlen;
+       u_int8_t        rpm_minlen;
+       u_int8_t        rpm_maxlen;
+       u_int16_t       rpm_reserved;
+       struct  in6_addr        rpm_prefix;
+     };
+
+#define RPM_PCO_ADD             1
+#define RPM_PCO_CHANGE          2
+#define RPM_PCO_SETGLOBAL       3
+#define RPM_PCO_MAX             4
+
+struct rr_pco_use {             /* use prefix part */
+       u_int8_t        rpu_uselen;
+       u_int8_t        rpu_keeplen;
+       u_int8_t        rpu_ramask;
+       u_int8_t        rpu_raflags;
+       u_int32_t       rpu_vltime;
+       u_int32_t       rpu_pltime;
+       u_int32_t       rpu_flags;
+       struct  in6_addr rpu_prefix;
+     };
+
+#define ICMP6_RR_PCOUSE_RAFLAGS_ONLINK  0x80
+#define ICMP6_RR_PCOUSE_RAFLAGS_AUTO    0x40
+
+#if BYTE_ORDER == BIG_ENDIAN
+#define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME     0x80000000
+#define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME     0x40000000
+#elif BYTE_ORDER == LITTLE_ENDIAN
+#define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME     0x80
+#define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME     0x40
+#endif
+
+struct rr_result {              /* router renumbering result message */
+       u_int16_t       rrr_flags;
+       u_int8_t        rrr_ordinal;
+       u_int8_t        rrr_matchedlen;
+       u_int32_t       rrr_ifid;
+       struct  in6_addr rrr_prefix;
+     };
+
+#include <sys/packoff.h>
+
+#if BYTE_ORDER == BIG_ENDIAN
+#define ICMP6_RR_RESULT_FLAGS_OOB               0x0002
+#define ICMP6_RR_RESULT_FLAGS_FORBIDDEN         0x0001
+#elif BYTE_ORDER == LITTLE_ENDIAN
+#define ICMP6_RR_RESULT_FLAGS_OOB               0x0200
+#define ICMP6_RR_RESULT_FLAGS_FORBIDDEN         0x0100
+#endif
+
+/*
+ * icmp6 filter structures.
+ */
+
+struct icmp6_filter {
+       u_int32_t icmp6_filt[8];
+     };
+
+#define ICMP6_FILTER_SETPASSALL(filterp) \
+        memset(filterp, 0xff, sizeof(struct icmp6_filter))
+#define ICMP6_FILTER_SETBLOCKALL(filterp) \
+        memset(filterp, 0x00, sizeof(struct icmp6_filter))
+
+#define ICMP6_FILTER_SETPASS(type, filterp) \
+        (((filterp)->icmp6_filt[(type) >> 5]) |= (1 << ((type) & 31)))
+#define ICMP6_FILTER_SETBLOCK(type, filterp) \
+        (((filterp)->icmp6_filt[(type) >> 5]) &= ~(1 << ((type) & 31)))
+#define ICMP6_FILTER_WILLPASS(type, filterp) \
+        ((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) != 0)
+#define ICMP6_FILTER_WILLBLOCK(type, filterp) \
+        ((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) == 0)
+
+/*
+ * Variables related to this implementation
+ * of the internet control message protocol version 6.
+ */
+struct icmp6errstat {
+       u_quad_t icp6errs_dst_unreach_noroute;
+       u_quad_t icp6errs_dst_unreach_admin;
+       u_quad_t icp6errs_dst_unreach_beyondscope;
+       u_quad_t icp6errs_dst_unreach_addr;
+       u_quad_t icp6errs_dst_unreach_noport;
+       u_quad_t icp6errs_packet_too_big;
+       u_quad_t icp6errs_time_exceed_transit;
+       u_quad_t icp6errs_time_exceed_reassembly;
+       u_quad_t icp6errs_paramprob_header;
+       u_quad_t icp6errs_paramprob_nextheader;
+       u_quad_t icp6errs_paramprob_option;
+       u_quad_t icp6errs_redirect; /* we regard redirect as an error here */
+       u_quad_t icp6errs_unknown;
+     };
+
+struct icmp6stat {
+       /* statistics related to icmp6 packets generated */
+       u_quad_t icp6s_error;           /* # of calls to icmp6_error */
+       u_quad_t icp6s_canterror;       /* no error 'cuz old was icmp */
+       u_quad_t icp6s_toofreq;         /* no error 'cuz rate limitation */
+       u_quad_t icp6s_outhist[256];
+
+       /* statistics related to input message processed */
+       u_quad_t icp6s_badcode;         /* icmp6_code out of range */
+       u_quad_t icp6s_tooshort;        /* packet < sizeof(struct icmp6_hdr) */
+       u_quad_t icp6s_checksum;        /* bad checksum */
+       u_quad_t icp6s_badlen;          /* calculated bound mismatch */
+       /*
+        * number of responses: this member is inherited from netinet code, but
+        * for netinet6 code, it is already available in icp6s_outhist[].
+        */
+       u_quad_t icp6s_reflect;
+       u_quad_t icp6s_inhist[256];
+       u_quad_t icp6s_nd_toomanyopt;   /* too many ND options */
+       struct icmp6errstat icp6s_outerrhist;
+#define icp6s_odst_unreach_noroute \
+        icp6s_outerrhist.icp6errs_dst_unreach_noroute
+#define icp6s_odst_unreach_admin icp6s_outerrhist.icp6errs_dst_unreach_admin
+#define icp6s_odst_unreach_beyondscope \
+        icp6s_outerrhist.icp6errs_dst_unreach_beyondscope
+#define icp6s_odst_unreach_addr icp6s_outerrhist.icp6errs_dst_unreach_addr
+#define icp6s_odst_unreach_noport icp6s_outerrhist.icp6errs_dst_unreach_noport
+#define icp6s_opacket_too_big icp6s_outerrhist.icp6errs_packet_too_big
+#define icp6s_otime_exceed_transit \
+        icp6s_outerrhist.icp6errs_time_exceed_transit
+#define icp6s_otime_exceed_reassembly \
+        icp6s_outerrhist.icp6errs_time_exceed_reassembly
+#define icp6s_oparamprob_header icp6s_outerrhist.icp6errs_paramprob_header
+#define icp6s_oparamprob_nextheader \
+        icp6s_outerrhist.icp6errs_paramprob_nextheader
+#define icp6s_oparamprob_option icp6s_outerrhist.icp6errs_paramprob_option
+#define icp6s_oredirect icp6s_outerrhist.icp6errs_redirect
+#define icp6s_ounknown icp6s_outerrhist.icp6errs_unknown
+       u_quad_t icp6s_pmtuchg;         /* path MTU changes */
+       u_quad_t icp6s_nd_badopt;       /* bad ND options */
+       u_quad_t icp6s_badns;           /* bad neighbor solicitation */
+       u_quad_t icp6s_badna;           /* bad neighbor advertisement */
+       u_quad_t icp6s_badrs;           /* bad router advertisement */
+       u_quad_t icp6s_badra;           /* bad router advertisement */
+       u_quad_t icp6s_badredirect;     /* bad redirect message */
+     };
+
+/*
+ * Names for ICMP sysctl objects
+ */
+#define ICMPV6CTL_STATS         1
+#define ICMPV6CTL_REDIRACCEPT   2       /* accept/process redirects */
+#define ICMPV6CTL_REDIRTIMEOUT  3       /* redirect cache time */
+#define ICMPV6CTL_ND6_PRUNE     6
+#define ICMPV6CTL_ND6_DELAY     8
+#define ICMPV6CTL_ND6_UMAXTRIES 9
+#define ICMPV6CTL_ND6_MMAXTRIES         10
+#define ICMPV6CTL_ND6_USELOOPBACK       11
+/*#define ICMPV6CTL_ND6_PROXYALL        12      obsoleted, do not reuse here */
+#define ICMPV6CTL_NODEINFO      13
+#define ICMPV6CTL_ERRPPSLIMIT   14      /* ICMPv6 error pps limitation */
+#define ICMPV6CTL_ND6_MAXNUDHINT        15
+#define ICMPV6CTL_MTUDISC_HIWAT 16
+#define ICMPV6CTL_MTUDISC_LOWAT 17
+#define ICMPV6CTL_ND6_DEBUG     18
+#define ICMPV6CTL_ND6_DRLIST    19
+#define ICMPV6CTL_ND6_PRLIST    20
+#define ICMPV6CTL_MAXID         21
+
+#define ICMPV6CTL_NAMES { \
+        { 0, 0 }, \
+        { 0, 0 }, \
+        { "rediraccept", CTLTYPE_INT }, \
+        { "redirtimeout", CTLTYPE_INT }, \
+        { 0, 0 }, \
+        { 0, 0 }, \
+        { "nd6_prune", CTLTYPE_INT }, \
+        { 0, 0 }, \
+        { "nd6_delay", CTLTYPE_INT }, \
+        { "nd6_umaxtries", CTLTYPE_INT }, \
+        { "nd6_mmaxtries", CTLTYPE_INT }, \
+        { "nd6_useloopback", CTLTYPE_INT }, \
+        { 0, 0 }, \
+        { "nodeinfo", CTLTYPE_INT }, \
+        { "errppslimit", CTLTYPE_INT }, \
+        { "nd6_maxnudhint", CTLTYPE_INT }, \
+        { "mtudisc_hiwat", CTLTYPE_INT }, \
+        { "mtudisc_lowat", CTLTYPE_INT }, \
+        { "nd6_debug", CTLTYPE_INT }, \
+        { 0, 0 }, \
+        { 0, 0 }, \
+}
+
+#define RTF_PROBEMTU    RTF_PROTO1
+
+#ifdef _KERNEL
+# ifdef __STDC__
+struct  rtentry;
+struct  rttimer;
+struct  in6_multi;
+# endif
+void    icmp6_init(void);
+void    icmp6_paramerror(struct mbuf *, int);
+void    icmp6_error(struct mbuf *, int, int, int);
+int     icmp6_input(struct mbuf **, int *, int);
+void    icmp6_fasttimo(void);
+void    icmp6_reflect(struct mbuf *, size_t);
+void    icmp6_prepare(struct mbuf *);
+void    icmp6_redirect_input(struct mbuf *, int);
+void    icmp6_redirect_output(struct mbuf *, struct rtentry *);
+
+struct  ip6ctlparam;
+void    icmp6_mtudisc_update(struct ip6ctlparam *, int);
+
+/* XXX: is this the right place for these macros? */
+#define icmp6_ifstat_inc(ifp, tag) \
+do {                                                            \
+        if ((ifp) && (ifp)->if_index <= if_index                        \
+         && (ifp)->if_index < icmp6_ifstatmax                   \
+         && icmp6_ifstat && icmp6_ifstat[(ifp)->if_index]) {    \
+                icmp6_ifstat[(ifp)->if_index]->tag++;           \
+        }                                                       \
+} while (0)
+
+#define icmp6_ifoutstat_inc(ifp, type, code) \
+do { \
+                icmp6_ifstat_inc(ifp, ifs6_out_msg); \
+                if (type < ICMP6_INFOMSG_MASK) \
+                        icmp6_ifstat_inc(ifp, ifs6_out_error); \
+                switch(type) { \
+                 case ICMP6_DST_UNREACH: \
+                         icmp6_ifstat_inc(ifp, ifs6_out_dstunreach); \
+                         if (code == ICMP6_DST_UNREACH_ADMIN) \
+                                 icmp6_ifstat_inc(ifp, ifs6_out_adminprohib); \
+                         break; \
+                 case ICMP6_PACKET_TOO_BIG: \
+                         icmp6_ifstat_inc(ifp, ifs6_out_pkttoobig); \
+                         break; \
+                 case ICMP6_TIME_EXCEEDED: \
+                         icmp6_ifstat_inc(ifp, ifs6_out_timeexceed); \
+                         break; \
+                 case ICMP6_PARAM_PROB: \
+                         icmp6_ifstat_inc(ifp, ifs6_out_paramprob); \
+                         break; \
+                 case ICMP6_ECHO_REQUEST: \
+                         icmp6_ifstat_inc(ifp, ifs6_out_echo); \
+                         break; \
+                 case ICMP6_ECHO_REPLY: \
+                         icmp6_ifstat_inc(ifp, ifs6_out_echoreply); \
+                         break; \
+                 case MLD_LISTENER_QUERY: \
+                         icmp6_ifstat_inc(ifp, ifs6_out_mldquery); \
+                         break; \
+                 case MLD_LISTENER_REPORT: \
+                         icmp6_ifstat_inc(ifp, ifs6_out_mldreport); \
+                         break; \
+                 case MLD_LISTENER_DONE: \
+                         icmp6_ifstat_inc(ifp, ifs6_out_mlddone); \
+                         break; \
+                 case ND_ROUTER_SOLICIT: \
+                         icmp6_ifstat_inc(ifp, ifs6_out_routersolicit); \
+                         break; \
+                 case ND_ROUTER_ADVERT: \
+                         icmp6_ifstat_inc(ifp, ifs6_out_routeradvert); \
+                         break; \
+                 case ND_NEIGHBOR_SOLICIT: \
+                         icmp6_ifstat_inc(ifp, ifs6_out_neighborsolicit); \
+                         break; \
+                 case ND_NEIGHBOR_ADVERT: \
+                         icmp6_ifstat_inc(ifp, ifs6_out_neighboradvert); \
+                         break; \
+                 case ND_REDIRECT: \
+                         icmp6_ifstat_inc(ifp, ifs6_out_redirect); \
+                         break; \
+                } \
+} while (0)
+
+extern int      icmp6_rediraccept;      /* accept/process redirects */
+extern int      icmp6_redirtimeout;     /* cache time for redirect routes */
+#endif /* _KERNEL */
+
+#endif /* not _NETINET_ICMP6_H_ */
diff --git a/libs/watt32/netinet/icmp_var.h b/libs/watt32/netinet/icmp_var.h
new file mode 100644 (file)
index 0000000..12d5a47
--- /dev/null
@@ -0,0 +1,86 @@
+/*!\file netinet/icmp_var.h
+ * Internal ICMP statistics.
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 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.
+ *
+ *      @(#)icmp_var.h  8.1 (Berkeley) 6/10/93
+ * $Id: icmp_var.h,v 1.4 1995/02/16 00:27:40 wollman Exp $
+ */
+
+#ifndef __NETINET_ICMP_VAR_H
+#define __NETINET_ICMP_VAR_H
+
+#ifndef ICMP_MAXTYPE
+#define ICMP_MAXTYPE  18
+#endif
+
+/*
+ * Variables related to this implementation
+ * of the internet control message protocol.
+ */
+struct  icmpstat {
+/* statistics related to icmp packets generated */
+        u_long  icps_error;             /* # of calls to icmp_error */
+        u_long  icps_oldshort;          /* no error 'cuz old ip too short */
+        u_long  icps_oldicmp;           /* no error 'cuz old was icmp */
+        u_long  icps_outhist[ICMP_MAXTYPE + 1];
+/* statistics related to input messages processed */
+        u_long  icps_badcode;           /* icmp_code out of range */
+        u_long  icps_tooshort;          /* packet < ICMP_MINLEN */
+        u_long  icps_checksum;          /* bad checksum */
+        u_long  icps_badlen;            /* calculated bound mismatch */
+        u_long  icps_reflect;           /* number of responses */
+        u_long  icps_inhist[ICMP_MAXTYPE + 1];
+        u_long  icps_bmcastecho;        /* b/mcast echo requests dropped */
+        u_long  icps_bmcasttstamp;      /* b/mcast tstamp requests dropped */
+        u_long  icps_badaddr;           /* bad return address */
+        u_long  icps_noroute;           /* no route back */
+};
+
+/*
+ * Names for ICMP sysctl objects
+ */
+#define ICMPCTL_MASKREPL        1       /* allow replies to netmask requests */
+#define ICMPCTL_STATS           2       /* statistics (read-only) */
+#define ICMPCTL_ICMPLIM         3
+#define ICMPCTL_MAXID           4
+
+#define ICMPCTL_NAMES { \
+        { 0, 0 }, \
+        { "maskrepl", CTLTYPE_INT }, \
+        { "stats", CTLTYPE_STRUCT }, \
+        { "icmplim", CTLTYPE_INT }, \
+}
+
+#endif
diff --git a/libs/watt32/netinet/if_ether.h b/libs/watt32/netinet/if_ether.h
new file mode 100644 (file)
index 0000000..566303a
--- /dev/null
@@ -0,0 +1,225 @@
+/*!\file inc/netinet/if_ether.h
+ * Ethernet definitions.
+ */
+
+/* Modified for emx by hv 1994
+ *
+ * Copyright (c) 1982, 1986 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.
+ *
+ *      from: @(#)if_ether.h    7.5 (Berkeley) 6/28/90
+ *      $Id: if_ether.h,v 1.8 1994/02/02 05:58:54 hpeyerl Exp $
+ */
+
+#ifndef __NETINET_IF_ETHER_H
+#define __NETINET_IF_ETHER_H
+
+#include <sys/packon.h>
+
+/*
+ * Ethernet address - 6 octets
+ * this is only used by the ethers(3) functions.
+ */
+struct ether_addr {
+       u_char ether_addr_octet[6];
+     };
+
+/*
+ * 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 */
+/* the IBM header corrects the following to 0x608 for OS/2 but I believe
+ * this is just a dirty hack 
+ */
+#define ETHERTYPE_ARP           0x0806  /* address resolution protocol */
+#define ETHERTYPE_IP            0x0800  /* IP protocol */
+#define ETHERTYPE_REVARP        0x8035  /* reverse 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)
+
+/*
+ * Macro to map an IP multicast address to an Ethernet multicast address.
+ * The high-order 25 bits of the Ethernet address are statically assigned,
+ * and the low-order 23 bits are taken from the low end of the IP address.
+ */
+#define ETHER_MAP_IP_MULTICAST(ipaddr, enaddr) \
+        /* struct in_addr *ipaddr; */ \
+        /* u_char enaddr[6];       */ \
+        { \
+          (enaddr)[0] = 0x01; \
+          (enaddr)[1] = 0x00; \
+          (enaddr)[2] = 0x5e; \
+          (enaddr)[3] = ((u_char *)ipaddr)[1] & 0x7f; \
+          (enaddr)[4] = ((u_char *)ipaddr)[2]; \
+          (enaddr)[5] = ((u_char *)ipaddr)[3]; \
+        }
+
+
+/*
+ * 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 {
+       struct  arphdr ea_hdr;  /* fixed-size header */
+       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 */
+     };
+#define arp_hrd ea_hdr.ar_hrd
+#define arp_pro ea_hdr.ar_pro
+#define arp_hln ea_hdr.ar_hln
+#define arp_pln ea_hdr.ar_pln
+#define arp_op  ea_hdr.ar_op
+
+
+/*
+ * 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 in_addr ac_ipaddr;          /* copy of ip address- XXX */
+       struct ether_multi *ac_multiaddrs; /* list of ether multicast addrs */
+       int ac_multicnt;                   /* length of ac_multiaddrs list */
+};
+
+/*
+ * Internet to ethernet address resolution table.
+ */
+
+struct arptab {
+       struct  in_addr at_iaddr;       /* internet address */
+       u_char  at_enaddr[6];           /* ethernet address */
+       u_char  at_timer;               /* minutes since last reference */
+       u_char  at_flags;               /* flags */
+       struct  mbuf *at_hold;          /* last packet until resolved/timeout */
+/* only os2 */
+       u_short at_rcf;
+       u_short at_rseg[8];
+       u_long at_millisec;
+       int at_interface;
+};
+
+
+extern u_char  etherbroadcastaddr[6];
+extern u_char  ether_ipmulticast_min[6];
+extern u_char  ether_ipmulticast_max[6];
+
+/*
+ * Ethernet multicast address structure.  There is one of these for each
+ * multicast address or range of multicast addresses that we are supposed
+ * to listen to on a particular interface.  They are kept in a linked list,
+ * rooted in the interface's arpcom structure.  (This really has nothing to
+ * do with ARP, or with the Internet address family, but this appears to be
+ * the minimally-disrupting place to put it.)
+ */
+struct ether_multi {
+       u_char  enm_addrlo[6];          /* low  or only address of range */
+       u_char  enm_addrhi[6];          /* high or only address of range */
+       struct  arpcom *enm_ac;         /* back pointer to arpcom */
+       u_int   enm_refcount;           /* no. claims to this addr/range */
+       struct  ether_multi *enm_next;  /* ptr to next ether_multi */
+     };
+
+/*
+ * Structure used by macros below to remember position when stepping through
+ * all of the ether_multi records.
+ */
+struct ether_multistep {
+       struct ether_multi  *e_enm;
+     };
+
+#include <sys/packoff.h>
+
+/*
+ * Macro for looking up the ether_multi record for a given range of Ethernet
+ * multicast addresses connected to a given arpcom structure.  If no matching
+ * record is found, "enm" returns NULL.
+ */
+#define ETHER_LOOKUP_MULTI(addrlo, addrhi, ac, enm) \
+        /* u_char addrlo[6]; */ \
+        /* u_char addrhi[6]; */ \
+        /* struct arpcom *ac; */ \
+        /* struct ether_multi *enm; */ \
+{ \
+        for ((enm) = (ac)->ac_multiaddrs; \
+            (enm) != NULL && \
+            (bcmp((enm)->enm_addrlo, (addrlo), 6) != 0 || \
+             bcmp((enm)->enm_addrhi, (addrhi), 6) != 0); \
+                (enm) = (enm)->enm_next); \
+}
+
+/*
+ * Macro to step through all of the ether_multi records, one at a time.
+ * The current position is remembered in "step", which the caller must
+ * provide.  ETHER_FIRST_MULTI(), below, must be called to initialize "step"
+ * and get the first record.  Both macros return a NULL "enm" when there
+ * are no remaining records.
+ */
+#define ETHER_NEXT_MULTI(step, enm) \
+        /* struct ether_multistep step; */  \
+        /* struct ether_multi *enm; */  \
+{ \
+        if (((enm) = (step).e_enm) != NULL) \
+                (step).e_enm = (enm)->enm_next; \
+}
+
+#define ETHER_FIRST_MULTI(step, ac, enm) \
+        /* struct ether_multistep step; */ \
+        /* struct arpcom *ac; */ \
+        /* struct ether_multi *enm; */ \
+{ \
+        (step).e_enm = (ac)->ac_multiaddrs; \
+        ETHER_NEXT_MULTI((step), (enm)); \
+}
+
+#endif
diff --git a/libs/watt32/netinet/if_fddi.h b/libs/watt32/netinet/if_fddi.h
new file mode 100644 (file)
index 0000000..f0a8c57
--- /dev/null
@@ -0,0 +1,80 @@
+/*!\file inc/netinet/if_fddi.h
+ * FDDI header definition.
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 1993
+ *      The Regents of the University of California.  All rights reserved.
+ * Copyright (c) 1995 Matt Thomas (thomas@lkg.dec.com)
+ * 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.
+ *
+ *      @(#)if_fddi.h   8.1 (Berkeley) 6/10/93
+ * $Id: if_fddi.h,v 1.3.4.1 1997/02/08 15:13:45 joerg Exp $
+ */
+
+#ifndef __NETINET_IF_FDDI_H
+#define __NETINET_IF_FDDI_H
+
+#include <sys/packon.h>
+
+/*
+ * Structure of an 100Mb/s FDDI header.
+ */
+struct  fddi_header {
+        u_char  fddi_fc;
+        u_char  fddi_dhost[6];
+        u_char  fddi_shost[6];
+};
+
+#include <sys/packoff.h>
+
+#define FDDIIPMTU               4352
+#define FDDIMTU                 4470
+#define FDDIMIN                 3
+
+#define FDDIFC_C                0x80    /* 0b10000000 */
+#define FDDIFC_L                0x40    /* 0b01000000 */
+#define FDDIFC_F                0x30    /* 0b00110000 */
+#define FDDIFC_Z                0x0F    /* 0b00001111 */
+
+#define FDDIFC_LLC_ASYNC        0x50
+#define FDDIFC_LLC_PRIO0        0
+#define FDDIFC_LLC_PRIO1        1
+#define FDDIFC_LLC_PRIO2        2
+#define FDDIFC_LLC_PRIO3        3
+#define FDDIFC_LLC_PRIO4        4
+#define FDDIFC_LLC_PRIO5        5
+#define FDDIFC_LLC_PRIO6        6
+#define FDDIFC_LLC_PRIO7        7
+#define FDDIFC_LLC_SYNC         0xd0
+#define FDDIFC_SMT              0x40
+
+#endif
diff --git a/libs/watt32/netinet/igmp.h b/libs/watt32/netinet/igmp.h
new file mode 100644 (file)
index 0000000..c0c8cdc
--- /dev/null
@@ -0,0 +1,105 @@
+/*!\file netinet/igmp.h
+ * Internet Group Managment Protocol.
+ */
+
+/*
+ * Copyright (c) 1988 Stephen Deering.
+ * Copyright (c) 1992, 1993
+ *      The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Stephen Deering of Stanford University.
+ *
+ * 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.
+ *
+ *      @(#)igmp.h      8.1 (Berkeley) 6/10/93
+ *      $Id: igmp.h,v 1.7 1996/03/14 16:59:17 fenner Exp $
+ */
+
+#ifndef __NETINET_IGMP_H
+#define __NETINET_IGMP_H
+
+/*
+ * Internet Group Management Protocol (IGMP) definitions.
+ *
+ * Written by Steve Deering, Stanford, May 1988.
+ *
+ * MULTICAST Revision: 3.5.1.2
+ */
+
+/*
+ * IGMP packet format.
+ */
+
+#include <sys/packon.h>
+
+struct igmp {
+        u_char          igmp_type;      /* version & type of IGMP message  */
+        u_char          igmp_code;      /* subtype for routing msgs        */
+        u_short         igmp_cksum;     /* IP-style checksum               */
+        struct in_addr  igmp_group;     /* group address being reported    */
+};                                      /*  (zero for queries)             */
+
+#include <sys/packoff.h>
+
+#define IGMP_MINLEN                  8
+
+/*
+ * Message types, including version number.
+ */
+#define IGMP_MEMBERSHIP_QUERY           0x11    /* membership query         */
+#define IGMP_V1_MEMBERSHIP_REPORT       0x12    /* Ver. 1 membership report */
+#define IGMP_V2_MEMBERSHIP_REPORT       0x16    /* Ver. 2 membership report */
+#define IGMP_V2_LEAVE_GROUP             0x17    /* Leave-group message      */
+
+#define IGMP_DVMRP                      0x13    /* DVMRP routing message    */
+#define IGMP_PIM                        0x14    /* PIM routing message      */
+
+#define IGMP_MTRACE_RESP                0x1e  /* traceroute resp.(to sender)*/
+#define IGMP_MTRACE                     0x1f  /* mcast traceroute messages  */
+
+#define IGMP_MAX_HOST_REPORT_DELAY   10    /* max delay for response to     */
+                                           /*  query (in seconds) according */
+                                           /*  to RFC1112                   */
+
+
+#define IGMP_TIMER_SCALE     10         /* denotes that the igmp code field */
+                                        /* specifies time in 10th of seconds*/
+
+/*
+ * The following four defininitions are for backwards compatibility.
+ * They should be removed as soon as all applications are updated to
+ * use the new constant names.
+ */
+#define IGMP_HOST_MEMBERSHIP_QUERY      IGMP_MEMBERSHIP_QUERY
+#define IGMP_HOST_MEMBERSHIP_REPORT     IGMP_V1_MEMBERSHIP_REPORT
+#define IGMP_HOST_NEW_MEMBERSHIP_REPORT IGMP_V2_MEMBERSHIP_REPORT
+#define IGMP_HOST_LEAVE_MESSAGE         IGMP_V2_LEAVE_GROUP
+
+#endif
diff --git a/libs/watt32/netinet/igmp_var.h b/libs/watt32/netinet/igmp_var.h
new file mode 100644 (file)
index 0000000..cc11994
--- /dev/null
@@ -0,0 +1,82 @@
+/*!\file netinet/igmp_var.h
+ * Internal IGMP statistics.
+ */
+
+/*
+ * Copyright (c) 1988 Stephen Deering.
+ * Copyright (c) 1992, 1993
+ *      The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Stephen Deering of Stanford University.
+ *
+ * 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.
+ *
+ *      @(#)igmp_var.h  8.1 (Berkeley) 7/19/93
+ * $Id: igmp_var.h,v 1.9 1996/03/14 16:59:18 fenner Exp $
+ */
+
+#ifndef __NETINET_IGMP_VAR_H
+#define __NETINET_IGMP_VAR_H
+
+/*
+ * Internet Group Management Protocol (IGMP),
+ * implementation-specific definitions.
+ *
+ * Written by Steve Deering, Stanford, May 1988.
+ *
+ * MULTICAST Revision: 3.5.1.3
+ */
+
+struct igmpstat {
+        u_int   igps_rcv_total;         /* total IGMP messages received */
+        u_int   igps_rcv_tooshort;      /* received with too few bytes */
+        u_int   igps_rcv_badsum;        /* received with bad checksum */
+        u_int   igps_rcv_queries;       /* received membership queries */
+        u_int   igps_rcv_badqueries;    /* received invalid queries */
+        u_int   igps_rcv_reports;       /* received membership reports */
+        u_int   igps_rcv_badreports;    /* received invalid reports */
+        u_int   igps_rcv_ourreports;    /* received reports for our groups */
+        u_int   igps_snd_reports;       /* sent membership reports */
+};
+
+/*
+ * Names for IGMP sysctl objects
+ */
+#define IGMPCTL_STATS           1       /* statistics (read-only) */
+#define IGMPCTL_MAXID           2
+
+#define IGMPCTL_NAMES { \
+        { 0, 0 }, \
+        { "stats", CTLTYPE_STRUCT }, \
+}
+
+#endif
+
+
diff --git a/libs/watt32/netinet/in.h b/libs/watt32/netinet/in.h
new file mode 100644 (file)
index 0000000..82fdf0f
--- /dev/null
@@ -0,0 +1,440 @@
+/*!\file netinet/in.h
+ * IP address, options and definitions.
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 1990, 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.
+ *
+ *      @(#)in.h        8.3 (Berkeley) 1/3/94
+ * $Id: in.h,v 1.22.2.1 1996/11/11 23:40:37 phk Exp $
+ */
+
+#ifndef __NETINET_IN_H
+#define __NETINET_IN_H
+
+#ifndef __SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+/*
+ * Constants and structures defined by the internet system,
+ * Per RFC 790, September 1981, and numerous additions.
+ */
+
+/*
+ * Protocols
+ */
+#define IPPROTO_IP              0               /* dummy for IP */
+#define IPPROTO_ICMP            1               /* control message protocol */
+#define IPPROTO_IGMP            2               /* group mgmt protocol */
+#define IPPROTO_GGP             3               /* gateway^2 (deprecated) */
+#define IPPROTO_IPIP            4               /* IP encapsulation in IP */
+#define IPPROTO_TCP             6               /* tcp */
+#define IPPROTO_EGP             8               /* exterior gateway protocol */
+#define IPPROTO_IGRP            9               /* interior gw routing protocol */
+#define IPPROTO_PUP             12              /* pup */
+#define IPPROTO_UDP             17              /* user datagram protocol */
+#define IPPROTO_IDP             22              /* xns idp */
+#define IPPROTO_TP              29              /* tp-4 w/ class negotiation */
+#define IPPROTO_XTP             36              /* eXpress Transfer Protocol */
+#define IPPROTO_RSVP            46              /* resource reservation */
+#define IPPROTO_ESP             50
+#define IPPROTO_AH              51              /* authenticate header */
+#define IPPROTO_ICMPV6          58              /* ICMP v6 */
+#define IPPROTO_NONE            59
+#define IPPROTO_EON             80              /* ISO cnlp */
+#define IPPROTO_ENCAP           98              /* encapsulation header */
+#define IPPROTO_PIM             103
+#define IPPROTO_VRRP            112
+#define IPPROTO_SCTP            132
+
+#define IPPROTO_DIVERT          254             /* divert pseudo-protocol */
+#define IPPROTO_RAW             255             /* raw IP packet */
+#define IPPROTO_MAX             256
+
+
+/*
+ * Local port number conventions:
+ *
+ * When a user does a bind(2) or connect(2) with a port number of zero,
+ * a non-conflicting local port address is chosen.
+ * The default range is IPPORT_RESERVED through
+ * IPPORT_USERRESERVED, although that is settable by sysctl.
+ *
+ * A user may set the IPPROTO_IP option IP_PORTRANGE to change this
+ * default assignment range.
+ *
+ * The value IP_PORTRANGE_DEFAULT causes the default behavior.
+ *
+ * The value IP_PORTRANGE_HIGH changes the range of candidate port numbers
+ * into the "high" range.  These are reserved for client outbound connections
+ * which do not want to be filtered by any firewalls.
+ *
+ * The value IP_PORTRANGE_LOW changes the range to the "low" are
+ * that is (by convention) restricted to privileged processes.  This
+ * convention is based on "vouchsafe" principles only.  It is only secure
+ * if you trust the remote host to restrict these ports.
+ *
+ * The default range of ports and the high range can be changed by
+ * sysctl(3).  (net.inet.ip.port{hi,low}{first,last}_auto)
+ *
+ * Changing those values has bad security implications if you are
+ * using a a stateless firewall that is allowing packets outside of that
+ * range in order to allow transparent outgoing connections.
+ *
+ * Such a firewall configuration will generally depend on the use of these
+ * default values.  If you change them, you may find your Security
+ * Administrator looking for you with a heavy object.
+ */
+
+/*
+ * Ports < IPPORT_RESERVED are reserved for
+ * privileged processes (e.g. root).         (IP_PORTRANGE_LOW)
+ * Ports > IPPORT_USERRESERVED are reserved
+ * for servers, not necessarily privileged.  (IP_PORTRANGE_DEFAULT)
+ */
+#define IPPORT_RESERVED         1024
+#define IPPORT_USERRESERVED     5000
+
+/*
+ * Default local port range to use by setting IP_PORTRANGE_HIGH
+ */
+#define IPPORT_HIFIRSTAUTO      40000
+#define IPPORT_HILASTAUTO       44999
+
+/*
+ * Scanning for a free reserved port return a value below IPPORT_RESERVED,
+ * but higher than IPPORT_RESERVEDSTART.  Traditionally the start value was
+ * 512, but that conflicts with some well-known-services that firewalls may
+ * have a fit if we use.
+ */
+#define IPPORT_RESERVEDSTART    600
+
+
+/*
+ * Internet address (a structure for historical reasons)
+ */
+struct in_addr {
+       u_long s_addr;
+     };
+/*
+ *  For IPv6 from RFC2133
+ */
+struct in6_addr {
+       u_int8_t  s6_addr[16];
+     };
+
+/*
+ * Definitions of bits in internet address integers.
+ * On subnets, the decomposition of addresses to host and net parts
+ * is done according to subnet mask, not the masks here.
+ */
+#define IN_CLASSA(i)            (((long)(i) & 0x80000000) == 0)
+#define IN_CLASSA_NET           0xff000000
+#define IN_CLASSA_NSHIFT        24
+#define IN_CLASSA_HOST          0x00ffffff
+#define IN_CLASSA_MAX           128
+
+#define IN_CLASSB(i)            (((long)(i) & 0xC0000000) == 0x80000000)
+#define IN_CLASSB_NET           0xffff0000
+#define IN_CLASSB_NSHIFT        16
+#define IN_CLASSB_HOST          0x0000ffff
+#define IN_CLASSB_MAX           65536
+
+#define IN_CLASSC(i)            (((long)(i) & 0xE0000000) == 0xC0000000)
+#define IN_CLASSC_NET           0xffffff00
+#define IN_CLASSC_NSHIFT        8
+#define IN_CLASSC_HOST          0x000000ff
+
+#define IN_CLASSD(i)            (((long)(i) & 0xF0000000) == 0xE0000000)
+#define IN_CLASSD_NET           0xf0000000      /* These ones aren't really */
+#define IN_CLASSD_NSHIFT        28              /* net and host fields, but */
+#define IN_CLASSD_HOST          0x0fffffff      /* routing needn't know.    */
+#define IN_MULTICAST(i)         IN_CLASSD(i)
+
+#define IN_EXPERIMENTAL(i)      (((long)(i) & 0xF0000000) == 0xF0000000)
+#define IN_BADCLASS(i)          (((long)(i) & 0xF0000000) == 0xF0000000)
+
+#define INADDR_ANY              (u_long)0x00000000
+#define INADDR_BROADCAST        (u_long)0xFFFFFFFF      /* must be masked */
+#define INADDR_LOOPBACK         (u_long)0x7F000001      /* 127.0.0.1 */
+#define INADDR_NONE             0xFFFFFFFF              /* -1 return */
+
+#define INADDR_UNSPEC_GROUP     (u_long)0xE0000000      /* 224.0.0.0 */
+#define INADDR_ALLHOSTS_GROUP   (u_long)0xE0000001      /* 224.0.0.1 */
+#define INADDR_ALLRTRS_GROUP    (u_long)0xE0000002      /* 224.0.0.2 */
+#define INADDR_MAX_LOCAL_GROUP  (u_long)0xE00000FF      /* 224.0.0.255 */
+
+#define IN_LOOPBACKNET          127                     /* official! */
+
+W32_DATA const struct in6_addr in6addr_any;             /* :: */
+W32_DATA const struct in6_addr in6addr_loopback;        /* ::1 */
+
+#define IN6ADDR_ANY_INIT      { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }
+#define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } }
+
+#define INET_ADDRSTRLEN       16
+#define INET6_ADDRSTRLEN      46
+
+
+/*
+ * Socket address, internet style.
+ */
+struct sockaddr_in {
+       u_short        sin_family;
+       u_short        sin_port;
+       struct in_addr sin_addr;
+       char           sin_zero[8];
+     };
+
+struct sockaddr_in6 {
+       u_int16_t       sin6_family;
+       u_int16_t       sin6_port;
+       u_int32_t       sin6_flowinfo;
+       struct in6_addr sin6_addr;
+       u_int32_t       sin6_scope_id; /* IPv6 scope-id */
+     };
+
+/*
+ * Stolen from winsock2.h (hope this is portable)
+ * Portable IPv6/IPv4 version of sockaddr.
+ * Uses padding to force 8 byte alignment
+ * and maximum size of 128 bytes
+ */
+struct sockaddr_storage {
+       u_short  ss_family;
+       u_short  ss_len;        /* !! added for BSD progs, gv Nov-2003 */
+       char   __ss_pad1[6];              /* pad to 8 */
+       long   __ss_align1, __ssalign2;   /* force alignment */
+       char   __ss_pad2[110];            /* pad to 128 */
+     };
+
+
+/* IPv6 multicast request. */
+struct ipv6_mreq {
+       /* IPv6 multicast address of group */
+       struct in6_addr ipv6mr_multiaddr;
+
+       /* local interface */
+       unsigned long ipv6mr_interface;
+     };
+
+/*
+ * Structure used to describe IP options.
+ * Used to store options internally, to pass them to a process,
+ * or to restore options retrieved earlier.
+ * The ip_dst is used for the first-hop gateway when using a source route
+ * (this gets put into the header proper).
+ */
+struct ip_opts {
+       struct in_addr ip_dst;     /* first hop, 0 w/o src rt */
+       char   IP_opts[40];        /* actually variable in size */
+     };
+
+/*
+ * Options for use with [gs]etsockopt at the IP level.
+ * First word of comment is data type; bool is stored in int.
+ */
+#define IP_OPTIONS              1    /* buf/ip_opts; set/get IP options */
+#define IP_HDRINCL              2    /* int; header is included with data */
+#define IP_TOS                  3    /* int; IP type of service and preced. */
+#define IP_TTL                  4    /* int; IP time to live */
+#define IP_RECVOPTS             5    /* bool; receive all IP opts w/dgram */
+#define IP_RECVRETOPTS          6    /* bool; receive IP opts for response */
+#define IP_RECVDSTADDR          7    /* bool; receive IP dst addr w/dgram */
+#define IP_RETOPTS              8    /* ip_opts; set/get IP options */
+#define IP_MULTICAST_IF         9    /* u_char; set/get IP multicast i/f  */
+#define IP_MULTICAST_TTL        10   /* u_char; set/get IP multicast ttl */
+#define IP_MULTICAST_LOOP       11   /* u_char; set/get IP multicast loopback */
+#define IP_ADD_MEMBERSHIP       12   /* ip_mreq; add an IP group membership */
+#define IP_DROP_MEMBERSHIP      13   /* ip_mreq; drop an IP group membership */
+#define IP_MULTICAST_VIF        14   /* set/get IP mcast virt. iface */
+#define IP_RSVP_ON              15   /* enable RSVP in kernel */
+#define IP_RSVP_OFF             16   /* disable RSVP in kernel */
+#define IP_RSVP_VIF_ON          17   /* set RSVP per-vif socket */
+#define IP_RSVP_VIF_OFF         18   /* unset RSVP per-vif socket */
+#define IP_PORTRANGE            19   /* int; range to choose for unspec port */
+#define IP_RECVIF               20   /* bool; receive reception if w/dgram */
+
+#define IP_FW_ADD               50   /* add a firewall rule to chain */
+#define IP_FW_DEL               51   /* delete a firewall rule from chain */
+#define IP_FW_FLUSH             52   /* flush firewall rule chain */
+#define IP_FW_ZERO              53   /* clear single/all firewall counter(s) */
+#define IP_FW_GET               54   /* get entire firewall rule chain */
+#define IP_NAT                  55   /* set/get NAT opts */
+
+/*
+ * Defaults and limits for options
+ */
+#define IP_DEFAULT_MULTICAST_TTL  1     /* normally limit m'casts to 1 hop  */
+#define IP_DEFAULT_MULTICAST_LOOP 1     /* normally hear sends if a member  */
+#define IP_MAX_MEMBERSHIPS      20      /* per socket */
+
+/*
+ * Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP.
+ */
+struct ip_mreq {
+        struct  in_addr imr_multiaddr;  /* IP multicast address of group */
+        struct  in_addr imr_interface;  /* local IP address of interface */
+};
+
+/*
+ * Argument for IP_PORTRANGE:
+ * - which range to search when port is unspecified at bind() or connect()
+ */
+#define IP_PORTRANGE_DEFAULT    0       /* default range */
+#define IP_PORTRANGE_HIGH       1       /* "high" - request firewall bypass */
+#define IP_PORTRANGE_LOW        2       /* "low" - vouchsafe security */
+
+/*
+ * Definitions for inet sysctl operations.
+ *
+ * Third level is protocol number.
+ * Fourth level is desired variable within that protocol.
+ */
+#define IPPROTO_MAXID   (IPPROTO_IDP + 1)       /* don't list to IPPROTO_MAX */
+
+#define CTL_IPPROTO_NAMES { \
+        { "ip", CTLTYPE_NODE }, \
+        { "icmp", CTLTYPE_NODE }, \
+        { "igmp", CTLTYPE_NODE }, \
+        { "ggp", CTLTYPE_NODE }, \
+        { 0, 0 }, \
+        { 0, 0 }, \
+        { "tcp", CTLTYPE_NODE }, \
+        { 0, 0 }, \
+        { "egp", CTLTYPE_NODE }, \
+        { 0, 0 }, \
+        { 0, 0 }, \
+        { 0, 0 }, \
+        { "pup", CTLTYPE_NODE }, \
+        { 0, 0 }, \
+        { 0, 0 }, \
+        { 0, 0 }, \
+        { 0, 0 }, \
+        { "udp", CTLTYPE_NODE }, \
+        { 0, 0 }, \
+        { 0, 0 }, \
+        { 0, 0 }, \
+        { 0, 0 }, \
+        { "idp", CTLTYPE_NODE }, \
+}
+
+/*
+ * Names for IP sysctl objects
+ */
+#define IPCTL_FORWARDING        1       /* act as router */
+#define IPCTL_SENDREDIRECTS     2       /* may send redirects when forwarding */
+#define IPCTL_DEFTTL            3       /* default TTL */
+#define IPCTL_DEFMTU            4       /* default MTU */
+#define IPCTL_RTEXPIRE          5       /* cloned route expiration time */
+#define IPCTL_RTMINEXPIRE       6       /* min value for expiration time */
+#define IPCTL_RTMAXCACHE        7       /* trigger level for dynamic expire */
+#define IPCTL_SOURCEROUTE       8       /* may perform source routes */
+#define IPCTL_DIRECTEDBROADCAST 9       /* may re-broadcast received packets */
+#define IPCTL_INTRQMAXLEN       10      /* max length of netisr queue */
+#define IPCTL_INTRQDROPS        11      /* number of netisr q drops */
+#define IPCTL_MAXID             12
+
+#define IPCTL_NAMES { \
+        { 0, 0 }, \
+        { "forwarding", CTLTYPE_INT }, \
+        { "redirect", CTLTYPE_INT }, \
+        { "ttl", CTLTYPE_INT }, \
+        { "mtu", CTLTYPE_INT }, \
+        { "rtexpire", CTLTYPE_INT }, \
+        { "rtminexpire", CTLTYPE_INT }, \
+        { "rtmaxcache", CTLTYPE_INT }, \
+        { "sourceroute", CTLTYPE_INT }, \
+        { "directed-broadcast", CTLTYPE_INT }, \
+        { "intr-queue-maxlen", CTLTYPE_INT }, \
+        { "intr-queue-drops", CTLTYPE_INT }, \
+}
+
+
+/*
+ * IPv6 address macros
+ */
+#define IN6_IS_ADDR_UNSPECIFIED(a)        \
+           (((u_int32_t*)(a))[0] == 0   \
+         && ((u_int32_t*)(a))[1] == 0   \
+         && ((u_int32_t*)(a))[2] == 0   \
+         && ((u_int32_t*)(a))[3] == 0)
+
+#define IN6_IS_ADDR_LOOPBACK(a)           \
+           (((u_int32_t*)(a))[0] == 0   \
+         && ((u_int32_t*)(a))[1] == 0   \
+         && ((u_int32_t*)(a))[2] == 0   \
+         && ((u_int32_t*)(a))[3] == htonl (1))
+
+#define IN6_IS_ADDR_MULTICAST(a) (((u_int8_t*) (a))[0] == 0xff)
+
+#define IN6_IS_ADDR_LINKLOCAL(a) \
+        ((((u_int32_t*)(a))[0] & htonl(0xffc00000)) == htonl(0xfe800000))
+
+#define IN6_IS_ADDR_SITELOCAL(a) \
+        ((((u_int32_t*)(a))[0] & htonl(0xffc00000)) == htonl(0xfec00000))
+
+#define IN6_IS_ADDR_V4MAPPED(a)         \
+           ((((u_int32_t*)(a))[0] == 0) \
+         && (((u_int32_t*)(a))[1] == 0) \
+         && (((u_int32_t*)(a))[2] == htonl(0xffff)))
+
+#define IN6_IS_ADDR_V4COMPAT(a)         \
+           ((((u_int32_t*)(a))[0] == 0) \
+         && (((u_int32_t*)(a))[1] == 0) \
+         && (((u_int32_t*)(a))[2] == 0) \
+         && (ntohl(((u_int32_t*)(a))[3]) > 1))
+
+#define IN6_ARE_ADDR_EQUAL(a,b) \
+           ((((u_int32_t*)(a))[0] == ((u_int32_t*)(b))[0])  \
+         && (((u_int32_t*)(a))[1] == ((u_int32_t*)(b))[1])  \
+         && (((u_int32_t*)(a))[2] == ((u_int32_t*)(b))[2])  \
+         && (((u_int32_t*)(a))[3] == ((u_int32_t*)(b))[3]))
+
+#define IN6_IS_ADDR_MC_NODELOCAL(a) \
+        (IN6_IS_ADDR_MULTICAST(a) && ((((u_int8_t*)(a))[1] & 0xf) == 0x1))
+
+#define IN6_IS_ADDR_MC_LINKLOCAL(a) \
+        (IN6_IS_ADDR_MULTICAST(a) && ((((u_int8_t*)(a))[1] & 0xf) == 0x2))
+
+#define IN6_IS_ADDR_MC_SITELOCAL(a) \
+        (IN6_IS_ADDR_MULTICAST(a) && ((((u_int8_t*)(a))[1] & 0xf) == 0x5))
+
+#define IN6_IS_ADDR_MC_ORGLOCAL(a)  \
+        (IN6_IS_ADDR_MULTICAST(a) && ((((u_int8_t*)(a))[1] & 0xf) == 0x8))
+
+#define IN6_IS_ADDR_MC_GLOBAL(a)    \
+        (IN6_IS_ADDR_MULTICAST(a) && ((((u_int8_t*)(a))[1] & 0xf) == 0xe))
+
+#endif /* __NETINET_IN_H */
+
diff --git a/libs/watt32/netinet/in_pcb.h b/libs/watt32/netinet/in_pcb.h
new file mode 100644 (file)
index 0000000..c5c28cc
--- /dev/null
@@ -0,0 +1,100 @@
+/*!\file netinet/in_pcb.h
+ * Internal IP structures.
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 1990, 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.
+ *
+ *      @(#)in_pcb.h    8.1 (Berkeley) 6/10/93
+ * $Id: in_pcb.h,v 1.14.2.2 1997/03/03 09:24:37 davidg Exp $
+ */
+
+#ifndef __NETINET_IN_PCB_H
+#define __NETINET_IN_PCB_H
+
+#include <sys/queue.h>
+
+/*
+ * Common structure pcb for internet protocol implementation.
+ * Here are stored pointers to local and foreign host table
+ * entries, local and foreign socket numbers, and pointers
+ * up (to a socket structure) and down (to a protocol-specific)
+ * control block.
+ */
+LIST_HEAD(inpcbhead, inpcb);
+
+struct inpcb {
+        LIST_ENTRY(inpcb) inp_list;    /* list for all PCBs of this proto */
+        LIST_ENTRY(inpcb) inp_hash;    /* hash list */
+        struct  inpcbinfo *inp_pcbinfo;
+        struct  in_addr inp_faddr;      /* foreign host table entry */
+        u_short inp_fport;              /* foreign port */
+        struct  in_addr inp_laddr;      /* local host table entry */
+        u_short inp_lport;              /* local port */
+        struct  socket *inp_socket;     /* back pointer to socket */
+        caddr_t inp_ppcb;               /* pointer to per-protocol pcb */
+        struct  route inp_route;        /* placeholder for routing entry */
+        int     inp_flags;              /* generic IP/datagram flags */
+        struct  ip inp_ip;              /* header prototype; should have more */
+        struct  mbuf *inp_options;      /* IP options */
+        struct  ip_moptions *inp_moptions; /* IP multicast options */
+};
+
+struct inpcbinfo {
+        struct inpcbhead *listhead;
+        struct inpcbhead *hashbase;
+        unsigned long hashmask;
+        unsigned short lastport;
+        unsigned short lastlow;
+        unsigned short lasthi;
+};
+
+#define INP_PCBHASH(faddr, lport, fport, mask) \
+        (((faddr) ^ ((faddr) >> 16) ^ (lport) ^ (fport)) & (mask))
+
+/* flags in inp_flags: */
+#define INP_RECVOPTS            0x01    /* receive incoming IP options */
+#define INP_RECVRETOPTS         0x02    /* receive IP options for reply */
+#define INP_RECVDSTADDR         0x04    /* receive IP dst address */
+#define INP_HDRINCL             0x08    /* user supplies entire IP header */
+#define INP_HIGHPORT            0x10    /* user wants "high" port binding */
+#define INP_LOWPORT             0x20    /* user wants "low" port binding */
+#define INP_ANONPORT            0x40    /* port chosen for user */
+#define INP_RECVIF              0x80    /* receive incoming interface */
+#define INP_CONTROLOPTS         (INP_RECVOPTS|INP_RECVRETOPTS|INP_RECVDSTADDR|\
+                                        INP_RECVIF)
+
+#define INPLOOKUP_WILDCARD      1
+
+#define sotoinpcb(so)   ((struct inpcb *)(so)->so_pcb)
+
+#endif
diff --git a/libs/watt32/netinet/in_systm.h b/libs/watt32/netinet/in_systm.h
new file mode 100644 (file)
index 0000000..ba96c6e
--- /dev/null
@@ -0,0 +1,62 @@
+/*!\file netinet/in_systm.h
+ * Various typedefs.
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 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.
+ *
+ *      @(#)in_systm.h  8.1 (Berkeley) 6/10/93
+ * $Id: in_systm.h,v 1.3 1994/08/21 05:27:29 paul Exp $
+ */
+
+#ifndef __NETINET_IN_SYSTM_H
+#define __NETINET_IN_SYSTM_H
+
+/*
+ * Miscellaneous internetwork
+ * definitions for kernel.
+ */
+
+/*
+ * Network types.
+ *
+ * Internally the system keeps counters in the headers with the bytes
+ * swapped so that VAX instructions will work on them.  It reverses
+ * the bytes before transmission at each protocol level.  The n_ types
+ * represent the types with the bytes in ``high-ender'' order.
+ */
+typedef u_short n_short;                /* short as received from the net */
+typedef u_long  n_long;                 /* long as received from the net */
+
+typedef u_long  n_time;                 /* ms since 00:00 GMT, byte rev */
+
+#endif
diff --git a/libs/watt32/netinet/in_var.h b/libs/watt32/netinet/in_var.h
new file mode 100644 (file)
index 0000000..5a1dc7a
--- /dev/null
@@ -0,0 +1,118 @@
+/*!\file netinet/in_var.h
+ * IP interface address.
+ */
+
+/*
+ * Copyright (c) 1985, 1986, 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.
+ *
+ *      @(#)in_var.h    8.2 (Berkeley) 1/9/95
+ *      $Id: in_var.h,v 1.17 1996/03/14 16:59:19 fenner Exp $
+ */
+
+#ifndef __NETINET_IN_VAR_H
+#define __NETINET_IN_VAR_H
+
+#include <sys/queue.h>
+
+/*
+ * Interface address, Internet version.  One of these structures
+ * is allocated for each interface with an Internet address.
+ * The ifaddr structure contains the protocol-independent part
+ * of the structure and is assumed to be first.
+ */
+struct in_ifaddr {
+        struct  ifaddr ia_ifa;          /* protocol-independent info */
+#define ia_ifp          ia_ifa.ifa_ifp
+#define ia_flags        ia_ifa.ifa_flags
+                                        /* ia_{,sub}net{,mask} in host order */
+        u_long  ia_net;                 /* network number of interface */
+        u_long  ia_netmask;             /* mask of net part */
+        u_long  ia_subnet;              /* subnet number, including net */
+        u_long  ia_subnetmask;          /* mask of subnet part */
+        struct  in_addr ia_netbroadcast; /* to recognize net broadcasts */
+        struct  in_ifaddr *ia_next;     /* next in list of internet addresses */
+        struct  sockaddr_in ia_addr;    /* reserve space for interface name */
+        struct  sockaddr_in ia_dstaddr; /* reserve space for broadcast addr */
+#define ia_broadaddr    ia_dstaddr
+        struct  sockaddr_in ia_sockmask; /* reserve space for general netmask */
+        LIST_HEAD(in_multihead, in_multi) ia_multiaddrs;
+                                        /* list of multicast addresses */
+};
+
+struct  in_aliasreq {
+        char    ifra_name[IFNAMSIZ];            /* if name, e.g. "en0" */
+        struct  sockaddr_in ifra_addr;
+        struct  sockaddr_in ifra_broadaddr;
+#define ifra_dstaddr ifra_broadaddr
+        struct  sockaddr_in ifra_mask;
+};
+/*
+ * Given a pointer to an in_ifaddr (ifaddr),
+ * return a pointer to the addr as a sockaddr_in.
+ */
+#define IA_SIN(ia)    (&(((struct in_ifaddr *)(ia))->ia_addr))
+#define IA_DSTSIN(ia) (&(((struct in_ifaddr *)(ia))->ia_dstaddr))
+
+#define IN_LNAOF(in, ifa) \
+        ((ntohl((in).s_addr) & ~((struct in_ifaddr *)(ifa)->ia_subnetmask))
+
+
+/*
+ * This information should be part of the ifnet structure but we don't wish
+ * to change that - as it might break a number of things
+ */
+
+struct router_info {
+        struct ifnet *rti_ifp;
+        int    rti_type; /* type of router which is querier on this interface */
+        int    rti_time; /* # of slow timeouts since last old query */
+        struct router_info *rti_next;
+};
+
+/*
+ * Internet multicast address structure.  There is one of these for each IP
+ * multicast group to which this host belongs on a given network interface.
+ * They are kept in a linked list, rooted in the interface's in_ifaddr
+ * structure.
+ */
+struct in_multi {
+        LIST_ENTRY(in_multi) inm_entry; /* list glue */
+        struct  in_addr inm_addr;       /* IP multicast address */
+        struct  ifnet *inm_ifp;         /* back pointer to ifnet */
+        struct  in_ifaddr *inm_ia;      /* back pointer to in_ifaddr */
+        u_int   inm_refcount;           /* no. membership claims by sockets */
+        u_int   inm_timer;              /* IGMP membership report timer */
+        u_int   inm_state;              /*  state of the membership */
+        struct  router_info *inm_rti;   /* router info*/
+};
+
+#endif
diff --git a/libs/watt32/netinet/ip.h b/libs/watt32/netinet/ip.h
new file mode 100644 (file)
index 0000000..f310935
--- /dev/null
@@ -0,0 +1,195 @@
+/*!\file netinet/ip.h
+ * IPv4 header and options.
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 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.
+ *
+ *      @(#)ip.h        8.2 (Berkeley) 6/1/94
+ *      $Id: ip.h,v 1.10 1996/10/23 18:35:49 wollman Exp $
+ */
+
+#ifndef __NETINET_IP_H
+#define __NETINET_IP_H
+
+#ifndef __NETINET_IN_SYSTM_H
+#include <netinet/in_systm.h>
+#endif
+
+#if defined(__TURBOC__) || defined(__BORLANDC__)
+#pragma warn -bbf-   /* "Bitfields must be signed or unsigned int" warning */
+#endif
+
+/*
+ * Definitions for internet protocol version 4.
+ * Per RFC 791, September 1981.
+ */
+#define IPVERSION       4
+
+#include <sys/packon.h>
+
+/*
+ * Structure of an internet header, naked of options.
+ *
+ * We declare ip_len and ip_off to be short, rather than u_short
+ * pragmatically since otherwise unsigned comparisons can result
+ * against negative integers quite easily, and fail in subtle ways.
+ */
+struct ip {
+#ifdef _IP_VHL
+        u_char  ip_vhl;                 /* version << 4 | header length >> 2 */
+#else
+        u_char  ip_hl:4;                /* header length */
+        u_char  ip_v:4;                 /* version */
+#endif
+        u_char  ip_tos;                 /* type of service */
+        u_short ip_len;                 /* total length */
+        u_short ip_id;                  /* identification */
+        u_short ip_off;                 /* fragment offset field */
+#define IP_DF 0x4000                    /* dont fragment flag */
+#define IP_MF 0x2000                    /* more fragments flag */
+#define IP_OFFMASK 0x1FFF               /* mask for fragmenting bits */
+        u_char  ip_ttl;                 /* time to live */
+        u_char  ip_p;                   /* protocol */
+        u_short ip_sum;                 /* checksum */
+        struct  in_addr ip_src,ip_dst;  /* source and dest address */
+};
+
+#ifdef _IP_VHL
+#define IP_MAKE_VHL(v,hl)   ((v) << 4 | (hl))
+#define IP_VHL_HL(vhl)      ((vhl) & 0x0f)
+#define IP_VHL_V(vhl)       ((vhl) >> 4)
+#define IP_VHL_BORING       0x45
+#endif
+
+#define IP_MAXPACKET        65535       /* maximum packet size */
+
+/*
+ * Definitions for IP type of service (ip_tos)
+ */
+#define IPTOS_LOWDELAY          0x10
+#define IPTOS_THROUGHPUT        0x08
+#define IPTOS_RELIABILITY       0x04
+#define IPTOS_MINCOST           0x02
+
+/*
+ * Definitions for IP precedence (also in ip_tos) (hopefully unused)
+ */
+#define IPTOS_PREC_NETCONTROL           0xe0
+#define IPTOS_PREC_INTERNETCONTROL      0xc0
+#define IPTOS_PREC_CRITIC_ECP           0xa0
+#define IPTOS_PREC_FLASHOVERRIDE        0x80
+#define IPTOS_PREC_FLASH                0x60
+#define IPTOS_PREC_IMMEDIATE            0x40
+#define IPTOS_PREC_PRIORITY             0x20
+#define IPTOS_PREC_ROUTINE              0x00
+
+/*
+ * Definitions for options.
+ */
+#define IPOPT_COPIED(o)         ((o)&0x80)
+#define IPOPT_CLASS(o)          ((o)&0x60)
+#define IPOPT_NUMBER(o)         ((o)&0x1f)
+
+#define IPOPT_CONTROL           0x00
+#define IPOPT_RESERVED1         0x20
+#define IPOPT_DEBMEAS           0x40
+#define IPOPT_RESERVED2         0x60
+
+#define IPOPT_EOL               0               /* end of option list */
+#define IPOPT_NOP               1               /* no operation */
+
+#define IPOPT_RR                7               /* record packet route */
+#define IPOPT_TS                68              /* timestamp */
+#define IPOPT_SECURITY          130             /* provide s,c,h,tcc */
+#define IPOPT_LSRR              131             /* loose source route */
+#define IPOPT_SATID             136             /* satnet id */
+#define IPOPT_SSRR              137             /* strict source route */
+#define IPOPT_RA                148             /* router alert */
+
+/*
+ * Offsets to fields in options other than EOL and NOP.
+ */
+#define IPOPT_OPTVAL            0               /* option ID */
+#define IPOPT_OLEN              1               /* option length */
+#define IPOPT_OFFSET            2               /* offset within option */
+#define IPOPT_MINOFF            4               /* min value of above */
+
+/*
+ * Time stamp option structure.
+ */
+struct  ip_timestamp {
+        u_char  ipt_code;               /* IPOPT_TS */
+        u_char  ipt_len;                /* size of structure (variable) */
+        u_char  ipt_ptr;                /* index of current entry */
+        u_char  ipt_flg:4;              /* flags, see below */
+        u_char  ipt_oflw:4;             /* overflow counter */
+        union ipt_timestamp {
+                n_long  ipt_time[1];
+                struct  ipt_ta {
+                        struct in_addr ipt_addr;
+                        n_long ipt_time;
+                } ipt_ta[1];
+        } ipt_timestamp;
+};
+
+#include <sys/packoff.h>
+
+/* flag bits for ipt_flg */
+#define IPOPT_TS_TSONLY         0               /* timestamps only */
+#define IPOPT_TS_TSANDADDR      1               /* timestamps and addresses */
+#define IPOPT_TS_PRESPEC        3               /* specified modules only */
+
+/* bits for security (not byte swapped) */
+#define IPOPT_SECUR_UNCLASS     0x0000
+#define IPOPT_SECUR_CONFID      0xf135
+#define IPOPT_SECUR_EFTO        0x789a
+#define IPOPT_SECUR_MMMM        0xbc4d
+#define IPOPT_SECUR_RESTR       0xaf13
+#define IPOPT_SECUR_SECRET      0xd788
+#define IPOPT_SECUR_TOPSECRET   0x6bc5
+
+/*
+ * Internet implementation parameters.
+ */
+#define MAXTTL          255             /* maximum time to live (seconds) */
+#define IPDEFTTL        64              /* default ttl, from RFC 1340 */
+#define IPFRAGTTL       60              /* time to live for frags, slowhz */
+#define IPTTLDEC        1               /* subtracted when forwarding */
+
+#define IP_MSS          576             /* default maximum segment size */
+
+#if defined(__TURBOC__) || defined(__BORLANDC__)
+#pragma warn -bbf.
+#endif
+
+#endif
diff --git a/libs/watt32/netinet/ip6.h b/libs/watt32/netinet/ip6.h
new file mode 100644 (file)
index 0000000..5bc7ff0
--- /dev/null
@@ -0,0 +1,321 @@
+/*!\file netinet/ip6.h
+ * IPv6 definitions.
+ */
+
+/*      $FreeBSD: src/sys/netinet/ip6.h,v 1.5 2001/06/11 12:39:00 ume Exp $     */
+/*      $KAME: ip6.h,v 1.18 2001/03/29 05:34:30 itojun Exp $    */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 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.
+ *
+ *      @(#)ip.h        8.1 (Berkeley) 6/10/93
+ */
+
+#ifndef _NETINET_IP6_H_
+#define _NETINET_IP6_H_
+
+/*
+ * Definition for internet protocol version 6.
+ * RFC 2460
+ */
+
+#ifndef __SYS_WTYPES_H
+#include <sys/wtypes.h>
+#endif
+
+#include <sys/packon.h>
+
+struct ip6_hdr {
+       union {
+         struct ip6_hdrctl {
+           u_int32_t ip6_un1_flow; /* 20 bits of flow-ID */
+           u_int16_t ip6_un1_plen; /* payload length */
+           u_int8_t  ip6_un1_nxt;  /* next header */
+           u_int8_t  ip6_un1_hlim; /* hop limit */
+         } ip6_un1;
+         u_int8_t    ip6_un2_vfc;  /* 4 bits version, top 4 bits class */
+       } ip6_ctlun;
+       struct in6_addr ip6_src;    /* source address */
+       struct in6_addr ip6_dst;    /* destination address */
+     };
+
+#define ip6_vfc         ip6_ctlun.ip6_un2_vfc
+#define ip6_flow        ip6_ctlun.ip6_un1.ip6_un1_flow
+#define ip6_plen        ip6_ctlun.ip6_un1.ip6_un1_plen
+#define ip6_nxt         ip6_ctlun.ip6_un1.ip6_un1_nxt
+#define ip6_hlim        ip6_ctlun.ip6_un1.ip6_un1_hlim
+#define ip6_hops        ip6_ctlun.ip6_un1.ip6_un1_hlim
+
+#define IPV6_VERSION            0x60
+#define IPV6_VERSION_MASK       0xf0
+
+#if BYTE_ORDER == BIG_ENDIAN
+#define IPV6_FLOWINFO_MASK      0x0fffffff      /* flow info (28 bits) */
+#define IPV6_FLOWLABEL_MASK     0x000fffff      /* flow label (20 bits) */
+#else
+#if BYTE_ORDER == LITTLE_ENDIAN
+#define IPV6_FLOWINFO_MASK      0xffffff0f      /* flow info (28 bits) */
+#define IPV6_FLOWLABEL_MASK     0xffff0f00      /* flow label (20 bits) */
+#endif /* LITTLE_ENDIAN */
+#endif
+
+#if 1
+/* ECN bits proposed by Sally Floyd */
+#define IP6TOS_CE               0x01    /* congestion experienced */
+#define IP6TOS_ECT              0x02    /* ECN-capable transport */
+#endif
+
+/*
+ * Extension Headers
+ */
+
+struct ip6_ext {
+       u_int8_t ip6e_nxt;
+       u_int8_t ip6e_len;
+     };
+
+/* Hop-by-Hop options header */
+/* XXX should we pad it to force alignment on an 8-byte boundary? */
+struct ip6_hbh {
+       u_int8_t ip6h_nxt;      /* next header */
+       u_int8_t ip6h_len;      /* length in units of 8 octets */
+       /* followed by options */
+     };
+
+/* Destination options header */
+/* XXX should we pad it to force alignment on an 8-byte boundary? */
+struct ip6_dest {
+       u_int8_t ip6d_nxt;      /* next header */
+       u_int8_t ip6d_len;      /* length in units of 8 octets */
+       /* followed by options */
+     };
+
+/* Option types and related macros */
+#define IP6OPT_PAD1             0x00    /* 00 0 00000 */
+#define IP6OPT_PADN             0x01    /* 00 0 00001 */
+#define IP6OPT_JUMBO            0xC2    /* 11 0 00010 = 194 */
+#define IP6OPT_NSAP_ADDR        0xC3    /* 11 0 00011 */
+#define IP6OPT_TUNNEL_LIMIT     0x04    /* 00 0 00100 */
+#define IP6OPT_RTALERT          0x05    /* 00 0 00101 (KAME definition) */
+
+#define IP6OPT_RTALERT_LEN      4
+#define IP6OPT_RTALERT_MLD      0       /* Datagram contains an MLD message */
+#define IP6OPT_RTALERT_RSVP     1       /* Datagram contains an RSVP message */
+#define IP6OPT_RTALERT_ACTNET   2       /* contains an Active Networks msg */
+#define IP6OPT_MINLEN           2
+
+#define IP6OPT_BINDING_UPDATE   0xc6    /* 11 0 00110 */
+#define IP6OPT_BINDING_ACK      0x07    /* 00 0 00111 */
+#define IP6OPT_BINDING_REQ      0x08    /* 00 0 01000 */
+#define IP6OPT_HOME_ADDRESS     0xc9    /* 11 0 01001 */
+#define IP6OPT_EID              0x8a    /* 10 0 01010 */
+
+#define IP6OPT_TYPE(o)          ((o) & 0xC0)
+#define IP6OPT_TYPE_SKIP        0x00
+#define IP6OPT_TYPE_DISCARD     0x40
+#define IP6OPT_TYPE_FORCEICMP   0x80
+#define IP6OPT_TYPE_ICMP        0xC0
+
+#define IP6OPT_MUTABLE          0x20
+
+#define IP6OPT_JUMBO_LEN        6
+
+/* Routing header */
+struct ip6_rthdr {
+       u_int8_t  ip6r_nxt;     /* next header */
+       u_int8_t  ip6r_len;     /* length in units of 8 octets */
+       u_int8_t  ip6r_type;    /* routing type */
+       u_int8_t  ip6r_segleft; /* segments left */
+       /* followed by routing type specific data */
+     };
+
+/* Type 0 Routing header */
+struct ip6_rthdr0 {
+       u_int8_t  ip6r0_nxt;            /* next header */
+       u_int8_t  ip6r0_len;            /* length in units of 8 octets */
+       u_int8_t  ip6r0_type;           /* always zero */
+       u_int8_t  ip6r0_segleft;        /* segments left */
+       u_int8_t  ip6r0_reserved;       /* reserved field */
+       u_int8_t  ip6r0_slmap[3];       /* strict/loose bit map */
+       struct in6_addr  ip6r0_addr[1]; /* up to 23 addresses */
+     };
+
+/* Fragment header */
+struct ip6_frag {
+       u_int8_t  ip6f_nxt;             /* next header */
+       u_int8_t  ip6f_reserved;        /* reserved field */
+       u_int16_t ip6f_offlg;           /* offset, reserved, and flag */
+       u_int32_t ip6f_ident;           /* identification */
+     };
+
+#include <sys/packoff.h>
+
+#if BYTE_ORDER == BIG_ENDIAN
+#define IP6F_OFF_MASK           0xfff8  /* mask out offset from _offlg */
+#define IP6F_RESERVED_MASK      0x0006  /* reserved bits in ip6f_offlg */
+#define IP6F_MORE_FRAG          0x0001  /* more-fragments flag */
+#else /* BYTE_ORDER == LITTLE_ENDIAN */
+#define IP6F_OFF_MASK           0xf8ff  /* mask out offset from _offlg */
+#define IP6F_RESERVED_MASK      0x0600  /* reserved bits in ip6f_offlg */
+#define IP6F_MORE_FRAG          0x0100  /* more-fragments flag */
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
+
+/*
+ * Internet implementation parameters.
+ */
+#define IPV6_MAXHLIM    255     /* maximun hoplimit */
+#define IPV6_DEFHLIM    64      /* default hlim */
+#define IPV6_FRAGTTL    120     /* ttl for fragment packets, in slowtimo tick */
+#define IPV6_HLIMDEC    1       /* subtracted when forwaeding */
+
+#define IPV6_MMTU       1280    /* minimal MTU and reassembly. 1024 + 256 */
+#define IPV6_MAXPACKET  65535   /* ip6 max packet size without Jumbo payload*/
+
+#ifdef _KERNEL
+/*
+ * IP6_EXTHDR_CHECK ensures that region between the IP6 header and the
+ * target header (including IPv6 itself, extension headers and
+ * TCP/UDP/ICMP6 headers) are continuous. KAME requires drivers
+ * to store incoming data into one internal mbuf or one or more external
+ * mbufs(never into two or more internal mbufs). Thus, the third case is
+ * supposed to never be matched but is prepared just in case.
+ */
+
+#define IP6_EXTHDR_CHECK(m, off, hlen, ret)                             \
+do {                                                                    \
+    if ((m)->m_next != NULL) {                                          \
+        if (((m)->m_flags & M_LOOP) &&                                  \
+            ((m)->m_len < (off) + (hlen)) &&                            \
+            (((m) = m_pullup((m), (off) + (hlen))) == NULL)) {          \
+                ip6stat.ip6s_exthdrtoolong++;                           \
+                return ret;                                             \
+        } else if ((m)->m_flags & M_EXT) {                              \
+                if ((m)->m_len < (off) + (hlen)) {                      \
+                        ip6stat.ip6s_exthdrtoolong++;                   \
+                        m_freem(m);                                     \
+                        return ret;                                     \
+                }                                                       \
+        } else {                                                        \
+                if ((m)->m_len < (off) + (hlen)) {                      \
+                        ip6stat.ip6s_exthdrtoolong++;                   \
+                        m_freem(m);                                     \
+                        return ret;                                     \
+                }                                                       \
+        }                                                               \
+    } else {                                                            \
+        if ((m)->m_len < (off) + (hlen)) {                              \
+                ip6stat.ip6s_tooshort++;                                \
+                in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_truncated);   \
+                m_freem(m);                                             \
+                return ret;                                             \
+        }                                                               \
+    }                                                                   \
+} while (0)
+
+/*
+ * IP6_EXTHDR_GET ensures that intermediate protocol header (from "off" to
+ * "len") is located in single mbuf, on contiguous memory region.
+ * The pointer to the region will be returned to pointer variable "val",
+ * with type "typ".
+ * IP6_EXTHDR_GET0 does the same, except that it aligns the structure at the
+ * very top of mbuf.  GET0 is likely to make memory copy than GET.
+ *
+ * XXX we're now testing this, needs m_pulldown()
+ */
+#define IP6_EXTHDR_GET(val, typ, m, off, len) \
+do {                                                                    \
+        struct mbuf *t;                                                 \
+        int tmp;                                                        \
+        if ((m)->m_len >= (off) + (len))                                \
+                (val) = (typ)(mtod((m), caddr_t) + (off));              \
+        else {                                                          \
+                t = m_pulldown((m), (off), (len), &tmp);                \
+                if (t) {                                                \
+                        if (t->m_len < tmp + (len))                     \
+                                panic("m_pulldown malfunction");        \
+                        (val) = (typ)(mtod(t, caddr_t) + tmp);          \
+                } else {                                                \
+                        (val) = (typ)NULL;                              \
+                        (m) = NULL;                                     \
+                }                                                       \
+        }                                                               \
+} while (0)
+
+#define IP6_EXTHDR_GET0(val, typ, m, off, len) \
+do {                                                                    \
+        struct mbuf *t;                                                 \
+        if ((off) == 0)                                                 \
+                (val) = (typ)mtod(m, caddr_t);                          \
+        else {                                                          \
+                t = m_pulldown((m), (off), (len), NULL);                \
+                if (t) {                                                \
+                        if (t->m_len < (len))                           \
+                                panic("m_pulldown malfunction");        \
+                        (val) = (typ)mtod(t, caddr_t);                  \
+                } else {                                                \
+                        (val) = (typ)NULL;                              \
+                        (m) = NULL;                                     \
+                }                                                       \
+        }                                                               \
+} while (0)
+#endif /*_KERNEL*/
+
+#endif /* not _NETINET_IP6_H_ */
diff --git a/libs/watt32/netinet/ip_fw.h b/libs/watt32/netinet/ip_fw.h
new file mode 100644 (file)
index 0000000..2c9939e
--- /dev/null
@@ -0,0 +1,123 @@
+/*!\file netinet/ip_fw.h
+ * IP firewall definitions.
+ */
+
+/*
+ * Copyright (c) 1993 Daniel Boulet
+ * Copyright (c) 1994 Ugen J.S.Antsilevich
+ *
+ * Redistribution and use in source forms, with and without modification,
+ * are permitted provided that this entire comment appears intact.
+ *
+ * Redistribution in binary form may occur without any restrictions.
+ * Obviously, it would be nice if you gave credit where credit is due
+ * but requiring it would be too onerous.
+ *
+ * This software is provided ``AS IS'' without any warranties of any kind.
+ *
+ *      $Id: ip_fw.h,v 1.23.2.1 1997/01/29 13:15:43 adam Exp $
+ */
+
+/*
+ * Format of an IP firewall descriptor
+ *
+ * fw_src, fw_dst, fw_smsk, fw_dmsk are always stored in network byte order.
+ * fw_flg and fw_n*p are stored in host byte order (of course).
+ * Port numbers are stored in HOST byte order.
+ */
+
+#ifndef __NETINET_IP_FW_H
+#define __NETINET_IP_FW_H
+
+struct ip_fw {
+    u_long fw_pcnt,fw_bcnt;             /* Packet and byte counters */
+    struct in_addr fw_src, fw_dst;      /* Source and destination IP addr */
+    struct in_addr fw_smsk, fw_dmsk;    /* Mask for src and dest IP addr */
+    union {
+        struct in_addr fu_via_ip;       /* Specified by IP address */
+        struct {                        /* Specified by interface name */
+#define FW_IFNLEN       6               /* To keep structure on 2^x boundary */
+                char  fu_via_name[FW_IFNLEN];
+                short fu_via_unit;
+        } fu_via_if;
+    } fu_via_un;
+#define fw_via_ip       fu_via_un.fu_via_ip
+#define fw_via_name     fu_via_un.fu_via_if.fu_via_name
+#define fw_via_unit     fu_via_un.fu_via_if.fu_via_unit
+    u_short fw_number;
+    u_short fw_flg;                     /* Flags word */
+    u_short fw_nsp, fw_ndp;             /* N'of src ports and # of dst ports */
+                                        /* in ports array (dst ports follow */
+                                        /* src ports; max of 10 ports in all; */
+                                        /* count of 0 means match all ports) */
+#define IP_FW_MAX_PORTS 10              /* A reasonable maximum */
+    u_short  fw_pts[IP_FW_MAX_PORTS];   /* Array of port numbers to match */
+    u_char   fw_ipopt,fw_ipnopt;        /* IP options set/unset */
+    u_char   fw_tcpf,fw_tcpnf;          /* TCP flags set/unset */
+#define IP_FW_ICMPTYPES_DIM (256 / (sizeof(unsigned) * 8))
+    unsigned fw_icmptypes[IP_FW_ICMPTYPES_DIM]; /* ICMP types bitmap */
+    long     timestamp;                 /* timestamp (tv_sec) of last match */
+    u_short  fw_divert_port;            /* Divert port (options IPDIVERT) */
+    u_char   fw_prot;                   /* IP protocol */
+};
+
+struct ip_fw_chain {
+       LIST_ENTRY(ip_fw_chain) chain;
+       struct ip_fw    *rule;
+};
+
+/*
+ * Values for "flags" field .
+ */
+#define IP_FW_F_INVSRC  0x0001  /* Invert sense of src check          */
+#define IP_FW_F_INVDST  0x0002  /* Invert sense of dst check          */
+#define IP_FW_F_IN      0x0004  /* Inbound                            */
+#define IP_FW_F_OUT     0x0008  /* Outbound                           */
+
+#define IP_FW_F_COMMAND 0x0030  /* Mask for type of chain entry:      */
+#define IP_FW_F_ACCEPT  0x0010  /* This is an accept rule             */
+#define IP_FW_F_COUNT   0x0020  /* This is a count rule               */
+#define IP_FW_F_DIVERT  0x0030  /* This is a divert rule              */
+#define IP_FW_F_DENY    0x0000  /* This is a deny rule                */
+
+#define IP_FW_F_PRN     0x0040  /* Print if this rule matches         */
+#define IP_FW_F_ICMPRPL 0x0080  /* Send back icmp unreachable packet  */
+
+#define IP_FW_F_SRNG    0x0100  /* The first two src ports are a min  *
+                                 * and max range (stored in host byte *
+                                 * order).                            */
+
+#define IP_FW_F_DRNG    0x0200  /* The first two dst ports are a min  *
+                                 * and max range (stored in host byte *
+                                 * order).                            */
+
+#define IP_FW_F_IFNAME  0x0400  /* Use interface name/unit (not IP)   */
+
+#define IP_FW_F_FRAG    0x0800  /* Fragment                           */
+
+#define IP_FW_F_ICMPBIT 0x1000  /* ICMP type bitmap is valid          */
+
+#define IP_FW_F_IFUWILD 0x2000  /* Match all interface units          */
+
+#define IP_FW_F_MASK    0x3FFF  /* All possible flag bits mask        */
+
+/*
+ * Definitions for IP option names.
+ */
+#define IP_FW_IPOPT_LSRR        0x01
+#define IP_FW_IPOPT_SSRR        0x02
+#define IP_FW_IPOPT_RR          0x04
+#define IP_FW_IPOPT_TS          0x08
+
+/*
+ * Definitions for TCP flags.
+ */
+#define IP_FW_TCPF_FIN          TH_FIN
+#define IP_FW_TCPF_SYN          TH_SYN
+#define IP_FW_TCPF_RST          TH_RST
+#define IP_FW_TCPF_PSH          TH_PUSH
+#define IP_FW_TCPF_ACK          TH_ACK
+#define IP_FW_TCPF_URG          TH_URG
+#define IP_FW_TCPF_ESTAB        0x40
+
+#endif
diff --git a/libs/watt32/netinet/ip_icmp.h b/libs/watt32/netinet/ip_icmp.h
new file mode 100644 (file)
index 0000000..0eec097
--- /dev/null
@@ -0,0 +1,195 @@
+/*!\file netinet/ip_icmp.h
+ * ICMP definitions.
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 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.
+ *
+ *      @(#)ip_icmp.h   8.1 (Berkeley) 6/10/93
+ * $Id: ip_icmp.h,v 1.9 1996/08/20 23:11:30 fenner Exp $
+ */
+
+#ifndef __NETINET_IP_ICMP_H
+#define __NETINET_IP_ICMP_H
+
+#include <sys/packon.h>
+
+/*
+ * Interface Control Message Protocol Definitions.
+ * Per RFC 792, September 1981.
+ */
+
+/*
+ * Internal of an ICMP Router Advertisement
+ */
+struct icmp_ra_addr {
+        u_int32_t ira_addr;
+        u_int32_t ira_preference;
+};
+
+/*
+ * Structure of an icmp header.
+ */
+struct icmp {
+        u_char  icmp_type;              /* type of message, see below */
+        u_char  icmp_code;              /* type sub code */
+        u_short icmp_cksum;             /* ones complement cksum of struct */
+        union {
+                u_char ih_pptr;                 /* ICMP_PARAMPROB */
+                struct in_addr ih_gwaddr;       /* ICMP_REDIRECT */
+                struct ih_idseq {
+                        n_short icd_id;
+                        n_short icd_seq;
+                } ih_idseq;
+                u_int32_t ih_void;     /* was 'int' */
+
+                /* ICMP_UNREACH_NEEDFRAG -- Path MTU Discovery (RFC1191) */
+                struct ih_pmtu {
+                        n_short ipm_void;
+                        n_short ipm_nextmtu;
+                } ih_pmtu;
+
+                struct ih_rtradv {
+                        u_char irt_num_addrs;
+                        u_char irt_wpa;
+                        u_int16_t irt_lifetime;
+                } ih_rtradv;
+        } icmp_hun;
+#define icmp_pptr       icmp_hun.ih_pptr
+#define icmp_gwaddr     icmp_hun.ih_gwaddr
+#define icmp_id         icmp_hun.ih_idseq.icd_id
+#define icmp_seq        icmp_hun.ih_idseq.icd_seq
+#define icmp_void       icmp_hun.ih_void
+#define icmp_pmvoid     icmp_hun.ih_pmtu.ipm_void
+#define icmp_nextmtu    icmp_hun.ih_pmtu.ipm_nextmtu
+#define icmp_num_addrs  icmp_hun.ih_rtradv.irt_num_addrs
+#define icmp_wpa        icmp_hun.ih_rtradv.irt_wpa
+#define icmp_lifetime   icmp_hun.ih_rtradv.irt_lifetime
+        union {
+                struct id_ts {
+                        n_time its_otime;
+                        n_time its_rtime;
+                        n_time its_ttime;
+                } id_ts;
+                struct id_ip  {
+                        struct ip idi_ip;
+                        /* options and then 64 bits of data */
+                } id_ip;
+                struct icmp_ra_addr id_radv;
+                u_long  id_mask;
+                char    id_data[1];
+        } icmp_dun;
+#define icmp_otime      icmp_dun.id_ts.its_otime
+#define icmp_rtime      icmp_dun.id_ts.its_rtime
+#define icmp_ttime      icmp_dun.id_ts.its_ttime
+#define icmp_ip         icmp_dun.id_ip.idi_ip
+#define icmp_radv       icmp_dun.id_radv
+#define icmp_mask       icmp_dun.id_mask
+#define icmp_data       icmp_dun.id_data
+};
+
+#include <sys/packoff.h>
+
+/*
+ * Lower bounds on packet lengths for various types.
+ * For the error advice packets must first insure that the
+ * packet is large enough to contain the returned ip header.
+ * Only then can we do the check to see if 64 bits of packet
+ * data have been returned, since we need to check the returned
+ * ip header length.
+ */
+#define ICMP_MINLEN     8                               /* abs minimum */
+#define ICMP_TSLEN      (8 + 3 * sizeof (n_time))       /* timestamp */
+#define ICMP_MASKLEN    12                              /* address mask */
+#define ICMP_ADVLENMIN  (8 + sizeof (struct ip) + 8)    /* min */
+#ifndef _IP_VHL
+#define ICMP_ADVLEN(p)  (8 + ((p)->icmp_ip.ip_hl << 2) + 8)
+        /* N.B.: must separately check that ip_hl >= 5 */
+#else
+#define ICMP_ADVLEN(p)  (8 + (IP_VHL_HL((p)->icmp_ip.ip_vhl) << 2) + 8)
+        /* N.B.: must separately check that header length >= 5 */
+#endif
+
+/*
+ * Definition of type and code field values.
+ */
+#define ICMP_ECHOREPLY          0               /* echo reply */
+#define ICMP_UNREACH            3               /* dest unreachable, codes: */
+#define         ICMP_UNREACH_NET        0               /* bad net */
+#define         ICMP_UNREACH_HOST       1               /* bad host */
+#define         ICMP_UNREACH_PROTOCOL   2               /* bad protocol */
+#define         ICMP_UNREACH_PORT       3               /* bad port */
+#define         ICMP_UNREACH_NEEDFRAG   4               /* IP_DF caused drop */
+#define         ICMP_UNREACH_SRCFAIL    5               /* src route failed */
+#define         ICMP_UNREACH_NET_UNKNOWN 6              /* unknown net */
+#define         ICMP_UNREACH_HOST_UNKNOWN 7             /* unknown host */
+#define         ICMP_UNREACH_ISOLATED   8               /* src host isolated */
+#define         ICMP_UNREACH_NET_PROHIB 9               /* prohibited access */
+#define         ICMP_UNREACH_HOST_PROHIB 10             /* ditto */
+#define         ICMP_UNREACH_TOSNET     11              /* bad tos for net */
+#define         ICMP_UNREACH_TOSHOST    12              /* bad tos for host */
+#define         ICMP_UNREACH_FILTER_PROHIB 13           /* admin prohib */
+#define         ICMP_UNREACH_HOST_PRECEDENCE 14         /* host prec vio. */
+#define         ICMP_UNREACH_PRECEDENCE_CUTOFF 15       /* prec cutoff */
+#define ICMP_SOURCEQUENCH       4               /* packet lost, slow down */
+#define ICMP_REDIRECT           5               /* shorter route, codes: */
+#define         ICMP_REDIRECT_NET       0               /* for network */
+#define         ICMP_REDIRECT_HOST      1               /* for host */
+#define         ICMP_REDIRECT_TOSNET    2               /* for tos and net */
+#define         ICMP_REDIRECT_TOSHOST   3               /* for tos and host */
+#define ICMP_ECHO               8               /* echo service */
+#define ICMP_ROUTERADVERT       9               /* router advertisement */
+#define ICMP_ROUTERSOLICIT      10              /* router solicitation */
+#define ICMP_TIMXCEED           11              /* time exceeded, code: */
+#define         ICMP_TIMXCEED_INTRANS   0               /* ttl==0 in transit */
+#define         ICMP_TIMXCEED_REASS     1               /* ttl==0 in reass */
+#define ICMP_PARAMPROB          12              /* ip header bad */
+#define         ICMP_PARAMPROB_OPTABSENT 1              /* req. opt. absent */
+#define ICMP_TSTAMP             13              /* timestamp request */
+#define ICMP_TSTAMPREPLY        14              /* timestamp reply */
+#define ICMP_IREQ               15              /* information request */
+#define ICMP_IREQREPLY          16              /* information reply */
+#define ICMP_MASKREQ            17              /* address mask request */
+#define ICMP_MASKREPLY          18              /* address mask reply */
+
+#ifndef ICMP_MAXTYPE
+#define ICMP_MAXTYPE            18
+#endif
+
+#define ICMP_INFOTYPE(type) \
+        ((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || \
+        (type) == ICMP_ROUTERADVERT || (type) == ICMP_ROUTERSOLICIT || \
+        (type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || \
+        (type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \
+        (type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY)
+
+#endif
diff --git a/libs/watt32/netinet/ip_mrout.h b/libs/watt32/netinet/ip_mrout.h
new file mode 100644 (file)
index 0000000..7ba9b17
--- /dev/null
@@ -0,0 +1,253 @@
+/*!\file netinet/ip_mrout.h
+ * IP multicast forwarding.
+ */
+
+/*
+ * Copyright (c) 1989 Stephen Deering.
+ * Copyright (c) 1992, 1993
+ *      The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Stephen Deering of Stanford University.
+ *
+ * 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.
+ *
+ *      @(#)ip_mroute.h 8.1 (Berkeley) 6/10/93
+ * $Id: ip_mroute.h,v 1.10.4.1 1997/02/22 19:47:28 joerg Exp $
+ */
+
+#ifndef __NETINET_IP_MROUTE_H
+#define __NETINET_IP_MROUTE_H
+
+/*
+ * Definitions for IP multicast forwarding.
+ *
+ * Written by David Waitzman, BBN Labs, August 1988.
+ * Modified by Steve Deering, Stanford, February 1989.
+ * Modified by Ajit Thyagarajan, PARC, August 1993.
+ * Modified by Ajit Thyagarajan, PARC, August 1994.
+ *
+ * MROUTING Revision: 3.3.1.3
+ */
+
+
+/*
+ * Multicast Routing set/getsockopt commands.
+ */
+#define MRT_INIT        100     /* initialize forwarder */
+#define MRT_DONE        101     /* shut down forwarder */
+#define MRT_ADD_VIF     102     /* create virtual interface */
+#define MRT_DEL_VIF     103     /* delete virtual interface */
+#define MRT_ADD_MFC     104     /* insert forwarding cache entry */
+#define MRT_DEL_MFC     105     /* delete forwarding cache entry */
+#define MRT_VERSION     106     /* get kernel version number */
+#define MRT_ASSERT      107     /* enable PIM assert processing */
+
+
+#define GET_TIME(t)     microtime(&t)
+
+/*
+ * Types and macros for handling bitmaps with one bit per virtual interface.
+ */
+#define MAXVIFS 32
+typedef u_long vifbitmap_t;
+typedef u_short vifi_t;         /* type of a vif index */
+#define ALL_VIFS (vifi_t)-1
+
+#define VIFM_SET(n, m)          ((m) |= (1 << (n)))
+#define VIFM_CLR(n, m)          ((m) &= ~(1 << (n)))
+#define VIFM_ISSET(n, m)        ((m) & (1 << (n)))
+#define VIFM_CLRALL(m)          ((m) = 0x00000000)
+#define VIFM_COPY(mfrom, mto)   ((mto) = (mfrom))
+#define VIFM_SAME(m1, m2)       ((m1) == (m2))
+
+
+/*
+ * Argument structure for MRT_ADD_VIF.
+ * (MRT_DEL_VIF takes a single vifi_t argument.)
+ */
+struct vifctl {
+        vifi_t  vifc_vifi;              /* the index of the vif to be added */
+        u_char  vifc_flags;             /* VIFF_ flags defined below */
+        u_char  vifc_threshold;         /* min ttl required to forward on vif */
+        u_int   vifc_rate_limit;        /* max rate */
+        struct  in_addr vifc_lcl_addr;  /* local interface address */
+        struct  in_addr vifc_rmt_addr;  /* remote address (tunnels only) */
+};
+
+#define VIFF_TUNNEL     0x1             /* vif represents a tunnel end-point */
+#define VIFF_SRCRT      0x2             /* tunnel uses IP source routing */
+
+/*
+ * Argument structure for MRT_ADD_MFC and MRT_DEL_MFC
+ * (mfcc_tos to be added at a future point)
+ */
+struct mfcctl {
+    struct in_addr  mfcc_origin;                /* ip origin of mcasts       */
+    struct in_addr  mfcc_mcastgrp;              /* multicast group associated*/
+    vifi_t          mfcc_parent;                /* incoming vif              */
+    u_char          mfcc_ttls[MAXVIFS];         /* forwarding ttls on vifs   */
+};
+
+/*
+ * The kernel's multicast routing statistics.
+ */
+struct mrtstat {
+    u_long      mrts_mfc_lookups;       /* # forw. cache hash table hits   */
+    u_long      mrts_mfc_misses;        /* # forw. cache hash table misses */
+    u_long      mrts_upcalls;           /* # calls to mrouted              */
+    u_long      mrts_no_route;          /* no route for packet's origin    */
+    u_long      mrts_bad_tunnel;        /* malformed tunnel options        */
+    u_long      mrts_cant_tunnel;       /* no room for tunnel options      */
+    u_long      mrts_wrong_if;          /* arrived on wrong interface      */
+    u_long      mrts_upq_ovflw;         /* upcall Q overflow               */
+    u_long      mrts_cache_cleanups;    /* # entries with no upcalls       */
+    u_long      mrts_drop_sel;          /* pkts dropped selectively        */
+    u_long      mrts_q_overflow;        /* pkts dropped - Q overflow       */
+    u_long      mrts_pkt2large;         /* pkts dropped - size > BKT SIZE  */
+    u_long      mrts_upq_sockfull;      /* upcalls dropped - socket full */
+};
+
+/*
+ * Argument structure used by mrouted to get src-grp pkt counts
+ */
+struct sioc_sg_req {
+    struct in_addr src;
+    struct in_addr grp;
+    u_long pktcnt;
+    u_long bytecnt;
+    u_long wrong_if;
+};
+
+/*
+ * Argument structure used by mrouted to get vif pkt counts
+ */
+struct sioc_vif_req {
+    vifi_t vifi;                /* vif number                           */
+    u_long icount;              /* Input packet count on vif            */
+    u_long ocount;              /* Output packet count on vif           */
+    u_long ibytes;              /* Input byte count on vif              */
+    u_long obytes;              /* Output byte count on vif             */
+};
+    
+
+/*
+ * The kernel's virtual-interface structure.
+ */
+struct vif {
+    u_char              v_flags;        /* VIFF_ flags defined above         */
+    u_char              v_threshold;    /* min ttl required to forward on vif*/
+    u_int               v_rate_limit;   /* max rate                          */
+    struct tbf         *v_tbf;          /* token bucket structure at intf.   */
+    struct in_addr      v_lcl_addr;     /* local interface address           */
+    struct in_addr      v_rmt_addr;     /* remote address (tunnels only)     */
+    struct ifnet       *v_ifp;          /* pointer to interface              */
+    u_long              v_pkt_in;       /* # pkts in on interface            */
+    u_long              v_pkt_out;      /* # pkts out on interface           */
+    u_long              v_bytes_in;     /* # bytes in on interface           */
+    u_long              v_bytes_out;    /* # bytes out on interface          */
+    struct route        v_route;        /* cached route if this is a tunnel  */
+    u_int               v_rsvp_on;      /* RSVP listening on this vif */
+    struct socket      *v_rsvpd;        /* RSVP daemon socket */
+};
+
+/*
+ * The kernel's multicast forwarding cache entry structure 
+ * (A field for the type of service (mfc_tos) is to be added 
+ * at a future point)
+ */
+struct mfc {
+    struct in_addr  mfc_origin;                 /* IP origin of mcasts   */
+    struct in_addr  mfc_mcastgrp;               /* multicast group associated*/
+    vifi_t          mfc_parent;                 /* incoming vif              */
+    u_char          mfc_ttls[MAXVIFS];          /* forwarding ttls on vifs   */
+    u_long          mfc_pkt_cnt;                /* pkt count for src-grp     */
+    u_long          mfc_byte_cnt;               /* byte count for src-grp    */
+    u_long          mfc_wrong_if;               /* wrong if for src-grp      */
+    int             mfc_expire;                 /* time to clean entry up    */
+    struct timeval  mfc_last_assert;            /* last time I sent an assert*/
+};
+
+/*
+ * Struct used to communicate from kernel to multicast router
+ * note the convenient similarity to an IP packet
+ */
+struct igmpmsg {
+    u_long          unused1;
+    u_long          unused2;
+    u_char          im_msgtype;                 /* what type of message     */
+#define IGMPMSG_NOCACHE         1
+#define IGMPMSG_WRONGVIF        2
+    u_char          im_mbz;                     /* must be zero             */
+    u_char          im_vif;                     /* vif rec'd on             */
+    u_char          unused3;
+    struct in_addr  im_src, im_dst;
+};
+
+/*
+ * Argument structure used for pkt info. while upcall is made
+ */
+struct rtdetq {
+    struct mbuf         *m;             /* A copy of the packet             */
+    struct ifnet        *ifp;           /* Interface pkt came in on         */
+    vifi_t              xmt_vif;        /* Saved copy of imo_multicast_vif  */
+#ifdef UPCALL_TIMING
+    struct timeval      t;              /* Timestamp */
+#endif
+};
+
+#define MFCTBLSIZ       256
+#if (MFCTBLSIZ & (MFCTBLSIZ - 1)) == 0    /* from sys:route.h */
+#define MFCHASHMOD(h)   ((h) & (MFCTBLSIZ - 1))
+#else
+#define MFCHASHMOD(h)   ((h) % MFCTBLSIZ)
+#endif
+
+#define MAX_UPQ 4               /* max. no of pkts in upcall Q */
+
+/*
+ * Token Bucket filter code 
+ */
+#define MAX_BKT_SIZE    10000             /* 10K bytes size             */
+#define MAXQSIZE        10                /* max # of pkts in queue     */
+
+/*
+ * the token bucket filter at each vif
+ */
+struct tbf
+{
+    struct timeval tbf_last_pkt_t; /* arr. time of last pkt     */
+    u_long tbf_n_tok;           /* no of tokens in bucket       */
+    u_long tbf_q_len;           /* length of queue at this vif  */
+    u_long tbf_max_q_len;       /* max. queue length            */
+    struct mbuf *tbf_q;         /* Packet queue                 */
+    struct mbuf *tbf_t;         /* tail-insertion pointer       */
+};
+
+#endif
diff --git a/libs/watt32/netinet/ip_var.h b/libs/watt32/netinet/ip_var.h
new file mode 100644 (file)
index 0000000..dd495fd
--- /dev/null
@@ -0,0 +1,164 @@
+/*!\file netinet/ip_var.h
+ * Internal IP definitions and statistics.
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 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.
+ *
+ *      @(#)ip_var.h    8.2 (Berkeley) 1/9/95
+ *      $Id: ip_var.h,v 1.24.2.2 1996/11/12 11:28:59 phk Exp $
+ */
+
+#ifndef __NETINET_IP_VAR_H
+#define __NETINET_IP_VAR_H
+
+#include <sys/packon.h>
+
+#if defined(__TURBOC__) || defined(__BORLANDC__)
+#pragma warn -bbf-   /* "Bitfields must be signed or unsigned int" warning */
+#endif
+
+/*
+ * Overlay for ip header used by other protocols (tcp, udp).
+ */
+struct ipovly {
+        caddr_t ih_next, ih_prev;       /* for protocol sequence q's */
+        u_char  ih_x1;                  /* (unused) */
+        u_char  ih_pr;                  /* protocol */
+        u_short ih_len;                 /* protocol length */
+        struct  in_addr ih_src;         /* source internet address */
+        struct  in_addr ih_dst;         /* destination internet address */
+};
+
+
+/*
+ * Ip header, when holding a fragment.
+ *
+ * Note: ipf_next must be at same offset as ipq_next above
+ */
+struct  ipasfrag {
+        u_char  ip_hl:4;
+        u_char  ip_v:4;
+        u_char  ipf_mff;                /* XXX overlays ip_tos: use low bit
+                                         * to avoid destroying tos;
+                                         * copied from (ip_off&IP_MF) */
+        u_short ip_len;
+        u_short ip_id;
+        u_short ip_off;
+        u_char  ip_ttl;
+        u_char  ip_p;
+        u_short ip_sum;
+        struct  ipasfrag *ipf_next;     /* next fragment */
+        struct  ipasfrag *ipf_prev;     /* previous fragment */
+};
+
+#include <sys/packoff.h>
+
+/*
+ * Ip reassembly queue structure.  Each fragment
+ * being reassembled is attached to one of these structures.
+ * They are timed out after ipq_ttl drops to 0, and may also
+ * be reclaimed if memory becomes tight.
+ */
+struct ipq {
+       struct  ipq *next,*prev;        /* to other reass headers */
+       u_char  ipq_ttl;                /* time for reass q to live */
+       u_char  ipq_p;                  /* protocol of this fragment */
+       u_short ipq_id;                 /* sequence id for reassembly */
+       struct  ipasfrag *ipq_next,*ipq_prev;
+                                       /* to ip headers of fragments */
+       struct  in_addr ipq_src,ipq_dst;
+#ifdef IPDIVERT
+       u_short ipq_divert;             /* divert protocol port */
+#endif
+};
+
+/*
+ * Structure stored in mbuf in inpcb.ip_options
+ * and passed to ip_output when ip options are in use.
+ * The actual length of the options (including ipopt_dst)
+ * is in m_len.
+ */
+#define MAX_IPOPTLEN    40
+
+struct ipoption {
+        struct  in_addr ipopt_dst;      /* first-hop dst if source routed */
+        char    ipopt_list[MAX_IPOPTLEN];       /* options proper */
+};
+
+/*
+ * Structure attached to inpcb.ip_moptions and
+ * passed to ip_output when IP multicast options are in use.
+ */
+struct ip_moptions {
+        struct  ifnet *imo_multicast_ifp; /* ifp for outgoing multicasts */
+        u_char  imo_multicast_ttl;      /* TTL for outgoing multicasts */
+        u_char  imo_multicast_loop;     /* 1 => hear sends if a member */
+        u_short imo_num_memberships;    /* no. memberships this socket */
+        struct  in_multi *imo_membership[IP_MAX_MEMBERSHIPS];
+        u_long  imo_multicast_vif;      /* vif num outgoing multicasts */
+};
+
+struct  ipstat {
+        u_long  ips_total;              /* total packets received */
+        u_long  ips_badsum;             /* checksum bad */
+        u_long  ips_tooshort;           /* packet too short */
+        u_long  ips_toosmall;           /* not enough data */
+        u_long  ips_badhlen;            /* ip header length < data size */
+        u_long  ips_badlen;             /* ip length < ip header length */
+        u_long  ips_fragments;          /* fragments received */
+        u_long  ips_fragdropped;        /* frags dropped (dups, out of space) */
+        u_long  ips_fragtimeout;        /* fragments timed out */
+        u_long  ips_forward;            /* packets forwarded */
+        u_long  ips_cantforward;        /* packets rcvd for unreachable dest */
+        u_long  ips_redirectsent;       /* packets forwarded on same net */
+        u_long  ips_noproto;            /* unknown or unsupported protocol */
+        u_long  ips_delivered;          /* datagrams delivered to upper level*/
+        u_long  ips_localout;           /* total ip packets generated here */
+        u_long  ips_odropped;           /* lost out packets due to nobufs, etc. */
+        u_long  ips_idropped;    /*!! new, lost in packets due to nobufs, etc. */
+        u_long  ips_reassembled;        /* total packets reassembled ok */
+        u_long  ips_fragmented;         /* datagrams successfully fragmented */
+        u_long  ips_ofragments;         /* output fragments created */
+        u_long  ips_cantfrag;           /* don't fragment flag was set, etc. */
+        u_long  ips_badoptions;         /* error in option processing */
+        u_long  ips_noroute;            /* packets discarded due to no route */
+        u_long  ips_badvers;            /* ip version != 4 */
+        u_long  ips_rawout;             /* total raw ip packets generated */
+        u_long  ips_toolong;            /* ip length > max ip packet size */
+};
+
+#if defined(__TURBOC__) || defined(__BORLANDC__)
+#pragma warn -bbf.
+#endif
+
+#endif
diff --git a/libs/watt32/netinet/ipv6.h b/libs/watt32/netinet/ipv6.h
new file mode 100644 (file)
index 0000000..eacdb79
--- /dev/null
@@ -0,0 +1,175 @@
+/*!\file netinet/ipv6.h
+ * Linux IPv6 definitions.
+ */
+
+/*
+ *      Linux INET6 implementation
+ *
+ *      Authors:
+ *      Pedro Roque             <roque@di.fc.ul.pt>
+ *
+ *      $Id: ipv6.h,v 1.6 1997/04/01 02:22:58 davem Exp $
+ *
+ *      This program is free software; you can redistribute it and/or
+ *      modify it under the terms of the GNU General Public License
+ *      as published by the Free Software Foundation; either version
+ *      2 of the License, or (at your option) any later version.
+ *
+ *  NB! Don't ue this file. Use <netinet/in.h> instread.
+ */
+
+#ifndef _NET_IPV6_H
+#define _NET_IPV6_H
+
+#ifndef __NETINET_IN_H
+#include <netinet/in.h>  /* in6_addr */
+#endif
+
+/*
+ *  Advanced API
+ *  source interface/address selection, source routing, etc...
+ *  *under construction*
+ */
+
+#include <sys/packon.h>
+
+/*
+ *  IPv6 fixed header
+ */
+struct ipv6hdr {
+       unsigned char   ipv6_priority:4;
+       unsigned char   ipv6_version:4;
+       unsigned char   ipv6_flow_lbl[3];
+       unsigned short  ipv6_len;
+       unsigned char   ipv6_nextheader;
+       unsigned char   ipv6_hoplimit;
+       struct in6_addr ipv6_src;
+       struct in6_addr ipv6_dst;
+     };
+
+
+
+/*
+ *  The length of this struct cannot be greater than the length of
+ *  the proto_priv field in a sk_buff which is currently
+ *  defined to be 16 bytes.
+ *  Pointers take upto 8 bytes (sizeof(void *) is 8 on the alpha).
+ */
+struct ipv6_options  {
+       /* length of extension headers */
+       unsigned short opt_flen;       /* after fragment hdr */
+       unsigned short opt_nflen;      /* before fragment hdr */
+      /*
+       * protocol options
+       * usualy carried in IPv6 extension headers
+       */
+       struct ipv6_rt_hdr *srcrt; /* Routing Header */
+      };
+
+struct in6_pktinfo {
+       struct in6_addr ipi6_addr;
+       int             ipi6_ifindex;
+     };
+
+
+struct in6_ifreq {
+       struct in6_addr ifr6_addr;
+       unsigned long   ifr6_prefixlen;
+       unsigned long   ifr6_ifindex;
+     };
+
+#define IPV6_SRCRT_STRICT       0x01    /* this hop must be a neighbor  */
+#define IPV6_SRCRT_TYPE_0       0       /* IPv6 type 0 Routing Header   */
+
+/*
+ *      routing header
+ */
+struct ipv6_rt_hdr {
+       unsigned char  nexthdr;
+       unsigned char  hdrlen;
+       unsigned char  type;
+       unsigned char  segments_left;
+       /*
+        * type specific data
+        * variable length field
+        */
+     };
+
+/*
+ * routing header type 0 (used in cmsghdr struct)
+ */
+struct ipv6_rt0_hdr {
+       struct ipv6_rt_hdr rt_hdr;
+       unsigned long      bitmap;         /* strict/loose bit map */
+#ifndef __WATCOMC__
+       struct in6_addr    addr[0];
+#endif
+#define rt0_type rt_hdr.type;
+     };
+
+/*
+ *  NextHeader field of IPv6 header
+ */
+
+#define NEXTHDR_HOP             0       /* Hop-by-hop option header. */
+#define NEXTHDR_TCP             6       /* TCP segment. */
+#define NEXTHDR_UDP             17      /* UDP message. */
+#define NEXTHDR_IPV6            41      /* IPv6 in IPv6 */
+#define NEXTHDR_ROUTING         43      /* Routing header. */
+#define NEXTHDR_FRAGMENT        44      /* Fragmentation/reassembly header. */
+#define NEXTHDR_ESP             50      /* Encapsulating security payload. */
+#define NEXTHDR_AUTH            51      /* Authentication header. */
+#define NEXTHDR_ICMP            58      /* ICMP for IPv6. */
+#define NEXTHDR_NONE            59      /* No next header */
+#define NEXTHDR_DEST            60      /* Destination options header. */
+
+#define NEXTHDR_MAX             255
+
+
+#define IPV6_DEFAULT_HOPLIMIT   64
+#define IPV6_DEFAULT_MCASTHOPS  1
+
+/*
+ *      Addr type
+ *      
+ *      type    -       unicast | multicast | anycast
+ *      scope   -       local   | site      | global
+ *      v4      -       compat
+ *      v4mapped
+ *      any
+ *      loopback
+ */
+
+#define IPV6_ADDR_ANY           0x0000U
+
+#define IPV6_ADDR_UNICAST       0x0001U 
+#define IPV6_ADDR_MULTICAST     0x0002U 
+#define IPV6_ADDR_ANYCAST       0x0004U
+
+#define IPV6_ADDR_LOOPBACK      0x0010U
+#define IPV6_ADDR_LINKLOCAL     0x0020U
+#define IPV6_ADDR_SITELOCAL     0x0040U
+
+#define IPV6_ADDR_COMPATv4      0x0080U
+
+#define IPV6_ADDR_SCOPE_MASK    0x00f0U
+
+#define IPV6_ADDR_MAPPED        0x1000U
+#define IPV6_ADDR_RESERVED      0x2000U /* reserved address space */
+
+/*
+ *      fragmentation header
+ */
+
+struct ipv6_fraghdr {
+       unsigned char   nexthdr;
+       unsigned char   reserved;
+       unsigned short  frag_off;
+       unsigned long   identification;
+     };
+#define fraghdr ipv6_fraghdr
+
+#include <sys/packoff.h>
+
+#endif
+
diff --git a/libs/watt32/netinet/tcp.h b/libs/watt32/netinet/tcp.h
new file mode 100644 (file)
index 0000000..ea79e3f
--- /dev/null
@@ -0,0 +1,138 @@
+/*!\file netinet/tcp.h
+ * TCP header and options.
+ */
+
+/*      $NetBSD: tcp.h,v 1.8 1995/04/17 05:32:58 cgd Exp $      */
+
+/*
+ * Copyright (c) 1982, 1986, 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.
+ *
+ *      @(#)tcp.h       8.1 (Berkeley) 6/10/93
+ */
+
+#ifndef __NETINET_TCP_H
+#define __NETINET_TCP_H
+
+typedef u_long  tcp_seq;
+typedef u_long  tcp_cc;                 /* connection count per rfc1644 */
+
+#include <sys/packon.h>
+
+
+/*
+ * TCP header.
+ * Per RFC 793, September, 1981.
+ */
+struct tcphdr {
+        u_short th_sport;               /* source port */
+        u_short th_dport;               /* destination port */
+        tcp_seq th_seq;                 /* sequence number */
+        tcp_seq th_ack;                 /* acknowledgement number */
+        u_char  th_x2:4;                /* (unused) */
+        u_char  th_off:4;               /* data offset */
+        u_char  th_flags;
+#define TH_FIN  0x01
+#define TH_SYN  0x02
+#define TH_RST  0x04
+#define TH_PUSH 0x08
+#define TH_ACK  0x10
+#define TH_URG  0x20
+#define TH_FLAGS (TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG)
+
+        u_short th_win;                 /* window */
+        u_short th_sum;                 /* checksum */
+        u_short th_urp;                 /* urgent pointer */
+};
+
+#include <sys/packoff.h>
+
+#define TCPOPT_EOL              0
+#define TCPOPT_NOP              1
+#define TCPOPT_MAXSEG           2
+#define    TCPOLEN_MAXSEG               4
+#define TCPOPT_WINDOW           3
+#define    TCPOLEN_WINDOW               3
+#define TCPOPT_SACK_PERMITTED   4
+#define    TCPOLEN_SACK_PERMITTED       2
+#define TCPOPT_SACK             5
+#define TCPOPT_TIMESTAMP        8
+#define    TCPOLEN_TIMESTAMP            10
+#define    TCPOLEN_TSTAMP_APPA          (TCPOLEN_TIMESTAMP+2) /* appendix A */
+
+#define TCPOPT_TSTAMP_HDR       \
+    (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP)
+
+#define TCPOPT_CC               11              /* CC options: RFC-1644 */
+#define TCPOPT_CCNEW            12
+#define TCPOPT_CCECHO           13
+#define    TCPOLEN_CC                   6
+#define    TCPOLEN_CC_APPA              (TCPOLEN_CC+2)
+#define    TCPOPT_CC_HDR(ccopt)         \
+    (TCPOPT_NOP<<24|TCPOPT_NOP<<16|(ccopt)<<8|TCPOLEN_CC)
+
+#define TCPOPT_SIGNATURE  19
+#define    TCP_SIGLEN 16
+
+/*
+ * Default maximum segment size for TCP.
+ * With an IP MSS of 576, this is 536,
+ * but 512 is probably more convenient.
+ * This should be defined as MIN(512, IP_MSS - sizeof (struct tcpiphdr)).
+ */
+#define TCP_MSS         512
+
+#define TCP_MAXWIN      65535   /* largest value for (unscaled) window */
+#define TTCP_CLIENT_SND_WND     4096    /* dflt send window for T/TCP client */
+
+#define TCP_MAX_WINSHIFT        14      /* maximum window shift */
+
+#define TCP_MAXHLEN     (0xf<<2)        /* max length of header in bytes */
+#define TCP_MAXOLEN     (TCP_MAXHLEN - sizeof(struct tcphdr))
+                                        /* max space left for options */
+
+/*
+ * User-settable options (used with setsockopt).
+ */
+#define TCP_NODELAY     0x01    /* don't delay send to coalesce packets */
+#define TCP_MAXSEG      0x02    /* set maximum segment size */
+#ifdef TCP_AUTO
+#define TCP_AUTO_OP     0x03    /* 0 to disable autotuning, 1 to reenable */
+#endif
+#define TCP_NOPUSH      0x04    /* don't push last block of write */
+#define TCP_NOOPT       0x08    /* don't use TCP options */
+
+/* For PSC modifications */
+#if defined(TCP_AUTO) || defined(TCP_SACK) || defined(TCP_FACK)
+#define PSC_VERSION "0.8"
+#endif
+
+#endif
diff --git a/libs/watt32/netinet/tcp_debu.h b/libs/watt32/netinet/tcp_debu.h
new file mode 100644 (file)
index 0000000..c6821db
--- /dev/null
@@ -0,0 +1,122 @@
+/*!\file netinet/tcp_debu.h
+ * TCP debugging.
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 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.
+ *
+ *      @(#)tcp_debug.h 8.1 (Berkeley) 6/10/93
+ * $Id: tcp_debug.h,v 1.5 1996/04/13 12:45:57 bde Exp $
+ */
+
+#ifndef __NETINET_TCP_DEBUG_H
+#define __NETINET_TCP_DEBUG_H
+
+struct tcp_debug {
+       n_time           td_time;
+       short            td_act;
+       short            td_ostate;
+       caddr_t          td_tcb;
+       struct  tcpiphdr td_ti;
+       short            td_req;
+       struct  tcpcb    td_cb;
+     };
+
+#define TA_INPUT        0
+#define TA_OUTPUT       1
+#define TA_USER         2
+#define TA_RESPOND      3
+#define TA_DROP         4
+
+#ifdef TANAMES
+static char *tanames[] = {
+            "input", "output", "user", "respond", "drop"
+          };
+#endif
+
+#define TCP_NDEBUG 100
+
+#ifdef TCP_AUTO_DEBUG
+#include <sys/wtime.h>
+
+/* The following table is used as a circular buffer in which TCP
+ * autotuning statistics can be kept.
+ * It is intended that these statistics will be periodically read
+ * by a debugging application using kvm.
+ */
+
+#define TAD_ENTRIES 1024            /* number of entries in monitor_table */
+
+struct tad_entry {
+       u_long         seq_no;            /* tad entry number */
+       struct timeval time;              /* time of entry */
+       u_long         snd_cwnd;          /* congestion window */
+       u_long         sb_hiwat;          /* send socket buffer hi water mark */
+       u_long         sb_target_hiwat;   /*      target for same */
+       u_long         sb_cc;             /* space used in send socket buf */
+       u_long         m_clused;          /* m_clusters - m_clfree */
+       u_short        lport;             /* local port number */
+       u_short        rport;             /* remote port number */
+       u_long         debug;             /* used for debugging */
+       tcp_seq        snd_max;           /* highest sequence number sent */
+     } tad_table[TAD_ENTRIES];
+
+extern struct tad_entry *tad_index;     /* insert point */
+extern u_long tad_seq;
+extern u_long tad_debug;
+
+/* increment the index into the table
+ */
+#define TAD_INDEX_INCR tad_index = (struct tad_entry*)((u_long)tad_index + \
+                                    sizeof(struct tad_entry)); \
+                       if ((u_long) tad_index >= \
+                           (u_long) &tad_table[TAD_ENTRIES]) \
+                          tad_index = tad_table;
+
+/* add a log entry to the table
+ */
+#define TAD_SNAPSHOT(tp, so)  tad_index->seq_no = tad_seq++; \
+                   microtime(&(tad_index->time)); \
+                   tad_index->snd_cwnd = tp->snd_cwnd; \
+                   tad_index->sb_hiwat = so->so_snd.sb_hiwat; \
+                   tad_index->sb_target_hiwat = so->so_snd.sb_net_target; \
+                   tad_index->sb_cc = so->so_snd.sb_cc; \
+                   tad_index->m_clused = mbstat.m_clusters - mbstat.m_clfree;\
+                   tad_index->lport = tp->t_inpcb->inp_lport; \
+                   tad_index->rport = tp->t_inpcb->inp_fport; \
+                   tad_index->debug = tad_debug; \
+                   tad_index->snd_max = tp->snd_max; \
+                   TAD_INDEX_INCR;
+
+#endif  /* TCP_AUTO_DEBUG */
+
+#endif  /* __NETINET_TCP_DEBUG_H */
diff --git a/libs/watt32/netinet/tcp_fsm.h b/libs/watt32/netinet/tcp_fsm.h
new file mode 100644 (file)
index 0000000..bb5c927
--- /dev/null
@@ -0,0 +1,96 @@
+/*!\file netinet/tcp_fsm.h
+ * TCP Finite State Machine.
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 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.
+ *
+ *      @(#)tcp_fsm.h   8.1 (Berkeley) 6/10/93
+ * $Id: tcp_fsm.h,v 1.7 1995/11/14 20:34:34 phk Exp $
+ */
+
+#ifndef __NETINET_TCP_FSM_H
+#define __NETINET_TCP_FSM_H
+
+/*
+ * TCP FSM state definitions.
+ * Per RFC793, September, 1981.
+ */
+
+#define TCP_NSTATES     11
+
+#define TCPS_CLOSED             0       /* closed */
+#define TCPS_LISTEN             1       /* listening for connection */
+#define TCPS_SYN_SENT           2       /* active, have sent syn */
+#define TCPS_SYN_RECEIVED       3       /* have send and received syn */
+/* states < TCPS_ESTABLISHED are those where connections not established */
+#define TCPS_ESTABLISHED        4       /* established */
+#define TCPS_CLOSE_WAIT         5       /* rcvd fin, waiting for close */
+/* states > TCPS_CLOSE_WAIT are those where user has closed */
+#define TCPS_FIN_WAIT_1         6       /* have closed, sent fin */
+#define TCPS_CLOSING            7       /* closed xchd FIN; await FIN ACK */
+#define TCPS_LAST_ACK           8       /* had fin and close; await FIN ACK */
+/* states > TCPS_CLOSE_WAIT && < TCPS_FIN_WAIT_2 await ACK of FIN */
+#define TCPS_FIN_WAIT_2         9       /* have closed, fin is acked */
+#define TCPS_TIME_WAIT          10      /* in 2*msl quiet wait after close */
+
+#define TCPS_HAVERCVDSYN(s)     ((s) >= TCPS_SYN_RECEIVED)
+#define TCPS_HAVEESTABLISHED(s) ((s) >= TCPS_ESTABLISHED)
+#define TCPS_HAVERCVDFIN(s)     ((s) >= TCPS_TIME_WAIT)
+
+#ifdef  TCPOUTFLAGS
+/*
+ * Flags used when sending segments in tcp_output.
+ * Basic flags (TH_RST,TH_ACK,TH_SYN,TH_FIN) are totally
+ * determined by state, with the proviso that TH_FIN is sent only
+ * if all data queued for output is included in the segment.
+ */
+static u_char   tcp_outflags[TCP_NSTATES] = {
+    TH_RST|TH_ACK, 0, TH_SYN, TH_SYN|TH_ACK,
+    TH_ACK, TH_ACK,
+    TH_FIN|TH_ACK, TH_FIN|TH_ACK, TH_FIN|TH_ACK, TH_ACK, TH_ACK,
+};
+#endif
+
+#ifdef KPROF
+int     tcp_acounts[TCP_NSTATES][PRU_NREQ];
+#endif
+
+#ifdef  TCPSTATES
+char *tcpstates[] = {
+        "CLOSED",       "LISTEN",       "SYN_SENT",     "SYN_RCVD",
+        "ESTABLISHED",  "CLOSE_WAIT",   "FIN_WAIT_1",   "CLOSING",
+        "LAST_ACK",     "FIN_WAIT_2",   "TIME_WAIT",
+};
+#endif
+
+#endif
diff --git a/libs/watt32/netinet/tcp_scor.h b/libs/watt32/netinet/tcp_scor.h
new file mode 100644 (file)
index 0000000..4689efc
--- /dev/null
@@ -0,0 +1,108 @@
+/*!\file netinet/tcp_scor.h
+ * TCP scoreboard definitions (SACK).
+ */
+
+/*
+ * Copyright (c) 1997, Pittsburgh Supercomputing Center, 
+ * Jamshid Mahdavi, Matt Mathis, Jeffrey Semke
+ * 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.
+ *
+ * This is experimental software under active development and may
+ * potentially contain bugs.   Use at your own risk.
+ *
+ */
+
+#ifndef __NETINET_TCP_SCOREBOARD_H
+#define __NETINET_TCP_SCOREBOARD_H
+
+/**********************************************************************
+ *
+ *  Scoreboard module headers: 
+ *
+ **********************************************************************/
+
+/* Initialize the scoreboard
+ */
+#define scrb_init(tp) { LIST_INIT(&((tp)->scrb.head));     \
+                        (tp)->scrb.last_ack=(tp)->snd_una; \
+                        (tp)->snd_retran_data = 0; }
+
+/*  
+ *  Check to see if the scoreboard is empty
+ *  scrb_isempty(struct tcpcp *tp)
+ */
+#define scrb_isempty(tp)     (! ((tp)->scrb.scrb_head))
+
+/* This macro quickly takes care of the common case of an empty
+ *  scoreboard. Otherwise it called scrb_getnextretran_func to hunt
+ *  through the scoreboard and return the next block of data to be
+ *  retransmitted.  The start and end of the block are filled in to
+ *  start_ptr and end_ptr, and the length of the block is returned.  A
+ *  zero return value indicates that there is no data to be
+ *  retransmitted at this time.  Note that end_ptr actually points to
+ *  the first byte of data which is NOT to be retransmitted (or the
+ *  first byte following the data to be retransmitted) similar in
+ *  fashion to the rest of this code.
+ *
+ *  scrb_getnextretran(struct tcpcp *tp, tcp_seq *start, tcp_seq *end) 
+ */
+
+#define scrb_getnextretran(tp,start,end)   \
+           (scrb_isempty(tp) ? \
+             (int)((tcp_seq*)*start = (tcp_seq*)*end = \
+             (tcp_seq*)0) \
+           : scrb_getnextretran_func(tp,start,end))
+                             
+
+/* sender side -- tracks packets sent that WERE selectively acknowledged
+ * by the other end.
+ * Each sb_entry represents a hole (missing data) followed by
+ * consecutive received data.
+ */
+struct scrb_entry {
+      LIST_ENTRY(scrb_entry) ptrs;    /*  Next/Prev structure pointers */
+      tcp_seq start;                  /*  Start of received data block */
+      tcp_seq end;                    /*  End of received data block      */
+      tcp_seq retran;                 /*  End of subsequent data 
+                                            retransmitted  */
+      tcp_seq snd_max;                /*  Value of snd_max at the time of 
+                                            retransmission */
+      int     sack_cnt;               /*  FACK ONLY:  Number of reports for 
+                                          this hole */
+};
+
+#define scrb_next ptrs.le_next       /* next element */
+#define scrb_prev ptrs.le_prev       /* previous element */
+
+
+/* sender side -- tracks packets sent that were selectively
+ * acknowledged by the other end
+ */
+struct scoreboard {
+      tcp_seq last_ack;               /* This value replicates snd_una, 
+                                         but is needed for internal 
+                                         scoreboard state.  */
+      LIST_HEAD(scrb_head_internal, scrb_entry) head; /* Scoreboard list */
+};
+
+#define scrb_head head.lh_first       /* first element of scoreboard */
+
+/* return codes from routines that might have to clear the scoreboard
+ */
+#define E_SCRB_CLEAR          -1
+#define E_SCRB_NOERR           0
+
+/* reason parameters for scrb_clear
+ */
+#define SCRB_INIT              0
+#define SCRB_RENEGE            1
+#define SCRB_NOMEM             2
+#define SCRB_TIMEOUT           3
+
+#endif /* __NETINET_TCP_SCOREBOARD_H */
diff --git a/libs/watt32/netinet/tcp_seq.h b/libs/watt32/netinet/tcp_seq.h
new file mode 100644 (file)
index 0000000..8034cfa
--- /dev/null
@@ -0,0 +1,104 @@
+/*!\file netinet/tcp_seq.h
+ * TCP serquence number handling.
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 1993, 1995
+ *      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.
+ *
+ *      @(#)tcp_seq.h   8.3 (Berkeley) 6/21/95
+ *      $Id: tcp_seq.h,v 1.6 1995/10/03 16:54:14 wollman Exp $
+ */
+
+#ifndef __NETINET_TCP_SEQ_H
+#define __NETINET_TCP_SEQ_H
+
+/*
+ * TCP sequence numbers are 32 bit integers operated
+ * on with modular arithmetic.  These macros can be
+ * used to compare such integers.
+ */
+#define SEQ_LT(a,b)     ((long)((a)-(b)) < 0)
+#define SEQ_LEQ(a,b)    ((long)((a)-(b)) <= 0)
+#define SEQ_GT(a,b)     ((long)((a)-(b)) > 0)
+#define SEQ_GEQ(a,b)    ((long)((a)-(b)) >= 0)
+
+/* for modulo comparisons of timestamps */
+#define TSTMP_LT(a,b)   ((long)((a)-(b)) < 0)
+#define TSTMP_GEQ(a,b)  ((long)((a)-(b)) >= 0)
+
+/*
+ * TCP connection counts are 32 bit integers operated
+ * on with modular arithmetic.  These macros can be
+ * used to compare such integers.
+ */
+#define CC_LT(a,b)      ((long)((a)-(b)) < 0)
+#define CC_LEQ(a,b)     ((long)((a)-(b)) <= 0)
+#define CC_GT(a,b)      ((long)((a)-(b)) > 0)
+#define CC_GEQ(a,b)     ((long)((a)-(b)) >= 0)
+
+/* Macro to increment a CC: skip 0 which has a special meaning */
+#define CC_INC(c)       (++(c) == 0 ? ++(c) : (c))
+
+/*
+ * Macros to initialize tcp sequence numbers for
+ * send and receive from initial send and receive
+ * sequence numbers.
+ */
+#define tcp_rcvseqinit(tp) \
+        (tp)->rcv_adv = (tp)->rcv_nxt = (tp)->irs + 1
+
+#if defined(TCP_SACK)
+#define tcp_sendseqinit(tp) \
+        (tp)->snd_una = (tp)->snd_nxt = (tp)->snd_max = (tp)->snd_up = \
+            (tp)->recover = (tp)->sb.last_ack = (tp)->iss
+
+#elif defined(TCP_FACK)
+#define tcp_sendseqinit(tp) \
+        (tp)->snd_una = (tp)->snd_nxt = (tp)->snd_max = (tp)->snd_up = \
+            (tp)->recover = (tp)->scrb.last_ack = (tp)->snd_fack = (tp)->iss
+
+#else
+#define tcp_sendseqinit(tp) \
+        (tp)->snd_una = (tp)->snd_nxt = (tp)->snd_max = (tp)->snd_up = \
+            (tp)->iss
+#endif
+
+#define TCP_PAWS_IDLE   (24 * 24 * 60 * 60 * PR_SLOWHZ)
+                                   /* timestamp wrap-around time */
+
+#define TCP_ISSINCR     (125*1024) /* increment for tcp_iss each second */
+
+#ifdef _KERNEL
+tcp_seq tcp_iss;                   /* tcp initial send seq # */
+#endif
+
+#endif
diff --git a/libs/watt32/netinet/tcp_time.h b/libs/watt32/netinet/tcp_time.h
new file mode 100644 (file)
index 0000000..114a0a3
--- /dev/null
@@ -0,0 +1,133 @@
+/*!\file netinet/tcp_time.h
+ * TCP timer definitions.
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 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.
+ *
+ *      @(#)tcp_timer.h 8.1 (Berkeley) 6/10/93
+ *      $Id: tcp_timer.h,v 1.10 1996/09/13 23:51:43 pst Exp $
+ */
+
+#ifndef __NETINET_TCP_TIMER_H
+#define __NETINET_TCP_TIMER_H
+
+/*
+ * Definitions of the TCP timers.  These timers are counted
+ * down PR_SLOWHZ times a second.
+ */
+#define TCPT_NTIMERS    4
+
+#define TCPT_REXMT      0               /* retransmit */
+#define TCPT_PERSIST    1               /* retransmit persistence */
+#define TCPT_KEEP       2               /* keep alive */
+#define TCPT_2MSL       3               /* 2*msl quiet time timer */
+
+/*
+ * The TCPT_REXMT timer is used to force retransmissions.
+ * The TCP has the TCPT_REXMT timer set whenever segments
+ * have been sent for which ACKs are expected but not yet
+ * received.  If an ACK is received which advances tp->snd_una,
+ * then the retransmit timer is cleared (if there are no more
+ * outstanding segments) or reset to the base value (if there
+ * are more ACKs expected).  Whenever the retransmit timer goes off,
+ * we retransmit one unacknowledged segment, and do a backoff
+ * on the retransmit timer.
+ *
+ * The TCPT_PERSIST timer is used to keep window size information
+ * flowing even if the window goes shut.  If all previous transmissions
+ * have been acknowledged (so that there are no retransmissions in progress),
+ * and the window is too small to bother sending anything, then we start
+ * the TCPT_PERSIST timer.  When it expires, if the window is nonzero,
+ * we go to transmit state.  Otherwise, at intervals send a single byte
+ * into the peer's window to force him to update our window information.
+ * We do this at most as often as TCPT_PERSMIN time intervals,
+ * but no more frequently than the current estimate of round-trip
+ * packet time.  The TCPT_PERSIST timer is cleared whenever we receive
+ * a window update from the peer.
+ *
+ * The TCPT_KEEP timer is used to keep connections alive.  If an
+ * connection is idle (no segments received) for TCPTV_KEEP_INIT amount of time,
+ * but not yet established, then we drop the connection.  Once the connection
+ * is established, if the connection is idle for TCPTV_KEEP_IDLE time
+ * (and keepalives have been enabled on the socket), we begin to probe
+ * the connection.  We force the peer to send us a segment by sending:
+ *      <SEQ=SND.UNA-1><ACK=RCV.NXT><CTL=ACK>
+ * This segment is (deliberately) outside the window, and should elicit
+ * an ack segment in response from the peer.  If, despite the TCPT_KEEP
+ * initiated segments we cannot elicit a response from a peer in TCPT_MAXIDLE
+ * amount of time probing, then we drop the connection.
+ */
+
+/*
+ * Time constants.
+ */
+#define TCPTV_MSL       ( 30*PR_SLOWHZ)         /* max seg lifetime (hah!) */
+#define TCPTV_SRTTBASE  0                       /* base roundtrip time;
+                                                   if 0, no idea yet */
+#define TCPTV_RTOBASE   (  3*PR_SLOWHZ)         /* assumed RTO if no info */
+#define TCPTV_SRTTDFLT  (  3*PR_SLOWHZ)         /* assumed RTT if no info */
+
+#define TCPTV_PERSMIN   (  5*PR_SLOWHZ)         /* retransmit persistence */
+#define TCPTV_PERSMAX   ( 60*PR_SLOWHZ)         /* maximum persist interval */
+
+#define TCPTV_KEEP_INIT ( 75*PR_SLOWHZ)         /* initial connect keep alive */
+#define TCPTV_KEEP_IDLE (120*60*PR_SLOWHZ)      /* dflt time before probing */
+#define TCPTV_KEEPINTVL ( 75*PR_SLOWHZ)         /* default probe interval */
+#define TCPTV_KEEPCNT   8                       /* max probes before drop */
+
+#define TCPTV_MIN       (  1*PR_SLOWHZ)         /* minimum allowable value */
+#define TCPTV_REXMTMAX  ( 64*PR_SLOWHZ)         /* max allowable REXMT value */
+
+#define TCPTV_TWTRUNC   8                       /* RTO factor to truncate TW */
+
+#define TCP_LINGERTIME  120                     /* linger at most 2 minutes */
+
+#define TCP_MAXRXTSHIFT 12                      /* maximum retransmits */
+
+#ifdef  TCPTIMERS
+static char *tcptimers[] =
+    { "REXMT", "PERSIST", "KEEP", "2MSL" };
+#endif
+
+/*
+ * Force a time value to be in a certain range.
+ */
+#define TCPT_RANGESET(tv, value, tvmin, tvmax) { \
+        (tv) = (value);                          \
+        if ((u_long)(tv) < (u_long)(tvmin))      \
+                (tv) = (tvmin);                  \
+        else if ((u_long)(tv) > (u_long)(tvmax)) \
+                (tv) = (tvmax);                  \
+      }
+
+#endif
diff --git a/libs/watt32/netinet/tcp_var.h b/libs/watt32/netinet/tcp_var.h
new file mode 100644 (file)
index 0000000..d33f8e5
--- /dev/null
@@ -0,0 +1,403 @@
+/*!\file netinet/tcp_var.h
+ * Internal TCP structures and statistics.
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 1993, 1994, 1995
+ *      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.
+ *
+ *      @(#)tcp_var.h   8.4 (Berkeley) 5/24/95
+ *      $Id: tcp_var.h,v 1.36 1996/09/13 23:54:03 pst Exp $
+ */
+
+#ifndef __NETINET_TCP_VAR_H
+#define __NETINET_TCP_VAR_H
+
+/*
+ * Kernel variables for tcp.
+ */
+
+#ifdef TCP_AUTO
+  /* AUTO_RCV_HITHRESH flush reassembly queue, drop incoming packets
+   */
+  #define AUTO_RCV_HITHRESH   (u_long)(0.95 * NMBCLUSTERS)
+
+  /* AUTO_RCV_LOWTHRESH drop incoming packets
+   */
+  #define AUTO_RCV_LOWTHRESH  (u_long)(0.9 * NMBCLUSTERS)
+
+  /* AUTO_SND_THRESH reduce so_snd.sb_hiwat by acked
+   */
+  #define AUTO_SND_THRESH     (u_long)(0.50 * NMBCLUSTERS)
+#endif
+
+#if defined(TCP_SACK) || defined(TCP_FACK)
+#include <netinet/tcp_scor.h>
+
+struct sackblock {
+       tcp_seq start;
+       tcp_seq end;
+     };
+#endif
+
+/*
+ * Tcp control block, one per tcp; fields:
+ */
+struct tcpcb {
+        struct  tcpiphdr *seg_next;     /* sequencing queue */
+        struct  tcpiphdr *seg_prev;
+  /* !! struct  ipqehead segq; */       /* sequencing queue */
+        int     t_state;                /* state of this connection */
+        int     t_timer[TCPT_NTIMERS];  /* tcp timers */
+        int     t_rxtshift;             /* log(2) of rexmt exp. backoff */
+        int     t_rxtcur;               /* current retransmit value */
+#ifdef TCP_FACK
+        short   t_padd;                 /* filler to preserve alignment */
+#else
+        short   t_dupacks;              /* consecutive dup acks recd */
+#endif
+        u_int   t_maxseg;               /* maximum segment size */
+        u_int   t_maxopd;               /* mss plus options */
+        int     t_force;                /* 1 if forcing out a byte */
+        u_int   t_flags;
+#define TF_ACKNOW       0x0001          /* ack peer immediately */
+#define TF_DELACK       0x0002          /* ack, but try to delay it */
+#define TF_NODELAY      0x0004          /* don't delay packets to coalesce */
+#define TF_NOOPT        0x0008          /* don't use tcp options */
+#define TF_SENTFIN      0x0010          /* have sent FIN */
+#define TF_REQ_SCALE    0x0020          /* have/will request window scaling */
+#define TF_RCVD_SCALE   0x0040          /* other side has requested scaling */
+#define TF_REQ_TSTMP    0x0080          /* have/will request timestamps */
+#define TF_RCVD_TSTMP   0x0100          /* a timestamp was received in SYN */
+#define TF_SACK_PERMIT  0x0200          /* other side said I could SACK */
+#define TF_NEEDSYN      0x0400          /* send SYN (implicit state) */
+#define TF_NEEDFIN      0x0800          /* send FIN (implicit state) */
+#define TF_NOPUSH       0x1000          /* don't push */
+#define TF_REQ_CC       0x2000          /* have/will request CC */
+#define TF_RCVD_CC      0x4000          /* a CC was received in SYN */
+#define TF_SENDCCNEW    0x8000          /* send CCnew instead of CC in SYN */
+
+        struct  tcpiphdr *t_template;   /* skeletal packet for transmit */
+        struct  inpcb *t_inpcb;         /* back pointer to internet pcb */
+/*
+ * The following fields are used as in the protocol specification.
+ * See RFC783, Dec. 1981, page 21.
+ */
+/* send sequence variables */
+        tcp_seq snd_una;                /* send unacknowledged */
+        tcp_seq snd_nxt;                /* send next */
+        tcp_seq snd_up;                 /* send urgent pointer */
+        tcp_seq snd_wl1;                /* window update seg seq number */
+        tcp_seq snd_wl2;                /* window update seg ack number */
+        tcp_seq iss;                    /* initial send sequence number */
+        u_long  snd_wnd;                /* send window */
+/* receive sequence variables */
+        u_long  rcv_wnd;                /* receive window */
+        tcp_seq rcv_nxt;                /* receive next */
+        tcp_seq rcv_up;                 /* receive urgent pointer */
+        tcp_seq irs;                    /* initial receive sequence number */
+/*
+ * Additional variables for this implementation.
+ */
+/* receive variables */
+        tcp_seq rcv_adv;                /* advertised window */
+/* retransmit variables */
+        tcp_seq snd_max;                /* highest sequence number sent;
+                                         * used to recognize retransmits
+                                         */
+/* congestion control (for slow start, source quench, retransmit after loss) */
+        u_long  snd_cwnd;               /* congestion-controlled window */
+        u_long  snd_ssthresh;           /* snd_cwnd size threshold for
+                                         * for slow start exponential to
+                                         * linear switch
+                                         */
+/*
+ * transmit timing stuff.  See below for scale of srtt and rttvar.
+ * "Variance" is actually smoothed difference.
+ */
+        u_int   t_idle;                 /* inactivity time */
+        int     t_rtt;                  /* round trip time */
+        tcp_seq t_rtseq;                /* sequence number being timed */
+        int     t_srtt;                 /* smoothed round-trip time */
+        int     t_rttvar;               /* variance in round-trip time */
+        u_int   t_rttmin;               /* minimum rtt allowed */
+        u_long  max_sndwnd;             /* largest window peer has offered */
+
+/* out-of-band data */
+        char    t_oobflags;             /* have some */
+        char    t_iobc;                 /* input character */
+#define TCPOOB_HAVEDATA 0x01
+#define TCPOOB_HADDATA  0x02
+        int     t_softerror;            /* possible error not yet reported */
+
+/* RFC 1323 variables */
+        u_char  snd_scale;              /* window scaling for send window */
+        u_char  rcv_scale;              /* window scaling for recv window */
+        u_char  request_r_scale;        /* pending window scaling */
+        u_char  requested_s_scale;
+        u_long  ts_recent;              /* timestamp echo data */
+        u_long  ts_recent_age;          /* when last updated */
+        tcp_seq last_ack_sent;
+/* RFC 1644 variables */
+        tcp_cc  cc_send;                /* send connection count */
+        tcp_cc  cc_recv;                /* receive connection count */
+        u_long  t_duration;             /* connection duration */
+
+/* TUBA stuff */
+        caddr_t t_tuba_pcb;             /* next level down pcb for TCP over z */
+/* More RTT stuff */
+        u_long  t_rttupdated;           /* number of times rtt sampled */
+
+#if defined(TCP_FACK) || defined(TCP_AUTO)
+        u_short t_alt_flags;   /* experimental flags */
+#define TAF_SACK_SEEN   0x0001 /* other side can send SACKs */
+#define TAF_RECOVERY    0x0002 /* We are recovering from a lost segment */
+#define TAF_RATEHALF    0x0004 /* We are reducing the window during recovery */
+#define TAF_REPAIRED    0x0008 /* We have retransmitted something */
+#define TAF_WHOLD       0x0010 /* we are in the window hold state */
+#define TAF_TOGGLE      0x0020 /* divide by 2 toggle */
+#define TAF_AUTO_OFF    0x0040 /* autotuning is forced off */
+#endif
+
+#if defined(TCP_SACK) || defined(TCP_FACK)
+#define SACK_LIST_LEN 10
+
+/* Needed for SACK and FACK:  */
+        struct sackblock sack_list[SACK_LIST_LEN];  /*  Hack, keep 5 most recent SACKs  */
+        struct scoreboard scrb;
+        int snd_retran_data;
+        tcp_seq recover;
+#endif
+#ifdef TCP_SACK
+        int pipe;
+#endif
+#ifdef TCP_FACK
+        tcp_seq snd_fack;
+#define TCP_FACK_REXMTTHRESH 3    /* number of SACKs before retransmitting a block */
+        u_long lothresh;                /* recovery window floor */
+        u_long hithresh;                /* maximum window following recovery */
+#endif
+};
+
+/*
+ * Structure to hold TCP options that are only used during segment
+ * processing (in tcp_input), but not held in the tcpcb.
+ * It's basically used to reduce the number of parameters
+ * to tcp_dooptions.
+ */
+struct tcpopt {
+        u_long  to_flag;                /* which options are present */
+#define TOF_TS          0x0001          /* timestamp */
+#define TOF_CC          0x0002          /* CC and CCnew are exclusive */
+#define TOF_CCNEW       0x0004
+#define TOF_CCECHO      0x0008
+        u_long  to_tsval;
+        u_long  to_tsecr;
+        tcp_cc  to_cc;          /* holds CC or CCnew */
+        tcp_cc  to_ccecho;
+};
+
+/*
+ * The TAO cache entry which is stored in the protocol family specific
+ * portion of the route metrics.
+ */
+struct rmxp_tao {
+        tcp_cc  tao_cc;                 /* latest CC in valid SYN */
+        tcp_cc  tao_ccsent;             /* latest CC sent to peer */
+        u_short tao_mssopt;             /* peer's cached MSS */
+#ifdef notyet
+        u_short tao_flags;              /* cache status flags */
+#define TAOF_DONT       0x0001          /* peer doesn't understand rfc1644 */
+#define TAOF_OK         0x0002          /* peer does understand rfc1644 */
+#define TAOF_UNDEF      0               /* we don't know yet */
+#endif /* notyet */
+};
+#define rmx_taop(r)     ((struct rmxp_tao *)(r).rmx_filler)
+
+#define intotcpcb(ip)   ((struct tcpcb *)(ip)->inp_ppcb)
+#define sototcpcb(so)   (intotcpcb(sotoinpcb(so)))
+
+/*
+ * The smoothed round-trip time and estimated variance
+ * are stored as fixed point numbers scaled by the values below.
+ * For convenience, these scales are also used in smoothing the average
+ * (smoothed = (1/scale)sample + ((scale-1)/scale)smoothed).
+ * With these scales, srtt has 3 bits to the right of the binary point,
+ * and thus an "ALPHA" of 0.875.  rttvar has 2 bits to the right of the
+ * binary point, and is smoothed with an ALPHA of 0.75.
+ */
+#define TCP_RTT_SCALE           32      /* multiplier for srtt; 3 bits frac. */
+#define TCP_RTT_SHIFT           5       /* shift for srtt; 3 bits frac. */
+#define TCP_RTTVAR_SCALE        16      /* multiplier for rttvar; 2 bits */
+#define TCP_RTTVAR_SHIFT        4       /* shift for rttvar; 2 bits */
+#define TCP_DELTA_SHIFT         2       /* see tcp_input.c */
+
+/*
+ * The initial retransmission should happen at rtt + 4 * rttvar.
+ * Because of the way we do the smoothing, srtt and rttvar
+ * will each average +1/2 tick of bias.  When we compute
+ * the retransmit timer, we want 1/2 tick of rounding and
+ * 1 extra tick because of +-1/2 tick uncertainty in the
+ * firing of the timer.  The bias will give us exactly the
+ * 1.5 tick we need.  But, because the bias is
+ * statistical, we have to test that we don't drop below
+ * the minimum feasible timer (which is 2 ticks).
+ * This version of the macro adapted from a paper by Lawrence
+ * Brakmo and Larry Peterson which outlines a problem caused
+ * by insufficient precision in the original implementation,
+ * which results in inappropriately large RTO values for very
+ * fast networks.
+ */
+#define TCP_REXMTVAL(tp) \
+        ((((tp)->t_srtt >> (TCP_RTT_SHIFT - TCP_DELTA_SHIFT))  \
+          + (tp)->t_rttvar) >> TCP_DELTA_SHIFT)
+
+/* XXX
+ * We want to avoid doing m_pullup on incoming packets but that
+ * means avoiding dtom on the tcp reassembly code.  That in turn means
+ * keeping an mbuf pointer in the reassembly queue (since we might
+ * have a cluster).  As a quick hack, the source & destination
+ * port numbers (which are no longer needed once we've located the
+ * tcpcb) are overlayed with an mbuf pointer.
+ */
+#define REASS_MBUF(ti) (*(struct mbuf **)&((ti)->ti_t))
+
+/*
+ * TCP statistics.
+ * Many of these should be kept per connection,
+ * but that's inconvenient at the moment.
+ */
+struct  tcpstat {
+        u_long  tcps_connattempt;       /* connections initiated */
+        u_long  tcps_accepts;           /* connections accepted */
+        u_long  tcps_connects;          /* connections established */
+        u_long  tcps_drops;             /* connections dropped */
+        u_long  tcps_conndrops;         /* embryonic connections dropped */
+        u_long  tcps_closed;            /* conn. closed (includes drops) */
+        u_long  tcps_segstimed;         /* segs where we tried to get rtt */
+        u_long  tcps_rttupdated;        /* times we succeeded */
+        u_long  tcps_delack;            /* delayed acks sent */
+        u_long  tcps_timeoutdrop;       /* conn. dropped in rxmt timeout */
+        u_long  tcps_rexmttimeo;        /* retransmit timeouts */
+        u_long  tcps_persisttimeo;      /* persist timeouts */
+        u_long  tcps_keeptimeo;         /* keepalive timeouts */
+        u_long  tcps_keepprobe;         /* keepalive probes sent */
+        u_long  tcps_keepdrops;         /* connections dropped in keepalive */
+
+        u_long  tcps_sndtotal;          /* total packets sent */
+        u_long  tcps_sndpack;           /* data packets sent */
+        u_long  tcps_sndbyte;           /* data bytes sent */
+        u_long  tcps_sndrexmitpack;     /* data packets retransmitted */
+        u_long  tcps_sndrexmitbyte;     /* data bytes retransmitted */
+        u_long  tcps_sndacks;           /* ack-only packets sent */
+        u_long  tcps_sndprobe;          /* window probes sent */
+        u_long  tcps_sndurg;            /* packets sent with URG only */
+        u_long  tcps_sndwinup;          /* window update-only packets sent */
+        u_long  tcps_sndctrl;           /* control (SYN|FIN|RST) packets sent */
+
+        u_long  tcps_rcvtotal;          /* total packets received */
+        u_long  tcps_rcvpack;           /* packets received in sequence */
+        u_long  tcps_rcvbyte;           /* bytes received in sequence */
+        u_long  tcps_rcvbadsum;         /* packets received with ccksum errs */
+        u_long  tcps_rcvbadoff;         /* packets received with bad offset */
+        u_long  tcps_rcvshort;          /* packets received too short */
+        u_long  tcps_rcvduppack;        /* duplicate-only packets received */
+        u_long  tcps_rcvdupbyte;        /* duplicate-only bytes received */
+        u_long  tcps_rcvpartduppack;    /* packets with some duplicate data */
+        u_long  tcps_rcvpartdupbyte;    /* dup. bytes in part-dup. packets */
+        u_long  tcps_rcvoopack;         /* out-of-order packets received */
+        u_long  tcps_rcvoobyte;         /* out-of-order bytes received */
+        u_long  tcps_rcvpackafterwin;   /* packets with data after window */
+        u_long  tcps_rcvbyteafterwin;   /* bytes rcvd after window */
+        u_long  tcps_rcvafterclose;     /* packets rcvd after "close" */
+        u_long  tcps_rcvwinprobe;       /* rcvd window probe packets */
+        u_long  tcps_rcvdupack;         /* rcvd duplicate acks */
+        u_long  tcps_rcvacktoomuch;     /* rcvd acks for unsent data */
+        u_long  tcps_rcvackpack;        /* rcvd ack packets */
+        u_long  tcps_rcvackbyte;        /* bytes acked by rcvd acks */
+        u_long  tcps_rcvwinupd;         /* rcvd window update packets */
+        u_long  tcps_pawsdrop;          /* segments dropped due to PAWS */
+        u_long  tcps_predack;           /* times hdr predict ok for acks */
+        u_long  tcps_preddat;           /* times hdr predict ok for data pkts */
+        u_long  tcps_pcbcachemiss;
+        u_long  tcps_cachedrtt;         /* times cached RTT in route updated */
+        u_long  tcps_cachedrttvar;      /* times cached rttvar updated */
+        u_long  tcps_cachedssthresh;    /* times cached ssthresh updated */
+        u_long  tcps_usedrtt;           /* times RTT initialized from route */
+        u_long  tcps_usedrttvar;        /* times RTTVAR initialized from rt */
+        u_long  tcps_usedssthresh;      /* times ssthresh initialized from rt*/
+        u_long  tcps_persistdrop;       /* timeout in persist state */
+        u_long  tcps_badsyn;            /* bogus SYN, e.g. premature ACK */
+        u_long  tcps_mturesent;         /* resends due to MTU discovery */
+        u_long  tcps_listendrop;        /* listen queue overflows */
+
+#ifdef TCP_FACK
+       /* NOTE: This may break some programs that rely on this structure
+        * being fixed length.
+        */
+        u_long  tcps_fack_recovery;     /* fack: recovery episodes */
+        u_long  tcps_fack_sndpack;      /* fack: data packets sent */
+        u_long  tcps_fack_sndbyte;      /* fack: data bytes sent */
+        u_long  tcps_fack_sndrexmitpack;/* fack: data packets retransmitted */
+        u_long  tcps_fack_sndrexmitbyte;/* fack: data bytes retransmitted */
+#endif
+};
+
+/*
+ * Names for TCP sysctl objects
+ */
+#define TCPCTL_DO_RFC1323       1       /* use RFC-1323 extensions */
+#define TCPCTL_DO_RFC1644       2       /* use RFC-1644 extensions */
+#define TCPCTL_MSSDFLT          3       /* MSS default */
+#define TCPCTL_STATS            4       /* statistics (read-only) */
+#define TCPCTL_RTTDFLT          5       /* default RTT estimate */
+#define TCPCTL_KEEPIDLE         6       /* keepalive idle timer */
+#define TCPCTL_KEEPINTVL        7       /* interval to send keepalives */
+#define TCPCTL_SENDSPACE        8       /* send buffer space */
+#define TCPCTL_RECVSPACE        9       /* receive buffer space */
+#define TCPCTL_KEEPINIT         10      /* receive buffer space */
+#define TCPCTL_MAXID            11
+
+#define TCPCTL_NAMES { \
+        { 0, 0 }, \
+        { "rfc1323", CTLTYPE_INT }, \
+        { "rfc1644", CTLTYPE_INT }, \
+        { "mssdflt", CTLTYPE_INT }, \
+        { "stats", CTLTYPE_STRUCT }, \
+        { "rttdflt", CTLTYPE_INT }, \
+        { "keepidle", CTLTYPE_INT }, \
+        { "keepintvl", CTLTYPE_INT }, \
+        { "sendspace", CTLTYPE_INT }, \
+        { "recvspace", CTLTYPE_INT }, \
+        { "keepinit", CTLTYPE_INT }, \
+}
+
+#endif
diff --git a/libs/watt32/netinet/tcpip.h b/libs/watt32/netinet/tcpip.h
new file mode 100644 (file)
index 0000000..1dc1051
--- /dev/null
@@ -0,0 +1,85 @@
+/*!\file netinet/tcpip.h
+ * TCP header definitions.
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 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.
+ *
+ *      @(#)tcpip.h     8.1 (Berkeley) 6/10/93
+ * $Id: tcpip.h,v 1.4 1995/02/08 20:18:48 wollman Exp $
+ */
+
+#ifndef __NETINET_TCPIP_H
+#define __NETINET_TCPIP_H
+
+#include <sys/packon.h>
+
+/*
+ * Tcp+ip header, after ip options removed.
+ */
+struct tcpiphdr {
+        struct  ipovly ti_i;            /* overlaid ip structure */
+        struct  tcphdr ti_t;            /* tcp header */
+};
+
+#ifdef notyet
+/*
+ * Tcp+ip header, after ip options removed but including TCP options.
+ */
+struct full_tcpiphdr {
+        struct  ipovly ti_i;            /* overlaid ip structure */
+        struct  tcphdr ti_t;            /* tcp header */
+        char    ti_o[TCP_MAXOLEN];      /* space for tcp options */
+};
+#endif /* notyet */
+
+#include <sys/packoff.h>
+
+#define ti_next         ti_i.ih_next
+#define ti_prev         ti_i.ih_prev
+#define ti_x1           ti_i.ih_x1
+#define ti_pr           ti_i.ih_pr
+#define ti_len          ti_i.ih_len
+#define ti_src          ti_i.ih_src
+#define ti_dst          ti_i.ih_dst
+#define ti_sport        ti_t.th_sport
+#define ti_dport        ti_t.th_dport
+#define ti_seq          ti_t.th_seq
+#define ti_ack          ti_t.th_ack
+#define ti_x2           ti_t.th_x2
+#define ti_off          ti_t.th_off
+#define ti_flags        ti_t.th_flags
+#define ti_win          ti_t.th_win
+#define ti_sum          ti_t.th_sum
+#define ti_urp          ti_t.th_urp
+
+#endif
diff --git a/libs/watt32/netinet/udp.h b/libs/watt32/netinet/udp.h
new file mode 100644 (file)
index 0000000..f83c179
--- /dev/null
@@ -0,0 +1,54 @@
+/*!\file netinet/udp.h
+ * UDP header.
+ */
+/*
+ * Copyright (c) 1982, 1986, 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.
+ *
+ *      @(#)udp.h       8.1 (Berkeley) 6/10/93
+ * $FreeBSD: src/sys/netinet/udp.h,v 1.7 1999/08/28 00:49:34 peter Exp $
+ */
+
+#ifndef _NETINET_UDP_H_
+#define _NETINET_UDP_H_
+
+/*
+ * Udp protocol header.
+ * Per RFC 768, September, 1981.
+ */
+struct udphdr {
+        u_short uh_sport;               /* source port */
+        u_short uh_dport;               /* destination port */
+        u_short uh_ulen;                /* udp length */
+        u_short uh_sum;                 /* udp checksum */
+};
+
+#endif
diff --git a/libs/watt32/netinet/udp_var.h b/libs/watt32/netinet/udp_var.h
new file mode 100644 (file)
index 0000000..fc745f0
--- /dev/null
@@ -0,0 +1,100 @@
+/*!\file netinet/udp_var.h
+ * Internal UDP statistics.
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 1989, 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.
+ *
+ *      @(#)udp_var.h   8.1 (Berkeley) 6/10/93
+ * $Id: udp_var.h,v 1.9 1996/06/05 17:20:35 wollman Exp $
+ */
+
+#ifndef __NETINET_UDP_VAR_H
+#define __NETINET_UDP_VAR_H
+
+/*
+ * UDP kernel structures and variables.
+ */
+#ifdef NOT_NEEDED
+  #include <sys/packon.h>
+  struct  udpiphdr {
+          struct  ipovly ui_i;            /* overlaid ip structure */
+          struct  udphdr ui_u;            /* udp header */
+        };
+  #include <sys/packoff.h>
+
+  #define ui_next         ui_i.ih_next
+  #define ui_prev         ui_i.ih_prev
+  #define ui_x1           ui_i.ih_x1
+  #define ui_pr           ui_i.ih_pr
+  #define ui_len          ui_i.ih_len
+  #define ui_src          ui_i.ih_src
+  #define ui_dst          ui_i.ih_dst
+  #define ui_sport        ui_u.uh_sport
+  #define ui_dport        ui_u.uh_dport
+  #define ui_ulen         ui_u.uh_ulen
+  #define ui_sum          ui_u.uh_sum
+#endif
+
+struct  udpstat {
+        /* input statistics: */
+        u_long  udps_ipackets;          /* total input packets */
+        u_long  udps_hdrops;            /* packet shorter than header */
+        u_long  udps_badsum;            /* checksum error */
+        u_long  udps_badlen;            /* data length larger than packet */
+        u_long  udps_noport;            /* no socket on port */
+        u_long  udps_noportbcast;       /* of above, arrived as broadcast */
+        u_long  udps_fullsock;          /* not delivered, input socket full */
+        u_long  udpps_pcbcachemiss;     /* input packets missing pcb cache */
+        u_long  udpps_pcbhashmiss;      /* input packets not for hashed pcb */
+                                /* output statistics: */
+        u_long  udps_opackets;          /* total output packets */
+};
+
+/*
+ * Names for UDP sysctl objects
+ */
+#define UDPCTL_CHECKSUM         1       /* checksum UDP packets */
+#define UDPCTL_STATS            2       /* statistics (read-only) */
+#define UDPCTL_MAXDGRAM         3       /* max datagram size */
+#define UDPCTL_RECVSPACE        4       /* default receive buffer space */
+#define UDPCTL_MAXID            5
+
+#define UDPCTL_NAMES { \
+        { 0, 0 }, \
+        { "checksum", CTLTYPE_INT }, \
+        { "stats", CTLTYPE_STRUCT }, \
+        { "maxdgram", CTLTYPE_INT }, \
+        { "recvspace", CTLTYPE_INT }, \
+}
+
+#endif
diff --git a/libs/watt32/netinet6/ah.h b/libs/watt32/netinet6/ah.h
new file mode 100644 (file)
index 0000000..a859aae
--- /dev/null
@@ -0,0 +1,98 @@
+/*!\file netinet6/ah.h
+ * Authentication Header.
+ */
+
+/*      $FreeBSD: src/sys/netinet6/ah.h,v 1.7 2002/04/19 04:46:22 suz Exp $     */
+/*      $KAME: ah.h,v 1.16 2001/09/04 08:43:19 itojun Exp $     */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+/*
+ * RFC1826/2402 authentication header.
+ */
+
+#ifndef _NETINET6_AH_H_
+#define _NETINET6_AH_H_
+
+#if defined(_KERNEL) && !defined(_LKM)
+#include "opt_inet.h"
+#endif
+
+struct ah {
+        u_int8_t        ah_nxt;         /* Next Header */
+        u_int8_t        ah_len;         /* Length of data, in 32bit */
+        u_int16_t       ah_reserve;     /* Reserved for future use */
+        u_int32_t       ah_spi;         /* Security parameter index */
+        /* variable size, 32bit bound*/ /* Authentication data */
+};
+
+struct newah {
+        u_int8_t        ah_nxt;         /* Next Header */
+        u_int8_t        ah_len;         /* Length of data + 1, in 32bit */
+        u_int16_t       ah_reserve;     /* Reserved for future use */
+        u_int32_t       ah_spi;         /* Security parameter index */
+        u_int32_t       ah_seq;         /* Sequence number field */
+        /* variable size, 32bit bound*/ /* Authentication data */
+};
+
+#ifdef _KERNEL
+struct secasvar;
+
+struct ah_algorithm_state {
+        struct secasvar *sav;
+        void* foo;      /* per algorithm data - maybe */
+};
+
+struct ah_algorithm {
+        int (*sumsiz) __P((struct secasvar *));
+        int (*mature) __P((struct secasvar *));
+        int keymin;     /* in bits */
+        int keymax;     /* in bits */
+        const char *name;
+        int (*init) __P((struct ah_algorithm_state *, struct secasvar *));
+        void (*update) __P((struct ah_algorithm_state *, caddr_t, size_t));
+        void (*result) __P((struct ah_algorithm_state *, caddr_t));
+};
+
+#define AH_MAXSUMSIZE   16
+
+extern const struct ah_algorithm *ah_algorithm_lookup __P((int));
+
+/* cksum routines */
+extern int ah_hdrlen __P((struct secasvar *));
+
+extern size_t ah_hdrsiz __P((struct ipsecrequest *));
+extern void ah4_input __P((struct mbuf *, int));
+extern int ah4_output __P((struct mbuf *, struct ipsecrequest *));
+extern int ah4_calccksum __P((struct mbuf *, caddr_t, size_t,
+        const struct ah_algorithm *, struct secasvar *));
+#endif /* _KERNEL */
+
+#endif /* _NETINET6_AH_H_ */
diff --git a/libs/watt32/netinet6/ah6.h b/libs/watt32/netinet6/ah6.h
new file mode 100644 (file)
index 0000000..1f61f37
--- /dev/null
@@ -0,0 +1,56 @@
+/*!\file netinet6/ah6.h
+ * IPv6 Authentication header.
+ */
+
+/*      $FreeBSD: src/sys/netinet6/ah6.h,v 1.4 2001/06/11 12:39:03 ume Exp $    */
+/*      $KAME: ah.h,v 1.13 2000/10/18 21:28:00 itojun Exp $     */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+/*
+ * RFC1826/2402 authentication header.
+ */
+
+#ifndef _NETINET6_AH6_H_
+#define _NETINET6_AH6_H_
+
+#ifdef _KERNEL
+struct secasvar;
+
+extern int ah6_input (struct mbuf **, int *, int));
+extern int ah6_output (struct mbuf *, u_char *, struct mbuf *,
+                       struct ipsecrequest *);
+extern int ah6_calccksum (struct mbuf *, caddr_t, size_t,
+                          const struct ah_algorithm *, struct secasvar *);
+
+extern void ah6_ctlinput (int, struct sockaddr *, void *);
+#endif
+
+#endif /*_NETINET6_AH6_H_*/
diff --git a/libs/watt32/netinet6/esp.h b/libs/watt32/netinet6/esp.h
new file mode 100644 (file)
index 0000000..c5b61b9
--- /dev/null
@@ -0,0 +1,113 @@
+/*!\file netinet6/esp.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/esp.h,v 1.6 2002/04/19 04:46:22 suz Exp $    */
+/*      $KAME: esp.h,v 1.19 2001/09/04 08:43:19 itojun Exp $    */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+/*
+ * RFC1827/2406 Encapsulated Security Payload.
+ */
+
+#ifndef _NETINET6_ESP_H_
+#define _NETINET6_ESP_H_
+
+#if defined(_KERNEL) && !defined(_LKM)
+#include "opt_inet.h"
+#endif
+
+struct esp {
+       u_int32_t       esp_spi;        /* ESP */
+       /* variable size, 32bit bound *//* Initialization Vector */
+       /* variable size */             /* Payload data */
+       /* variable size */             /* padding */
+       /* 8bit */                      /* pad size */
+       /* 8bit */                      /* next header */
+       /* 8bit */                      /* next header */
+       /* variable size, 32bit bound */ /* Authentication data (new IPsec) */
+     };
+
+struct newesp {
+       u_int32_t       esp_spi;        /* ESP */
+       u_int32_t       esp_seq;        /* Sequence number */
+       /* variable size */             /* (IV and) Payload data */
+       /* variable size */             /* padding */
+       /* 8bit */                      /* pad size */
+       /* 8bit */                      /* next header */
+       /* 8bit */                      /* next header */
+       /* variable size, 32bit bound *//* Authentication data */
+     };
+
+struct esptail {
+       u_int8_t        esp_padlen;     /* pad length */
+       u_int8_t        esp_nxt;        /* Next header */
+       /* variable size, 32bit bound *//* Authentication data (new IPsec)*/
+     };
+
+#ifdef _KERNEL
+struct secasvar;
+
+struct esp_algorithm {
+       size_t padbound;                 /* pad boundary, in byte */
+       int    ivlenval;                 /* iv length, in byte */
+       int  (*mature) (struct secasvar *);
+       int    keymin;                   /* in bits */
+       int    keymax;                   /* in bits */
+       int  (*schedlen) (const struct esp_algorithm *);
+       const char *name;
+       int  (*ivlen) (const struct esp_algorithm *, struct secasvar *);
+       int  (*decrypt) (struct mbuf *, size_t,
+                       struct secasvar *, const struct esp_algorithm *, int);
+       int  (*encrypt) (struct mbuf *, size_t, size_t,
+                       struct secasvar *, const struct esp_algorithm *, int);
+       /* not supposed to be called directly */
+       int  (*schedule) (const struct esp_algorithm *, struct secasvar *);
+       int  (*blockdecrypt) (const struct esp_algorithm *,
+                             struct secasvar *, u_int8_t *, u_int8_t *);
+       int  (*blockencrypt) (const struct esp_algorithm *,
+                             struct secasvar *, u_int8_t *, u_int8_t *);
+     };
+
+extern const struct esp_algorithm *esp_algorithm_lookup (int);
+extern int                         esp_max_ivlen (void);
+
+/* crypt routines */
+extern int    esp4_output (struct mbuf *, struct ipsecrequest *);
+extern void   esp4_input (struct mbuf *, int);
+extern size_t esp_hdrsiz (struct ipsecrequest *);
+
+extern int    esp_schedule (const struct esp_algorithm *, struct secasvar *);
+extern int    esp_auth (struct mbuf *, size_t, size_t,
+                        struct secasvar *, u_char *);
+#endif /* _KERNEL */
+
+#endif /* _NETINET6_ESP_H_ */
diff --git a/libs/watt32/netinet6/esp6.h b/libs/watt32/netinet6/esp6.h
new file mode 100644 (file)
index 0000000..795c2fd
--- /dev/null
@@ -0,0 +1,52 @@
+/*!\file netinet6/esp6.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/esp6.h,v 1.4 2001/06/11 12:39:04 ume Exp $   */
+/*     $KAME: esp.h,v 1.16 2000/10/18 21:28:00 itojun Exp $    */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+/*
+ * RFC1827/2406 Encapsulated Security Payload.
+ */
+
+#ifndef _NETINET6_ESP6_H_
+#define _NETINET6_ESP6_H_
+
+#ifdef _KERNEL
+extern int esp6_output __P((struct mbuf *, u_char *, struct mbuf *,
+       struct ipsecrequest *));
+extern int esp6_input __P((struct mbuf **, int *, int));
+
+extern void esp6_ctlinput __P((int, struct sockaddr *, void *));
+#endif /*_KERNEL*/
+
+#endif /*_NETINET6_ESP6_H_*/
diff --git a/libs/watt32/netinet6/esp_rijn.h b/libs/watt32/netinet6/esp_rijn.h
new file mode 100644 (file)
index 0000000..2bfe336
--- /dev/null
@@ -0,0 +1,43 @@
+/*!\file netinet6/esp_rijn.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/esp_rijndael.h,v 1.1 2001/06/11 12:39:05 ume Exp $   */
+/*     $KAME: esp_rijndael.h,v 1.1 2000/09/20 18:15:22 itojun Exp $    */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+int esp_rijndael_schedlen __P((const struct esp_algorithm *));
+int esp_rijndael_schedule __P((const struct esp_algorithm *,
+       struct secasvar *));
+int esp_rijndael_blockdecrypt __P((const struct esp_algorithm *,
+       struct secasvar *, u_int8_t *, u_int8_t *));
+int esp_rijndael_blockencrypt __P((const struct esp_algorithm *,
+       struct secasvar *, u_int8_t *, u_int8_t *));
diff --git a/libs/watt32/netinet6/in6.h b/libs/watt32/netinet6/in6.h
new file mode 100644 (file)
index 0000000..d1433a5
--- /dev/null
@@ -0,0 +1,666 @@
+/*!\file netinet6/in6.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/in6.h,v 1.22 2002/07/25 20:40:09 ume Exp $   */
+/*     $KAME: in6.h,v 1.89 2001/05/27 13:28:35 itojun Exp $    */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 1990, 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.
+ *
+ *     @(#)in.h        8.3 (Berkeley) 1/3/94
+ */
+
+#ifndef _NETINET6_IN6_H_
+#define _NETINET6_IN6_H_
+
+/*
+ * Identification of the network protocol stack
+ * for *BSD-current/release: http://www.kame.net/dev/cvsweb.cgi/kame/COVERAGE
+ * has the table of implementation/integration differences.
+ */
+#define __KAME__
+#define __KAME_VERSION         "20010528/FreeBSD"
+
+/*
+ * Local port number conventions:
+ *
+ * Ports < IPPORT_RESERVED are reserved for privileged processes (e.g. root),
+ * unless a kernel is compiled with IPNOPRIVPORTS defined.
+ *
+ * When a user does a bind(2) or connect(2) with a port number of zero,
+ * a non-conflicting local port address is chosen.
+ *
+ * The default range is IPPORT_ANONMIN to IPPORT_ANONMAX, although
+ * that is settable by sysctl(3); net.inet.ip.anonportmin and
+ * net.inet.ip.anonportmax respectively.
+ *
+ * A user may set the IPPROTO_IP option IP_PORTRANGE to change this
+ * default assignment range.
+ *
+ * The value IP_PORTRANGE_DEFAULT causes the default behavior.
+ *
+ * The value IP_PORTRANGE_HIGH is the same as IP_PORTRANGE_DEFAULT,
+ * and exists only for FreeBSD compatibility purposes.
+ *
+ * The value IP_PORTRANGE_LOW changes the range to the "low" are
+ * that is (by convention) restricted to privileged processes.
+ * This convention is based on "vouchsafe" principles only.
+ * It is only secure if you trust the remote host to restrict these ports.
+ * The range is IPPORT_RESERVEDMIN to IPPORT_RESERVEDMAX.
+ */
+#if __BSD_VISIBLE
+#define        IPV6PORT_RESERVED       1024
+#define        IPV6PORT_ANONMIN        49152
+#define        IPV6PORT_ANONMAX        65535
+#define        IPV6PORT_RESERVEDMIN    600
+#define        IPV6PORT_RESERVEDMAX    (IPV6PORT_RESERVED-1)
+#endif
+
+/*
+ * IPv6 address
+ */
+struct in6_addr {
+       union {
+               uint8_t         __u6_addr8[16];
+               uint16_t        __u6_addr16[8];
+               uint32_t        __u6_addr32[4];
+       } __u6_addr;                    /* 128-bit IP6 address */
+};
+
+#define s6_addr   __u6_addr.__u6_addr8
+#ifdef _KERNEL /* XXX nonstandard */
+#define s6_addr8  __u6_addr.__u6_addr8
+#define s6_addr16 __u6_addr.__u6_addr16
+#define s6_addr32 __u6_addr.__u6_addr32
+#endif
+
+#define INET6_ADDRSTRLEN       46
+
+/*
+ * XXX missing POSIX.1-2001 macro IPPROTO_IPV6.
+ */
+
+/*
+ * Socket address for IPv6
+ */
+#if __BSD_VISIBLE
+#define SIN6_LEN
+#endif
+
+struct sockaddr_in6 {
+       uint8_t         sin6_len;       /* length of this struct */
+       sa_family_t     sin6_family;    /* AF_INET6 */
+       in_port_t       sin6_port;      /* Transport layer port # */
+       uint32_t        sin6_flowinfo;  /* IP6 flow information */
+       struct in6_addr sin6_addr;      /* IP6 address */
+       uint32_t        sin6_scope_id;  /* scope zone index */
+};
+
+/*
+ * Local definition for masks
+ */
+#ifdef _KERNEL /* XXX nonstandard */
+#define IN6MASK0       {{{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }}}
+#define IN6MASK32      {{{ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, \
+                           0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}}
+#define IN6MASK64      {{{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \
+                           0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}}
+#define IN6MASK96      {{{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \
+                           0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }}}
+#define IN6MASK128     {{{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \
+                           0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }}}
+#endif
+
+#ifdef _KERNEL
+extern const struct sockaddr_in6 sa6_any;
+
+extern const struct in6_addr in6mask0;
+extern const struct in6_addr in6mask32;
+extern const struct in6_addr in6mask64;
+extern const struct in6_addr in6mask96;
+extern const struct in6_addr in6mask128;
+#endif /* _KERNEL */
+
+/*
+ * Macros started with IPV6_ADDR is KAME local
+ */
+#ifdef _KERNEL /* XXX nonstandard */
+#if _BYTE_ORDER == _BIG_ENDIAN
+#define IPV6_ADDR_INT32_ONE    1
+#define IPV6_ADDR_INT32_TWO    2
+#define IPV6_ADDR_INT32_MNL    0xff010000
+#define IPV6_ADDR_INT32_MLL    0xff020000
+#define IPV6_ADDR_INT32_SMP    0x0000ffff
+#define IPV6_ADDR_INT16_ULL    0xfe80
+#define IPV6_ADDR_INT16_USL    0xfec0
+#define IPV6_ADDR_INT16_MLL    0xff02
+#elif _BYTE_ORDER == _LITTLE_ENDIAN
+#define IPV6_ADDR_INT32_ONE    0x01000000
+#define IPV6_ADDR_INT32_TWO    0x02000000
+#define IPV6_ADDR_INT32_MNL    0x000001ff
+#define IPV6_ADDR_INT32_MLL    0x000002ff
+#define IPV6_ADDR_INT32_SMP    0xffff0000
+#define IPV6_ADDR_INT16_ULL    0x80fe
+#define IPV6_ADDR_INT16_USL    0xc0fe
+#define IPV6_ADDR_INT16_MLL    0x02ff
+#endif
+#endif
+
+/*
+ * Definition of some useful macros to handle IP6 addresses
+ */
+#if __BSD_VISIBLE
+#define IN6ADDR_ANY_INIT \
+       {{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+           0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}}
+#define IN6ADDR_LOOPBACK_INIT \
+       {{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+           0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
+#define IN6ADDR_NODELOCAL_ALLNODES_INIT \
+       {{{ 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+           0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
+#define IN6ADDR_LINKLOCAL_ALLNODES_INIT \
+       {{{ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+           0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
+#define IN6ADDR_LINKLOCAL_ALLROUTERS_INIT \
+       {{{ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
+           0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }}}
+#endif
+
+extern const struct in6_addr in6addr_any;
+extern const struct in6_addr in6addr_loopback;
+#if __BSD_VISIBLE
+extern const struct in6_addr in6addr_nodelocal_allnodes;
+extern const struct in6_addr in6addr_linklocal_allnodes;
+extern const struct in6_addr in6addr_linklocal_allrouters;
+#endif
+
+/*
+ * Equality
+ * NOTE: Some of kernel programming environment (for example, openbsd/sparc)
+ * does not supply memcmp().  For userland memcmp() is preferred as it is
+ * in ANSI standard.
+ */
+#ifdef _KERNEL
+#define IN6_ARE_ADDR_EQUAL(a, b)                       \
+    (bcmp(&(a)->s6_addr[0], &(b)->s6_addr[0], sizeof(struct in6_addr)) == 0)
+#else
+#if __BSD_VISIBLE
+#define IN6_ARE_ADDR_EQUAL(a, b)                       \
+    (memcmp(&(a)->s6_addr[0], &(b)->s6_addr[0], sizeof(struct in6_addr)) == 0)
+#endif
+#endif
+
+#ifdef _KERNEL                 /* non standard */
+/* see if two addresses are equal in a scope-conscious manner. */
+#define SA6_ARE_ADDR_EQUAL(a, b) \
+       (((a)->sin6_scope_id == 0 || (b)->sin6_scope_id == 0 || \
+         ((a)->sin6_scope_id == (b)->sin6_scope_id)) && \
+        (bcmp(&(a)->sin6_addr, &(b)->sin6_addr, sizeof(struct in6_addr)) == 0))
+#endif
+
+/*
+ * Unspecified
+ */
+#define IN6_IS_ADDR_UNSPECIFIED(a)     \
+       ((*(const u_int32_t *)(const void *)(&(a)->s6_addr[0]) == 0) && \
+        (*(const u_int32_t *)(const void *)(&(a)->s6_addr[4]) == 0) && \
+        (*(const u_int32_t *)(const void *)(&(a)->s6_addr[8]) == 0) && \
+        (*(const u_int32_t *)(const void *)(&(a)->s6_addr[12]) == 0))
+
+/*
+ * Loopback
+ */
+#define IN6_IS_ADDR_LOOPBACK(a)                \
+       ((*(const u_int32_t *)(const void *)(&(a)->s6_addr[0]) == 0) && \
+        (*(const u_int32_t *)(const void *)(&(a)->s6_addr[4]) == 0) && \
+        (*(const u_int32_t *)(const void *)(&(a)->s6_addr[8]) == 0) && \
+        (*(const u_int32_t *)(const void *)(&(a)->s6_addr[12]) == ntohl(1)))
+
+/*
+ * IPv4 compatible
+ */
+#define IN6_IS_ADDR_V4COMPAT(a)                \
+       ((*(const u_int32_t *)(const void *)(&(a)->s6_addr[0]) == 0) && \
+        (*(const u_int32_t *)(const void *)(&(a)->s6_addr[4]) == 0) && \
+        (*(const u_int32_t *)(const void *)(&(a)->s6_addr[8]) == 0) && \
+        (*(const u_int32_t *)(const void *)(&(a)->s6_addr[12]) != 0) &&        \
+        (*(const u_int32_t *)(const void *)(&(a)->s6_addr[12]) != ntohl(1)))
+
+/*
+ * Mapped
+ */
+#define IN6_IS_ADDR_V4MAPPED(a)                      \
+       ((*(const u_int32_t *)(const void *)(&(a)->s6_addr[0]) == 0) && \
+        (*(const u_int32_t *)(const void *)(&(a)->s6_addr[4]) == 0) && \
+        (*(const u_int32_t *)(const void *)(&(a)->s6_addr[8]) == ntohl(0x0000ffff)))
+
+/*
+ * KAME Scope Values
+ */
+
+#ifdef _KERNEL /* XXX nonstandard */
+#define IPV6_ADDR_SCOPE_NODELOCAL      0x01
+#define IPV6_ADDR_SCOPE_LINKLOCAL      0x02
+#define IPV6_ADDR_SCOPE_SITELOCAL      0x05
+#define IPV6_ADDR_SCOPE_ORGLOCAL       0x08    /* just used in this file */
+#define IPV6_ADDR_SCOPE_GLOBAL         0x0e
+#else
+#define __IPV6_ADDR_SCOPE_NODELOCAL    0x01
+#define __IPV6_ADDR_SCOPE_LINKLOCAL    0x02
+#define __IPV6_ADDR_SCOPE_SITELOCAL    0x05
+#define __IPV6_ADDR_SCOPE_ORGLOCAL     0x08    /* just used in this file */
+#define __IPV6_ADDR_SCOPE_GLOBAL       0x0e
+#endif
+
+/*
+ * Unicast Scope
+ * Note that we must check topmost 10 bits only, not 16 bits (see RFC2373).
+ */
+#define IN6_IS_ADDR_LINKLOCAL(a)       \
+       (((a)->s6_addr[0] == 0xfe) && (((a)->s6_addr[1] & 0xc0) == 0x80))
+#define IN6_IS_ADDR_SITELOCAL(a)       \
+       (((a)->s6_addr[0] == 0xfe) && (((a)->s6_addr[1] & 0xc0) == 0xc0))
+
+/*
+ * Multicast
+ */
+#define IN6_IS_ADDR_MULTICAST(a)       ((a)->s6_addr[0] == 0xff)
+
+#ifdef _KERNEL /* XXX nonstandard */
+#define IPV6_ADDR_MC_SCOPE(a)          ((a)->s6_addr[1] & 0x0f)
+#else
+#define __IPV6_ADDR_MC_SCOPE(a)                ((a)->s6_addr[1] & 0x0f)
+#endif
+
+/*
+ * Multicast Scope
+ */
+#ifdef _KERNEL /* refers nonstandard items */
+#define IN6_IS_ADDR_MC_NODELOCAL(a)    \
+       (IN6_IS_ADDR_MULTICAST(a) &&    \
+        (IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_NODELOCAL))
+#define IN6_IS_ADDR_MC_LINKLOCAL(a)    \
+       (IN6_IS_ADDR_MULTICAST(a) &&    \
+        (IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_LINKLOCAL))
+#define IN6_IS_ADDR_MC_SITELOCAL(a)    \
+       (IN6_IS_ADDR_MULTICAST(a) &&    \
+        (IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_SITELOCAL))
+#define IN6_IS_ADDR_MC_ORGLOCAL(a)     \
+       (IN6_IS_ADDR_MULTICAST(a) &&    \
+        (IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_ORGLOCAL))
+#define IN6_IS_ADDR_MC_GLOBAL(a)       \
+       (IN6_IS_ADDR_MULTICAST(a) &&    \
+        (IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_GLOBAL))
+#else
+#define IN6_IS_ADDR_MC_NODELOCAL(a)    \
+       (IN6_IS_ADDR_MULTICAST(a) &&    \
+        (__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_NODELOCAL))
+#define IN6_IS_ADDR_MC_LINKLOCAL(a)    \
+       (IN6_IS_ADDR_MULTICAST(a) &&    \
+        (__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_LINKLOCAL))
+#define IN6_IS_ADDR_MC_SITELOCAL(a)    \
+       (IN6_IS_ADDR_MULTICAST(a) &&    \
+        (__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_SITELOCAL))
+#define IN6_IS_ADDR_MC_ORGLOCAL(a)     \
+       (IN6_IS_ADDR_MULTICAST(a) &&    \
+        (__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_ORGLOCAL))
+#define IN6_IS_ADDR_MC_GLOBAL(a)       \
+       (IN6_IS_ADDR_MULTICAST(a) &&    \
+        (__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_GLOBAL))
+#endif
+
+#ifdef _KERNEL /* nonstandard */
+/*
+ * KAME Scope
+ */
+#define IN6_IS_SCOPE_LINKLOCAL(a)      \
+       ((IN6_IS_ADDR_LINKLOCAL(a)) ||  \
+        (IN6_IS_ADDR_MC_LINKLOCAL(a)))
+
+#define IFA6_IS_DEPRECATED(a) \
+       ((a)->ia6_lifetime.ia6t_preferred != 0 && \
+        (a)->ia6_lifetime.ia6t_preferred < time_second)
+#define IFA6_IS_INVALID(a) \
+       ((a)->ia6_lifetime.ia6t_expire != 0 && \
+        (a)->ia6_lifetime.ia6t_expire < time_second)
+#endif /* _KERNEL */
+
+/*
+ * IP6 route structure
+ */
+struct route_in6 {
+       struct  rtentry *ro_rt;
+       struct  sockaddr_in6 ro_dst;
+};
+
+/*
+ * Options for use with [gs]etsockopt at the IPV6 level.
+ * First word of comment is data type; bool is stored in int.
+ */
+#define IPV6_JOIN_GROUP                12 /* ip6_mreq; join a group membership */
+#define IPV6_LEAVE_GROUP       13 /* ip6_mreq; leave a group membership */
+#define IPV6_MULTICAST_HOPS    10 /* int; set/get IP6 multicast hops */
+#define IPV6_MULTICAST_IF      9  /* u_int; set/get IP6 multicast i/f  */
+#define IPV6_MULTICAST_LOOP    11 /* u_int; set/get IP6 multicast loopback */
+#define IPV6_UNICAST_HOPS      4  /* int; IP6 hops */
+#define IPV6_V6ONLY            27 /* bool; only bind INET6 at wildcard bind */
+
+#if __BSD_VISIBLE
+/* no hdrincl */
+#if 0 /* the followings are relic in IPv4 and hence are disabled */
+#define IPV6_OPTIONS           1  /* buf/ip6_opts; set/get IP6 options */
+#define IPV6_RECVOPTS          5  /* bool; receive all IP6 opts w/dgram */
+#define IPV6_RECVRETOPTS       6  /* bool; receive IP6 opts for response */
+#define IPV6_RECVDSTADDR       7  /* bool; receive IP6 dst addr w/dgram */
+#define IPV6_RETOPTS           8  /* ip6_opts; set/get IP6 options */
+#endif
+#define IPV6_SOCKOPT_RESERVED1 3  /* reserved for future use */
+#define IPV6_PORTRANGE         14 /* int; range to choose for unspec port */
+#define ICMP6_FILTER           18 /* icmp6_filter; icmp6 filter */
+/* RFC2292 options */
+#define IPV6_PKTINFO           19 /* bool; send/recv if, src/dst addr */
+#define IPV6_HOPLIMIT          20 /* bool; hop limit */
+#define IPV6_NEXTHOP           21 /* bool; next hop addr */
+#define IPV6_HOPOPTS           22 /* bool; hop-by-hop option */
+#define IPV6_DSTOPTS           23 /* bool; destination option */
+#define IPV6_RTHDR             24 /* bool; routing header */
+#define IPV6_PKTOPTIONS                25 /* buf/cmsghdr; set/get IPv6 options */
+
+#define IPV6_CHECKSUM          26 /* int; checksum offset for raw socket */
+#ifndef _KERNEL
+#define IPV6_BINDV6ONLY                IPV6_V6ONLY
+#endif
+
+#if 1 /* IPSEC */
+#define IPV6_IPSEC_POLICY      28 /* struct; get/set security policy */
+#endif
+#define IPV6_FAITH             29 /* bool; accept FAITH'ed connections */
+
+#if 1 /* IPV6FIREWALL */
+#define IPV6_FW_ADD            30 /* add a firewall rule to chain */
+#define IPV6_FW_DEL            31 /* delete a firewall rule from chain */
+#define IPV6_FW_FLUSH          32 /* flush firewall rule chain */
+#define IPV6_FW_ZERO           33 /* clear single/all firewall counter(s) */
+#define IPV6_FW_GET            34 /* get entire firewall rule chain */
+#endif
+
+/* to define items, should talk with KAME guys first, for *BSD compatibility */
+
+#define IPV6_RTHDR_LOOSE     0 /* this hop need not be a neighbor. XXX old spec */
+#define IPV6_RTHDR_STRICT    1 /* this hop must be a neighbor. XXX old spec */
+#define IPV6_RTHDR_TYPE_0    0 /* IPv6 routing header type 0 */
+
+/*
+ * Defaults and limits for options
+ */
+#define IPV6_DEFAULT_MULTICAST_HOPS 1  /* normally limit m'casts to 1 hop */
+#define IPV6_DEFAULT_MULTICAST_LOOP 1  /* normally hear sends if a member */
+
+/*
+ * Argument structure for IPV6_JOIN_GROUP and IPV6_LEAVE_GROUP.
+ */
+struct ipv6_mreq {
+       struct in6_addr ipv6mr_multiaddr;
+       unsigned int    ipv6mr_interface;
+};
+
+/*
+ * IPV6_PKTINFO: Packet information(RFC2292 sec 5)
+ */
+struct in6_pktinfo {
+       struct in6_addr ipi6_addr;      /* src/dst IPv6 address */
+       unsigned int    ipi6_ifindex;   /* send/recv interface index */
+};
+
+/*
+ * Argument for IPV6_PORTRANGE:
+ * - which range to search when port is unspecified at bind() or connect()
+ */
+#define        IPV6_PORTRANGE_DEFAULT  0       /* default range */
+#define        IPV6_PORTRANGE_HIGH     1       /* "high" - request firewall bypass */
+#define        IPV6_PORTRANGE_LOW      2       /* "low" - vouchsafe security */
+
+/*
+ * Definitions for inet6 sysctl operations.
+ *
+ * Third level is protocol number.
+ * Fourth level is desired variable within that protocol.
+ */
+#define IPV6PROTO_MAXID        (IPPROTO_PIM + 1)       /* don't list to IPV6PROTO_MAX */
+
+#define CTL_IPV6PROTO_NAMES { \
+       { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
+       { 0, 0 }, \
+       { "tcp6", CTLTYPE_NODE }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { "udp6", CTLTYPE_NODE }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
+       { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
+       { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
+       { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
+       { 0, 0 }, \
+       { "ip6", CTLTYPE_NODE }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
+       { 0, 0 }, \
+       { "ipsec6", CTLTYPE_NODE }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { "icmp6", CTLTYPE_NODE }, \
+       { 0, 0 }, \
+       { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
+       { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
+       { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
+       { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
+       { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
+       { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
+       { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
+       { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { "pim6", CTLTYPE_NODE }, \
+}
+
+/*
+ * Names for IP sysctl objects
+ */
+#define IPV6CTL_FORWARDING     1       /* act as router */
+#define IPV6CTL_SENDREDIRECTS  2       /* may send redirects when forwarding*/
+#define IPV6CTL_DEFHLIM                3       /* default Hop-Limit */
+#ifdef notyet
+#define IPV6CTL_DEFMTU         4       /* default MTU */
+#endif
+#define IPV6CTL_FORWSRCRT      5       /* forward source-routed dgrams */
+#define IPV6CTL_STATS          6       /* stats */
+#define IPV6CTL_MRTSTATS       7       /* multicast forwarding stats */
+#define IPV6CTL_MRTPROTO       8       /* multicast routing protocol */
+#define IPV6CTL_MAXFRAGPACKETS 9       /* max packets reassembly queue */
+#define IPV6CTL_SOURCECHECK    10      /* verify source route and intf */
+#define IPV6CTL_SOURCECHECK_LOGINT 11  /* minimume logging interval */
+#define IPV6CTL_ACCEPT_RTADV   12
+#define IPV6CTL_KEEPFAITH      13
+#define IPV6CTL_LOG_INTERVAL   14
+#define IPV6CTL_HDRNESTLIMIT   15
+#define IPV6CTL_DAD_COUNT      16
+#define IPV6CTL_AUTO_FLOWLABEL 17
+#define IPV6CTL_DEFMCASTHLIM   18
+#define IPV6CTL_GIF_HLIM       19      /* default HLIM for gif encap packet */
+#define IPV6CTL_KAME_VERSION   20
+#define IPV6CTL_USE_DEPRECATED 21      /* use deprecated addr (RFC2462 5.5.4) */
+#define IPV6CTL_RR_PRUNE       22      /* walk timer for router renumbering */
+#if 0  /* obsolete */
+#define IPV6CTL_MAPPED_ADDR    23
+#endif
+#define IPV6CTL_V6ONLY         24
+#define IPV6CTL_RTEXPIRE       25      /* cloned route expiration time */
+#define IPV6CTL_RTMINEXPIRE    26      /* min value for expiration time */
+#define IPV6CTL_RTMAXCACHE     27      /* trigger level for dynamic expire */
+
+#define IPV6CTL_USETEMPADDR    32      /* use temporary addresses (RFC3041) */
+#define IPV6CTL_TEMPPLTIME     33      /* preferred lifetime for tmpaddrs */
+#define IPV6CTL_TEMPVLTIME     34      /* valid lifetime for tmpaddrs */
+#define IPV6CTL_AUTO_LINKLOCAL 35      /* automatic link-local addr assign */
+#define IPV6CTL_RIP6STATS      36      /* raw_ip6 stats */
+
+/* New entries should be added here from current IPV6CTL_MAXID value. */
+/* to define items, should talk with KAME guys first, for *BSD compatibility */
+#define IPV6CTL_MAXID          37
+
+/*
+ * Redefinition of mbuf flags
+ */
+#define        M_AUTHIPHDR     M_PROTO2
+#define        M_DECRYPTED     M_PROTO3
+#define        M_LOOP          M_PROTO4
+#define        M_AUTHIPDGM     M_PROTO5
+
+#ifdef _KERNEL
+struct cmsghdr;
+
+int    in6_cksum __P((struct mbuf *, u_int8_t, u_int32_t, u_int32_t));
+int    in6_localaddr __P((struct in6_addr *));
+int    in6_addrscope __P((struct in6_addr *));
+struct in6_ifaddr *in6_ifawithscope __P((struct ifnet *, struct in6_addr *));
+struct in6_ifaddr *in6_ifawithifp __P((struct ifnet *, struct in6_addr *));
+extern void in6_if_up __P((struct ifnet *));
+struct sockaddr;
+extern u_char  ip6_protox[];
+
+void   in6_sin6_2_sin __P((struct sockaddr_in *sin,
+                           struct sockaddr_in6 *sin6));
+void   in6_sin_2_v4mapsin6 __P((struct sockaddr_in *sin,
+                                struct sockaddr_in6 *sin6));
+void   in6_sin6_2_sin_in_sock __P((struct sockaddr *nam));
+void   in6_sin_2_v4mapsin6_in_sock __P((struct sockaddr **nam));
+
+#define        satosin6(sa)    ((struct sockaddr_in6 *)(sa))
+#define        sin6tosa(sin6)  ((struct sockaddr *)(sin6))
+#define        ifatoia6(ifa)   ((struct in6_ifaddr *)(ifa))
+
+extern int     (*faithprefix_p)(struct in6_addr *);
+#endif /* _KERNEL */
+
+#ifdef _BSD_SIZE_T_
+typedef        _BSD_SIZE_T_    size_t;
+#undef _BSD_SIZE_T_
+#endif
+
+__BEGIN_DECLS
+struct cmsghdr;
+
+extern int inet6_option_space __P((int));
+extern int inet6_option_init __P((void *, struct cmsghdr **, int));
+extern int inet6_option_append __P((struct cmsghdr *, const uint8_t *,
+       int, int));
+extern uint8_t *inet6_option_alloc __P((struct cmsghdr *, int, int, int));
+extern int inet6_option_next __P((const struct cmsghdr *, uint8_t **));
+extern int inet6_option_find __P((const struct cmsghdr *, uint8_t **, int));
+
+extern size_t inet6_rthdr_space __P((int, int));
+extern struct cmsghdr *inet6_rthdr_init __P((void *, int));
+extern int inet6_rthdr_add __P((struct cmsghdr *, const struct in6_addr *,
+               unsigned int));
+extern int inet6_rthdr_lasthop __P((struct cmsghdr *, unsigned int));
+#if 0 /* not implemented yet */
+extern int inet6_rthdr_reverse __P((const struct cmsghdr *, struct cmsghdr *));
+#endif
+extern int inet6_rthdr_segments __P((const struct cmsghdr *));
+extern struct in6_addr *inet6_rthdr_getaddr __P((struct cmsghdr *, int));
+extern int inet6_rthdr_getflags __P((const struct cmsghdr *, int));
+
+extern int inet6_opt_init __P((void *, size_t));
+extern int inet6_opt_append __P((void *, size_t, int, uint8_t,
+                                size_t, uint8_t, void **));
+extern int inet6_opt_finish __P((void *, size_t, int));
+extern int inet6_opt_set_val __P((void *, size_t, void *, int));
+
+extern int inet6_opt_next __P((void *, size_t, int, uint8_t *,
+                              size_t *, void **));
+extern int inet6_opt_find __P((void *, size_t, int, uint8_t,
+                         size_t *, void **));
+extern int inet6_opt_get_val __P((void *, size_t, void *, int));
+extern size_t inet6_rth_space __P((int, int));
+extern void *inet6_rth_init __P((void *, int, int, int));
+extern int inet6_rth_add __P((void *, const struct in6_addr *));
+extern int inet6_rth_reverse __P((const void *, void *));
+extern int inet6_rth_segments __P((const void *));
+extern struct in6_addr *inet6_rth_getaddr __P((const void *, int));
+__END_DECLS
+
+#endif /* __BSD_VISIBLE */
+
+#endif /* !_NETINET6_IN6_H_ */
diff --git a/libs/watt32/netinet6/in6_gif.h b/libs/watt32/netinet6/in6_gif.h
new file mode 100644 (file)
index 0000000..353786b
--- /dev/null
@@ -0,0 +1,46 @@
+/*!\file netinet6/in6_gif.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/in6_gif.h,v 1.3 2000/07/04 16:35:09 itojun Exp $     */
+/*     $KAME: in6_gif.h,v 1.5 2000/04/14 08:36:03 itojun Exp $ */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+#ifndef _NETINET6_IN6_GIF_H_
+#define _NETINET6_IN6_GIF_H_
+
+#define GIF_HLIM       30
+
+int in6_gif_input __P((struct mbuf **, int *, int));
+int in6_gif_output __P((struct ifnet *, int, struct mbuf *, struct rtentry *));
+int gif_encapcheck6 __P((const struct mbuf *, int, int, void *));
+
+#endif /*_NETINET6_IN6_GIF_H_*/
diff --git a/libs/watt32/netinet6/in6_ifat.h b/libs/watt32/netinet6/in6_ifat.h
new file mode 100644 (file)
index 0000000..623eebd
--- /dev/null
@@ -0,0 +1,50 @@
+/*!\file netinet6/in6_ifat.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/in6_ifattach.h,v 1.3 2001/06/11 12:39:05 ume Exp $   */
+/*     $KAME: in6_ifattach.h,v 1.14 2001/02/08 12:48:39 jinmei Exp $   */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+#ifndef _NETINET6_IN6_IFATTACH_H_
+#define _NETINET6_IN6_IFATTACH_H_
+
+#ifdef _KERNEL
+void in6_nigroup_attach __P((const char *, int));
+void in6_nigroup_detach __P((const char *, int));
+void in6_ifattach __P((struct ifnet *, struct ifnet *));
+void in6_ifdetach __P((struct ifnet *));
+void in6_get_tmpifid __P((struct ifnet *, u_int8_t *, const u_int8_t *, int));
+void in6_tmpaddrtimer __P((void *));
+int in6_nigroup __P((struct ifnet *, const char *, int, struct in6_addr *));
+#endif /* _KERNEL */
+
+#endif /* _NETINET6_IN6_IFATTACH_H_ */
diff --git a/libs/watt32/netinet6/in6_pcb.h b/libs/watt32/netinet6/in6_pcb.h
new file mode 100644 (file)
index 0000000..3251874
--- /dev/null
@@ -0,0 +1,116 @@
+/*!\file netinet6/in6_pcb.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/in6_pcb.h,v 1.8 2002/06/14 08:35:21 hsu Exp $        */
+/*     $KAME: in6_pcb.h,v 1.13 2001/02/06 09:16:53 itojun Exp $        */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ *
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 1990, 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.
+ *
+ *     @(#)in_pcb.h    8.1 (Berkeley) 6/10/93
+ */
+
+#ifndef _NETINET6_IN6_PCB_H_
+#define        _NETINET6_IN6_PCB_H_
+
+#ifdef _KERNEL
+#define        satosin6(sa)    ((struct sockaddr_in6 *)(sa))
+#define        sin6tosa(sin6)  ((struct sockaddr *)(sin6))
+#define        ifatoia6(ifa)   ((struct in6_ifaddr *)(ifa))
+
+void   in6_pcbpurgeif0 __P((struct in6pcb *, struct ifnet *));
+void   in6_losing __P((struct inpcb *));
+int    in6_pcballoc __P((struct socket *, struct inpcbinfo *, struct thread *));
+int    in6_pcbbind __P((struct inpcb *, struct sockaddr *, struct thread *));
+int    in6_pcbconnect __P((struct inpcb *, struct sockaddr *, struct thread *));
+void   in6_pcbdetach __P((struct inpcb *));
+void   in6_pcbdisconnect __P((struct inpcb *));
+int    in6_pcbladdr __P((struct inpcb *, struct sockaddr *,
+                         struct in6_addr **));
+struct inpcb *
+       in6_pcblookup_local __P((struct inpcbinfo *,
+                                struct in6_addr *, u_int, int));
+struct inpcb *
+       in6_pcblookup_hash __P((struct inpcbinfo *,
+                               struct in6_addr *, u_int, struct in6_addr *,
+                               u_int, int, struct ifnet *));
+void   in6_pcbnotify __P((struct inpcbhead *, struct sockaddr *,
+                          u_int, const struct sockaddr *, u_int, int,
+                          struct inpcb *(*)(struct inpcb *, int)));
+struct inpcb *
+       in6_rtchange __P((struct inpcb *, int));
+int    in6_setpeeraddr __P((struct socket *so, struct sockaddr **nam));
+int    in6_setsockaddr __P((struct socket *so, struct sockaddr **nam));
+int    in6_mapped_sockaddr __P((struct socket *so, struct sockaddr **nam));
+int    in6_mapped_peeraddr __P((struct socket *so, struct sockaddr **nam));
+struct in6_addr *in6_selectsrc __P((struct sockaddr_in6 *,
+                                    struct ip6_pktopts *,
+                                    struct ip6_moptions *,
+                                    struct route_in6 *,
+                                    struct in6_addr *, int *));
+int    in6_selecthlim __P((struct in6pcb *, struct ifnet *));
+int    in6_pcbsetport __P((struct in6_addr *, struct inpcb *, struct thread *));
+void   init_sin6 __P((struct sockaddr_in6 *sin6, struct mbuf *m));
+#endif /* _KERNEL */
+
+#endif /* !_NETINET6_IN6_PCB_H_ */
diff --git a/libs/watt32/netinet6/in6_pref.h b/libs/watt32/netinet6/in6_pref.h
new file mode 100644 (file)
index 0000000..8ebb4bd
--- /dev/null
@@ -0,0 +1,95 @@
+/*!\file netinet6/in6_pref.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/in6_prefix.h,v 1.5 2001/06/11 12:39:05 ume Exp $     */
+/*     $KAME: in6_prefix.h,v 1.10 2001/02/08 16:30:30 itojun Exp $     */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, 1998 and 1999 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+#include <sys/callout.h>
+
+struct rr_prefix {
+       struct ifprefix rp_ifpr;
+       LIST_ENTRY(rr_prefix) rp_entry;
+       LIST_HEAD(rp_addrhead, rp_addr) rp_addrhead;
+       struct sockaddr_in6 rp_prefix;  /* prefix */
+       u_int32_t rp_vltime;    /* advertised valid lifetime */
+       u_int32_t rp_pltime;    /* advertised preferred lifetime */
+       time_t rp_expire;       /* expiration time of the prefix */
+       time_t rp_preferred;    /* preferred time of the prefix */
+       struct in6_prflags rp_flags;
+       u_char  rp_origin; /* from where this prefix info is obtained */
+       struct  rp_stateflags {
+               /* if some prefix should be added to this prefix */
+               u_char addmark : 1;
+               u_char delmark : 1; /* if this prefix will be deleted */
+       } rp_stateflags;
+};
+
+#define rp_type                rp_ifpr.ifpr_type
+#define rp_ifp         rp_ifpr.ifpr_ifp
+#define rp_plen                rp_ifpr.ifpr_plen
+
+#define rp_raf         rp_flags.prf_ra
+#define rp_raf_onlink          rp_flags.prf_ra.onlink
+#define rp_raf_auto            rp_flags.prf_ra.autonomous
+
+#define rp_statef_addmark      rp_stateflags.addmark
+#define rp_statef_delmark      rp_stateflags.delmark
+
+#define rp_rrf         rp_flags.prf_rr
+#define rp_rrf_decrvalid       rp_flags.prf_rr.decrvalid
+#define rp_rrf_decrprefd       rp_flags.prf_rr.decrprefd
+
+struct rp_addr {
+       LIST_ENTRY(rp_addr)     ra_entry;
+       struct in6_addr         ra_ifid;
+       struct in6_ifaddr       *ra_addr;
+       struct ra_flags {
+               u_char anycast : 1;
+       } ra_flags;
+};
+
+#define ifpr2rp(ifpr)  ((struct rr_prefix *)(ifpr))
+#define rp2ifpr(rp)    ((struct ifprefix *)(rp))
+
+#define RP_IN6(rp)     (&(rp)->rp_prefix.sin6_addr)
+
+#define RR_INFINITE_LIFETIME           0xffffffff
+
+
+LIST_HEAD(rr_prhead, rr_prefix);
+
+extern struct rr_prhead rr_prefix;
+
+void in6_rr_timer __P((void *));
+extern struct callout in6_rr_timer_ch;
+int delete_each_prefix  __P((struct rr_prefix *rpp, u_char origin));
diff --git a/libs/watt32/netinet6/in6_var.h b/libs/watt32/netinet6/in6_var.h
new file mode 100644 (file)
index 0000000..2c74c8d
--- /dev/null
@@ -0,0 +1,612 @@
+/*!\file netinet6/in6_var.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/in6_var.h,v 1.10 2002/04/19 04:46:22 suz Exp $       */
+/*     $KAME: in6_var.h,v 1.56 2001/03/29 05:34:31 itojun Exp $        */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+/*
+ * Copyright (c) 1985, 1986, 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.
+ *
+ *     @(#)in_var.h    8.1 (Berkeley) 6/10/93
+ */
+
+#ifndef _NETINET6_IN6_VAR_H_
+#define _NETINET6_IN6_VAR_H_
+
+/*
+ * Interface address, Internet version.  One of these structures
+ * is allocated for each interface with an Internet address.
+ * The ifaddr structure contains the protocol-independent part
+ * of the structure and is assumed to be first.
+ */
+
+/*
+ * pltime/vltime are just for future reference (required to implements 2
+ * hour rule for hosts).  they should never be modified by nd6_timeout or
+ * anywhere else.
+ *     userland -> kernel: accept pltime/vltime
+ *     kernel -> userland: throw up everything
+ *     in kernel: modify preferred/expire only
+ */
+struct in6_addrlifetime {
+       time_t ia6t_expire;     /* valid lifetime expiration time */
+       time_t ia6t_preferred;  /* preferred lifetime expiration time */
+       u_int32_t ia6t_vltime;  /* valid lifetime */
+       u_int32_t ia6t_pltime;  /* prefix lifetime */
+};
+
+struct in6_ifaddr {
+       struct  ifaddr ia_ifa;          /* protocol-independent info */
+#define        ia_ifp          ia_ifa.ifa_ifp
+#define ia_flags       ia_ifa.ifa_flags
+       struct  sockaddr_in6 ia_addr;   /* interface address */
+       struct  sockaddr_in6 ia_net;    /* network number of interface */
+       struct  sockaddr_in6 ia_dstaddr; /* space for destination addr */
+       struct  sockaddr_in6 ia_prefixmask; /* prefix mask */
+       u_int32_t ia_plen;              /* prefix length */
+       struct  in6_ifaddr *ia_next;    /* next in6 list of IP6 addresses */
+       int     ia6_flags;
+
+       struct in6_addrlifetime ia6_lifetime;
+       struct ifprefix *ia6_ifpr; /* back pointer to ifprefix */
+
+       struct nd_prefix *ia6_ndpr; /* back pointer to the ND prefix
+                                    * (for autoconfigured addresses only)
+                                    */
+};
+
+/*
+ * IPv6 interface statistics, as defined in RFC2465 Ipv6IfStatsEntry (p12).
+ */
+struct in6_ifstat {
+       u_quad_t ifs6_in_receive;       /* # of total input datagram */
+       u_quad_t ifs6_in_hdrerr;        /* # of datagrams with invalid hdr */
+       u_quad_t ifs6_in_toobig;        /* # of datagrams exceeded MTU */
+       u_quad_t ifs6_in_noroute;       /* # of datagrams with no route */
+       u_quad_t ifs6_in_addrerr;       /* # of datagrams with invalid dst */
+       u_quad_t ifs6_in_protounknown;  /* # of datagrams with unknown proto */
+                                       /* NOTE: increment on final dst if */
+       u_quad_t ifs6_in_truncated;     /* # of truncated datagrams */
+       u_quad_t ifs6_in_discard;       /* # of discarded datagrams */
+                                       /* NOTE: fragment timeout is not here */
+       u_quad_t ifs6_in_deliver;       /* # of datagrams delivered to ULP */
+                                       /* NOTE: increment on final dst if */
+       u_quad_t ifs6_out_forward;      /* # of datagrams forwarded */
+                                       /* NOTE: increment on outgoing if */
+       u_quad_t ifs6_out_request;      /* # of outgoing datagrams from ULP */
+                                       /* NOTE: does not include forwrads */
+       u_quad_t ifs6_out_discard;      /* # of discarded datagrams */
+       u_quad_t ifs6_out_fragok;       /* # of datagrams fragmented */
+       u_quad_t ifs6_out_fragfail;     /* # of datagrams failed on fragment */
+       u_quad_t ifs6_out_fragcreat;    /* # of fragment datagrams */
+                                       /* NOTE: this is # after fragment */
+       u_quad_t ifs6_reass_reqd;       /* # of incoming fragmented packets */
+                                       /* NOTE: increment on final dst if */
+       u_quad_t ifs6_reass_ok;         /* # of reassembled packets */
+                                       /* NOTE: this is # after reass */
+                                       /* NOTE: increment on final dst if */
+       u_quad_t ifs6_reass_fail;       /* # of reass failures */
+                                       /* NOTE: may not be packet count */
+                                       /* NOTE: increment on final dst if */
+       u_quad_t ifs6_in_mcast;         /* # of inbound multicast datagrams */
+       u_quad_t ifs6_out_mcast;        /* # of outbound multicast datagrams */
+};
+
+/*
+ * ICMPv6 interface statistics, as defined in RFC2466 Ipv6IfIcmpEntry.
+ * XXX: I'm not sure if this file is the right place for this structure...
+ */
+struct icmp6_ifstat {
+       /*
+        * Input statistics
+        */
+       /* ipv6IfIcmpInMsgs, total # of input messages */
+       u_quad_t ifs6_in_msg;
+       /* ipv6IfIcmpInErrors, # of input error messages */
+       u_quad_t ifs6_in_error;
+       /* ipv6IfIcmpInDestUnreachs, # of input dest unreach errors */
+       u_quad_t ifs6_in_dstunreach;
+       /* ipv6IfIcmpInAdminProhibs, # of input administratively prohibited errs */
+       u_quad_t ifs6_in_adminprohib;
+       /* ipv6IfIcmpInTimeExcds, # of input time exceeded errors */
+       u_quad_t ifs6_in_timeexceed;
+       /* ipv6IfIcmpInParmProblems, # of input parameter problem errors */
+       u_quad_t ifs6_in_paramprob;
+       /* ipv6IfIcmpInPktTooBigs, # of input packet too big errors */
+       u_quad_t ifs6_in_pkttoobig;
+       /* ipv6IfIcmpInEchos, # of input echo requests */
+       u_quad_t ifs6_in_echo;
+       /* ipv6IfIcmpInEchoReplies, # of input echo replies */
+       u_quad_t ifs6_in_echoreply;
+       /* ipv6IfIcmpInRouterSolicits, # of input router solicitations */
+       u_quad_t ifs6_in_routersolicit;
+       /* ipv6IfIcmpInRouterAdvertisements, # of input router advertisements */
+       u_quad_t ifs6_in_routeradvert;
+       /* ipv6IfIcmpInNeighborSolicits, # of input neighbor solicitations */
+       u_quad_t ifs6_in_neighborsolicit;
+       /* ipv6IfIcmpInNeighborAdvertisements, # of input neighbor advertisements */
+       u_quad_t ifs6_in_neighboradvert;
+       /* ipv6IfIcmpInRedirects, # of input redirects */
+       u_quad_t ifs6_in_redirect;
+       /* ipv6IfIcmpInGroupMembQueries, # of input MLD queries */
+       u_quad_t ifs6_in_mldquery;
+       /* ipv6IfIcmpInGroupMembResponses, # of input MLD reports */
+       u_quad_t ifs6_in_mldreport;
+       /* ipv6IfIcmpInGroupMembReductions, # of input MLD done */
+       u_quad_t ifs6_in_mlddone;
+
+       /*
+        * Output statistics. We should solve unresolved routing problem...
+        */
+       /* ipv6IfIcmpOutMsgs, total # of output messages */
+       u_quad_t ifs6_out_msg;
+       /* ipv6IfIcmpOutErrors, # of output error messages */
+       u_quad_t ifs6_out_error;
+       /* ipv6IfIcmpOutDestUnreachs, # of output dest unreach errors */
+       u_quad_t ifs6_out_dstunreach;
+       /* ipv6IfIcmpOutAdminProhibs, # of output administratively prohibited errs */
+       u_quad_t ifs6_out_adminprohib;
+       /* ipv6IfIcmpOutTimeExcds, # of output time exceeded errors */
+       u_quad_t ifs6_out_timeexceed;
+       /* ipv6IfIcmpOutParmProblems, # of output parameter problem errors */
+       u_quad_t ifs6_out_paramprob;
+       /* ipv6IfIcmpOutPktTooBigs, # of output packet too big errors */
+       u_quad_t ifs6_out_pkttoobig;
+       /* ipv6IfIcmpOutEchos, # of output echo requests */
+       u_quad_t ifs6_out_echo;
+       /* ipv6IfIcmpOutEchoReplies, # of output echo replies */
+       u_quad_t ifs6_out_echoreply;
+       /* ipv6IfIcmpOutRouterSolicits, # of output router solicitations */
+       u_quad_t ifs6_out_routersolicit;
+       /* ipv6IfIcmpOutRouterAdvertisements, # of output router advertisements */
+       u_quad_t ifs6_out_routeradvert;
+       /* ipv6IfIcmpOutNeighborSolicits, # of output neighbor solicitations */
+       u_quad_t ifs6_out_neighborsolicit;
+       /* ipv6IfIcmpOutNeighborAdvertisements, # of output neighbor advertisements */
+       u_quad_t ifs6_out_neighboradvert;
+       /* ipv6IfIcmpOutRedirects, # of output redirects */
+       u_quad_t ifs6_out_redirect;
+       /* ipv6IfIcmpOutGroupMembQueries, # of output MLD queries */
+       u_quad_t ifs6_out_mldquery;
+       /* ipv6IfIcmpOutGroupMembResponses, # of output MLD reports */
+       u_quad_t ifs6_out_mldreport;
+       /* ipv6IfIcmpOutGroupMembReductions, # of output MLD done */
+       u_quad_t ifs6_out_mlddone;
+};
+
+struct in6_ifreq {
+       char    ifr_name[IFNAMSIZ];
+       union {
+               struct  sockaddr_in6 ifru_addr;
+               struct  sockaddr_in6 ifru_dstaddr;
+               short   ifru_flags;
+               int     ifru_flags6;
+               int     ifru_metric;
+               caddr_t ifru_data;
+               struct in6_addrlifetime ifru_lifetime;
+               struct in6_ifstat ifru_stat;
+               struct icmp6_ifstat ifru_icmp6stat;
+               u_int32_t ifru_scope_id[16];
+       } ifr_ifru;
+};
+
+struct in6_aliasreq {
+       char    ifra_name[IFNAMSIZ];
+       struct  sockaddr_in6 ifra_addr;
+       struct  sockaddr_in6 ifra_dstaddr;
+       struct  sockaddr_in6 ifra_prefixmask;
+       int     ifra_flags;
+       struct in6_addrlifetime ifra_lifetime;
+};
+
+/* prefix type macro */
+#define IN6_PREFIX_ND  1
+#define IN6_PREFIX_RR  2
+
+/*
+ * prefix related flags passed between kernel(NDP related part) and
+ * user land command(ifconfig) and daemon(rtadvd).
+ */
+struct in6_prflags {
+       struct prf_ra {
+               u_char onlink : 1;
+               u_char autonomous : 1;
+               u_char reserved : 6;
+       } prf_ra;
+       u_char prf_reserved1;
+       u_short prf_reserved2;
+       /* want to put this on 4byte offset */
+       struct prf_rr {
+               u_char decrvalid : 1;
+               u_char decrprefd : 1;
+               u_char reserved : 6;
+       } prf_rr;
+       u_char prf_reserved3;
+       u_short prf_reserved4;
+};
+
+struct  in6_prefixreq {
+       char    ipr_name[IFNAMSIZ];
+       u_char  ipr_origin;
+       u_char  ipr_plen;
+       u_int32_t ipr_vltime;
+       u_int32_t ipr_pltime;
+       struct in6_prflags ipr_flags;
+       struct  sockaddr_in6 ipr_prefix;
+};
+
+#define PR_ORIG_RA     0
+#define PR_ORIG_RR     1
+#define PR_ORIG_STATIC 2
+#define PR_ORIG_KERNEL 3
+
+#define ipr_raf_onlink         ipr_flags.prf_ra.onlink
+#define ipr_raf_auto           ipr_flags.prf_ra.autonomous
+
+#define ipr_statef_onlink      ipr_flags.prf_state.onlink
+
+#define ipr_rrf_decrvalid      ipr_flags.prf_rr.decrvalid
+#define ipr_rrf_decrprefd      ipr_flags.prf_rr.decrprefd
+
+struct in6_rrenumreq {
+       char    irr_name[IFNAMSIZ];
+       u_char  irr_origin;
+       u_char  irr_m_len;      /* match len for matchprefix */
+       u_char  irr_m_minlen;   /* minlen for matching prefix */
+       u_char  irr_m_maxlen;   /* maxlen for matching prefix */
+       u_char  irr_u_uselen;   /* uselen for adding prefix */
+       u_char  irr_u_keeplen;  /* keeplen from matching prefix */
+       struct irr_raflagmask {
+               u_char onlink : 1;
+               u_char autonomous : 1;
+               u_char reserved : 6;
+       } irr_raflagmask;
+       u_int32_t irr_vltime;
+       u_int32_t irr_pltime;
+       struct in6_prflags irr_flags;
+       struct  sockaddr_in6 irr_matchprefix;
+       struct  sockaddr_in6 irr_useprefix;
+};
+
+#define irr_raf_mask_onlink    irr_raflagmask.onlink
+#define irr_raf_mask_auto      irr_raflagmask.autonomous
+#define irr_raf_mask_reserved  irr_raflagmask.reserved
+
+#define irr_raf_onlink         irr_flags.prf_ra.onlink
+#define irr_raf_auto           irr_flags.prf_ra.autonomous
+
+#define irr_statef_onlink      irr_flags.prf_state.onlink
+
+#define irr_rrf                        irr_flags.prf_rr
+#define irr_rrf_decrvalid      irr_flags.prf_rr.decrvalid
+#define irr_rrf_decrprefd      irr_flags.prf_rr.decrprefd
+
+/*
+ * Given a pointer to an in6_ifaddr (ifaddr),
+ * return a pointer to the addr as a sockaddr_in6
+ */
+#define IA6_IN6(ia)    (&((ia)->ia_addr.sin6_addr))
+#define IA6_DSTIN6(ia) (&((ia)->ia_dstaddr.sin6_addr))
+#define IA6_MASKIN6(ia)        (&((ia)->ia_prefixmask.sin6_addr))
+#define IA6_SIN6(ia)   (&((ia)->ia_addr))
+#define IA6_DSTSIN6(ia)        (&((ia)->ia_dstaddr))
+#define IFA_IN6(x)     (&((struct sockaddr_in6 *)((x)->ifa_addr))->sin6_addr)
+#define IFA_DSTIN6(x)  (&((struct sockaddr_in6 *)((x)->ifa_dstaddr))->sin6_addr)
+
+#define IFPR_IN6(x)    (&((struct sockaddr_in6 *)((x)->ifpr_prefix))->sin6_addr)
+
+#ifdef _KERNEL
+#define IN6_ARE_MASKED_ADDR_EQUAL(d, a, m)     (       \
+       (((d)->s6_addr32[0] ^ (a)->s6_addr32[0]) & (m)->s6_addr32[0]) == 0 && \
+       (((d)->s6_addr32[1] ^ (a)->s6_addr32[1]) & (m)->s6_addr32[1]) == 0 && \
+       (((d)->s6_addr32[2] ^ (a)->s6_addr32[2]) & (m)->s6_addr32[2]) == 0 && \
+       (((d)->s6_addr32[3] ^ (a)->s6_addr32[3]) & (m)->s6_addr32[3]) == 0 )
+#endif
+
+#define SIOCSIFADDR_IN6                 _IOW('i', 12, struct in6_ifreq)
+#define SIOCGIFADDR_IN6                _IOWR('i', 33, struct in6_ifreq)
+
+#ifdef _KERNEL
+/*
+ * SIOCSxxx ioctls should be unused (see comments in in6.c), but
+ * we do not shift numbers for binary compatibility.
+ */
+#define SIOCSIFDSTADDR_IN6      _IOW('i', 14, struct in6_ifreq)
+#define SIOCSIFNETMASK_IN6      _IOW('i', 22, struct in6_ifreq)
+#endif
+
+#define SIOCGIFDSTADDR_IN6     _IOWR('i', 34, struct in6_ifreq)
+#define SIOCGIFNETMASK_IN6     _IOWR('i', 37, struct in6_ifreq)
+
+#define SIOCDIFADDR_IN6                 _IOW('i', 25, struct in6_ifreq)
+#define SIOCAIFADDR_IN6                 _IOW('i', 26, struct in6_aliasreq)
+
+#define SIOCSIFPHYADDR_IN6       _IOW('i', 70, struct in6_aliasreq)
+#define        SIOCGIFPSRCADDR_IN6     _IOWR('i', 71, struct in6_ifreq)
+#define        SIOCGIFPDSTADDR_IN6     _IOWR('i', 72, struct in6_ifreq)
+
+#define SIOCGIFAFLAG_IN6       _IOWR('i', 73, struct in6_ifreq)
+
+#define SIOCGDRLST_IN6         _IOWR('i', 74, struct in6_drlist)
+#define SIOCGPRLST_IN6         _IOWR('i', 75, struct in6_prlist)
+#ifdef _KERNEL
+#define OSIOCGIFINFO_IN6       _IOWR('i', 76, struct in6_ondireq)
+#endif
+#define SIOCGIFINFO_IN6                _IOWR('i', 108, struct in6_ndireq)
+#define SIOCSNDFLUSH_IN6       _IOWR('i', 77, struct in6_ifreq)
+#define SIOCGNBRINFO_IN6       _IOWR('i', 78, struct in6_nbrinfo)
+#define SIOCSPFXFLUSH_IN6      _IOWR('i', 79, struct in6_ifreq)
+#define SIOCSRTRFLUSH_IN6      _IOWR('i', 80, struct in6_ifreq)
+
+#define SIOCGIFALIFETIME_IN6   _IOWR('i', 81, struct in6_ifreq)
+#define SIOCSIFALIFETIME_IN6   _IOWR('i', 82, struct in6_ifreq)
+#define SIOCGIFSTAT_IN6                _IOWR('i', 83, struct in6_ifreq)
+#define SIOCGIFSTAT_ICMP6      _IOWR('i', 84, struct in6_ifreq)
+
+#define SIOCSDEFIFACE_IN6      _IOWR('i', 85, struct in6_ndifreq)
+#define SIOCGDEFIFACE_IN6      _IOWR('i', 86, struct in6_ndifreq)
+
+#define SIOCSIFINFO_FLAGS      _IOWR('i', 87, struct in6_ndireq) /* XXX */
+
+#define SIOCSSCOPE6            _IOW('i', 88, struct in6_ifreq)
+#define SIOCGSCOPE6            _IOWR('i', 89, struct in6_ifreq)
+#define SIOCGSCOPE6DEF         _IOWR('i', 90, struct in6_ifreq)
+
+#define SIOCSIFPREFIX_IN6      _IOW('i', 100, struct in6_prefixreq) /* set */
+#define SIOCGIFPREFIX_IN6      _IOWR('i', 101, struct in6_prefixreq) /* get */
+#define SIOCDIFPREFIX_IN6      _IOW('i', 102, struct in6_prefixreq) /* del */
+#define SIOCAIFPREFIX_IN6      _IOW('i', 103, struct in6_rrenumreq) /* add */
+#define SIOCCIFPREFIX_IN6      _IOW('i', 104, \
+                                    struct in6_rrenumreq) /* change */
+#define SIOCSGIFPREFIX_IN6     _IOW('i', 105, \
+                                    struct in6_rrenumreq) /* set global */
+
+#define SIOCGETSGCNT_IN6       _IOWR('u', 106, \
+                                     struct sioc_sg_req6) /* get s,g pkt cnt */
+#define SIOCGETMIFCNT_IN6      _IOWR('u', 107, \
+                                     struct sioc_mif_req6) /* get pkt cnt per if */
+
+#define IN6_IFF_ANYCAST                0x01    /* anycast address */
+#define IN6_IFF_TENTATIVE      0x02    /* tentative address */
+#define IN6_IFF_DUPLICATED     0x04    /* DAD detected duplicate */
+#define IN6_IFF_DETACHED       0x08    /* may be detached from the link */
+#define IN6_IFF_DEPRECATED     0x10    /* deprecated address */
+#define IN6_IFF_NODAD          0x20    /* don't perform DAD on this address
+                                        * (used only at first SIOC* call)
+                                        */
+#define IN6_IFF_AUTOCONF       0x40    /* autoconfigurable address. */
+#define IN6_IFF_TEMPORARY      0x80    /* temporary (anonymous) address. */
+#define IN6_IFF_NOPFX          0x8000  /* skip kernel prefix management.
+                                        * XXX: this should be temporary.
+                                        */
+
+/* do not input/output */
+#define IN6_IFF_NOTREADY (IN6_IFF_TENTATIVE|IN6_IFF_DUPLICATED)
+
+#ifdef _KERNEL
+#define IN6_ARE_SCOPE_CMP(a,b) ((a)-(b))
+#define IN6_ARE_SCOPE_EQUAL(a,b) ((a)==(b))
+#endif
+
+#ifdef _KERNEL
+extern struct in6_ifaddr *in6_ifaddr;
+
+extern struct in6_ifstat **in6_ifstat;
+extern size_t in6_ifstatmax;
+extern struct icmp6stat icmp6stat;
+extern struct icmp6_ifstat **icmp6_ifstat;
+extern size_t icmp6_ifstatmax;
+#define in6_ifstat_inc(ifp, tag) \
+do {                                                           \
+       if ((ifp) && (ifp)->if_index <= if_index                \
+        && (ifp)->if_index < in6_ifstatmax                     \
+        && in6_ifstat && in6_ifstat[(ifp)->if_index]) {        \
+               in6_ifstat[(ifp)->if_index]->tag++;             \
+       }                                                       \
+} while (0)
+
+extern struct ifqueue ip6intrq;                /* IP6 packet input queue */
+extern struct in6_addr zeroin6_addr;
+extern u_char inet6ctlerrmap[];
+extern unsigned long in6_maxmtu;
+#ifdef MALLOC_DECLARE
+MALLOC_DECLARE(M_IPMADDR);
+#endif
+
+/*
+ * Macro for finding the internet address structure (in6_ifaddr) corresponding
+ * to a given interface (ifnet structure).
+ */
+
+#define IFP_TO_IA6(ifp, ia)                            \
+/* struct ifnet *ifp; */                               \
+/* struct in6_ifaddr *ia; */                           \
+do {                                                                   \
+       struct ifaddr *ifa;                                             \
+       for (ifa = (ifp)->if_addrlist.tqh_first; ifa; ifa = ifa->ifa_list.tqe_next) {   \
+               if (!ifa->ifa_addr)                                     \
+                       continue;                                       \
+               if (ifa->ifa_addr->sa_family == AF_INET6)               \
+                       break;                                          \
+       }                                                               \
+       (ia) = (struct in6_ifaddr *)ifa;                                \
+} while (0)
+
+#endif /* _KERNEL */
+
+/*
+ * Multi-cast membership entry.  One for each group/ifp that a PCB
+ * belongs to.
+ */
+struct in6_multi_mship {
+       struct  in6_multi *i6mm_maddr;  /* Multicast address pointer */
+       LIST_ENTRY(in6_multi_mship) i6mm_chain;  /* multicast options chain */
+};
+
+struct in6_multi {
+       LIST_ENTRY(in6_multi) in6m_entry; /* list glue */
+       struct  in6_addr in6m_addr;     /* IP6 multicast address */
+       struct  ifnet *in6m_ifp;        /* back pointer to ifnet */
+       struct  ifmultiaddr *in6m_ifma; /* back pointer to ifmultiaddr */
+       u_int   in6m_refcount;          /* # membership claims by sockets */
+       u_int   in6m_state;             /* state of the membership */
+       u_int   in6m_timer;             /* MLD6 listener report timer */
+};
+
+#ifdef _KERNEL
+extern LIST_HEAD(in6_multihead, in6_multi) in6_multihead;
+
+/*
+ * Structure used by macros below to remember position when stepping through
+ * all of the in6_multi records.
+ */
+struct in6_multistep {
+       struct  in6_ifaddr *i_ia;
+       struct  in6_multi *i_in6m;
+};
+
+/*
+ * Macros for looking up the in6_multi record for a given IP6 multicast
+ * address on a given interface. If no matching record is found, "in6m"
+ * returns NLL.
+ */
+
+#define IN6_LOOKUP_MULTI(addr, ifp, in6m)                      \
+/* struct in6_addr addr; */                                    \
+/* struct ifnet *ifp; */                                       \
+/* struct in6_multi *in6m; */                                  \
+do { \
+       struct ifmultiaddr *ifma; \
+       TAILQ_FOREACH(ifma, &(ifp)->if_multiaddrs, ifma_link) { \
+               if (ifma->ifma_addr->sa_family == AF_INET6 \
+                   && IN6_ARE_ADDR_EQUAL(&((struct sockaddr_in6 *)ifma->ifma_addr)->sin6_addr, \
+                                         &(addr))) \
+                       break; \
+       } \
+       (in6m) = (struct in6_multi *)(ifma ? ifma->ifma_protospec : 0); \
+} while(0)
+
+/*
+ * Macro to step through all of the in6_multi records, one at a time.
+ * The current position is remembered in "step", which the caller must
+ * provide.  IN6_FIRST_MULTI(), below, must be called to initialize "step"
+ * and get the first record.  Both macros return a NULL "in6m" when there
+ * are no remaining records.
+ */
+#define IN6_NEXT_MULTI(step, in6m)                                     \
+/* struct in6_multistep step; */                                       \
+/* struct in6_multi *in6m; */                                          \
+do { \
+       if (((in6m) = (step).i_in6m) != NULL) \
+               (step).i_in6m = (step).i_in6m->in6m_entry.le_next; \
+} while(0)
+
+#define IN6_FIRST_MULTI(step, in6m)            \
+/* struct in6_multistep step; */               \
+/* struct in6_multi *in6m */                   \
+do { \
+       (step).i_in6m = in6_multihead.lh_first; \
+               IN6_NEXT_MULTI((step), (in6m)); \
+} while(0)
+
+struct in6_multi *in6_addmulti __P((struct in6_addr *, struct ifnet *,
+                                    int *));
+void   in6_delmulti __P((struct in6_multi *));
+extern int in6_ifindex2scopeid __P((int));
+extern int in6_mask2len __P((struct in6_addr *, u_char *));
+extern void in6_len2mask __P((struct in6_addr *, int));
+int    in6_control __P((struct socket *,
+                        u_long, caddr_t, struct ifnet *, struct thread *));
+int    in6_update_ifa __P((struct ifnet *, struct in6_aliasreq *,
+                           struct in6_ifaddr *));
+void   in6_purgeaddr __P((struct ifaddr *));
+int    in6if_do_dad __P((struct ifnet *));
+void   in6_purgeif __P((struct ifnet *));
+void   in6_savemkludge __P((struct in6_ifaddr *));
+void   in6_setmaxmtu   __P((void));
+void   in6_restoremkludge __P((struct in6_ifaddr *, struct ifnet *));
+void   in6_purgemkludge __P((struct ifnet *));
+struct in6_ifaddr *in6ifa_ifpforlinklocal __P((struct ifnet *, int));
+struct in6_ifaddr *in6ifa_ifpwithaddr __P((struct ifnet *,
+                                            struct in6_addr *));
+char   *ip6_sprintf __P((const struct in6_addr *));
+int    in6_addr2scopeid __P((struct ifnet *, struct in6_addr *));
+int    in6_matchlen __P((struct in6_addr *, struct in6_addr *));
+int    in6_are_prefix_equal __P((struct in6_addr *p1, struct in6_addr *p2,
+                                 int len));
+void   in6_prefixlen2mask __P((struct in6_addr *maskp, int len));
+int    in6_prefix_ioctl __P((struct socket *so, u_long cmd, caddr_t data,
+                             struct ifnet *ifp));
+int    in6_prefix_add_ifid __P((int iilen, struct in6_ifaddr *ia));
+void   in6_prefix_remove_ifid __P((int iilen, struct in6_ifaddr *ia));
+void   in6_purgeprefix __P((struct ifnet *));
+
+int    in6_is_addr_deprecated __P((struct sockaddr_in6 *));
+struct inpcb;
+int in6_embedscope __P((struct in6_addr *, const struct sockaddr_in6 *,
+       struct inpcb *, struct ifnet **));
+int in6_recoverscope __P((struct sockaddr_in6 *, const struct in6_addr *,
+       struct ifnet *));
+void in6_clearscope __P((struct in6_addr *));
+#endif /* _KERNEL */
+
+#endif /* _NETINET6_IN6_VAR_H_ */
diff --git a/libs/watt32/netinet6/ip6.h b/libs/watt32/netinet6/ip6.h
new file mode 100644 (file)
index 0000000..db1d2d7
--- /dev/null
@@ -0,0 +1,8 @@
+/*!\file netinet6/ip6.h
+ * \note Obsolete. Use netinet/ip6.h.
+ */
+
+/*      $FreeBSD: src/sys/netinet6/ip6.h,v 1.5 2000/07/04 16:35:09 itojun Exp $ */
+/*     $KAME: ip6.h,v 1.7 2000/03/25 07:23:36 sumikawa Exp $   */
+
+#error "netinet6/ip6.h is obsolete.  use netinet/ip6.h"
diff --git a/libs/watt32/netinet6/ip6_ecn.h b/libs/watt32/netinet6/ip6_ecn.h
new file mode 100644 (file)
index 0000000..a52274e
--- /dev/null
@@ -0,0 +1,45 @@
+/*!\file netinet6/ip6_ecn.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/ip6_ecn.h,v 1.4 2001/06/11 12:39:05 ume Exp $        */
+/*     $KAME: ip_ecn.h,v 1.5 2000/03/27 04:58:38 sumikawa Exp $        */
+
+/*
+ * Copyright (C) 1999 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ *
+ */
+/*
+ * ECN consideration on tunnel ingress/egress operation.
+ * http://www.aciri.org/floyd/papers/draft-ipsec-ecn-00.txt
+ */
+
+#ifdef _KERNEL
+extern void ip6_ecn_ingress __P((int, u_int32_t *, const u_int32_t *));
+extern void ip6_ecn_egress __P((int, const u_int32_t *, u_int32_t *));
+#endif
diff --git a/libs/watt32/netinet6/ip6_fw.h b/libs/watt32/netinet6/ip6_fw.h
new file mode 100644 (file)
index 0000000..c524e93
--- /dev/null
@@ -0,0 +1,235 @@
+/*!\file netinet6/ip6_fw.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/ip6_fw.h,v 1.12 2002/04/19 04:46:22 suz Exp $        */
+/*     $KAME: ip6_fw.h,v 1.9 2001/08/01 04:29:57 sumikawa Exp $        */
+
+/*
+ * Copyright (C) 1998, 1999, 2000 and 2001 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+/*
+ * Copyright (c) 1993 Daniel Boulet
+ * Copyright (c) 1994 Ugen J.S.Antsilevich
+ *
+ * Redistribution and use in source forms, with and without modification,
+ * are permitted provided that this entire comment appears intact.
+ *
+ * Redistribution in binary form may occur without any restrictions.
+ * Obviously, it would be nice if you gave credit where credit is due
+ * but requiring it would be too onerous.
+ *
+ * This software is provided ``AS IS'' without any warranties of any kind.
+ *
+ */
+
+#ifndef _IP6_FW_H
+#define _IP6_FW_H
+
+#include <net/if.h>
+
+/*
+ * This union structure identifies an interface, either explicitly
+ * by name or implicitly by IP address. The flags IP_FW_F_IIFNAME
+ * and IP_FW_F_OIFNAME say how to interpret this structure. An
+ * interface unit number of -1 matches any unit number, while an
+ * IP address of 0.0.0.0 indicates matches any interface.
+ *
+ * The receive and transmit interfaces are only compared against the
+ * the packet if the corresponding bit (IP_FW_F_IIFACE or IP_FW_F_OIFACE)
+ * is set. Note some packets lack a receive or transmit interface
+ * (in which case the missing "interface" never matches).
+ */
+
+union ip6_fw_if {
+    struct in6_addr fu_via_ip6;        /* Specified by IPv6 address */
+    struct {                   /* Specified by interface name */
+#define IP6FW_IFNLEN     IFNAMSIZ
+           char  name[IP6FW_IFNLEN];
+           short unit;         /* -1 means match any unit */
+    } fu_via_if;
+};
+
+/*
+ * Format of an IP firewall descriptor
+ *
+ * fw_src, fw_dst, fw_smsk, fw_dmsk are always stored in network byte order.
+ * fw_flg and fw_n*p are stored in host byte order (of course).
+ * Port numbers are stored in HOST byte order.
+ * Warning: setsockopt() will fail if sizeof(struct ip_fw) > MLEN (108)
+ */
+
+struct ip6_fw {
+    u_long fw_pcnt,fw_bcnt;            /* Packet and byte counters */
+    struct in6_addr fw_src, fw_dst;    /* Source and destination IPv6 addr */
+    struct in6_addr fw_smsk, fw_dmsk;  /* Mask for src and dest IPv6 addr */
+    u_short fw_number;                 /* Rule number */
+    u_short fw_flg;                    /* Flags word */
+#define IPV6_FW_MAX_PORTS      10      /* A reasonable maximum */
+    u_int fw_ipflg;                    /* IP flags word */
+    u_short fw_pts[IPV6_FW_MAX_PORTS]; /* Array of port numbers to match */
+    u_char fw_ip6opt,fw_ip6nopt;       /* IPv6 options set/unset */
+    u_char fw_tcpf,fw_tcpnf;           /* TCP flags set/unset */
+#define IPV6_FW_ICMPTYPES_DIM (256 / (sizeof(unsigned) * 8))
+    unsigned fw_icmp6types[IPV6_FW_ICMPTYPES_DIM]; /* ICMP types bitmap */
+    long timestamp;                    /* timestamp (tv_sec) of last match */
+    union ip6_fw_if fw_in_if, fw_out_if;/* Incoming and outgoing interfaces */
+    union {
+       u_short fu_divert_port;         /* Divert/tee port (options IP6DIVERT) */
+       u_short fu_skipto_rule;         /* SKIPTO command rule number */
+       u_short fu_reject_code;         /* REJECT response code */
+    } fw_un;
+    u_char fw_prot;                    /* IPv6 protocol */
+    u_char fw_nports;                  /* N'of src ports and # of dst ports */
+                                       /* in ports array (dst ports follow */
+                                       /* src ports; max of 10 ports in all; */
+                                       /* count of 0 means match all ports) */
+};
+
+#define IPV6_FW_GETNSRCP(rule)         ((rule)->fw_nports & 0x0f)
+#define IPV6_FW_SETNSRCP(rule, n)              do {                            \
+                                         (rule)->fw_nports &= ~0x0f;   \
+                                         (rule)->fw_nports |= (n);     \
+                                       } while (0)
+#define IPV6_FW_GETNDSTP(rule)         ((rule)->fw_nports >> 4)
+#define IPV6_FW_SETNDSTP(rule, n)              do {                            \
+                                         (rule)->fw_nports &= ~0xf0;   \
+                                         (rule)->fw_nports |= (n) << 4;\
+                                       } while (0)
+
+#define fw_divert_port fw_un.fu_divert_port
+#define fw_skipto_rule fw_un.fu_skipto_rule
+#define fw_reject_code fw_un.fu_reject_code
+
+struct ip6_fw_chain {
+        LIST_ENTRY(ip6_fw_chain) chain;
+        struct ip6_fw    *rule;
+};
+
+/*
+ * Values for "flags" field .
+ */
+#define IPV6_FW_F_IN   0x0001  /* Check inbound packets                */
+#define IPV6_FW_F_OUT  0x0002  /* Check outbound packets               */
+#define IPV6_FW_F_IIFACE       0x0004  /* Apply inbound interface test         */
+#define IPV6_FW_F_OIFACE       0x0008  /* Apply outbound interface test        */
+
+#define IPV6_FW_F_COMMAND 0x0070       /* Mask for type of chain entry:        */
+#define IPV6_FW_F_DENY 0x0000  /* This is a deny rule                  */
+#define IPV6_FW_F_REJECT       0x0010  /* Deny and send a response packet      */
+#define IPV6_FW_F_ACCEPT       0x0020  /* This is an accept rule               */
+#define IPV6_FW_F_COUNT        0x0030  /* This is a count rule                 */
+#define IPV6_FW_F_DIVERT       0x0040  /* This is a divert rule                */
+#define IPV6_FW_F_TEE  0x0050  /* This is a tee rule                   */
+#define IPV6_FW_F_SKIPTO       0x0060  /* This is a skipto rule                */
+
+#define IPV6_FW_F_PRN  0x0080  /* Print if this rule matches           */
+
+#define IPV6_FW_F_SRNG 0x0100  /* The first two src ports are a min    *
+                                * and max range (stored in host byte   *
+                                * order).                              */
+
+#define IPV6_FW_F_DRNG 0x0200  /* The first two dst ports are a min    *
+                                * and max range (stored in host byte   *
+                                * order).                              */
+
+#define IPV6_FW_F_IIFNAME      0x0400  /* In interface by name/unit (not IP)   */
+#define IPV6_FW_F_OIFNAME      0x0800  /* Out interface by name/unit (not IP)  */
+
+#define IPV6_FW_F_INVSRC       0x1000  /* Invert sense of src check            */
+#define IPV6_FW_F_INVDST       0x2000  /* Invert sense of dst check            */
+
+#define IPV6_FW_F_FRAG 0x4000  /* Fragment                             */
+
+#define IPV6_FW_F_ICMPBIT 0x8000       /* ICMP type bitmap is valid            */
+
+#define IPV6_FW_F_MASK 0xFFFF  /* All possible flag bits mask          */
+
+/* 
+ * Flags for the 'fw_ipflg' field, for comparing values of ip and its protocols. */
+#define        IPV6_FW_IF_TCPEST 0x00000020    /* established TCP connection   */
+#define IPV6_FW_IF_TCPMSK 0x00000020   /* mask of all TCP values */
+
+/*
+ * For backwards compatibility with rules specifying "via iface" but
+ * not restricted to only "in" or "out" packets, we define this combination
+ * of bits to represent this configuration.
+ */
+
+#define IF6_FW_F_VIAHACK       (IPV6_FW_F_IN|IPV6_FW_F_OUT|IPV6_FW_F_IIFACE|IPV6_FW_F_OIFACE)
+
+/*
+ * Definitions for REJECT response codes.
+ * Values less than 256 correspond to ICMP unreachable codes.
+ */
+#define IPV6_FW_REJECT_RST     0x0100          /* TCP packets: send RST */
+
+/*
+ * Definitions for IPv6 option names.
+ */
+#define IPV6_FW_IP6OPT_HOPOPT  0x01
+#define IPV6_FW_IP6OPT_ROUTE   0x02
+#define IPV6_FW_IP6OPT_FRAG    0x04
+#define IPV6_FW_IP6OPT_ESP     0x08
+#define IPV6_FW_IP6OPT_AH      0x10
+#define IPV6_FW_IP6OPT_NONXT   0x20
+#define IPV6_FW_IP6OPT_OPTS    0x40
+
+/*
+ * Definitions for TCP flags.
+ */
+#define IPV6_FW_TCPF_FIN       TH_FIN
+#define IPV6_FW_TCPF_SYN       TH_SYN
+#define IPV6_FW_TCPF_RST       TH_RST
+#define IPV6_FW_TCPF_PSH       TH_PUSH
+#define IPV6_FW_TCPF_ACK       TH_ACK
+#define IPV6_FW_TCPF_URG       TH_URG
+
+/*
+ * Main firewall chains definitions and global var's definitions.
+ */
+#ifdef _KERNEL
+
+/*
+ * Function definitions.
+ */
+void ip6_fw_init(void);
+
+/* Firewall hooks */
+struct ip6_hdr;
+typedef        int ip6_fw_chk_t __P((struct ip6_hdr**, struct ifnet*,
+                               u_short *, struct mbuf**));
+typedef        int ip6_fw_ctl_t __P((int, struct mbuf**));
+extern ip6_fw_chk_t *ip6_fw_chk_ptr;
+extern ip6_fw_ctl_t *ip6_fw_ctl_ptr;
+extern int ip6_fw_enable;
+
+#endif /* _KERNEL */
+
+#endif /* _IP6_FW_H */
diff --git a/libs/watt32/netinet6/ip6_mrou.h b/libs/watt32/netinet6/ip6_mrou.h
new file mode 100644 (file)
index 0000000..b7665a4
--- /dev/null
@@ -0,0 +1,281 @@
+/*!\file netinet6/ip6_mrou.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/ip6_mroute.h,v 1.5 2002/04/19 04:46:23 suz Exp $     */
+/*     $KAME: ip6_mroute.h,v 1.19 2001/06/14 06:12:55 suz Exp $        */
+
+/*
+ * Copyright (C) 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+/*     BSDI ip_mroute.h,v 2.5 1996/10/11 16:01:48 pjd Exp      */
+
+/*
+ * Definitions for IP multicast forwarding.
+ *
+ * Written by David Waitzman, BBN Labs, August 1988.
+ * Modified by Steve Deering, Stanford, February 1989.
+ * Modified by Ajit Thyagarajan, PARC, August 1993.
+ * Modified by Ajit Thyagarajan, PARC, August 1994.
+ * Modified by Ahmed Helmy, USC, September 1996.
+ *
+ * MROUTING Revision: 1.2
+ */
+
+#ifndef _NETINET6_IP6_MROUTE_H_
+#define _NETINET6_IP6_MROUTE_H_
+
+/*
+ * Multicast Routing set/getsockopt commands.
+ */
+#ifdef _KERNEL
+#define MRT6_OINIT             100     /* initialize forwarder (omrt6msg) */
+#endif
+#define MRT6_DONE              101     /* shut down forwarder */
+#define MRT6_ADD_MIF           102     /* add multicast interface */
+#define MRT6_DEL_MIF           103     /* delete multicast interface */
+#define MRT6_ADD_MFC           104     /* insert forwarding cache entry */
+#define MRT6_DEL_MFC           105     /* delete forwarding cache entry */
+#define MRT6_PIM                107     /* enable pim code */
+#define MRT6_INIT              108     /* initialize forwarder (mrt6msg) */
+
+#if BSD >= 199103
+#define GET_TIME(t)    microtime(&t)
+#elif defined(sun)
+#define GET_TIME(t)    uniqtime(&t)
+#else
+#define GET_TIME(t)    ((t) = time)
+#endif
+
+/*
+ * Types and macros for handling bitmaps with one bit per multicast interface.
+ */
+typedef u_short mifi_t;                /* type of a mif index */
+#define MAXMIFS                64
+
+#ifndef        IF_SETSIZE
+#define        IF_SETSIZE      256
+#endif
+
+typedef        u_int32_t       if_mask;
+#define        NIFBITS (sizeof(if_mask) * NBBY)        /* bits per mask */
+
+#ifndef howmany
+#define        howmany(x, y)   (((x) + ((y) - 1)) / (y))
+#endif
+
+typedef        struct if_set {
+       if_mask ifs_bits[howmany(IF_SETSIZE, NIFBITS)];
+} if_set;
+
+#define        IF_SET(n, p)    ((p)->ifs_bits[(n)/NIFBITS] |= (1 << ((n) % NIFBITS)))
+#define        IF_CLR(n, p)    ((p)->ifs_bits[(n)/NIFBITS] &= ~(1 << ((n) % NIFBITS)))
+#define        IF_ISSET(n, p)  ((p)->ifs_bits[(n)/NIFBITS] & (1 << ((n) % NIFBITS)))
+#define        IF_COPY(f, t)   bcopy(f, t, sizeof(*(f)))
+#define        IF_ZERO(p)      bzero(p, sizeof(*(p)))
+
+/*
+ * Argument structure for MRT6_ADD_IF.
+ */
+struct mif6ctl {
+       mifi_t      mif6c_mifi;         /* the index of the mif to be added  */
+       u_char      mif6c_flags;        /* MIFF_ flags defined below         */
+       u_short     mif6c_pifi;         /* the index of the physical IF */
+#ifdef notyet
+       u_int       mif6c_rate_limit;    /* max rate                         */
+#endif
+};
+
+#define        MIFF_REGISTER   0x1     /* mif represents a register end-point */
+
+/*
+ * Argument structure for MRT6_ADD_MFC and MRT6_DEL_MFC
+ */
+struct mf6cctl {
+       struct sockaddr_in6 mf6cc_origin;       /* IPv6 origin of mcasts */
+       struct sockaddr_in6 mf6cc_mcastgrp; /* multicast group associated */
+       mifi_t          mf6cc_parent;   /* incoming ifindex */
+       struct if_set   mf6cc_ifset;    /* set of forwarding ifs */
+};
+
+/*
+ * The kernel's multicast routing statistics.
+ */
+struct mrt6stat {
+       u_quad_t mrt6s_mfc_lookups;     /* # forw. cache hash table hits   */
+       u_quad_t mrt6s_mfc_misses;      /* # forw. cache hash table misses */
+       u_quad_t mrt6s_upcalls;         /* # calls to mrouted              */
+       u_quad_t mrt6s_no_route;        /* no route for packet's origin    */
+       u_quad_t mrt6s_bad_tunnel;      /* malformed tunnel options        */
+       u_quad_t mrt6s_cant_tunnel;     /* no room for tunnel options      */
+       u_quad_t mrt6s_wrong_if;        /* arrived on wrong interface      */
+       u_quad_t mrt6s_upq_ovflw;       /* upcall Q overflow               */
+       u_quad_t mrt6s_cache_cleanups;  /* # entries with no upcalls       */
+       u_quad_t mrt6s_drop_sel;        /* pkts dropped selectively        */
+       u_quad_t mrt6s_q_overflow;      /* pkts dropped - Q overflow       */
+       u_quad_t mrt6s_pkt2large;       /* pkts dropped - size > BKT SIZE  */
+       u_quad_t mrt6s_upq_sockfull;    /* upcalls dropped - socket full   */
+};
+
+#ifdef MRT6_OINIT
+/*
+ * Struct used to communicate from kernel to multicast router
+ * note the convenient similarity to an IPv6 header.
+ * XXX old version, superseded by mrt6msg.
+ */
+struct omrt6msg {
+       u_long      unused1;
+       u_char      im6_msgtype;                /* what type of message     */
+#if 0
+#define MRT6MSG_NOCACHE        1
+#define MRT6MSG_WRONGMIF       2
+#define MRT6MSG_WHOLEPKT       3               /* used for user level encap*/
+#endif
+       u_char      im6_mbz;                    /* must be zero             */
+       u_char      im6_mif;                    /* mif rec'd on             */
+       u_char      unused2;
+       struct in6_addr  im6_src, im6_dst;
+};
+#endif
+
+/*
+ * Structure used to communicate from kernel to multicast router.
+ * We'll overlay the structure onto an MLD header (not an IPv6 header
+ * like igmpmsg{} used for IPv4 implementation). This is because this
+ * structure will be passed via an IPv6 raw socket, on which an application
+ * will only receive the payload i.e. the data after the IPv6 header and all
+ * the extension headers. (see Section 3 of draft-ietf-ipngwg-2292bis-01)
+ */
+struct mrt6msg {
+#define MRT6MSG_NOCACHE                1
+#define MRT6MSG_WRONGMIF       2
+#define MRT6MSG_WHOLEPKT       3               /* used for user level encap*/
+       u_char      im6_mbz;                    /* must be zero             */
+       u_char      im6_msgtype;                /* what type of message     */
+       u_int16_t   im6_mif;                    /* mif rec'd on             */
+       u_int32_t   im6_pad;                    /* padding for 64bit arch   */
+       struct in6_addr  im6_src, im6_dst;
+};
+
+/*
+ * Argument structure used by multicast routing daemon to get src-grp
+ * packet counts
+ */
+struct sioc_sg_req6 {
+       struct sockaddr_in6 src;
+       struct sockaddr_in6 grp;
+       u_quad_t pktcnt;
+       u_quad_t bytecnt;
+       u_quad_t wrong_if;
+};
+
+/*
+ * Argument structure used by mrouted to get mif pkt counts
+ */
+struct sioc_mif_req6 {
+       mifi_t mifi;            /* mif number                           */
+       u_quad_t icount;        /* Input packet count on mif            */
+       u_quad_t ocount;        /* Output packet count on mif           */
+       u_quad_t ibytes;        /* Input byte count on mif              */
+       u_quad_t obytes;        /* Output byte count on mif             */
+};
+
+#if defined(_KERNEL) || defined(KERNEL)
+/*
+ * The kernel's multicast-interface structure.
+ */
+struct mif6 {
+        u_char         m6_flags;       /* MIFF_ flags defined above         */
+       u_int           m6_rate_limit;  /* max rate                          */
+#ifdef notyet
+       struct tbf      *m6_tbf;        /* token bucket structure at intf.   */
+#endif
+       struct in6_addr m6_lcl_addr;    /* local interface address           */
+       struct ifnet    *m6_ifp;        /* pointer to interface              */
+       u_quad_t        m6_pkt_in;      /* # pkts in on interface            */
+       u_quad_t        m6_pkt_out;     /* # pkts out on interface           */
+       u_quad_t        m6_bytes_in;    /* # bytes in on interface           */
+       u_quad_t        m6_bytes_out;   /* # bytes out on interface          */
+       struct route_in6 m6_route;/* cached route if this is a tunnel */
+#ifdef notyet
+       u_int           m6_rsvp_on;     /* RSVP listening on this vif */
+       struct socket   *m6_rsvpd;      /* RSVP daemon socket */
+#endif
+};
+
+/*
+ * The kernel's multicast forwarding cache entry structure
+ */
+struct mf6c {
+       struct sockaddr_in6  mf6c_origin;       /* IPv6 origin of mcasts     */
+       struct sockaddr_in6  mf6c_mcastgrp;     /* multicast group associated*/
+       mifi_t           mf6c_parent;           /* incoming IF               */
+       struct if_set    mf6c_ifset;            /* set of outgoing IFs */
+
+       u_quad_t        mf6c_pkt_cnt;           /* pkt count for src-grp     */
+       u_quad_t        mf6c_byte_cnt;          /* byte count for src-grp    */
+       u_quad_t        mf6c_wrong_if;          /* wrong if for src-grp      */
+       int             mf6c_expire;            /* time to clean entry up    */
+       struct timeval  mf6c_last_assert;       /* last time I sent an assert*/
+       struct rtdetq  *mf6c_stall;             /* pkts waiting for route */
+       struct mf6c    *mf6c_next;              /* hash table linkage */
+};
+
+#define MF6C_INCOMPLETE_PARENT ((mifi_t)-1)
+
+/*
+ * Argument structure used for pkt info. while upcall is made
+ */
+#ifndef _NETINET_IP_MROUTE_H_
+struct rtdetq {                /* XXX: rtdetq is also defined in ip_mroute.h */
+    struct mbuf        *m;             /* A copy of the packet             */
+    struct ifnet       *ifp;           /* Interface pkt came in on         */
+#ifdef UPCALL_TIMING
+    struct timeval     t;              /* Timestamp */
+#endif /* UPCALL_TIMING */
+    struct rtdetq      *next;
+};
+#endif /* _NETINET_IP_MROUTE_H_ */
+
+#define MF6CTBLSIZ     256
+#if (MF6CTBLSIZ & (MF6CTBLSIZ - 1)) == 0         /* from sys:route.h */
+#define MF6CHASHMOD(h) ((h) & (MF6CTBLSIZ - 1))
+#else
+#define MF6CHASHMOD(h) ((h) % MF6CTBLSIZ)
+#endif
+
+#define MAX_UPQ6       4               /* max. no of pkts in upcall Q */
+
+int    ip6_mrouter_set __P((struct socket *so, struct sockopt *sopt));
+int    ip6_mrouter_get __P((struct socket *so, struct sockopt *sopt));
+int    ip6_mrouter_done __P((void));
+int    mrt6_ioctl __P((int, caddr_t));
+#endif /* _KERNEL */
+
+#endif /* !_NETINET6_IP6_MROUTE_H_ */
diff --git a/libs/watt32/netinet6/ip6_var.h b/libs/watt32/netinet6/ip6_var.h
new file mode 100644 (file)
index 0000000..3f42938
--- /dev/null
@@ -0,0 +1,370 @@
+/*!\file netinet6/ip6_var.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/ip6_var.h,v 1.9 2002/07/25 17:40:45 ume Exp $        */
+/*     $KAME: ip6_var.h,v 1.62 2001/05/03 14:51:48 itojun Exp $        */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 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.
+ *
+ *     @(#)ip_var.h    8.1 (Berkeley) 6/10/93
+ */
+
+#ifndef _NETINET6_IP6_VAR_H_
+#define _NETINET6_IP6_VAR_H_
+
+#include <sys/queue.h>
+
+#if !defined(__BORLANDC__) /* stop warnings for undefined structs */
+/*
+ * IP6 reassembly queue structure.  Each fragment
+ * being reassembled is attached to one of these structures.
+ */
+struct ip6q {
+       u_int32_t       ip6q_head;
+       u_int16_t       ip6q_len;
+       u_int8_t        ip6q_nxt;       /* ip6f_nxt in first fragment */
+       u_int8_t        ip6q_hlim;
+       struct ip6asfrag *ip6q_down;
+       struct ip6asfrag *ip6q_up;
+       u_int32_t       ip6q_ident;
+       u_int8_t        ip6q_arrive;
+       u_int8_t        ip6q_ttl;
+       struct in6_addr ip6q_src, ip6q_dst;
+       struct ip6q     *ip6q_next;
+       struct ip6q     *ip6q_prev;
+       int             ip6q_unfrglen;  /* len of unfragmentable part */
+#ifdef notyet
+       u_char          *ip6q_nxtp;
+#endif
+};
+
+struct ip6asfrag {
+       u_int32_t       ip6af_head;
+       u_int16_t       ip6af_len;
+       u_int8_t        ip6af_nxt;
+       u_int8_t        ip6af_hlim;
+       /* must not override the above members during reassembling */
+       struct ip6asfrag *ip6af_down;
+       struct ip6asfrag *ip6af_up;
+       struct mbuf     *ip6af_m;
+       int             ip6af_offset;   /* offset in ip6af_m to next header */
+       int             ip6af_frglen;   /* fragmentable part length */
+       int             ip6af_off;      /* fragment offset */
+       u_int16_t       ip6af_mff;      /* more fragment bit in frag off */
+};
+
+#define IP6_REASS_MBUF(ip6af) (*(struct mbuf **)&((ip6af)->ip6af_m))
+
+struct ip6_moptions {
+       struct  ifnet *im6o_multicast_ifp; /* ifp for outgoing multicasts */
+       u_char  im6o_multicast_hlim;    /* hoplimit for outgoing multicasts */
+       u_char  im6o_multicast_loop;    /* 1 >= hear sends if a member */
+        LIST_HEAD(dummy, in6_multi_mship) im6o_memberships;
+};
+#endif   /* __BORLANDC__ */
+
+#ifndef _NETINET6_IN6_H_
+struct  route_in6 {
+        struct  rtentry *ro_rt;
+       struct  sockaddr_in6 ro_dst;
+};
+#endif
+
+/*
+ * Control options for outgoing packets
+ */
+
+/* Routing header related info */
+#if !defined(__BORLANDC__)
+struct ip6po_rhinfo {
+        struct  ip6_rthdr *ip6po_rhi_rthdr; /* Routing header */
+        struct  route_in6 ip6po_rhi_route; /* Route to the 1st hop */
+};
+#define ip6po_rthdr    ip6po_rhinfo.ip6po_rhi_rthdr
+#define ip6po_route    ip6po_rhinfo.ip6po_rhi_route
+
+struct ip6_pktopts {
+       struct  mbuf *ip6po_m;  /* Pointer to mbuf storing the data */
+       int     ip6po_hlim;     /* Hoplimit for outgoing packets */
+
+       /* Outgoing IF/address information */
+        struct  in6_pktinfo *ip6po_pktinfo;
+
+       struct  sockaddr *ip6po_nexthop; /* Next-hop address */
+       
+       struct  ip6_hbh *ip6po_hbh; /* Hop-by-Hop options header */
+
+       /* Destination options header (before a routing header) */
+       struct  ip6_dest *ip6po_dest1;
+
+       /* Routing header related info. */
+       struct  ip6po_rhinfo ip6po_rhinfo;
+
+       /* Destination options header (after a routing header) */
+       struct  ip6_dest *ip6po_dest2;
+};
+#endif   /* __BORLANDC__ */
+
+/*
+ * Control options for incoming packets
+ */
+
+struct ip6stat {
+       u_quad_t ip6s_total;            /* total packets received */
+       u_quad_t ip6s_tooshort;         /* packet too short */
+       u_quad_t ip6s_toosmall;         /* not enough data */
+       u_quad_t ip6s_fragments;        /* fragments received */
+       u_quad_t ip6s_fragdropped;      /* frags dropped(dups, out of space) */
+       u_quad_t ip6s_fragtimeout;      /* fragments timed out */
+       u_quad_t ip6s_fragoverflow;     /* fragments that exceeded limit */
+       u_quad_t ip6s_forward;          /* packets forwarded */
+       u_quad_t ip6s_cantforward;      /* packets rcvd for unreachable dest */
+       u_quad_t ip6s_redirectsent;     /* packets forwarded on same net */
+       u_quad_t ip6s_delivered;        /* datagrams delivered to upper level*/
+       u_quad_t ip6s_localout;         /* total ip packets generated here */
+       u_quad_t ip6s_odropped;         /* lost packets due to nobufs, etc. */
+       u_quad_t ip6s_reassembled;      /* total packets reassembled ok */
+       u_quad_t ip6s_fragmented;       /* datagrams sucessfully fragmented */
+       u_quad_t ip6s_ofragments;       /* output fragments created */
+       u_quad_t ip6s_cantfrag;         /* don't fragment flag was set, etc. */
+       u_quad_t ip6s_badoptions;       /* error in option processing */
+       u_quad_t ip6s_noroute;          /* packets discarded due to no route */
+       u_quad_t ip6s_badvers;          /* ip6 version != 6 */
+       u_quad_t ip6s_rawout;           /* total raw ip packets generated */
+       u_quad_t ip6s_badscope;         /* scope error */
+       u_quad_t ip6s_notmember;        /* don't join this multicast group */
+       u_quad_t ip6s_nxthist[256];     /* next header history */
+       u_quad_t ip6s_m1;               /* one mbuf */
+       u_quad_t ip6s_m2m[32];          /* two or more mbuf */
+       u_quad_t ip6s_mext1;            /* one ext mbuf */
+       u_quad_t ip6s_mext2m;           /* two or more ext mbuf */
+       u_quad_t ip6s_exthdrtoolong;    /* ext hdr are not continuous */
+       u_quad_t ip6s_nogif;            /* no match gif found */
+       u_quad_t ip6s_toomanyhdr;       /* discarded due to too many headers */
+
+       /*
+        * statistics for improvement of the source address selection
+        * algorithm:
+        * XXX: hardcoded 16 = # of ip6 multicast scope types + 1
+        */
+       /* number of times that address selection fails */
+       u_quad_t ip6s_sources_none;
+       /* number of times that an address on the outgoing I/F is chosen */
+       u_quad_t ip6s_sources_sameif[16];
+       /* number of times that an address on a non-outgoing I/F is chosen */
+       u_quad_t ip6s_sources_otherif[16];
+       /*
+        * number of times that an address that has the same scope
+        * from the destination is chosen.
+        */
+       u_quad_t ip6s_sources_samescope[16];
+       /*
+        * number of times that an address that has a different scope
+        * from the destination is chosen.
+        */
+       u_quad_t ip6s_sources_otherscope[16];
+       /* number of times that an deprecated address is chosen */
+       u_quad_t ip6s_sources_deprecated[16];
+
+       u_quad_t ip6s_forward_cachehit;
+       u_quad_t ip6s_forward_cachemiss;
+};
+
+#ifdef _KERNEL
+/*
+ * IPv6 onion peeling state.
+ * it will be initialized when we come into ip6_input().
+ * XXX do not make it a kitchen sink!
+ */
+struct ip6aux {
+       u_int32_t ip6a_flags;
+#define IP6A_SWAP      0x01            /* swapped home/care-of on packet */
+#define IP6A_HASEEN    0x02            /* HA was present */
+#define IP6A_BRUID     0x04            /* BR Unique Identifier was present */
+#define IP6A_RTALERTSEEN 0x08          /* rtalert present */
+
+       /* ip6.ip6_src */
+       struct in6_addr ip6a_careof;    /* care-of address of the peer */
+       struct in6_addr ip6a_home;      /* home address of the peer */
+       u_int16_t       ip6a_bruid;     /* BR unique identifier */
+
+       /* ip6.ip6_dst */
+       struct in6_ifaddr *ip6a_dstia6; /* my ifaddr that matches ip6_dst */
+
+       /* rtalert */
+       u_int16_t ip6a_rtalert;         /* rtalert option value */
+
+       /*
+        * decapsulation history will be here.
+        * with IPsec it may not be accurate.
+        */
+};
+#endif
+
+#ifdef _KERNEL
+/* flags passed to ip6_output as last parameter */
+#define        IPV6_DADOUTPUT          0x01    /* DAD */
+#define        IPV6_FORWARDING         0x02    /* most of IPv6 header exists */
+#define        IPV6_MINMTU             0x04    /* use minimum MTU (IPV6_USE_MIN_MTU) */
+
+extern struct  ip6stat ip6stat;        /* statistics */
+extern u_int32_t ip6_id;               /* fragment identifier */
+extern int     ip6_defhlim;            /* default hop limit */
+extern int     ip6_defmcasthlim;       /* default multicast hop limit */
+extern int     ip6_forwarding;         /* act as router? */
+extern int     ip6_forward_srcrt;      /* forward src-routed? */
+extern int     ip6_gif_hlim;           /* Hop limit for gif encap packet */
+extern int     ip6_use_deprecated;     /* allow deprecated addr as source */
+extern int     ip6_rr_prune;           /* router renumbering prefix
+                                        * walk list every 5 sec.    */
+extern int     ip6_v6only;
+
+extern struct socket *ip6_mrouter;     /* multicast routing daemon */
+extern int     ip6_sendredirects;      /* send IP redirects when forwarding? */
+extern int     ip6_maxfragpackets; /* Maximum packets in reassembly queue */
+extern int     ip6_sourcecheck;        /* Verify source interface */
+extern int     ip6_sourcecheck_interval; /* Interval between log messages */
+extern int     ip6_accept_rtadv;       /* Acts as a host not a router */
+extern int     ip6_keepfaith;          /* Firewall Aided Internet Translator */
+extern int     ip6_log_interval;
+extern time_t  ip6_log_time;
+extern int     ip6_hdrnestlimit; /* upper limit of # of extension headers */
+extern int     ip6_dad_count;          /* DupAddrDetectionTransmits */
+
+extern u_int32_t ip6_flow_seq;
+extern int ip6_auto_flowlabel;
+extern int ip6_auto_linklocal;
+
+extern int   ip6_anonportmin;          /* minimum ephemeral port */
+extern int   ip6_anonportmax;          /* maximum ephemeral port */
+extern int   ip6_lowportmin;           /* minimum reserved port */
+extern int   ip6_lowportmax;           /* maximum reserved port */
+
+extern int     ip6_use_tempaddr; /* whether to use temporary addresses. */
+
+extern struct  pr_usrreqs rip6_usrreqs;
+struct sockopt;
+
+struct inpcb;
+
+int    icmp6_ctloutput __P((struct socket *, struct sockopt *sopt));
+
+struct in6_ifaddr;
+void   ip6_init __P((void));
+void   ip6intr __P((void));
+void   ip6_input __P((struct mbuf *));
+struct in6_ifaddr *ip6_getdstifaddr __P((struct mbuf *));
+void   ip6_freepcbopts __P((struct ip6_pktopts *));
+void   ip6_freemoptions __P((struct ip6_moptions *));
+int    ip6_unknown_opt __P((u_int8_t *, struct mbuf *, int));
+char * ip6_get_prevhdr __P((struct mbuf *, int));
+int    ip6_nexthdr __P((struct mbuf *, int, int, int *));
+int    ip6_lasthdr __P((struct mbuf *, int, int, int *));
+
+struct mbuf *ip6_addaux __P((struct mbuf *));
+struct mbuf *ip6_findaux __P((struct mbuf *));
+void   ip6_delaux __P((struct mbuf *));
+
+int    ip6_mforward __P((struct ip6_hdr *, struct ifnet *, struct mbuf *));
+int    ip6_process_hopopts __P((struct mbuf *, u_int8_t *, int, u_int32_t *,
+                                u_int32_t *));
+void   ip6_savecontrol __P((struct inpcb *, struct mbuf **, struct ip6_hdr *,
+                            struct mbuf *));
+void   ip6_notify_pmtu __P((struct inpcb *, struct sockaddr_in6 *,
+                            u_int32_t *));
+int    ip6_sysctl __P((int *, u_int, void *, size_t *, void *, size_t));
+
+void   ip6_forward __P((struct mbuf *, int));
+
+void   ip6_mloopback __P((struct ifnet *, struct mbuf *, struct sockaddr_in6 *));
+int    ip6_output __P((struct mbuf *, struct ip6_pktopts *,
+                       struct route_in6 *,
+                       int,
+                       struct ip6_moptions *, struct ifnet **));
+int    ip6_ctloutput __P((struct socket *, struct sockopt *sopt));
+void   init_ip6pktopts __P((struct ip6_pktopts *));
+int    ip6_setpktoptions __P((struct mbuf *, struct ip6_pktopts *, int, int));
+void   ip6_clearpktopts __P((struct ip6_pktopts *, int, int));
+struct ip6_pktopts *ip6_copypktopts __P((struct ip6_pktopts *, int));
+int    ip6_optlen __P((struct inpcb *));
+
+int    route6_input __P((struct mbuf **, int *, int));
+
+void   frag6_init __P((void));
+int    frag6_input __P((struct mbuf **, int *, int));
+void   frag6_slowtimo __P((void));
+void   frag6_drain __P((void));
+
+void   rip6_init __P((void));
+int    rip6_input __P((struct mbuf **mp, int *offp, int proto));
+void   rip6_ctlinput __P((int, struct sockaddr *, void *));
+int    rip6_ctloutput __P((struct socket *so, struct sockopt *sopt));
+int    rip6_output __P((struct mbuf *, ...));
+int    rip6_usrreq __P((struct socket *,
+           int, struct mbuf *, struct mbuf *, struct mbuf *, struct thread *));
+
+int    dest6_input __P((struct mbuf **, int *, int));
+int    none_input __P((struct mbuf **, int *, int));
+#endif /* _KERNEL */
+
+#endif /* !_NETINET6_IP6_VAR_H_ */
diff --git a/libs/watt32/netinet6/ip6proto.h b/libs/watt32/netinet6/ip6proto.h
new file mode 100644 (file)
index 0000000..9468575
--- /dev/null
@@ -0,0 +1,167 @@
+/*!\file netinet6/ip6proto.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/ip6protosw.h,v 1.9 2002/04/19 04:46:23 suz Exp $     */
+/*     $KAME: ip6protosw.h,v 1.25 2001/09/26 06:13:03 keiichi Exp $    */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ *
+ */
+
+/*     BSDI protosw.h,v 2.3 1996/10/11 16:02:40 pjd Exp        */
+
+/*-
+ * Copyright (c) 1982, 1986, 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.
+ *
+ *     @(#)protosw.h   8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _NETINET6_IP6PROTOSW_H_
+#define _NETINET6_IP6PROTOSW_H_
+
+/*
+ * For pfil_head structure.
+ */
+#include <net/pfil.h>
+
+/*
+ * Protocol switch table for IPv6.
+ * All other definitions should refer to sys/protosw.h
+ */
+
+struct mbuf;
+struct sockaddr;
+struct socket;
+struct domain;
+struct thread;
+struct ip6_hdr;
+struct icmp6_hdr;
+struct in6_addr;
+struct pr_usrreqs;
+
+/*
+ * argument type for the last arg of pr_ctlinput().
+ * should be consulted only with AF_INET6 family.
+ *
+ * IPv6 ICMP IPv6 [exthdrs] finalhdr paylaod
+ * ^    ^    ^              ^
+ * |    |    ip6c_ip6       ip6c_off
+ * |    ip6c_icmp6
+ * ip6c_m
+ *
+ * ip6c_finaldst usually points to ip6c_ip6->ip6_dst.  if the original
+ * (internal) packet carries a routing header, it may point the final
+ * dstination address in the routing header.
+ *
+ * ip6c_src: ip6c_ip6->ip6_src + scope info + flowlabel in ip6c_ip6
+ *     (beware of flowlabel, if you try to compare it against others)
+ * ip6c_dst: ip6c_finaldst + scope info
+ */
+struct ip6ctlparam {
+       struct mbuf *ip6c_m;            /* start of mbuf chain */
+       struct icmp6_hdr *ip6c_icmp6;   /* icmp6 header of target packet */
+       struct ip6_hdr *ip6c_ip6;       /* ip6 header of target packet */
+       int ip6c_off;                   /* offset of the target proto header */
+       struct sockaddr_in6 *ip6c_src;  /* srcaddr w/ additional info */
+       struct sockaddr_in6 *ip6c_dst;  /* (final) dstaddr w/ additional info */
+       struct in6_addr *ip6c_finaldst; /* final destination address */
+       void *ip6c_cmdarg;              /* control command dependent data */
+       u_int8_t ip6c_nxt;              /* final next header field */
+};
+
+struct ip6protosw {
+       short   pr_type;                /* socket type used for */
+       struct  domain *pr_domain;      /* domain protocol a member of */
+       short   pr_protocol;            /* protocol number */
+       short   pr_flags;               /* see below */
+
+/* protocol-protocol hooks */
+       int     (*pr_input)             /* input to protocol (from below) */
+                       __P((struct mbuf **, int *, int));
+       int     (*pr_output)            /* output to protocol (from above) */
+                       __P((struct mbuf *, ...));
+       void    (*pr_ctlinput)          /* control input (from below) */
+                       __P((int, struct sockaddr *, void *));
+       int     (*pr_ctloutput)         /* control output (from above) */
+                       __P((struct socket *, struct sockopt *));
+
+/* user-protocol hook */
+       int     (*pr_usrreq)            /* user request: see list below */
+                       __P((struct socket *, int, struct mbuf *,
+                            struct mbuf *, struct mbuf *, struct thread *));
+
+/* utility hooks */
+       void    (*pr_init)              /* initialization hook */
+                       __P((void));
+
+       void    (*pr_fasttimo)          /* fast timeout (200ms) */
+                       __P((void));
+       void    (*pr_slowtimo)          /* slow timeout (500ms) */
+                       __P((void));
+       void    (*pr_drain)             /* flush any excess space possible */
+                       __P((void));
+       struct  pr_usrreqs *pr_usrreqs; /* supersedes pr_usrreq() */
+       struct  pfil_head       pr_pfh;
+};
+
+#ifdef _KERNEL
+extern struct ip6protosw inet6sw[];
+#endif
+
+#endif /* !_NETINET6_IP6PROTOSW_H_ */
diff --git a/libs/watt32/netinet6/ipcomp.h b/libs/watt32/netinet6/ipcomp.h
new file mode 100644 (file)
index 0000000..393f064
--- /dev/null
@@ -0,0 +1,75 @@
+/*!\file netinet6/ipcomp.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/ipcomp.h,v 1.4 2002/04/19 04:46:23 suz Exp $ */
+/*     $KAME: ipcomp.h,v 1.11 2001/09/04 08:43:19 itojun Exp $ */
+
+/*
+ * Copyright (C) 1999 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+/*
+ * RFC2393 IP payload compression protocol (IPComp).
+ */
+
+#ifndef _NETINET6_IPCOMP_H_
+#define _NETINET6_IPCOMP_H_
+
+#if defined(_KERNEL) && !defined(_LKM)
+#include "opt_inet.h"
+#endif
+
+struct ipcomp {
+       u_int8_t comp_nxt;      /* Next Header */
+       u_int8_t comp_flags;    /* reserved, must be zero */
+       u_int16_t comp_cpi;     /* Compression parameter index */
+};
+
+/* well-known algorithm number (in CPI), from RFC2409 */
+#define IPCOMP_OUI     1       /* vendor specific */
+#define IPCOMP_DEFLATE 2       /* RFC2394 */
+#define IPCOMP_LZS     3       /* RFC2395 */
+#define IPCOMP_MAX     4
+
+#define IPCOMP_CPI_NEGOTIATE_MIN       256
+
+#ifdef _KERNEL
+struct ipcomp_algorithm {
+       int (*compress) __P((struct mbuf *, struct mbuf *, size_t *));
+       int (*decompress) __P((struct mbuf *, struct mbuf *, size_t *));
+       size_t minplen;         /* minimum required length for compression */
+};
+
+struct ipsecrequest;
+extern const struct ipcomp_algorithm *ipcomp_algorithm_lookup __P((int));
+extern void ipcomp4_input __P((struct mbuf *, int));
+extern int ipcomp4_output __P((struct mbuf *, struct ipsecrequest *));
+#endif /* KERNEL */
+
+#endif /* _NETINET6_IPCOMP_H_ */
diff --git a/libs/watt32/netinet6/ipcomp6.h b/libs/watt32/netinet6/ipcomp6.h
new file mode 100644 (file)
index 0000000..954e3a1
--- /dev/null
@@ -0,0 +1,50 @@
+/*!\file netinet6/ipcomp6.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/ipcomp6.h,v 1.2 2001/06/11 12:39:06 ume Exp $        */
+/*     $KAME: ipcomp.h,v 1.8 2000/09/26 07:55:14 itojun Exp $  */
+
+/*
+ * Copyright (C) 1999 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+/*
+ * RFC2393 IP payload compression protocol (IPComp).
+ */
+
+#ifndef _NETINET6_IPCOMP6_H_
+#define _NETINET6_IPCOMP6_H_
+
+#ifdef _KERNEL
+extern int ipcomp6_input __P((struct mbuf **, int *, int));
+extern int ipcomp6_output __P((struct mbuf *, u_char *, struct mbuf *,
+       struct ipsecrequest *));
+#endif /*KERNEL*/
+
+#endif /*_NETINET6_IPCOMP6_H_*/
diff --git a/libs/watt32/netinet6/ipsec.h b/libs/watt32/netinet6/ipsec.h
new file mode 100644 (file)
index 0000000..d33a611
--- /dev/null
@@ -0,0 +1,358 @@
+/*!\file netinet6/ipsec.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/ipsec.h,v 1.9 2002/04/19 04:46:23 suz Exp $  */
+/*     $KAME: ipsec.h,v 1.53 2001/11/20 08:32:38 itojun Exp $  */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+/*
+ * IPsec controller part.
+ */
+
+#ifndef _NETINET6_IPSEC_H_
+#define _NETINET6_IPSEC_H_
+
+#if defined(_KERNEL) && !defined(_LKM) && !defined(KLD_MODULE)
+#include "opt_inet.h"
+#include "opt_ipsec.h"
+#endif
+
+#include <net/pfkeyv2.h>
+#include <netkey/keydb.h>
+
+#ifdef _KERNEL
+
+/*
+ * Security Policy Index
+ * Ensure that both address families in the "src" and "dst" are same.
+ * When the value of the ul_proto is ICMPv6, the port field in "src"
+ * specifies ICMPv6 type, and the port field in "dst" specifies ICMPv6 code.
+ */
+struct secpolicyindex {
+       u_int8_t dir;                   /* direction of packet flow, see blow */
+       struct sockaddr_storage src;    /* IP src address for SP */
+       struct sockaddr_storage dst;    /* IP dst address for SP */
+       u_int8_t prefs;                 /* prefix length in bits for src */
+       u_int8_t prefd;                 /* prefix length in bits for dst */
+       u_int16_t ul_proto;             /* upper layer Protocol */
+#ifdef notyet
+       uid_t uids;
+       uid_t uidd;
+       gid_t gids;
+       gid_t gidd;
+#endif
+};
+
+/* Security Policy Data Base */
+struct secpolicy {
+       LIST_ENTRY(secpolicy) chain;
+
+       int refcnt;                     /* reference count */
+       struct secpolicyindex spidx;    /* selector */
+       u_int32_t id;                   /* It's unique number on the system. */
+       u_int state;                    /* 0: dead, others: alive */
+#define IPSEC_SPSTATE_DEAD     0
+#define IPSEC_SPSTATE_ALIVE    1
+
+       u_int policy;           /* DISCARD, NONE or IPSEC, see keyv2.h */
+       struct ipsecrequest *req;
+                               /* pointer to the ipsec request tree, */
+                               /* if policy == IPSEC else this value == NULL.*/
+
+       /*
+        * lifetime handler.
+        * the policy can be used without limitiation if both lifetime and
+        * validtime are zero.
+        * "lifetime" is passed by sadb_lifetime.sadb_lifetime_addtime.
+        * "validtime" is passed by sadb_lifetime.sadb_lifetime_usetime.
+        */
+       long created;           /* time created the policy */
+       long lastused;          /* updated every when kernel sends a packet */
+       long lifetime;          /* duration of the lifetime of this policy */
+       long validtime;         /* duration this policy is valid without use */
+};
+
+/* Request for IPsec */
+struct ipsecrequest {
+       struct ipsecrequest *next;
+                               /* pointer to next structure */
+                               /* If NULL, it means the end of chain. */
+       struct secasindex saidx;/* hint for search proper SA */
+                               /* if __ss_len == 0 then no address specified.*/
+       u_int level;            /* IPsec level defined below. */
+
+       struct secasvar *sav;   /* place holder of SA for use */
+       struct secpolicy *sp;   /* back pointer to SP */
+};
+
+/* security policy in PCB */
+struct inpcbpolicy {
+       struct secpolicy *sp_in;
+       struct secpolicy *sp_out;
+       int priv;                       /* privileged socket ? */
+};
+
+/* SP acquiring list table. */
+struct secspacq {
+       LIST_ENTRY(secspacq) chain;
+
+       struct secpolicyindex spidx;
+
+       long created;           /* for lifetime */
+       int count;              /* for lifetime */
+       /* XXX: here is mbuf place holder to be sent ? */
+};
+#endif /* _KERNEL */
+
+/* according to IANA assignment, port 0x0000 and proto 0xff are reserved. */
+#define IPSEC_PORT_ANY         0
+#define IPSEC_ULPROTO_ANY      255
+#define IPSEC_PROTO_ANY                255
+
+/* mode of security protocol */
+/* NOTE: DON'T use IPSEC_MODE_ANY at SPD.  It's only use in SAD */
+#define        IPSEC_MODE_ANY          0       /* i.e. wildcard. */
+#define        IPSEC_MODE_TRANSPORT    1
+#define        IPSEC_MODE_TUNNEL       2
+
+/*
+ * Direction of security policy.
+ * NOTE: Since INVALID is used just as flag.
+ * The other are used for loop counter too.
+ */
+#define IPSEC_DIR_ANY          0
+#define IPSEC_DIR_INBOUND      1
+#define IPSEC_DIR_OUTBOUND     2
+#define IPSEC_DIR_MAX          3
+#define IPSEC_DIR_INVALID      4
+
+/* Policy level */
+/*
+ * IPSEC, ENTRUST and BYPASS are allowed for setsockopt() in PCB,
+ * DISCARD, IPSEC and NONE are allowed for setkey() in SPD.
+ * DISCARD and NONE are allowed for system default.
+ */
+#define IPSEC_POLICY_DISCARD   0       /* discarding packet */
+#define IPSEC_POLICY_NONE      1       /* through IPsec engine */
+#define IPSEC_POLICY_IPSEC     2       /* do IPsec */
+#define IPSEC_POLICY_ENTRUST   3       /* consulting SPD if present. */
+#define IPSEC_POLICY_BYPASS    4       /* only for privileged socket. */
+
+/* Security protocol level */
+#define        IPSEC_LEVEL_DEFAULT     0       /* reference to system default */
+#define        IPSEC_LEVEL_USE         1       /* use SA if present. */
+#define        IPSEC_LEVEL_REQUIRE     2       /* require SA. */
+#define        IPSEC_LEVEL_UNIQUE      3       /* unique SA. */
+
+#define IPSEC_MANUAL_REQID_MAX 0x3fff
+                               /*
+                                * if security policy level == unique, this id
+                                * indicate to a relative SA for use, else is
+                                * zero.
+                                * 1 - 0x3fff are reserved for manual keying.
+                                * 0 are reserved for above reason.  Others is
+                                * for kernel use.
+                                * Note that this id doesn't identify SA
+                                * by only itself.
+                                */
+#define IPSEC_REPLAYWSIZE  32
+
+/* statistics for ipsec processing */
+struct ipsecstat {
+       u_quad_t in_success;  /* succeeded inbound process */
+       u_quad_t in_polvio;
+                       /* security policy violation for inbound process */
+       u_quad_t in_nosa;     /* inbound SA is unavailable */
+       u_quad_t in_inval;    /* inbound processing failed due to EINVAL */
+       u_quad_t in_nomem;    /* inbound processing failed due to ENOBUFS */
+       u_quad_t in_badspi;   /* failed getting a SPI */
+       u_quad_t in_ahreplay; /* AH replay check failed */
+       u_quad_t in_espreplay; /* ESP replay check failed */
+       u_quad_t in_ahauthsucc; /* AH authentication success */
+       u_quad_t in_ahauthfail; /* AH authentication failure */
+       u_quad_t in_espauthsucc; /* ESP authentication success */
+       u_quad_t in_espauthfail; /* ESP authentication failure */
+       u_quad_t in_esphist[256];
+       u_quad_t in_ahhist[256];
+       u_quad_t in_comphist[256];
+       u_quad_t out_success; /* succeeded outbound process */
+       u_quad_t out_polvio;
+                       /* security policy violation for outbound process */
+       u_quad_t out_nosa;    /* outbound SA is unavailable */
+       u_quad_t out_inval;   /* outbound process failed due to EINVAL */
+       u_quad_t out_nomem;    /* inbound processing failed due to ENOBUFS */
+       u_quad_t out_noroute; /* there is no route */
+       u_quad_t out_esphist[256];
+       u_quad_t out_ahhist[256];
+       u_quad_t out_comphist[256];
+};
+
+/*
+ * Definitions for IPsec & Key sysctl operations.
+ */
+/*
+ * Names for IPsec & Key sysctl objects
+ */
+#define IPSECCTL_STATS                 1       /* stats */
+#define IPSECCTL_DEF_POLICY            2
+#define IPSECCTL_DEF_ESP_TRANSLEV      3       /* int; ESP transport mode */
+#define IPSECCTL_DEF_ESP_NETLEV                4       /* int; ESP tunnel mode */
+#define IPSECCTL_DEF_AH_TRANSLEV       5       /* int; AH transport mode */
+#define IPSECCTL_DEF_AH_NETLEV         6       /* int; AH tunnel mode */
+#if 0  /* obsolete, do not reuse */
+#define IPSECCTL_INBOUND_CALL_IKE      7
+#endif
+#define        IPSECCTL_AH_CLEARTOS            8
+#define        IPSECCTL_AH_OFFSETMASK          9
+#define        IPSECCTL_DFBIT                  10
+#define        IPSECCTL_ECN                    11
+#define        IPSECCTL_DEBUG                  12
+#define        IPSECCTL_ESP_RANDPAD            13
+#define IPSECCTL_MAXID                 14
+
+#define IPSECCTL_NAMES { \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { "def_policy", CTLTYPE_INT }, \
+       { "esp_trans_deflev", CTLTYPE_INT }, \
+       { "esp_net_deflev", CTLTYPE_INT }, \
+       { "ah_trans_deflev", CTLTYPE_INT }, \
+       { "ah_net_deflev", CTLTYPE_INT }, \
+       { 0, 0 }, \
+       { "ah_cleartos", CTLTYPE_INT }, \
+       { "ah_offsetmask", CTLTYPE_INT }, \
+       { "dfbit", CTLTYPE_INT }, \
+       { "ecn", CTLTYPE_INT }, \
+       { "debug", CTLTYPE_INT }, \
+       { "esp_randpad", CTLTYPE_INT }, \
+}
+
+#define IPSEC6CTL_NAMES { \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { "def_policy", CTLTYPE_INT }, \
+       { "esp_trans_deflev", CTLTYPE_INT }, \
+       { "esp_net_deflev", CTLTYPE_INT }, \
+       { "ah_trans_deflev", CTLTYPE_INT }, \
+       { "ah_net_deflev", CTLTYPE_INT }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { 0, 0 }, \
+       { "ecn", CTLTYPE_INT }, \
+       { "debug", CTLTYPE_INT }, \
+       { "esp_randpad", CTLTYPE_INT }, \
+}
+
+#ifdef _KERNEL
+struct ipsec_output_state {
+       struct mbuf *m;
+       struct route *ro;
+       struct sockaddr *dst;
+};
+
+struct ipsec_history {
+       int ih_proto;
+       u_int32_t ih_spi;
+};
+
+extern int ipsec_debug;
+
+extern struct ipsecstat ipsecstat;
+extern struct secpolicy ip4_def_policy;
+extern int ip4_esp_trans_deflev;
+extern int ip4_esp_net_deflev;
+extern int ip4_ah_trans_deflev;
+extern int ip4_ah_net_deflev;
+extern int ip4_ah_cleartos;
+extern int ip4_ah_offsetmask;
+extern int ip4_ipsec_dfbit;
+extern int ip4_ipsec_ecn;
+extern int ip4_esp_randpad;
+
+#define ipseclog(x)    do { if (ipsec_debug) log x; } while (0)
+
+extern struct secpolicy *ipsec4_getpolicybysock
+       __P((struct mbuf *, u_int, struct socket *, int *));
+extern struct secpolicy *ipsec4_getpolicybyaddr
+       __P((struct mbuf *, u_int, int, int *));
+
+struct inpcb;
+extern int ipsec_init_policy __P((struct socket *so, struct inpcbpolicy **));
+extern int ipsec_copy_policy
+       __P((struct inpcbpolicy *, struct inpcbpolicy *));
+extern u_int ipsec_get_reqlevel __P((struct ipsecrequest *));
+
+extern int ipsec4_set_policy __P((struct inpcb *inp, int optname,
+       caddr_t request, size_t len, int priv));
+extern int ipsec4_get_policy __P((struct inpcb *inpcb, caddr_t request,
+       size_t len, struct mbuf **mp));
+extern int ipsec4_delete_pcbpolicy __P((struct inpcb *));
+extern int ipsec4_in_reject_so __P((struct mbuf *, struct socket *));
+extern int ipsec4_in_reject __P((struct mbuf *, struct inpcb *));
+
+struct secas;
+struct tcpcb;
+extern int ipsec_chkreplay __P((u_int32_t, struct secasvar *));
+extern int ipsec_updatereplay __P((u_int32_t, struct secasvar *));
+
+extern size_t ipsec4_hdrsiz __P((struct mbuf *, u_int, struct inpcb *));
+extern size_t ipsec_hdrsiz_tcp __P((struct tcpcb *));
+
+struct ip;
+extern const char *ipsec4_logpacketstr __P((struct ip *, u_int32_t));
+extern const char *ipsec_logsastr __P((struct secasvar *));
+
+extern void ipsec_dumpmbuf __P((struct mbuf *));
+
+extern int ipsec4_output __P((struct ipsec_output_state *, struct secpolicy *,
+       int));
+extern int ipsec4_tunnel_validate __P((struct mbuf *, int, u_int,
+       struct secasvar *));
+extern struct mbuf *ipsec_copypkt __P((struct mbuf *));
+extern void ipsec_delaux __P((struct mbuf *));
+extern int ipsec_setsocket __P((struct mbuf *, struct socket *));
+extern struct socket *ipsec_getsocket __P((struct mbuf *));
+extern int ipsec_addhist __P((struct mbuf *, int, u_int32_t)); 
+extern struct ipsec_history *ipsec_gethist __P((struct mbuf *, int *));
+extern void ipsec_clearhist __P((struct mbuf *));
+#endif /* _KERNEL */
+
+#ifndef _KERNEL
+extern caddr_t ipsec_set_policy __P((char *, int));
+extern int ipsec_get_policylen __P((caddr_t));
+extern char *ipsec_dump_policy __P((caddr_t, char *));
+
+extern const char *ipsec_strerror __P((void));
+#endif /* !_KERNEL */
+
+#endif /* _NETINET6_IPSEC_H_ */
diff --git a/libs/watt32/netinet6/ipsec6.h b/libs/watt32/netinet6/ipsec6.h
new file mode 100644 (file)
index 0000000..5e43965
--- /dev/null
@@ -0,0 +1,87 @@
+/*!\file netinet6/ipsec6.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/ipsec6.h,v 1.5 2001/06/11 12:39:06 ume Exp $ */
+/*     $KAME: ipsec.h,v 1.44 2001/03/23 08:08:47 itojun Exp $  */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+/*
+ * IPsec controller part.
+ */
+
+#ifndef _NETINET6_IPSEC6_H_
+#define _NETINET6_IPSEC6_H_
+
+#include <net/pfkeyv2.h>
+#include <netkey/keydb.h>
+
+#ifdef _KERNEL
+extern struct ipsecstat ipsec6stat;
+extern struct secpolicy ip6_def_policy;
+extern int ip6_esp_trans_deflev;
+extern int ip6_esp_net_deflev;
+extern int ip6_ah_trans_deflev;
+extern int ip6_ah_net_deflev;
+extern int ip6_ipsec_ecn;
+extern int ip6_esp_randpad;
+
+extern struct secpolicy *ipsec6_getpolicybysock
+       __P((struct mbuf *, u_int, struct socket *, int *));
+extern struct secpolicy *ipsec6_getpolicybyaddr
+       __P((struct mbuf *, u_int, int, int *));
+
+struct inpcb;
+
+extern int ipsec6_in_reject_so __P((struct mbuf *, struct socket *));
+extern int ipsec6_delete_pcbpolicy __P((struct inpcb *));
+extern int ipsec6_set_policy __P((struct inpcb *inp, int optname,
+       caddr_t request, size_t len, int priv));
+extern int ipsec6_get_policy
+       __P((struct inpcb *inp, caddr_t request, size_t len, struct mbuf **mp));
+extern int ipsec6_in_reject __P((struct mbuf *, struct inpcb *));
+
+struct tcp6cb;
+
+extern size_t ipsec6_hdrsiz __P((struct mbuf *, u_int, struct inpcb *));
+
+struct ip6_hdr;
+extern const char *ipsec6_logpacketstr __P((struct ip6_hdr *, u_int32_t));
+
+extern int ipsec6_output_trans __P((struct ipsec_output_state *, u_char *,
+       struct mbuf *, struct secpolicy *, int, int *));
+extern int ipsec6_output_tunnel __P((struct ipsec_output_state *,
+       struct secpolicy *, int));
+extern int ipsec6_tunnel_validate __P((struct mbuf *, int, u_int,
+       struct secasvar *));
+#endif /*_KERNEL*/
+
+#endif /*_NETINET6_IPSEC6_H_*/
diff --git a/libs/watt32/netinet6/mld6_var.h b/libs/watt32/netinet6/mld6_var.h
new file mode 100644 (file)
index 0000000..836cfb8
--- /dev/null
@@ -0,0 +1,57 @@
+/*!\file netinet6/mld6_var.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/mld6_var.h,v 1.2 2000/07/04 16:35:10 itojun Exp $    */
+/*     $KAME: mld6_var.h,v 1.4 2000/03/25 07:23:54 sumikawa Exp $      */
+
+/*
+ * Copyright (C) 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+#ifndef _NETINET6_MLD6_VAR_H_
+#define _NETINET6_MLD6_VAR_H_
+
+#ifdef _KERNEL
+
+#define MLD6_RANDOM_DELAY(X) (random() % (X) + 1)
+
+/*
+ * States for MLD stop-listening processing
+ */
+#define MLD6_OTHERLISTENER                     0
+#define MLD6_IREPORTEDLAST                     1
+
+void   mld6_init __P((void));
+void   mld6_input __P((struct mbuf *, int));
+void   mld6_start_listening __P((struct in6_multi *));
+void   mld6_stop_listening __P((struct in6_multi *));
+void   mld6_fasttimeo __P((void));
+#endif /* _KERNEL */
+
+#endif /* _NETINET6_MLD6_VAR_H_ */
diff --git a/libs/watt32/netinet6/nd6.h b/libs/watt32/netinet6/nd6.h
new file mode 100644 (file)
index 0000000..015c7f5
--- /dev/null
@@ -0,0 +1,408 @@
+/*!\file netinet6/nd6.h
+ * IPv6 Neighbor Discovery.
+ */
+
+/*      $FreeBSD: src/sys/netinet6/nd6.h,v 1.10 2002/04/19 04:46:23 suz Exp $   */
+/*     $KAME: nd6.h,v 1.76 2001/12/18 02:10:31 itojun Exp $    */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+#ifndef _NETINET6_ND6_H_
+#define _NETINET6_ND6_H_
+
+/* see net/route.h, or net/if_inarp.h */
+#ifndef RTF_ANNOUNCE
+#define RTF_ANNOUNCE   RTF_PROTO2
+#endif
+
+#include <sys/queue.h>
+#include <sys/callout.h>
+
+struct llinfo_nd6 {
+       struct  llinfo_nd6 *ln_next;
+       struct  llinfo_nd6 *ln_prev;
+       struct  rtentry *ln_rt;
+       struct  mbuf *ln_hold;  /* last packet until resolved/timeout */
+       long    ln_asked;       /* number of queries already sent for this addr */
+       u_long  ln_expire;      /* lifetime for NDP state transition */
+       short   ln_state;       /* reachability state */
+       short   ln_router;      /* 2^0: ND6 router bit */
+       int     ln_byhint;      /* # of times we made it reachable by UL hint */
+};
+
+#define ND6_LLINFO_NOSTATE     -2
+/*
+ * We don't need the WAITDELETE state any more, but we keep the definition
+ * in a comment line instead of removing it. This is necessary to avoid
+ * unintentionally reusing the value for another purpose, which might
+ * affect backward compatibility with old applications.
+ * (20000711 jinmei@kame.net)
+ */
+/* #define ND6_LLINFO_WAITDELETE       -1 */
+#define ND6_LLINFO_INCOMPLETE  0
+#define ND6_LLINFO_REACHABLE   1
+#define ND6_LLINFO_STALE       2
+#define ND6_LLINFO_DELAY       3
+#define ND6_LLINFO_PROBE       4
+
+#define ND6_IS_LLINFO_PROBREACH(n) ((n)->ln_state > ND6_LLINFO_INCOMPLETE)
+
+struct nd_ifinfo {
+       u_int32_t linkmtu;              /* LinkMTU */
+       u_int32_t maxmtu;               /* Upper bound of LinkMTU */
+       u_int32_t basereachable;        /* BaseReachableTime */
+       u_int32_t reachable;            /* Reachable Time */
+       u_int32_t retrans;              /* Retrans Timer */
+       u_int32_t flags;                /* Flags */
+       int recalctm;                   /* BaseReacable re-calculation timer */
+       u_int8_t chlim;                 /* CurHopLimit */
+       u_int8_t receivedra;
+       /* the following 3 members are for privacy extension for addrconf */
+       u_int8_t randomseed0[8]; /* upper 64 bits of MD5 digest */
+       u_int8_t randomseed1[8]; /* lower 64 bits (usually the EUI64 IFID) */
+       u_int8_t randomid[8];   /* current random ID */
+};
+
+#define ND6_IFF_PERFORMNUD     0x1
+
+struct in6_nbrinfo {
+       char ifname[IFNAMSIZ];  /* if name, e.g. "en0" */
+       struct in6_addr addr;   /* IPv6 address of the neighbor */
+       long    asked;          /* number of queries already sent for this addr */
+       int     isrouter;       /* if it acts as a router */
+       int     state;          /* reachability state */
+       int     expire;         /* lifetime for NDP state transition */
+};
+
+#define DRLSTSIZ 10
+#define PRLSTSIZ 10
+struct in6_drlist {
+       char ifname[IFNAMSIZ];
+       struct {
+               struct  in6_addr rtaddr;
+               u_char  flags;
+               u_short rtlifetime;
+               u_long  expire;
+               u_short if_index;
+       } defrouter[DRLSTSIZ];
+};
+
+struct in6_defrouter {
+       struct  sockaddr_in6 rtaddr;
+       u_char  flags;
+       u_short rtlifetime;
+       u_long  expire;
+       u_short if_index;
+};
+
+struct in6_prlist {
+       char ifname[IFNAMSIZ];
+       struct {
+               struct  in6_addr prefix;
+               struct prf_ra raflags;
+               u_char  prefixlen;
+               u_char  origin;
+               u_int32_t vltime;
+               u_int32_t pltime;
+               time_t expire;
+               u_short if_index;
+               u_short advrtrs; /* number of advertisement routers */
+               struct  in6_addr advrtr[DRLSTSIZ]; /* XXX: explicit limit */
+       } prefix[PRLSTSIZ];
+};
+
+struct in6_prefix {
+       struct  sockaddr_in6 prefix;
+       struct prf_ra raflags;
+       u_char  prefixlen;
+       u_char  origin;
+       u_long  vltime;
+       u_long  pltime;
+       u_long  expire;
+       u_int32_t flags;
+       int refcnt;
+       u_short if_index;
+       u_short advrtrs; /* number of advertisement routers */
+       /* struct sockaddr_in6 advrtr[] */
+};
+
+#ifdef _KERNEL
+struct in6_ondireq {
+       char ifname[IFNAMSIZ];
+       struct {
+               u_int32_t linkmtu;      /* LinkMTU */
+               u_int32_t maxmtu;       /* Upper bound of LinkMTU */
+               u_int32_t basereachable; /* BaseReachableTime */
+               u_int32_t reachable;    /* Reachable Time */
+               u_int32_t retrans;      /* Retrans Timer */
+               u_int32_t flags;        /* Flags */
+               int recalctm;           /* BaseReacable re-calculation timer */
+               u_int8_t chlim;         /* CurHopLimit */
+               u_int8_t receivedra;
+       } ndi;
+};
+#endif
+
+struct in6_ndireq {
+       char ifname[IFNAMSIZ];
+       struct nd_ifinfo ndi;
+};
+
+struct in6_ndifreq {
+       char ifname[IFNAMSIZ];
+       u_long ifindex;
+};
+
+/* Prefix status */
+#define NDPRF_ONLINK           0x1
+#define NDPRF_DETACHED         0x2
+
+/* protocol constants */
+#define MAX_RTR_SOLICITATION_DELAY     1       /* 1sec */
+#define RTR_SOLICITATION_INTERVAL      4       /* 4sec */
+#define MAX_RTR_SOLICITATIONS          3
+
+#define ND6_INFINITE_LIFETIME          0xffffffff
+
+#ifdef _KERNEL
+/* node constants */
+#define MAX_REACHABLE_TIME             3600000 /* msec */
+#define REACHABLE_TIME                 30000   /* msec */
+#define RETRANS_TIMER                  1000    /* msec */
+#define MIN_RANDOM_FACTOR              512     /* 1024 * 0.5 */
+#define MAX_RANDOM_FACTOR              1536    /* 1024 * 1.5 */
+#define DEF_TEMP_VALID_LIFETIME                604800  /* 1 week */
+#define DEF_TEMP_PREFERRED_LIFETIME    86400   /* 1 day */
+#define TEMPADDR_REGEN_ADVANCE         5       /* sec */
+#define MAX_TEMP_DESYNC_FACTOR         600     /* 10 min */
+#define ND_COMPUTE_RTIME(x) \
+               (((MIN_RANDOM_FACTOR * (x >> 10)) + (random() & \
+               ((MAX_RANDOM_FACTOR - MIN_RANDOM_FACTOR) * (x >> 10)))) /1000)
+
+TAILQ_HEAD(nd_drhead, nd_defrouter);
+struct nd_defrouter {
+       TAILQ_ENTRY(nd_defrouter) dr_entry;
+       struct  in6_addr rtaddr;
+       u_char  flags;          /* flags on RA message */
+       u_short rtlifetime;
+       u_long  expire;
+       u_long  advint;         /* Mobile IPv6 addition (milliseconds) */
+       u_long  advint_expire;  /* Mobile IPv6 addition */
+       int     advints_lost;   /* Mobile IPv6 addition */
+       struct  ifnet *ifp;
+};
+
+struct nd_prefix {
+       struct ifnet *ndpr_ifp;
+       LIST_ENTRY(nd_prefix) ndpr_entry;
+       struct sockaddr_in6 ndpr_prefix;        /* prefix */
+       struct in6_addr ndpr_mask; /* netmask derived from the prefix */
+       struct in6_addr ndpr_addr; /* address that is derived from the prefix */
+       u_int32_t ndpr_vltime;  /* advertised valid lifetime */
+       u_int32_t ndpr_pltime;  /* advertised preferred lifetime */
+       time_t ndpr_expire;     /* expiration time of the prefix */
+       time_t ndpr_preferred;  /* preferred time of the prefix */
+       struct prf_ra ndpr_flags;
+       u_int32_t ndpr_stateflags; /* actual state flags */
+       /* list of routers that advertise the prefix: */
+       LIST_HEAD(pr_rtrhead, nd_pfxrouter) ndpr_advrtrs;
+       u_char  ndpr_plen;
+       int     ndpr_refcnt;    /* reference couter from addresses */
+};
+
+#define ndpr_next              ndpr_entry.le_next
+
+#define ndpr_raf               ndpr_flags
+#define ndpr_raf_onlink                ndpr_flags.onlink
+#define ndpr_raf_auto          ndpr_flags.autonomous
+
+/*
+ * We keep expired prefix for certain amount of time, for validation purposes.
+ * 1800s = MaxRtrAdvInterval
+ */
+#define NDPR_KEEP_EXPIRED      (1800 * 2)
+
+/*
+ * Message format for use in obtaining information about prefixes
+ * from inet6 sysctl function
+ */
+struct inet6_ndpr_msghdr {
+       u_short inpm_msglen;    /* to skip over non-understood messages */
+       u_char  inpm_version;   /* future binary compatibility */
+       u_char  inpm_type;      /* message type */
+       struct in6_addr inpm_prefix;
+       u_long  prm_vltim;
+       u_long  prm_pltime;
+       u_long  prm_expire;
+       u_long  prm_preferred;
+       struct in6_prflags prm_flags;
+       u_short prm_index;      /* index for associated ifp */
+       u_char  prm_plen;       /* length of prefix in bits */
+};
+
+#define prm_raf_onlink         prm_flags.prf_ra.onlink
+#define prm_raf_auto           prm_flags.prf_ra.autonomous
+
+#define prm_statef_onlink      prm_flags.prf_state.onlink
+
+#define prm_rrf_decrvalid      prm_flags.prf_rr.decrvalid
+#define prm_rrf_decrprefd      prm_flags.prf_rr.decrprefd
+
+#define ifpr2ndpr(ifpr)        ((struct nd_prefix *)(ifpr))
+#define ndpr2ifpr(ndpr)        ((struct ifprefix *)(ndpr))
+
+struct nd_pfxrouter {
+       LIST_ENTRY(nd_pfxrouter) pfr_entry;
+#define pfr_next pfr_entry.le_next
+       struct nd_defrouter *router;
+};
+
+LIST_HEAD(nd_prhead, nd_prefix);
+
+/* nd6.c */
+extern int nd6_prune;
+extern int nd6_delay;
+extern int nd6_umaxtries;
+extern int nd6_mmaxtries;
+extern int nd6_useloopback;
+extern int nd6_maxnudhint;
+extern int nd6_gctimer;
+extern struct llinfo_nd6 llinfo_nd6;
+extern struct nd_ifinfo *nd_ifinfo;
+extern struct nd_drhead nd_defrouter;
+extern struct nd_prhead nd_prefix;
+extern int nd6_debug;
+
+#define nd6log(x)      do { if (nd6_debug) log x; } while (0)
+
+extern struct callout nd6_timer_ch;
+
+/* nd6_rtr.c */
+extern int nd6_defifindex;
+extern int ip6_desync_factor;  /* seconds */
+extern u_int32_t ip6_temp_preferred_lifetime; /* seconds */
+extern u_int32_t ip6_temp_valid_lifetime; /* seconds */
+extern int ip6_temp_regen_advance; /* seconds */
+
+union nd_opts {
+       struct nd_opt_hdr *nd_opt_array[9];     /* max = home agent info */
+       struct {
+               struct nd_opt_hdr *zero;
+               struct nd_opt_hdr *src_lladdr;
+               struct nd_opt_hdr *tgt_lladdr;
+               struct nd_opt_prefix_info *pi_beg; /* multiple opts, start */
+               struct nd_opt_rd_hdr *rh;
+               struct nd_opt_mtu *mtu;
+               struct nd_opt_hdr *six;
+               struct nd_opt_advint *adv;
+               struct nd_opt_hai *hai;
+               struct nd_opt_hdr *search;      /* multiple opts */
+               struct nd_opt_hdr *last;        /* multiple opts */
+               int done;
+               struct nd_opt_prefix_info *pi_end;/* multiple opts, end */
+       } nd_opt_each;
+};
+#define nd_opts_src_lladdr     nd_opt_each.src_lladdr
+#define nd_opts_tgt_lladdr     nd_opt_each.tgt_lladdr
+#define nd_opts_pi             nd_opt_each.pi_beg
+#define nd_opts_pi_end         nd_opt_each.pi_end
+#define nd_opts_rh             nd_opt_each.rh
+#define nd_opts_mtu            nd_opt_each.mtu
+#define nd_opts_adv            nd_opt_each.adv
+#define nd_opts_hai            nd_opt_each.hai
+#define nd_opts_search         nd_opt_each.search
+#define nd_opts_last           nd_opt_each.last
+#define nd_opts_done           nd_opt_each.done
+
+/* XXX: need nd6_var.h?? */
+/* nd6.c */
+void nd6_init __P((void));
+void nd6_ifattach __P((struct ifnet *));
+int nd6_is_addr_neighbor __P((struct sockaddr_in6 *, struct ifnet *));
+void nd6_option_init __P((void *, int, union nd_opts *));
+struct nd_opt_hdr *nd6_option __P((union nd_opts *));
+int nd6_options __P((union nd_opts *));
+struct rtentry *nd6_lookup __P((struct in6_addr *, int, struct ifnet *));
+void nd6_setmtu __P((struct ifnet *));
+void nd6_timer __P((void *));
+void nd6_purge __P((struct ifnet *));
+struct llinfo_nd6 *nd6_free __P((struct rtentry *));
+void nd6_nud_hint __P((struct rtentry *, struct in6_addr *, int));
+int nd6_resolve __P((struct ifnet *, struct rtentry *,
+                    struct mbuf *, struct sockaddr *, u_char *));
+void nd6_rtrequest __P((int, struct rtentry *, struct rt_addrinfo *));
+int nd6_ioctl __P((u_long, caddr_t, struct ifnet *));
+struct rtentry *nd6_cache_lladdr __P((struct ifnet *, struct in6_addr *,
+       char *, int, int, int));
+int nd6_output __P((struct ifnet *, struct ifnet *, struct mbuf *,
+                   struct sockaddr_in6 *, struct rtentry *));
+int nd6_storelladdr __P((struct ifnet *, struct rtentry *, struct mbuf *,
+                        struct sockaddr *, u_char *));
+int nd6_need_cache __P((struct ifnet *));
+
+/* nd6_nbr.c */
+void nd6_na_input __P((struct mbuf *, int, int));
+void nd6_na_output __P((struct ifnet *, const struct in6_addr *,
+       const struct in6_addr *, u_long, int, struct sockaddr *));
+void nd6_ns_input __P((struct mbuf *, int, int));
+void nd6_ns_output __P((struct ifnet *, const struct in6_addr *,
+       const struct in6_addr *, struct llinfo_nd6 *, int));
+caddr_t nd6_ifptomac __P((struct ifnet *));
+void nd6_dad_start __P((struct ifaddr *, int *));
+void nd6_dad_stop __P((struct ifaddr *));
+void nd6_dad_duplicated __P((struct ifaddr *));
+
+/* nd6_rtr.c */
+void nd6_rs_input __P((struct mbuf *, int, int));
+void nd6_ra_input __P((struct mbuf *, int, int));
+void prelist_del __P((struct nd_prefix *));
+void defrouter_addreq __P((struct nd_defrouter *));
+void defrouter_delreq __P((struct nd_defrouter *, int));
+void defrouter_select __P((void));
+void defrtrlist_del __P((struct nd_defrouter *));
+void prelist_remove __P((struct nd_prefix *));
+int prelist_update __P((struct nd_prefix *, struct nd_defrouter *,
+                       struct mbuf *));
+int nd6_prelist_add __P((struct nd_prefix *, struct nd_defrouter *,
+                        struct nd_prefix **));
+int nd6_prefix_onlink __P((struct nd_prefix *));
+int nd6_prefix_offlink __P((struct nd_prefix *));
+void pfxlist_onlink_check __P((void));
+struct nd_defrouter *defrouter_lookup __P((struct in6_addr *,
+                                          struct ifnet *));
+struct nd_prefix *nd6_prefix_lookup __P((struct nd_prefix *));
+int in6_init_prefix_ltimes __P((struct nd_prefix *ndpr));
+void rt6_flush __P((struct in6_addr *, struct ifnet *));
+int nd6_setdefaultiface __P((int));
+int in6_tmpifadd __P((const struct in6_ifaddr *, int));
+
+#endif /* _KERNEL */
+
+#endif /* _NETINET6_ND6_H_ */
diff --git a/libs/watt32/netinet6/pim6.h b/libs/watt32/netinet6/pim6.h
new file mode 100644 (file)
index 0000000..c28d67a
--- /dev/null
@@ -0,0 +1,73 @@
+/*!\file netinet6/pim6.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/pim6.h,v 1.2 2000/07/04 16:35:10 itojun Exp $        */
+/*     $KAME: pim6.h,v 1.3 2000/03/25 07:23:58 sumikawa Exp $  */
+
+/*
+ * Copyright (C) 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+/*
+ * Protocol Independent Multicast (PIM) definitions
+ *
+ * Written by Ahmed Helmy, SGI, July 1996
+ *
+ * MULTICAST
+ */
+
+/*
+ * PIM packet header
+ */
+#define PIM_VERSION    2
+struct pim {
+#if defined(BYTE_ORDER) && (BYTE_ORDER == LITTLE_ENDIAN)
+       u_char  pim_type:4, /* the PIM message type, currently they are:
+                            * Hello, Register, Register-Stop, Join/Prune,
+                            * Bootstrap, Assert, Graft (PIM-DM only),
+                            * Graft-Ack (PIM-DM only), C-RP-Adv
+                            */
+               pim_ver:4;  /* PIM version number; 2 for PIMv2 */
+#else
+       u_char  pim_ver:4,      /* PIM version */
+               pim_type:4;     /* PIM type    */
+#endif
+       u_char  pim_rsv;        /* Reserved */
+       u_short pim_cksum;      /* IP style check sum */
+};
+
+#define PIM_MINLEN     8               /* The header min. length is 8    */
+#define PIM6_REG_MINLEN        (PIM_MINLEN+40) /* Register message + inner IP6 header */
+
+/*
+ * Message types
+ */
+#define PIM_REGISTER   1       /* PIM Register type is 1 */
+
+/* second bit in reg_head is the null bit */
+#define PIM_NULL_REGISTER 0x40000000
diff --git a/libs/watt32/netinet6/pim6_var.h b/libs/watt32/netinet6/pim6_var.h
new file mode 100644 (file)
index 0000000..7d1105d
--- /dev/null
@@ -0,0 +1,74 @@
+/*!\file netinet6/pim6_var.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/pim6_var.h,v 1.3 2000/07/04 16:35:10 itojun Exp $    */
+/*     $KAME: pim6_var.h,v 1.8 2000/06/06 08:07:43 jinmei Exp $        */
+
+/*
+ * Copyright (C) 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+#ifndef _NETINET6_PIM6_VAR_H_
+#define _NETINET6_PIM6_VAR_H_
+
+/*
+ * Protocol Independent Multicast (PIM),
+ * implementation-specific definitions.
+ *
+ * Written by George Edmond Eddy (Rusty), ISI, February 1998
+ * Modified by Pavlin Ivanov Radoslavov, USC/ISI, May 1998
+ */
+
+struct pim6stat {
+       u_quad_t pim6s_rcv_total;       /* total PIM messages received  */
+       u_quad_t pim6s_rcv_tooshort;    /* received with too few bytes  */
+       u_quad_t pim6s_rcv_badsum;      /* received with bad checksum   */
+       u_quad_t pim6s_rcv_badversion;  /* received bad PIM version     */
+       u_quad_t pim6s_rcv_registers;   /* received registers           */
+       u_quad_t pim6s_rcv_badregisters; /* received invalid registers  */
+       u_quad_t pim6s_snd_registers;   /* sent registers               */
+};
+
+#if (defined(KERNEL)) || (defined(_KERNEL))
+extern struct pim6stat pim6stat;
+
+int pim6_input __P((struct mbuf **, int*, int));
+#endif /* KERNEL */
+
+/*
+ * Names for PIM sysctl objects
+ */
+#define PIM6CTL_STATS          1       /* statistics (read-only) */
+#define PIM6CTL_MAXID          2
+
+#define PIM6CTL_NAMES { \
+       { 0, 0 }, \
+       { 0, 0 }, \
+}
+#endif /* _NETINET6_PIM6_VAR_H_ */
diff --git a/libs/watt32/netinet6/raw_ip6.h b/libs/watt32/netinet6/raw_ip6.h
new file mode 100644 (file)
index 0000000..6ca195f
--- /dev/null
@@ -0,0 +1,58 @@
+/*!\file netinet6/raw_ip6.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/raw_ip6.h,v 1.1 2001/06/11 12:39:06 ume Exp $        */
+/*     $KAME: raw_ip6.h,v 1.2 2001/05/27 13:28:35 itojun Exp $ */
+
+/*
+ * Copyright (C) 2001 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+#ifndef _NETINET6_RAW_IP6_H_
+#define _NETINET6_RAW_IP6_H_
+
+/*
+ * ICMPv6 stat is counted separately.  see netinet/icmp6.h
+ */
+struct rip6stat {
+       u_quad_t rip6s_ipackets;        /* total input packets */
+       u_quad_t rip6s_isum;            /* input checksum computations */
+       u_quad_t rip6s_badsum;          /* of above, checksum error */
+       u_quad_t rip6s_nosock;          /* no matching socket */
+       u_quad_t rip6s_nosockmcast;     /* of above, arrived as multicast */
+       u_quad_t rip6s_fullsock;        /* not delivered, input socket full */
+
+       u_quad_t rip6s_opackets;        /* total output packets */
+};
+
+#ifdef _KERNEL
+extern struct rip6stat rip6stat;
+#endif
+
+#endif
diff --git a/libs/watt32/netinet6/scope6_v.h b/libs/watt32/netinet6/scope6_v.h
new file mode 100644 (file)
index 0000000..b802d1c
--- /dev/null
@@ -0,0 +1,50 @@
+/*!\file netinet6/scope6_v.h
+ *
+ */
+
+/*      $FreeBSD: src/sys/netinet6/scope6_var.h,v 1.1 2000/07/04 16:35:10 itojun Exp $  */
+/*     $KAME: scope6_var.h,v 1.4 2000/05/18 15:03:27 jinmei Exp $      */
+
+/*
+ * Copyright (C) 2000 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ */
+
+#ifndef _NETINET6_SCOPE6_VAR_H_
+#define _NETINET6_SCOPE6_VAR_H_
+
+#ifdef _KERNEL
+void   scope6_ifattach __P((struct ifnet *));
+int    scope6_set __P((struct ifnet *, u_int32_t *));
+int    scope6_get __P((struct ifnet *, u_int32_t *));
+void   scope6_setdefault __P((struct ifnet *));
+int    scope6_get_default __P((u_int32_t *));
+u_int32_t scope6_in6_addrscope __P((struct in6_addr *));
+u_int32_t scope6_addr2default __P((struct in6_addr *));
+#endif /* _KERNEL */
+
+#endif /* _NETINET6_SCOPE6_VAR_H_ */
diff --git a/libs/watt32/netinet6/tcp6_var.h b/libs/watt32/netinet6/tcp6_var.h
new file mode 100644 (file)
index 0000000..a3bae59
--- /dev/null
@@ -0,0 +1,91 @@
+/*!\file netinet6/tcp6_var.h
+ *
+ */
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ *
+ * $FreeBSD: src/sys/netinet6/tcp6_var.h,v 1.5 2001/11/22 04:50:44 jlemon Exp $
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 1993, 1994, 1995
+ *     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.
+ *
+ *     @(#)tcp_var.h   8.4 (Berkeley) 5/24/95
+ * $FreeBSD: src/sys/netinet6/tcp6_var.h,v 1.5 2001/11/22 04:50:44 jlemon Exp $
+ */
+
+#ifndef _NETINET_TCP6_VAR_H_
+#define _NETINET_TCP6_VAR_H_
+
+#ifdef _KERNEL
+#ifdef SYSCTL_DECL
+SYSCTL_DECL(_net_inet6_tcp6);
+#endif
+
+extern int tcp_v6mssdflt;      /* XXX */
+
+struct ip6_hdr;
+void   tcp6_ctlinput __P((int, struct sockaddr *, void *));
+void   tcp6_init __P((void));
+int    tcp6_input __P((struct mbuf **, int *, int));
+struct rtentry *tcp_rtlookup6(struct in_conninfo *);
+
+extern struct  pr_usrreqs tcp6_usrreqs;
+
+#endif /* _KERNEL */
+
+#endif /* _NETINET_TCP6_VAR_H_ */
diff --git a/libs/watt32/netinet6/udp6_var.h b/libs/watt32/netinet6/udp6_var.h
new file mode 100644 (file)
index 0000000..f421156
--- /dev/null
@@ -0,0 +1,86 @@
+/*!\file netinet6/udp6_var.h
+ * UDP in/out handling for IPv6.
+ */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+ *
+ * $FreeBSD: src/sys/netinet6/udp6_var.h,v 1.5 2001/09/12 08:37:55 julian Exp $
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 1989, 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.
+ *
+ *     @(#)udp_var.h   8.1 (Berkeley) 6/10/93
+ */
+
+#ifndef _NETINET6_UDP6_VAR_H_
+#define _NETINET6_UDP6_VAR_H_
+
+#ifdef _KERNEL
+SYSCTL_DECL(_net_inet6_udp6);
+
+extern struct  pr_usrreqs udp6_usrreqs;
+
+void   udp6_ctlinput __P((int, struct sockaddr *, void *));
+int    udp6_input __P((struct mbuf **, int *, int));
+int    udp6_output __P((struct inpcb *inp, struct mbuf *m,
+                       struct sockaddr *addr, struct mbuf *control,
+                       struct thread *td));
+#endif
+
+#endif /*_NETINET6_UDP6_VAR_H_*/
diff --git a/libs/watt32/protocol/dumprest.h b/libs/watt32/protocol/dumprest.h
new file mode 100644 (file)
index 0000000..98216c1
--- /dev/null
@@ -0,0 +1,123 @@
+/*!\file protocol/dumprest.h
+ * Dump/restore protocol definitions.
+ */
+
+/*      $NetBSD: dumprestore.h,v 1.7 1996/11/30 18:01:52 cgd Exp $      */
+
+/*
+ * Copyright (c) 1980, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ * (c) UNIX System Laboratories, Inc.
+ * All or some portions of this file are derived from material licensed
+ * to the University of California by American Telephone and Telegraph
+ * Co. or Unix System Laboratories, Inc. and are reproduced herein with
+ * the permission of UNIX System Laboratories, Inc.
+ *
+ * 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.
+ *
+ *     @(#)dumprestore.h       8.2 (Berkeley) 1/21/94
+ */
+
+#ifndef __PROTOCOL_DUMPRESTORE_H
+#define __PROTOCOL_DUMPRESTORE_H
+
+/*
+ * TP_BSIZE is the size of file blocks on the dump tapes.
+ * Note that TP_BSIZE must be a multiple of DEV_BSIZE.
+ *
+ * NTREC is the number of TP_BSIZE blocks that are written
+ * in each tape record. HIGHDENSITYTREC is the number of
+ * TP_BSIZE blocks that are written in each tape record on
+ * 6250 BPI or higher density tapes.
+ *
+ * TP_NINDIR is the number of indirect pointers in a TS_INODE
+ * or TS_ADDR record. Note that it must be a power of two.
+ */
+#define TP_BSIZE       1024
+#define NTREC          10
+#define HIGHDENSITYTREC        32
+#define TP_NINDIR      (TP_BSIZE/2)
+#define LBLSIZE                16
+#define NAMELEN                64
+
+#define OFS_MAGIC      (int)60011
+#define NFS_MAGIC      (int)60012
+#define CHECKSUM       (int)84446
+
+#include <sys/packon.h>
+
+union u_spcl {
+       char dummy[TP_BSIZE];
+       struct  s_spcl {
+               int32_t c_type;             /* record type (see below) */
+               time_t  c_date;             /* date of this dump */
+               time_t  c_ddate;            /* date of previous dump */
+               int32_t c_volume;           /* dump volume number */
+               daddr_t c_tapea;            /* logical block of this record */
+               ino_t   c_inumber;          /* number of inode */
+               int32_t c_magic;            /* magic number (see above) */
+               int32_t c_checksum;         /* record checksum */
+               struct  dinode  c_dinode;   /* ownership and mode of inode */
+               int32_t c_count;            /* number of valid c_addr entries */
+               char    c_addr[TP_NINDIR];  /* 1 => data; 0 => hole in inode */
+               char    c_label[LBLSIZE];   /* dump label */
+               int32_t c_level;            /* level of this dump */
+               char    c_filesys[NAMELEN]; /* name of dumpped file system */
+               char    c_dev[NAMELEN];     /* name of dumpped device */
+               char    c_host[NAMELEN];    /* name of dumpped host */
+               int32_t c_flags;            /* additional information */
+               int32_t c_firstrec;         /* first record on volume */
+               int32_t c_spare[32];        /* reserved for future uses */
+       } s_spcl;
+} u_spcl;
+
+#include <sys/packoff.h>
+
+#define spcl u_spcl.s_spcl
+/*
+ * special record types
+ */
+#define TS_TAPE        1       /* dump tape header */
+#define TS_INODE       2       /* beginning of file record */
+#define TS_ADDR        4       /* continuation of file record */
+#define TS_BITS        3       /* map of inodes on tape */
+#define TS_CLRI        6       /* map of inodes deleted since last dump */
+#define TS_END         5       /* end of volume marker */
+
+/*
+ * flag values
+ */
+#define DR_NEWHEADER   0x0001  /* new format tape header */
+#define DR_NEWINODEFMT 0x0002  /* new format inodes on tape */
+
+#define        DUMPOUTFMT      "%-16s %c %s"           /* for printf */
+                                               /* name, level, ctime(date) */
+#define        DUMPINFMT       "%16s %c %[^\n]\n"      /* inverse for scanf */
+
+#endif
diff --git a/libs/watt32/protocol/routed.h b/libs/watt32/protocol/routed.h
new file mode 100644 (file)
index 0000000..efb0c61
--- /dev/null
@@ -0,0 +1,179 @@
+/*!\file protocol/routed.h
+ * Route Daeamon definitions.
+ */
+
+/*      $NetBSD: routed.h,v 1.10 1997/02/03 22:20:38 christos Exp $     */
+
+/*-
+ * Copyright (c) 1983, 1989, 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.
+ *
+ *     @(#)routed.h    8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef __PROTOCOL_ROUTED_H
+#define __PROTOCOL_ROUTED_H
+
+/*
+ * Routing Information Protocol
+ *
+ * Derived from Xerox NS Routing Information Protocol
+ * by changing 32-bit net numbers to sockaddr's and
+ * padding stuff to 32-bit boundaries.
+ */
+
+#define RIP_VERSION_0  0
+#define        RIP_VERSION_1   1
+#define        RIP_VERSION_2   2
+
+#define        RIPv1           RIP_VERSION_1
+#define        RIPv2           RIP_VERSION_2
+#ifndef RIPVERSION
+#define        RIPVERSION      RIPv1
+#endif
+
+#define RIP_PORT       520
+
+#include <sys/packon.h>
+
+#if RIPVERSION == 1
+/* We include the V2 fields to get the right size */
+struct netinfo {
+       u_int16_t   rip_family;
+       u_int16_t   rip_tag;
+       u_int32_t   rip_dst;            /* destination net/host */
+       u_int32_t   rip_dst_mask;       /* destination mask (V2 only) */
+       u_int32_t   rip_router;         /* next host (V2 only) */
+       u_int32_t   rip_metric;         /* cost of route */
+};
+#else
+struct netinfo {
+       u_int16_t   n_family;
+#define            RIP_AF_INET     htons(AF_INET)
+#define            RIP_AF_UNSPEC   0
+#define            RIP_AF_AUTH     0xffff
+       u_int16_t   n_tag;              /* optional in RIPv2 */
+       u_int32_t   n_dst;              /* destination net or host */
+#define            RIP_DEFAULT     0
+       u_int32_t   n_mask;             /* netmask in RIPv2 */
+       u_int32_t   n_nhop;             /* optional next hop in RIPv2 */
+       u_int32_t   n_metric;           /* cost of route */
+};
+#endif
+
+/* RIPv2 authentication */
+struct netauth {
+       u_int16_t   a_family;           /* always RIP_AF_AUTH */
+       u_int16_t   a_type;
+#define            RIP_AUTH_NONE   0
+#define            RIP_AUTH_PW     htons(2)    /* password type */
+#define            RIP_AUTH_MD5    htons(3)    /* Keyed MD5 */
+       union {
+#define            RIP_AUTH_PW_LEN 16
+           u_int8_t    au_pw[RIP_AUTH_PW_LEN];
+           struct a_md5 {
+               int16_t md5_pkt_len;    /* RIP-II packet length */
+               int8_t  md5_keyid;      /* key ID and auth data len */
+               int8_t  md5_auth_len;   /* 16 */
+               u_int32_t md5_seqno;    /* sequence number */
+               u_int32_t rsvd[2];      /* must be 0 */
+#define            RIP_AUTH_MD5_LEN RIP_AUTH_PW_LEN
+           } a_md5;
+       } au;
+};
+
+struct rip {
+       u_int8_t    rip_cmd;            /* request/response */
+       u_int8_t    rip_vers;           /* protocol version # */
+       u_int16_t   rip_res1;           /* pad to 32-bit boundary */
+       union {                         /* variable length... */
+           struct netinfo ru_nets[1];
+           int8_t    ru_tracefile[1];
+           struct netauth ru_auth[1];
+       } ripun;
+#define        rip_nets        ripun.ru_nets
+#define rip_auths      ripun.ru_auth
+#define        rip_tracefile   ripun.ru_tracefile
+};
+
+#include <sys/packoff.h>
+
+/* Packet types.
+ */
+#define        RIPCMD_REQUEST          1       /* want info */
+#define        RIPCMD_RESPONSE         2       /* responding to request */
+#define        RIPCMD_TRACEON          3       /* turn tracing on */
+#define        RIPCMD_TRACEOFF         4       /* turn it off */
+
+/* Gated extended RIP to include a "poll" command instead of using
+ * RIPCMD_REQUEST with (RIP_AF_UNSPEC, RIP_DEFAULT).  RFC 1058 says
+ * command 5 is used by Sun Microsystems for its own purposes.
+ */
+#define RIPCMD_POLL            5
+
+#define        RIPCMD_MAX              6
+
+#ifdef RIPCMDS
+char *ripcmds[RIPCMD_MAX] = {
+       "#0", "REQUEST", "RESPONSE", "TRACEON", "TRACEOFF"
+};
+#endif
+
+#define HOPCNT_INFINITY  16
+#define MAXPACKETSIZE    512     /* max broadcast size */
+#define NETS_LEN         ((MAXPACKETSIZE-sizeof(struct rip))    \
+                          / sizeof(struct netinfo) +1)
+
+#define INADDR_RIP_GROUP (u_int32_t)0xe0000009 /* 224.0.0.9 */
+
+
+/* Timer values used in managing the routing table.
+ *
+ * Complete tables are broadcast every SUPPLY_INTERVAL seconds.
+ * If changes occur between updates, dynamic updates containing only changes
+ * may be sent.  When these are sent, a timer is set for a random value
+ * between MIN_WAITTIME and MAX_WAITTIME, and no additional dynamic updates
+ * are sent until the timer expires.
+ *
+ * Every update of a routing entry forces an entry's timer to be reset.
+ * After EXPIRE_TIME without updates, the entry is marked invalid,
+ * but held onto until GARBAGE_TIME so that others may see it, to
+ * "poison" the bad route.
+ */
+#define        SUPPLY_INTERVAL         30      /* time to supply tables */
+#define        MIN_WAITTIME            2       /* min sec until next flash updates */
+#define        MAX_WAITTIME            5       /* max sec until flash update */
+
+#define STALE_TIME             90      /* switch to a new gateway */
+#define        EXPIRE_TIME             180     /* time to mark entry invalid */
+#define        GARBAGE_TIME            240     /* time to garbage collect */
+
+#endif
diff --git a/libs/watt32/protocol/rwhod.h b/libs/watt32/protocol/rwhod.h
new file mode 100644 (file)
index 0000000..d2bd6f4
--- /dev/null
@@ -0,0 +1,78 @@
+/*!\file protocol/rwhod.h
+ * Remote WHO daemon.
+ */
+
+/*      $NetBSD: rwhod.h,v 1.4 1996/09/23 05:01:08 mycroft Exp $        */
+
+/*
+ * Copyright (c) 1983 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.
+ *
+ *     @(#)rwhod.h     5.6 (Berkeley) 4/3/91
+ */
+
+#ifndef __PROTOCOL_RWHOD_H
+#define __PROTOCOL_RWHOD_H
+
+#include <sys/packon.h>
+
+/*
+ * rwho protocol packet format.
+ */
+struct outmp {
+       char    out_line[8];            /* tty name */
+       char    out_name[8];            /* user id */
+       int32_t out_time;               /* time on */
+};
+
+struct whod {
+       char    wd_vers;                /* protocol version # */
+       char    wd_type;                /* packet type, see below */
+       char    wd_pad[2];
+       int32_t wd_sendtime;            /* time stamp by sender */
+       int32_t wd_recvtime;            /* time stamp applied by receiver */
+       char    wd_hostname[32];        /* hosts's name */
+       int32_t wd_loadav[3];           /* load average as in uptime */
+       int32_t wd_boottime;            /* time system booted */
+       struct  whoent {
+               struct  outmp we_utmp;  /* active tty info */
+               int32_t we_idle;        /* tty idle time */
+       } wd_we[1024 / sizeof (struct whoent)];
+};
+
+#include <sys/packoff.h>
+
+#define        WHODVERSION     1
+#define        WHODTYPE_STATUS 1               /* host status */
+
+#define        _PATH_RWHODIR   "/var/rwho"
+
+#endif
diff --git a/libs/watt32/protocol/talkd.h b/libs/watt32/protocol/talkd.h
new file mode 100644 (file)
index 0000000..93fb9bb
--- /dev/null
@@ -0,0 +1,124 @@
+/*!\file protocol/talkd.h
+ * Talk server/client definitions.
+ */
+
+/*      $NetBSD: talkd.h,v 1.5 1995/03/04 07:59:30 cgd Exp $    */
+
+/*
+ * Copyright (c) 1983 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.
+ *
+ *     @(#)talkd.h     5.7 (Berkeley) 4/3/91
+ */
+
+#ifndef __PROTOCOL_TALKD_H
+#define __PROTOCOL_TALKD_H
+
+/*
+ * This describes the protocol used by the talk server and clients.
+ *
+ * The talk server acts a repository of invitations, responding to
+ * requests by clients wishing to rendezvous for the purpose of
+ * holding a conversation.  In normal operation, a client, the caller,
+ * initiates a rendezvous by sending a CTL_MSG to the server of
+ * type LOOK_UP.  This causes the server to search its invitation
+ * tables to check if an invitation currently exists for the caller
+ * (to speak to the callee specified in the message).  If the lookup
+ * fails, the caller then sends an ANNOUNCE message causing the server
+ * to broadcast an announcement on the callee's login ports requesting
+ * contact.  When the callee responds, the local server uses the
+ * recorded invitation to respond with the appropriate rendezvous
+ * address and the caller and callee client programs establish a
+ * stream connection through which the conversation takes place.
+ */
+
+#include <sys/packon.h>
+
+/*
+ * Client->server request message format.
+ */
+typedef struct {
+       u_char    vers;                 /* protocol version */
+       u_char    type;                 /* request type, see below */
+       u_char    answer;               /* not used */
+       u_char    pad;
+       u_int32_t id_num;               /* message id */
+       struct    osockaddr addr;       /* old (4.3) style */
+       struct    osockaddr ctl_addr;   /* old (4.3) style */
+       int32_t   pid;                  /* caller's process id */
+#define        NAME_SIZE       12
+       char      l_name[NAME_SIZE];    /* caller's name */
+       char      r_name[NAME_SIZE];    /* callee's name */
+#define        TTY_SIZE        16
+       char      r_tty[TTY_SIZE];      /* callee's tty name */
+} CTL_MSG;
+
+/*
+ * Server->client response message format.
+ */
+typedef struct {
+       u_char    vers;         /* protocol version */
+       u_char    type;         /* type of request message, see below */
+       u_char    answer;       /* respose to request message, see below */
+       u_char    pad;
+       u_int32_t id_num;       /* message id */
+       struct    osockaddr addr; /* address for establishing conversation */
+} CTL_RESPONSE;
+
+#include <sys/packoff.h>
+
+#define        TALK_VERSION    1               /* protocol version */
+
+/* message type values */
+#define LEAVE_INVITE   0       /* leave invitation with server */
+#define LOOK_UP                1       /* check for invitation by callee */
+#define DELETE         2       /* delete invitation by caller */
+#define ANNOUNCE       3       /* announce invitation by caller */
+
+/* answer values */
+#define SUCCESS                0       /* operation completed properly */
+#define NOT_HERE       1       /* callee not logged in */
+#define FAILED         2       /* operation failed for unexplained reason */
+#define MACHINE_UNKNOWN        3       /* caller's machine name unknown */
+#define PERMISSION_DENIED 4    /* callee's tty doesn't permit announce */
+#define UNKNOWN_REQUEST        5       /* request has invalid type value */
+#define        BADVERSION      6       /* request has invalid protocol version */
+#define        BADADDR         7       /* request has invalid addr value */
+#define        BADCTLADDR      8       /* request has invalid ctl_addr value */
+
+/*
+ * Operational parameters.
+ */
+#define MAX_LIFE       60      /* max time daemon saves invitations */
+/* RING_WAIT should be 10's of seconds less than MAX_LIFE */
+#define RING_WAIT      30      /* time to wait before resending invitation */
+
+#endif
diff --git a/libs/watt32/protocol/timed.h b/libs/watt32/protocol/timed.h
new file mode 100644 (file)
index 0000000..5a9826d
--- /dev/null
@@ -0,0 +1,113 @@
+/*!\file protocol/timed.h
+ * Time Synchronisation Daemon.
+ */
+
+/*      $NetBSD: timed.h,v 1.5 1996/04/09 20:40:32 cgd Exp $    */
+
+/*
+ * Copyright (c) 1983 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.
+ *
+ *     @(#)timed.h     1.10 (Berkeley) 4/3/91
+ */
+
+#ifndef __PROTOCOL_TIMED_H
+#define __PROTOCOL_TIMED_H
+
+/*
+ * Time Synchronization Protocol
+ */
+
+#define        TSPVERSION      1
+#define ANYADDR        NULL
+
+#include <sys/packon.h>
+
+struct tsp {
+       u_int8_t tsp_type;
+       u_int8_t tsp_vers;
+       u_int16_t tsp_seq;
+       union {
+               struct {
+                       int32_t tv_sec;
+                       int32_t tv_usec;
+               } tspu_time;
+               char tspu_hopcnt;
+       } tsp_u;
+       char tsp_name[MAXHOSTNAMELEN];
+};
+
+#include <sys/packoff.h>
+
+#define        tsp_time        tsp_u.tspu_time
+#define        tsp_hopcnt      tsp_u.tspu_hopcnt
+/*
+ * Command types.
+ */
+#define        TSP_ANY                 0       /* match any types */
+#define        TSP_ADJTIME             1       /* send adjtime */
+#define        TSP_ACK                 2       /* generic acknowledgement */
+#define        TSP_MASTERREQ           3       /* ask for master's name */ 
+#define        TSP_MASTERACK           4       /* acknowledge master request */
+#define        TSP_SETTIME             5       /* send network time */
+#define        TSP_MASTERUP            6       /* inform slaves that master is up */
+#define        TSP_SLAVEUP             7       /* slave is up but not polled */
+#define        TSP_ELECTION            8       /* advance candidature for master */
+#define        TSP_ACCEPT              9       /* support candidature of master */
+#define        TSP_REFUSE              10      /* reject candidature of master */
+#define        TSP_CONFLICT            11      /* two or more masters present */
+#define        TSP_RESOLVE             12      /* masters' conflict resolution */
+#define        TSP_QUIT                13      /* reject candidature if master is up */
+#define        TSP_DATE                14      /* reset the time (date command) */
+#define        TSP_DATEREQ             15      /* remote request to reset the time */
+#define        TSP_DATEACK             16      /* acknowledge time setting  */
+#define        TSP_TRACEON             17      /* turn tracing on */
+#define        TSP_TRACEOFF            18      /* turn tracing off */
+#define        TSP_MSITE               19      /* find out master's site */
+#define        TSP_MSITEREQ            20      /* remote master's site request */
+#define        TSP_TEST                21      /* for testing election algo */
+#define        TSP_SETDATE             22      /* New from date command */
+#define        TSP_SETDATEREQ          23      /* New remote for above */
+#define        TSP_LOOP                24      /* loop detection packet */
+
+#define        TSPTYPENUMBER           25
+
+#ifdef TSPTYPES
+char *tsptype[TSPTYPENUMBER] = {
+     "ANY", "ADJTIME", "ACK", "MASTERREQ", "MASTERACK", "SETTIME", "MASTERUP",
+     "SLAVEUP", "ELECTION", "ACCEPT", "REFUSE", "CONFLICT", "RESOLVE", "QUIT",
+     "DATE", "DATEREQ", "DATEACK", "TRACEON", "TRACEOFF", "MSITE", "MSITEREQ",
+     "TEST", "SETDATE", "SETDATEREQ", "LOOP"
+   };
+#endif
+
+#endif
diff --git a/libs/watt32/resolv.h b/libs/watt32/resolv.h
new file mode 100644 (file)
index 0000000..e17e28e
--- /dev/null
@@ -0,0 +1,277 @@
+/*!\file resolv.h
+ * Resolver API.
+ */
+
+/*-
+ * Copyright (c) 1983, 1987, 1989, 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.
+ *
+ * -
+ * Portions Copyright (c) 1993 by Digital Equipment Corporation.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies, and that
+ * the name of Digital Equipment Corporation not be used in advertising or
+ * publicity pertaining to distribution of the document or software without
+ * specific, written prior permission.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
+ * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, 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.
+ * -
+ * --Copyright--
+ *
+ *      @(#)resolv.h    8.1 (Berkeley) 6/2/93
+ *      From Id: resolv.h,v 4.9.1.2 1993/05/17 09:59:01 vixie Exp
+ *      $Id: resolv.h,v 1.7 1996/08/29 20:00:58 peter Exp $
+ */
+
+#ifndef _RESOLV_H_
+#define _RESOLV_H_
+
+#include <stdio.h>
+
+#ifndef __SYS_W32API_H
+#include <sys/w32api.h>
+#endif
+
+#ifndef __SYS_PARAM_H
+#include <sys/param.h>
+#endif
+
+#ifndef __SYS_WTYPES_H
+#include <sys/wtypes.h>
+#endif
+
+#ifndef __SYS_CDEFS_H
+#include <sys/cdefs.h>
+#endif
+
+
+/*
+ * revision information.  this is the release date in YYYYMMDD format.
+ * it can change every day so the right thing to do with it is use it
+ * in preprocessor commands such as "#if (__RES > 19931104)".  do not
+ * compare for equality; rather, use it to determine whether your resolver
+ * is new enough to contain a certain feature.
+ */
+
+#define __RES   19960229
+
+/*
+ * Resolver configuration file.
+ * Normally not present, but may contain the address of the
+ * inital name server(s) to query and the domain search list.
+ */
+
+#ifndef _PATH_RESCONF
+#define _PATH_RESCONF   "/etc/resolv.conf"
+#endif
+
+/*
+ * Global defines and variables for resolver stub.
+ */
+#define MAXNS                   3       /* max # name servers we'll track */
+#define MAXDFLSRCH              3       /* # default domain levels to try */
+#define MAXDNSRCH               6       /* max # domains in search path */
+#define LOCALDOMAINPARTS        2       /* min levels in name that is "local" */
+
+#define RES_TIMEOUT             5       /* min. seconds between retries */
+#define MAXRESOLVSORT           10      /* number of net to sort on */
+#define RES_MAXNDOTS            15      /* should reflect bit field size */
+
+struct __res_state {
+        int      retrans;               /* retransmition time interval */
+        int      retry;                 /* number of times to retransmit */
+        u_long   options;               /* option flags - see below. */
+        int      nscount;               /* number of name servers */
+        struct   sockaddr_in
+                 nsaddr_list[MAXNS];    /* address of name server */
+#define nsaddr   nsaddr_list[0]         /* for backward compatibility */
+        u_short  id;                    /* current packet id */
+        char    *dnsrch[MAXDNSRCH+1];   /* components of domain to search */
+        char     defdname[MAXDNAME];    /* default domain */
+        u_long   pfcode;                /* RES_PRF_ flags - see below. */
+        unsigned ndots:4;               /* threshold for initial abs. query */
+        unsigned nsort:4;               /* number of elements in sort_list[] */
+        char    unused[3];
+        struct {
+          struct in_addr  addr;
+          u_long          mask;
+      } sort_list[MAXRESOLVSORT];
+        char pad[72];                   /* On an i386 this means 512b total. */
+};
+
+/*
+ * Resolver options (keep these in synch with res_debug.c, please)
+ */
+#define RES_INIT        0x00000001      /* address initialized */
+#define RES_DEBUG       0x00000002      /* print debug messages */
+#define RES_AAONLY      0x00000004      /* authoritative answers only (!IMPL)*/
+#define RES_USEVC       0x00000008      /* use virtual circuit */
+#define RES_PRIMARY     0x00000010      /* query primary server only (!IMPL) */
+#define RES_IGNTC       0x00000020      /* ignore truncation errors */
+#define RES_RECURSE     0x00000040      /* recursion desired */
+#define RES_DEFNAMES    0x00000080      /* use default domain name */
+#define RES_STAYOPEN    0x00000100      /* Keep TCP socket open */
+#define RES_DNSRCH      0x00000200      /* search up local domain tree */
+#define RES_INSECURE1   0x00000400      /* type 1 security disabled */
+#define RES_INSECURE2   0x00000800      /* type 2 security disabled */
+#define RES_NOALIASES   0x00001000      /* shuts off HOSTALIASES feature */
+#define RES_USE_INET6   0x00002000      /* use/map IPv6 in gethostbyname() */
+
+#define RES_DEFAULT     (RES_RECURSE | RES_DEFNAMES | RES_DNSRCH)
+
+/*
+ * Resolver "pfcode" values.  Used by dig.
+ */
+#define RES_PRF_STATS   0x00000001
+/*                      0x00000002      */
+#define RES_PRF_CLASS   0x00000004
+#define RES_PRF_CMD     0x00000008
+#define RES_PRF_QUES    0x00000010
+#define RES_PRF_ANS     0x00000020
+#define RES_PRF_AUTH    0x00000040
+#define RES_PRF_ADD     0x00000080
+#define RES_PRF_HEAD1   0x00000100
+#define RES_PRF_HEAD2   0x00000200
+#define RES_PRF_TTLID   0x00000400
+#define RES_PRF_HEADX   0x00000800
+#define RES_PRF_QUERY   0x00001000
+#define RES_PRF_REPLY   0x00002000
+#define RES_PRF_INIT    0x00004000
+/*                      0x00008000      */
+
+/* hooks are still experimental as of 4.9.2 */
+typedef enum {
+        res_goahead,
+        res_nextns,
+        res_modified,
+        res_done,
+        res_error
+      } res_sendhookact;
+
+typedef res_sendhookact (*res_send_qhook)(struct sockaddr_in * const *ns,
+                                          const u_char **query,
+                                          int *querylen,
+                                          u_char *ans,
+                                          int anssiz,
+                                          int *resplen);
+
+typedef res_sendhookact (*res_send_rhook)(const struct sockaddr_in *ns,
+                                          const u_char *query,
+                                          int querylen,
+                                          u_char *ans,
+                                          int anssiz,
+                                          int *resplen);
+
+W32_DATA struct __res_state _res;
+
+W32_DATA int h_errno;
+
+/* Private routines shared between libc/net, named, nslookup and others. */
+#define res_hnok         __res_hnok
+#define res_ownok        __res_ownok
+#define res_mailok       __res_mailok
+#define res_dnok         __res_dnok
+#define loc_ntoa         __loc_ntoa
+#define loc_aton         __loc_aton
+#define dn_skipname      __dn_skipname
+#define fp_query         __fp_query
+#define fp_nquery        __fp_nquery
+#define hostalias        __hostalias
+#define putlong          __putlong
+#define putshort         __putshort
+#define p_class          __p_class
+#define p_time           __p_time
+#define p_type           __p_type
+#define p_cdnname        __p_cdnname
+#define p_cdname         __p_cdname
+#define p_fqname         __p_fqname
+#define p_rr             __p_rr
+#define p_option         __p_option
+#define res_randomid     __res_randomid
+#define res_isourserver  __res_isourserver
+#define res_nameinquery  __res_nameinquery
+#define res_queriesmatch __res_queriesmatch
+
+__BEGIN_DECLS
+
+W32_FUNC int      __res_hnok   (const char *);
+W32_FUNC int      __res_ownok  (const char *);
+W32_FUNC int      __res_mailok (const char *);
+W32_FUNC int      __res_dnok   (const char *);
+W32_FUNC int      __loc_aton   (const char *ascii, u_char *binary);
+W32_FUNC char *   __loc_ntoa   (const u_char *binary, char *ascii);
+W32_FUNC int      __dn_skipname(const u_char *, const u_char *);
+W32_FUNC void     __fp_resstat (struct __res_state *, FILE *);
+W32_FUNC void     __fp_query   (const u_char *, FILE *);
+W32_FUNC void     __fp_nquery  (const u_char *, int, FILE *);
+W32_FUNC char    *__hostalias  (const char *);
+W32_FUNC void     __putlong    (u_long,  u_char *);
+W32_FUNC void     __putshort   (u_short, u_char *);
+W32_FUNC char    *__p_time     (u_long);
+W32_FUNC void     __p_query    (const u_char *);
+
+W32_FUNC const u_char *__p_cdnname (const u_char *, const u_char *, int, FILE *);
+W32_FUNC const u_char *__p_cdname  (const u_char *, const u_char *, FILE *);
+W32_FUNC const u_char *__p_fqname  (const u_char *, const u_char *, FILE *);
+W32_FUNC const u_char *__p_rr      (const u_char *, const u_char *, FILE *);
+W32_FUNC const char   *__p_type    (int);
+W32_FUNC const char   *__p_class   (int);
+W32_FUNC const char   *__p_option  (u_long option);
+
+W32_FUNC int     dn_comp   (const char *, u_char *, int, u_char **, u_char **);
+W32_FUNC int     dn_expand (const u_char *, const u_char *, const u_char *, char *, int);
+
+W32_FUNC int     res_init        (void);
+W32_FUNC u_short res_randomid    (void);
+W32_FUNC int     res_query       (const char *, int, int, u_char *, int);
+W32_FUNC int     res_search      (const char *, int, int, u_char *, int);
+W32_FUNC int     res_querydomain (const char *, const char *, int, int, u_char *, int);
+W32_FUNC int     res_mkquery     (int, const char *, int, int, const u_char *, int, const u_char *, u_char *, int);
+W32_FUNC int     res_send        (const u_char *, int, u_char *, int);
+W32_FUNC int     res_isourserver (const struct sockaddr_in *);
+W32_FUNC int     res_nameinquery (const char *, int, int, const u_char *, const u_char *);
+W32_FUNC int     res_queriesmatch(const u_char *, const u_char *, const u_char *, const u_char *);
+
+W32_FUNC void    res_send_setqhook (res_send_qhook hook);
+W32_FUNC void    res_send_setrhook (res_send_rhook hook);
+
+__END_DECLS
+
+#endif /* !_RESOLV_H_ */
diff --git a/libs/watt32/rpc/auth.h b/libs/watt32/rpc/auth.h
new file mode 100644 (file)
index 0000000..e209446
--- /dev/null
@@ -0,0 +1,180 @@
+/*!\file rpc/auth.h
+ * RPC authentication interface.
+ */
+
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ *
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ *
+ *     from: @(#)auth.h 1.17 88/02/08 SMI
+ *     from: @(#)auth.h        2.3 88/08/07 4.0 RPCSRC
+ *     $Id: auth.h,v 1.5 1996/01/31 08:02:11 hsu Exp $
+ */
+
+/*
+ * auth.h, Authentication interface.
+ *
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ *
+ * The data structures are completely opaque to the client.  The client
+ * is required to pass a AUTH * to routines that create rpc
+ * "sessions".
+ */
+
+#ifndef __RPC_AUTH_H
+#define __RPC_AUTH_H
+
+#ifndef __SYS_CDEFS_H
+#include <sys/cdefs.h>
+#endif
+
+#ifndef __SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+#define MAX_AUTH_BYTES 400
+#define MAXNETNAMELEN  255     /* maximum length of network user's name */
+
+/*
+ * Status returned from authentication check
+ */
+enum auth_stat {
+       AUTH_OK=0,
+       /*
+        * failed at remote end
+        */
+       AUTH_BADCRED=1,                 /* bogus credentials (seal broken) */
+       AUTH_REJECTEDCRED=2,            /* client should begin new session */
+       AUTH_BADVERF=3,                 /* bogus verifier (seal broken) */
+       AUTH_REJECTEDVERF=4,            /* verifier expired or was replayed */
+       AUTH_TOOWEAK=5,                 /* rejected due to security reasons */
+       /*
+        * failed locally
+       */
+       AUTH_INVALIDRESP=6,             /* bogus response verifier */
+       AUTH_FAILED=7                   /* some unknown reason */
+};
+
+union des_block {
+      struct {
+        u_long high;
+        u_long low;
+      } key;
+      char c[8];
+    };
+
+typedef union des_block des_block;
+
+__BEGIN_DECLS
+
+extern bool_t xdr_des_block (XDR *, des_block *);
+
+__END_DECLS
+
+/*
+ * Authentication info.  Opaque to client.
+ */
+struct opaque_auth {
+       enum_t  oa_flavor;              /* flavor of auth */
+       caddr_t oa_base;                /* address of more auth stuff */
+       u_int   oa_length;              /* not to exceed MAX_AUTH_BYTES */
+     };
+
+/*
+ * Auth handle, interface to client side authenticators.
+ */
+typedef struct {
+       struct  opaque_auth     ah_cred;
+       struct  opaque_auth     ah_verf;
+       union   des_block       ah_key;
+       struct auth_ops {
+               void    (*ah_nextverf)();
+               int     (*ah_marshal)();        /* nextverf & serialize */
+               int     (*ah_validate)();       /* validate verifier */
+               int     (*ah_refresh)();        /* refresh credentials */
+               void    (*ah_destroy)();        /* destroy this structure */
+       } *ah_ops;
+       caddr_t ah_private;
+      } AUTH;
+
+
+/*
+ * Authentication ops.
+ * The ops and the auth handle provide the interface to the authenticators.
+ *
+ * AUTH        *auth;
+ * XDR *xdrs;
+ * struct opaque_auth verf;
+ */
+#define AUTH_NEXTVERF(auth)       ((*((auth)->ah_ops->ah_nextverf))(auth))
+#define auth_nextverf(auth)       ((*((auth)->ah_ops->ah_nextverf))(auth))
+
+#define AUTH_MARSHALL(auth,xdrs)  ((*((auth)->ah_ops->ah_marshal))(auth, xdrs))
+#define auth_marshall(auth,xdrs)  ((*((auth)->ah_ops->ah_marshal))(auth, xdrs))
+
+#define AUTH_VALIDATE(auth,verfp) ((*((auth)->ah_ops->ah_validate))((auth), verfp))
+#define auth_validate(auth,verfp) ((*((auth)->ah_ops->ah_validate))((auth), verfp))
+
+#define AUTH_REFRESH(auth)        ((*((auth)->ah_ops->ah_refresh))(auth))
+#define auth_refresh(auth)        ((*((auth)->ah_ops->ah_refresh))(auth))
+
+#define AUTH_DESTROY(auth)        ((*((auth)->ah_ops->ah_destroy))(auth))
+#define auth_destroy(auth)        ((*((auth)->ah_ops->ah_destroy))(auth))
+
+extern struct opaque_auth _null_auth;
+
+
+/*
+ * These are the various implementations of client side authenticators.
+ */
+
+/*
+ * Unix style authentication
+ * AUTH *authunix_create(machname, uid, gid, len, aup_gids)
+ *     char *machname;
+ *     int uid;
+ *     int gid;
+ *     int len;
+ *     int *aup_gids;
+ */
+
+__BEGIN_DECLS
+
+extern AUTH *authunix_create        (char *, int, int, int, int *);
+extern AUTH *authunix_create_default(void);
+extern AUTH *authnone_create        (void);
+extern AUTH *authdes_create         (char*, u_int, struct sockaddr*, des_block*);
+
+__END_DECLS
+
+#define AUTH_NONE      0               /* no authentication */
+#define        AUTH_NULL       0               /* backward compatibility */
+#define        AUTH_UNIX       1               /* unix style (uid, gids) */
+#define        AUTH_SHORT      2               /* short hand unix style */
+#define AUTH_DES       3               /* des style (encrypted timestamps) */
+
+#endif
diff --git a/libs/watt32/rpc/auth_des.h b/libs/watt32/rpc/auth_des.h
new file mode 100644 (file)
index 0000000..0691490
--- /dev/null
@@ -0,0 +1,109 @@
+/*!\file rpc/auth_des.h
+ * RPC authentication.
+ */
+
+/*      @(#)auth_des.h  2.2 88/07/29 4.0 RPCSRC; from 1.3 88/02/08 SMI */
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ * 
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ * 
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ * 
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ * 
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ * 
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ */
+
+/*
+ * Copyright (c) 1988 by Sun Microsystems, Inc.
+ */
+
+/*
+ * auth_des.h, Protocol for DES style authentication for RPC
+ */
+
+#ifndef __AUTH_DES_H
+#define __AUTH_DES_H
+
+/*
+ * There are two kinds of "names": fullnames and nicknames
+ */
+enum authdes_namekind {
+       ADN_FULLNAME, 
+       ADN_NICKNAME
+};
+
+/*
+ * A fullname contains the network name of the client, 
+ * a conversation key and the window
+ */
+struct authdes_fullname {
+       char *name;             /* network name of client, up to MAXNETNAMELEN */
+       des_block key;          /* conversation key */
+       u_long window;          /* associated window */
+};
+
+
+/*
+ * A credential 
+ */
+struct authdes_cred {
+       enum authdes_namekind adc_namekind;
+       struct authdes_fullname adc_fullname;
+       u_long adc_nickname;
+};
+
+
+
+/*
+ * A des authentication verifier 
+ */
+struct authdes_verf {
+       union {
+               struct timeval adv_ctime;       /* clear time */
+               des_block adv_xtime;            /* crypt time */
+       } adv_time_u;
+       u_long adv_int_u;
+};
+
+/*
+ * des authentication verifier: client variety
+ *
+ * adv_timestamp is the current time.
+ * adv_winverf is the credential window + 1.
+ * Both are encrypted using the conversation key.
+ */
+#define adv_timestamp  adv_time_u.adv_ctime
+#define adv_xtimestamp adv_time_u.adv_xtime
+#define adv_winverf    adv_int_u
+
+/*
+ * des authentication verifier: server variety
+ *
+ * adv_timeverf is the client's timestamp + client's window
+ * adv_nickname is the server's nickname for the client.
+ * adv_timeverf is encrypted using the conversation key.
+ */
+#define adv_timeverf   adv_time_u.adv_ctime
+#define adv_xtimeverf  adv_time_u.adv_xtime
+#define adv_nickname   adv_int_u
+
+#endif /* !__AUTH_DES_H */
diff --git a/libs/watt32/rpc/auth_uni.h b/libs/watt32/rpc/auth_uni.h
new file mode 100644 (file)
index 0000000..2c9c520
--- /dev/null
@@ -0,0 +1,89 @@
+/*!\file rpc/auth_uni.h
+ * RPC authentication.
+ */
+
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ *
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ *
+ *     from: @(#)auth_unix.h 1.8 88/02/08 SMI
+ *     from: @(#)auth_unix.h   2.2 88/07/29 4.0 RPCSRC
+ *     $Id: auth_unix.h,v 1.4 1996/01/30 23:31:42 mpp Exp $
+ */
+
+/*
+ * auth_unix.h, Protocol for UNIX style authentication parameters for RPC
+ *
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
+
+/*
+ * The system is very weak.  The client uses no encryption for  it
+ * credentials and only sends null verifiers.  The server sends backs
+ * null verifiers or optionally a verifier that suggests a new short hand
+ * for the credentials.
+ */
+
+#ifndef __RPC_AUTH_UNIX_H
+#define __RPC_AUTH_UNIX_H
+
+#include <sys/cdefs.h>
+
+/* The machine name is part of a credential; it may not exceed 255 bytes */
+#define MAX_MACHINE_NAME 255
+
+/* gids compose part of a credential; there may not be more than 16 of them */
+#define NGRPS 16
+
+/*
+ * Unix style credentials.
+ */
+struct authunix_parms {
+       u_long   aup_time;
+       char    *aup_machname;
+       int      aup_uid;
+       int      aup_gid;
+       u_int    aup_len;
+       int     *aup_gids;
+};
+
+__BEGIN_DECLS
+
+extern bool_t xdr_authunix_parms (XDR *, struct authunix_parms *);
+
+__END_DECLS
+
+/*
+ * If a response verifier has flavor AUTH_SHORT,
+ * then the body of the response verifier encapsulates the following structure;
+ * again it is serialized in the obvious fashion.
+ */
+struct short_hand_verf {
+       struct opaque_auth new_cred;
+};
+
+#endif
diff --git a/libs/watt32/rpc/clnt.h b/libs/watt32/rpc/clnt.h
new file mode 100644 (file)
index 0000000..eed7f98
--- /dev/null
@@ -0,0 +1,356 @@
+/*!\file rpc/clnt.h
+ * RPC client-side interface.
+ */
+
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ *
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ *
+ *     from: @(#)clnt.h 1.31 88/02/08 SMI
+ *     from: @(#)clnt.h        2.1 88/07/29 4.0 RPCSRC
+ *     $Id: clnt.h,v 1.4 1996/01/30 23:31:48 mpp Exp $
+ */
+
+/*
+ * clnt.h - Client side remote procedure call interface.
+ *
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
+
+#ifndef __RPC_CLIENT_H
+#define __RPC_CLIENT_H
+
+#include <sys/cdefs.h>
+#include <rpc/types.h>
+#include <rpc/xdr.h>
+
+/*
+ * Rpc calls return an enum clnt_stat.  This should be looked at more,
+ * since each implementation is required to live with this (implementation
+ * independent) list of errors.
+ */
+enum clnt_stat {
+     RPC_SUCCESS=0,                  /* call succeeded */
+     /*
+      * local errors
+      */
+     RPC_CANTENCODEARGS=1,           /* can't encode arguments */
+     RPC_CANTDECODERES=2,            /* can't decode results */
+     RPC_CANTSEND=3,                 /* failure in sending call */
+     RPC_CANTRECV=4,                 /* failure in receiving result */
+     RPC_TIMEDOUT=5,                 /* call timed out */
+     /*
+      * remote errors
+      */
+     RPC_VERSMISMATCH=6,             /* rpc versions not compatible */
+     RPC_AUTHERROR=7,                /* authentication error */
+     RPC_PROGUNAVAIL=8,              /* program not available */
+     RPC_PROGVERSMISMATCH=9,         /* program version mismatched */
+     RPC_PROCUNAVAIL=10,             /* procedure unavailable */
+     RPC_CANTDECODEARGS=11,          /* decode arguments error */
+     RPC_SYSTEMERROR=12,             /* generic "other problem" */
+
+     /*
+      * callrpc & clnt_create errors
+      */
+     RPC_UNKNOWNHOST=13,             /* unknown host name */
+     RPC_UNKNOWNPROTO=17,            /* unkown protocol */
+
+     /*
+      * _ create errors
+      */
+     RPC_PMAPFAILURE=14,             /* the pmapper failed in its call */
+     RPC_PROGNOTREGISTERED=15,       /* remote program is not registered */
+     /*
+      * unspecified error
+      */
+     RPC_FAILED=16
+   };
+
+
+/*
+ * Error info.
+ */
+struct rpc_err {
+       enum clnt_stat re_status;
+       union {
+         int            RE_errno;  /* related system error */
+         enum auth_stat RE_why;    /* why the auth error occurred */
+         struct {
+           u_long low;             /* lowest verion supported */
+           u_long high;            /* highest verion supported */
+         } RE_vers;
+         struct {                  /* maybe meaningful if RPC_FAILED */
+           long s1;
+           long s2;
+         } RE_lb;                  /* life boot & debugging only */
+       } ru;
+#define re_errno  ru.RE_errno
+#define re_why    ru.RE_why
+#define re_vers   ru.RE_vers
+#define re_lb     ru.RE_lb
+};
+
+
+/*
+ * Client rpc handle.
+ * Created by individual implementations, see e.g. rpc_udp.c.
+ * Client is responsible for initializing auth, see e.g. auth_none.c.
+ */
+typedef struct {
+        AUTH  *cl_auth;                        /* authenticator */
+       struct clnt_ops {
+                enum clnt_stat(*cl_call)();    /* call remote procedure */
+                void          (*cl_abort)();   /* abort a call */
+                void          (*cl_geterr)();  /* get specific error code */
+                bool_t        (*cl_freeres)(); /* frees results */
+                void          (*cl_destroy)(); /* destroy this structure */
+                bool_t        (*cl_control)(); /* the ioctl() of rpc */
+       } *cl_ops;
+        caddr_t               cl_private;      /* private stuff */
+} CLIENT;
+
+
+/*
+ * client side rpc interface ops
+ *
+ * Parameter types are:
+ *
+ */
+
+/*
+ * enum clnt_stat
+ * CLNT_CALL(rh, proc, xargs, argsp, xres, resp, timeout)
+ *     CLIENT *rh;
+ *     u_long proc;
+ *     xdrproc_t xargs;
+ *     caddr_t argsp;
+ *     xdrproc_t xres;
+ *     caddr_t resp;
+ *     struct timeval timeout;
+ */
+#define        CLNT_CALL(rh, proc, xargs, argsp, xres, resp, secs)     \
+       ((*(rh)->cl_ops->cl_call)(rh, proc, xargs, argsp, xres, resp, secs))
+#define        clnt_call(rh, proc, xargs, argsp, xres, resp, secs)     \
+       ((*(rh)->cl_ops->cl_call)(rh, proc, xargs, argsp, xres, resp, secs))
+
+/*
+ * void
+ * CLNT_ABORT(rh);
+ *     CLIENT *rh;
+ */
+#define        CLNT_ABORT(rh)  ((*(rh)->cl_ops->cl_abort)(rh))
+#define        clnt_abort(rh)  ((*(rh)->cl_ops->cl_abort)(rh))
+
+/*
+ * struct rpc_err
+ * CLNT_GETERR(rh);
+ *     CLIENT *rh;
+ */
+#define CLNT_GETERR(rh,errp)  ((*(rh)->cl_ops->cl_geterr)(rh, errp))
+#define clnt_geterr(rh,errp)  ((*(rh)->cl_ops->cl_geterr)(rh, errp))
+
+
+/*
+ * bool_t
+ * CLNT_FREERES(rh, xres, resp);
+ *     CLIENT *rh;
+ *     xdrproc_t xres;
+ *     caddr_t resp;
+ */
+#define        CLNT_FREERES(rh,xres,resp) ((*(rh)->cl_ops->cl_freeres)(rh,xres,resp))
+#define        clnt_freeres(rh,xres,resp) ((*(rh)->cl_ops->cl_freeres)(rh,xres,resp))
+
+/*
+ * bool_t
+ * CLNT_CONTROL(cl, request, info)
+ *      CLIENT *cl;
+ *      u_int request;
+ *      char *info;
+ */
+#define        CLNT_CONTROL(cl,rq,in) ((*(cl)->cl_ops->cl_control)(cl,rq,in))
+#define        clnt_control(cl,rq,in) ((*(cl)->cl_ops->cl_control)(cl,rq,in))
+
+/*
+ * control operations that apply to both udp and tcp transports
+ */
+#define CLSET_TIMEOUT       1   /* set timeout (timeval) */
+#define CLGET_TIMEOUT       2   /* get timeout (timeval) */
+#define CLGET_SERVER_ADDR   3   /* get server's address (sockaddr) */
+/*
+ * udp only control operations
+ */
+#define CLSET_RETRY_TIMEOUT 4   /* set retry timeout (timeval) */
+#define CLGET_RETRY_TIMEOUT 5   /* get retry timeout (timeval) */
+
+/*
+ * void
+ * CLNT_DESTROY(rh);
+ *     CLIENT *rh;
+ */
+#define        CLNT_DESTROY(rh)        ((*(rh)->cl_ops->cl_destroy)(rh))
+#define        clnt_destroy(rh)        ((*(rh)->cl_ops->cl_destroy)(rh))
+
+
+/*
+ * RPCTEST is a test program which is accessible on every rpc
+ * transport/port.  It is used for testing, performance evaluation,
+ * and network administration.
+ */
+
+#define RPCTEST_PROGRAM                ((u_long)1)
+#define RPCTEST_VERSION                ((u_long)1)
+#define RPCTEST_NULL_PROC      ((u_long)2)
+#define RPCTEST_NULL_BATCH_PROC        ((u_long)3)
+
+/*
+ * By convention, procedure 0 takes null arguments and returns them
+ */
+
+#define NULLPROC ((u_long)0)
+
+__BEGIN_DECLS
+
+/*
+ * Below are the client handle creation routines for the various
+ * implementations of client side rpc.  They can return NULL if a
+ * creation failure occurs.
+ */
+
+/*
+ * Memory based rpc (for speed check and testing)
+ * CLIENT *
+ * clntraw_create(prog, vers)
+ *     u_long prog;
+ *     u_long vers;
+ */
+extern CLIENT *clntraw_create (u_long, u_long);
+
+/*
+ * Generic client creation routine. Supported protocols are "udp" and "tcp"
+ * CLIENT *
+ * clnt_create(host, prog, vers, prot);
+ *     char *host;     -- hostname
+ *     u_long prog;    -- program number
+ *     u_long vers;    -- version number
+ *     char *prot;     -- protocol
+ */
+extern CLIENT *clnt_create      (char *, u_long, u_long, char *);
+
+
+/*
+ * TCP based rpc
+ * CLIENT *
+ * clnttcp_create(raddr, prog, vers, sockp, sendsz, recvsz)
+ *     struct sockaddr_in *raddr;
+ *     u_long prog;
+ *     u_long version;
+ *     register int *sockp;
+ *     u_int sendsz;
+ *     u_int recvsz;
+ */
+
+extern CLIENT *clnttcp_create   (struct sockaddr_in *, u_long, u_long,
+                                 int *, u_int, u_int);
+
+/*
+ * UDP based rpc.
+ * CLIENT *
+ * clntudp_create(raddr, program, version, wait, sockp)
+ *     struct sockaddr_in *raddr;
+ *     u_long program;
+ *     u_long version;
+ *     struct timeval wait;
+ *     int *sockp;
+ *
+ * Same as above, but you specify max packet sizes.
+ * CLIENT *
+ * clntudp_bufcreate(raddr, program, version, wait, sockp, sendsz, recvsz)
+ *     struct sockaddr_in *raddr;
+ *     u_long program;
+ *     u_long version;
+ *     struct timeval wait;
+ *     int *sockp;
+ *     u_int sendsz;
+ *     u_int recvsz;
+ */
+
+extern CLIENT *clntudp_create   (struct sockaddr_in *, u_long, u_long,
+                                 struct timeval, int *);
+extern CLIENT *clntudp_bufcreate(struct sockaddr_in *, u_long, u_long,
+                                 struct timeval, int *, u_int, u_int);
+
+
+/*
+ * Print why creation failed
+ */
+
+extern void  clnt_pcreateerror  (char *);     /* stderr */
+extern char *clnt_spcreateerror (char *);     /* string */
+
+/*
+ * Like clnt_perror(), but is more verbose in its output
+ */
+
+extern void clnt_perrno  (enum clnt_stat);    /* stderr */
+extern char *clnt_sperrno(enum clnt_stat);    /* string */
+
+/*
+ * Print an English error message, given the client error code
+ */
+
+extern void  clnt_perror (CLIENT *, char *);  /* stderr */
+extern char *clnt_sperror(CLIENT *, char *);  /* string */
+
+/*
+ * Call routine on remote host
+ */
+
+extern int callrpc (char *host, u_long prognum, u_long versnum, u_long procnum,
+                    xdrproc_t inproc,  char *in,
+                    xdrproc_t outproc, char *out);
+
+__END_DECLS
+
+
+/*
+ * If a creation fails, the following allows the user to figure out why.
+ */
+struct rpc_createerr {
+       enum clnt_stat cf_stat;
+       struct rpc_err cf_error; /* useful when cf_stat == RPC_PMAPFAILURE */
+       const char    *cf_file;  /* failed file + line */
+       unsigned       cf_line;
+     };
+
+extern struct rpc_createerr rpc_createerr;
+
+
+#define UDPMSGSIZE     8800    /* rpc imposed limit on udp msg size */
+#define RPCSMALLMSGSIZE        400     /* a more reasonable packet size */
+
+#endif
diff --git a/libs/watt32/rpc/key_prot.h b/libs/watt32/rpc/key_prot.h
new file mode 100644 (file)
index 0000000..818cfbb
--- /dev/null
@@ -0,0 +1,99 @@
+/*!\file rpc/key_prot.h
+ * RPC key exchange protocol.
+ */
+
+/*
+ * This is a RPCGEN generated file. Do not edit.
+ *
+ * Generated: Sun Mar 14 19:22:40 1999
+ */
+
+#ifndef __KEY_PROT_H
+#define __KEY_PROT_H
+
+
+/*
+ * Copyright (c) 1988 by Sun Microsystems, Inc.
+ */
+#define PROOT                     3
+#define HEXMODULUS                "d4a0ba0250b6fd2ec626e7efd637df76c716e22d0944b88b"
+#define HEXKEYBYTES               48
+#define KEYSIZE                   192
+#define KEYBYTES                  24
+#define KEYCHECKSUMSIZE           16
+
+typedef enum keystatus {
+          KEY_SUCCESS = 0,
+          KEY_NOSECRET = 1,
+          KEY_UNKNOWN = 2,
+          KEY_SYSTEMERR = 3,
+      } keystatus;
+bool_t xdr_keystatus();
+
+#ifndef KERNEL
+
+typedef char keybuf[HEXKEYBYTES];
+bool_t xdr_keybuf();
+
+#endif
+
+typedef char *netnamestr;
+bool_t xdr_netnamestr();
+
+
+typedef struct cryptkeyarg {
+        netnamestr remotename;
+        des_block deskey;
+      } cryptkeyarg;
+bool_t xdr_cryptkeyarg();
+
+
+typedef struct cryptkeyres {
+        keystatus status;
+  union {
+    des_block deskey;
+    } cryptkeyres_u;
+  } cryptkeyres;
+bool_t xdr_cryptkeyres();
+
+#define MAXGIDS                   16
+
+typedef struct unixcred {
+        long uid;
+        long gid;
+        struct {
+          u_long gids_len;
+          long *gids_val;
+        } gids;
+      } unixcred;
+bool_t xdr_unixcred();
+
+
+typedef struct getcredres {
+        keystatus status;
+  union {
+    unixcred cred;
+    } getcredres_u;
+  } getcredres;
+bool_t xdr_getcredres();
+
+
+#define KEY_PROG                  100029UL
+#define KEY_VERS                  1UL
+#define KEY_SET                   1UL
+extern long *key_set_1();
+
+#define KEY_ENCRYPT               2UL
+extern cryptkeyres *key_encrypt_1();
+
+#define KEY_DECRYPT               3UL
+extern cryptkeyres *key_decrypt_1();
+
+#define KEY_GEN                   4UL
+extern des_block *key_gen_1();
+
+#define KEY_GETCRED               5UL
+extern getcredres *key_getcred_1();
+
+
+#endif /* !__KEY_PROT_H */
diff --git a/libs/watt32/rpc/pmap_cln.h b/libs/watt32/rpc/pmap_cln.h
new file mode 100644 (file)
index 0000000..eed80a4
--- /dev/null
@@ -0,0 +1,86 @@
+/*!\file rpc/pmap_cln.h
+ * RPC portmapper (client-side).
+ */
+
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ *
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ *
+ *     from: @(#)pmap_clnt.h 1.11 88/02/08 SMI
+ *     from: @(#)pmap_clnt.h   2.1 88/07/29 4.0 RPCSRC
+ *     $Id: pmap_clnt.h,v 1.4 1996/01/30 23:31:59 mpp Exp $
+ */
+
+/*
+ * pmap_clnt.h
+ * Supplies C routines to get to portmap services.
+ *
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
+
+/*
+ * Usage:
+ *     success = pmap_set(program, version, protocol, port);
+ *     success = pmap_unset(program, version);
+ *     port = pmap_getport(address, program, version, protocol);
+ *     head = pmap_getmaps(address);
+ *     clnt_stat = pmap_rmtcall(address, program, version, procedure,
+ *             xdrargs, argsp, xdrres, resp, tout, port_ptr)
+ *             (works for udp only.)
+ *     clnt_stat = clnt_broadcast(program, version, procedure,
+ *             xdrargs, argsp, xdrres, resp, eachresult)
+ *             (like pmap_rmtcall, except the call is broadcasted to all
+ *             locally connected nets.  For each valid response received,
+ *             the procedure eachresult is called.  Its form is:
+ *     done = eachresult(resp, raddr)
+ *             bool_t done;
+ *             caddr_t resp;
+ *             struct sockaddr_in raddr;
+ *             where resp points to the results of the call and raddr is the
+ *             address if the responder to the broadcast.
+ */
+
+#ifndef __RPC_PMAP_CLIENT_H
+#define __RPC_PMAP_CLIENT_H
+
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+
+extern bool_t           pmap_set      (u_long, u_long, int, int);
+extern bool_t           pmap_unset    (u_long, u_long);
+extern struct pmaplist *pmap_getmaps  (struct sockaddr_in *);
+extern enum clnt_stat   pmap_rmtcall  (struct sockaddr_in *, u_long, u_long,
+                                       u_long, xdrproc_t, caddr_t, xdrproc_t,
+                                       caddr_t, struct timeval, u_long *);
+extern enum clnt_stat   clnt_broadcast(u_long, u_long, u_long, xdrproc_t,
+                                       char *, xdrproc_t, char *, bool_t (*)());
+extern u_short          pmap_getport  (struct sockaddr_in *, u_long, u_long, u_int);
+
+__END_DECLS
+
+#endif
diff --git a/libs/watt32/rpc/pmap_pro.h b/libs/watt32/rpc/pmap_pro.h
new file mode 100644 (file)
index 0000000..bfd48a2
--- /dev/null
@@ -0,0 +1,111 @@
+/*!\file rpc/pmap_pro.h
+ * RPC portmappper.
+ */
+
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ *
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ *
+ *     from: @(#)pmap_prot.h 1.14 88/02/08 SMI
+ *     from: @(#)pmap_prot.h   2.1 88/07/29 4.0 RPCSRC
+ *     $Id: pmap_prot.h,v 1.4 1996/01/30 23:32:08 mpp Exp $
+ */
+
+/*
+ * pmap_prot.h
+ * Protocol for the local binder service, or pmap.
+ *
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ *
+ * The following procedures are supported by the protocol:
+ *
+ * PMAPPROC_NULL() returns ()
+ *     takes nothing, returns nothing
+ *
+ * PMAPPROC_SET(struct pmap) returns (bool_t)
+ *     TRUE is success, FALSE is failure.  Registers the tuple
+ *     [prog, vers, prot, port].
+ *
+ * PMAPPROC_UNSET(struct pmap) returns (bool_t)
+ *     TRUE is success, FALSE is failure.  Un-registers pair
+ *     [prog, vers].  prot and port are ignored.
+ *
+ * PMAPPROC_GETPORT(struct pmap) returns (long unsigned).
+ *     0 is failure.  Otherwise returns the port number where the pair
+ *     [prog, vers] is registered.  It may lie!
+ *
+ * PMAPPROC_DUMP() RETURNS (struct pmaplist *)
+ *
+ * PMAPPROC_CALLIT(unsigned, unsigned, unsigned, string<>)
+ *     RETURNS (port, string<>);
+ * usage: encapsulatedresults = PMAPPROC_CALLIT(prog, vers, proc, encapsulatedargs);
+ *     Calls the procedure on the local machine.  If it is not registered,
+ *     this procedure is quite; ie it does not return error information!!!
+ *     This procedure only is supported on rpc/udp and calls via
+ *     rpc/udp.  This routine only passes null authentication parameters.
+ *     This file has no interface to xdr routines for PMAPPROC_CALLIT.
+ *
+ * The service supports remote procedure calls on udp/ip or tcp/ip socket 111.
+ */
+
+#ifndef __RPC_PMAP_PROT_H
+#define __RPC_PMAP_PROT_H
+
+#include <sys/cdefs.h>
+
+#define PMAPPORT          ((u_short)111)
+#define PMAPPROG          ((u_long)100000)
+#define PMAPVERS          ((u_long)2)
+#define PMAPVERS_PROTO    ((u_long)2)
+#define PMAPVERS_ORIG     ((u_long)1)
+#define PMAPPROC_NULL     ((u_long)0)
+#define PMAPPROC_SET      ((u_long)1)
+#define PMAPPROC_UNSET    ((u_long)2)
+#define PMAPPROC_GETPORT  ((u_long)3)
+#define PMAPPROC_DUMP     ((u_long)4)
+#define PMAPPROC_CALLIT   ((u_long)5)
+
+struct pmap {
+       long unsigned pm_prog;
+       long unsigned pm_vers;
+       long unsigned pm_prot;
+       long unsigned pm_port;
+     };
+
+struct pmaplist {
+       struct pmap      pml_map;
+       struct pmaplist *pml_next;
+     };
+
+__BEGIN_DECLS
+
+extern bool_t xdr_pmap    (XDR *, struct pmap *);
+extern bool_t xdr_pmaplist(XDR *, struct pmaplist **);
+
+__END_DECLS
+
+#endif
diff --git a/libs/watt32/rpc/pmap_rmt.h b/libs/watt32/rpc/pmap_rmt.h
new file mode 100644 (file)
index 0000000..502f4fd
--- /dev/null
@@ -0,0 +1,70 @@
+/*!\file rpc/pmap_rmt.h
+ * RPC portmapper definitions.
+ */
+
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ *
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ *
+ *     from: @(#)pmap_rmt.h 1.2 88/02/08 SMI
+ *     from: @(#)pmap_rmt.h    2.1 88/07/29 4.0 RPCSRC
+ *     $Id: pmap_rmt.h,v 1.4 1996/01/30 23:32:12 mpp Exp $
+ */
+
+/*
+ * Structures and XDR routines for parameters to and replies from
+ * the portmapper remote-call-service.
+ *
+ * Copyright (C) 1986, Sun Microsystems, Inc.
+ */
+
+#ifndef __RPC_PMAP_REMOTE_H
+#define __RPC_PMAP_REMOTE_H
+
+#include <sys/cdefs.h>
+
+struct rmtcallargs {
+       u_long    prog, vers, proc, arglen;
+       caddr_t   args_ptr;
+       xdrproc_t xdr_args;
+     };
+
+struct rmtcallres {
+       u_long   *port_ptr;
+       u_long    resultslen;
+       caddr_t   results_ptr;
+       xdrproc_t xdr_results;
+     };
+
+__BEGIN_DECLS
+
+extern bool_t xdr_rmtcall_args (XDR *, struct rmtcallargs *);
+extern bool_t xdr_rmtcallres   (XDR *, struct rmtcallres *);
+
+__END_DECLS
+
+#endif
diff --git a/libs/watt32/rpc/rpc.h b/libs/watt32/rpc/rpc.h
new file mode 100644 (file)
index 0000000..8859bf4
--- /dev/null
@@ -0,0 +1,111 @@
+/*!\file rpc/rpc.h
+ * Main RPC header.
+ */
+
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ *
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ *
+ *     from: @(#)rpc.h 1.9 88/02/08 SMI
+ *     from: @(#)rpc.h 2.4 89/07/11 4.0 RPCSRC
+ *     $Id: rpc.h,v 1.5 1996/01/30 23:32:20 mpp Exp $
+ */
+
+/*
+ * rpc.h, Just includes the billions of rpc header files necessary to
+ * do remote procedure calling.
+ *
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
+#ifndef __RPC_RPC_H
+#define __RPC_RPC_H
+
+#include <rpc/types.h>         /* some typedefs */
+
+/* external data representation interfaces */
+#include <rpc/xdr.h>           /* generic (de)serializer */
+
+/* Client side only authentication */
+#include <rpc/auth.h>          /* generic authenticator (client side) */
+
+/* Client side (mostly) remote procedure call */
+#include <rpc/clnt.h>          /* generic rpc stuff */
+
+/* semi-private protocol headers */
+#include <rpc/rpc_msg.h>       /* protocol for rpc messages */
+#include <rpc/auth_uni.h>      /* protocol for unix style cred */
+
+/*
+ *  Uncomment-out the next line if you are building the rpc library with
+ *  DES Authentication (see the README file in the secure_rpc/ directory).
+ */
+#if 1
+#include <rpc/auth_des.h>      /* protocol for des style cred */
+#endif
+
+/* Server side only remote procedure callee */
+#include <rpc/svc.h>           /* service manager and multiplexer */
+#include <rpc/svc_auth.h>      /* service side authenticator */
+
+/*
+ * COMMENT OUT THE NEXT INCLUDE (or add to the #ifndef) IF RUNNING ON
+ * A VERSION OF UNIX THAT USES SUN'S NFS SOURCE.  These systems will
+ * already have the structures defined by <rpc/netdb.h> included in <netdb.h>.
+ */
+/* routines for parsing /etc/rpc */
+
+struct rpcent {
+      char    *r_name;        /* name of server for this rpc program */
+      char    **r_aliases;    /* alias list */
+      long    r_number;       /* rpc program number. */
+};                            /* Must be 32-bit for small/large model */
+
+__BEGIN_DECLS
+
+extern struct rpcent *getrpcbyname  (char *);
+extern struct rpcent *getrpcbynumber(long);
+extern struct rpcent *getrpcent     (void);
+extern void setrpcent (int);
+extern void endrpcent (void);
+
+#if defined(__MSDOS__) || defined(__TURBOC__) || defined(__HIGHC__) || \
+    defined(__DJGPP__) || defined(__WATCOMC__)
+
+  /* from RPC-DOS v0.1Alpha by Mike Durkin <mdurkin@tsoft.net> */
+  /*                       updated by G.Vanem <giva@bgnett.no> */
+
+  extern void   rpc_init     (void);
+  extern void   set_user_id  (u_long uid);
+  extern void   set_group_id (u_long gid);
+
+  extern u_long __geteuid    (void);
+  extern u_long __getegid    (void);
+#endif
+
+__END_DECLS
+
+#endif
diff --git a/libs/watt32/rpc/rpc_msg.h b/libs/watt32/rpc/rpc_msg.h
new file mode 100644 (file)
index 0000000..9fbeab0
--- /dev/null
@@ -0,0 +1,208 @@
+/*!\file rpc/rpc_msg.h
+ * RPC message definitions.
+ */
+
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ *
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ *
+ *     from: @(#)rpc_msg.h 1.7 86/07/16 SMI
+ *     from: @(#)rpc_msg.h     2.1 88/07/29 4.0 RPCSRC
+ *     $Id: rpc_msg.h,v 1.5 1996/01/30 23:32:24 mpp Exp $
+ */
+
+/*
+ * rpc_msg.h
+ * rpc message definition
+ *
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
+
+#ifndef __RPC_RPC_MSG_H
+#define __RPC_RPCM_SG_H
+
+#include <sys/cdefs.h>
+
+#define RPC_MSG_VERSION    ((u_long) 2)
+#define RPC_SERVICE_PORT   ((u_short) 2048)
+
+/*
+ * Bottom up definition of an rpc message.
+ * NOTE: call and reply use the same overall stuct but
+ * different parts of unions within it.
+ */
+
+enum msg_type {
+       CALL=0,
+       REPLY=1
+};
+
+enum reply_stat {
+       MSG_ACCEPTED=0,
+       MSG_DENIED=1
+};
+
+enum accept_stat {
+       SUCCESS=0,
+       PROG_UNAVAIL=1,
+       PROG_MISMATCH=2,
+       PROC_UNAVAIL=3,
+       GARBAGE_ARGS=4,
+       SYSTEM_ERR=5
+};
+
+enum reject_stat {
+       RPC_MISMATCH=0,
+       AUTH_ERROR=1
+};
+
+/*
+ * Reply part of an rpc exchange
+ */
+
+#include <sys/packon.h>
+
+/*
+ * Reply to an rpc request that was accepted by the server.
+ * Note: there could be an error even though the request was
+ * accepted.
+ */
+struct accepted_reply {
+       struct opaque_auth      ar_verf;
+       enum accept_stat        ar_stat;
+       union {
+               struct {
+                       u_long  low;
+                       u_long  high;
+               } AR_versions;
+               struct {
+                       caddr_t where;
+                       xdrproc_t proc;
+               } AR_results;
+               /* and many other null cases */
+       } ru;
+#define        ar_results      ru.AR_results
+#define        ar_vers         ru.AR_versions
+};
+
+/*
+ * Reply to an rpc request that was rejected by the server.
+ */
+struct rejected_reply {
+       enum reject_stat rj_stat;
+       union {
+               struct {
+                       u_long low;
+                       u_long high;
+               } RJ_versions;
+               enum auth_stat RJ_why;  /* why authentication did not work */
+       } ru;
+#define        rj_vers ru.RJ_versions
+#define        rj_why  ru.RJ_why
+};
+
+/*
+ * Body of a reply to an rpc request.
+ */
+struct reply_body {
+       enum reply_stat rp_stat;
+       union {
+               struct accepted_reply RP_ar;
+               struct rejected_reply RP_dr;
+       } ru;
+#define        rp_acpt ru.RP_ar
+#define        rp_rjct ru.RP_dr
+};
+
+/*
+ * Body of an rpc request call.
+ */
+struct call_body {
+       u_long cb_rpcvers;      /* must be equal to two */
+       u_long cb_prog;
+       u_long cb_vers;
+       u_long cb_proc;
+       struct opaque_auth cb_cred;
+       struct opaque_auth cb_verf; /* protocol specific - provided by client */
+};
+
+/*
+ * The rpc message
+ */
+struct rpc_msg {
+       u_long                  rm_xid;
+       enum msg_type           rm_direction;
+       union {
+               struct call_body RM_cmb;
+               struct reply_body RM_rmb;
+       } ru;
+#define        rm_call         ru.RM_cmb
+#define        rm_reply        ru.RM_rmb
+};
+#define        acpted_rply     ru.RM_rmb.ru.RP_ar
+#define        rjcted_rply     ru.RM_rmb.ru.RP_dr
+
+#include <sys/packoff.h>
+
+__BEGIN_DECLS
+
+/*
+ * XDR routine to handle a rpc message.
+ * xdr_callmsg(xdrs, cmsg)
+ *     XDR *xdrs;
+ *     struct rpc_msg *cmsg;
+ */
+extern bool_t xdr_callmsg (XDR *, struct rpc_msg *);
+
+/*
+ * XDR routine to pre-serialize the static part of a rpc message.
+ * xdr_callhdr(xdrs, cmsg)
+ *     XDR *xdrs;
+ *     struct rpc_msg *cmsg;
+ */
+extern bool_t xdr_callhdr (XDR *, struct rpc_msg *);
+
+/*
+ * XDR routine to handle a rpc reply.
+ * xdr_replymsg(xdrs, rmsg)
+ *     XDR *xdrs;
+ *     struct rpc_msg *rmsg;
+ */
+extern bool_t xdr_replymsg (XDR *, struct rpc_msg *);
+
+/*
+ * Fills in the error part of a reply message.
+ * _seterr_reply(msg, error)
+ *     struct rpc_msg *msg;
+ *     struct rpc_err *error;
+ */
+struct rpc_err;
+extern void _seterr_reply (struct rpc_msg *, struct rpc_err *);
+
+__END_DECLS
+
+#endif
diff --git a/libs/watt32/rpc/svc.h b/libs/watt32/rpc/svc.h
new file mode 100644 (file)
index 0000000..1333ae7
--- /dev/null
@@ -0,0 +1,291 @@
+/*!\file rpc/svc.h
+ * RPC server-side interface.
+ */
+
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ *
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ *
+ *     from: @(#)svc.h 1.20 88/02/08 SMI
+ *     from: @(#)svc.h 2.2 88/07/29 4.0 RPCSRC
+ *     $Id: svc.h,v 1.5 1996/01/30 23:32:29 mpp Exp $
+ */
+
+/*
+ * svc.h, Server-side remote procedure call interface.
+ *
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
+
+#ifndef __RPC_SVC_H
+#define __RPC_SVC_H
+
+#ifndef __SYS_CDEFS_H
+#include <sys/cdefs.h>
+#endif
+
+/*
+ * This interface must manage two items concerning remote procedure calling:
+ *
+ * 1) An arbitrary number of transport connections upon which rpc requests
+ * are received.  The two most notable transports are TCP and UDP;  they are
+ * created and registered by routines in svc_tcp.c and svc_udp.c, respectively;
+ * they in turn call xprt_register and xprt_unregister.
+ *
+ * 2) An arbitrary number of locally registered services.  Services are
+ * described by the following four data: program number, version number,
+ * "service dispatch" function, a transport handle, and a boolean that
+ * indicates whether or not the exported program should be registered with a
+ * local binder service;  if true the program's number and version and the
+ * port number from the transport handle are registered with the binder.
+ * These data are registered with the rpc svc system via svc_register.
+ *
+ * A service's dispatch function is called whenever an rpc request comes in
+ * on a transport.  The request's program and version numbers must match
+ * those of the registered service.  The dispatch function is passed two
+ * parameters, struct svc_req * and SVCXPRT *, defined below.
+ */
+
+enum xprt_stat {
+       XPRT_DIED,
+       XPRT_MOREREQS,
+       XPRT_IDLE
+};
+
+/*
+ * Server side transport handle
+ */
+typedef struct {
+       int             xp_sock;
+       u_short         xp_port;         /* associated port number */
+       struct xp_ops {
+           bool_t      (*xp_recv)();    /* receive incoming requests */
+           enum xprt_stat (*xp_stat)(); /* get transport status */
+           bool_t      (*xp_getargs)(); /* get arguments */
+           bool_t      (*xp_reply)();   /* send reply */
+           bool_t      (*xp_freeargs)();/* free mem allocated for args */
+           void        (*xp_destroy)(); /* destroy this struct */
+       } *xp_ops;
+       int             xp_addrlen;      /* length of remote address */
+       struct sockaddr_in xp_raddr;     /* remote address */
+       struct opaque_auth xp_verf;      /* raw response verifier */
+       caddr_t         xp_p1;           /* private */
+       caddr_t         xp_p2;           /* private */
+} SVCXPRT;
+
+/*
+ *  Approved way of getting address of caller
+ */
+#define svc_getcaller(x) (&(x)->xp_raddr)
+
+/*
+ * Operations defined on an SVCXPRT handle
+ *
+ * SVCXPRT             *xprt;
+ * struct rpc_msg      *msg;
+ * xdrproc_t            xargs;
+ * caddr_t              argsp;
+ */
+#define SVC_RECV(xprt, msg)                            \
+       (*(xprt)->xp_ops->xp_recv)((xprt), (msg))
+#define svc_recv(xprt, msg)                            \
+       (*(xprt)->xp_ops->xp_recv)((xprt), (msg))
+
+#define SVC_STAT(xprt)                                 \
+       (*(xprt)->xp_ops->xp_stat)(xprt)
+#define svc_stat(xprt)                                 \
+       (*(xprt)->xp_ops->xp_stat)(xprt)
+
+#define SVC_GETARGS(xprt, xargs, argsp)                        \
+       (*(xprt)->xp_ops->xp_getargs)((xprt), (xargs), (argsp))
+#define svc_getargs(xprt, xargs, argsp)                        \
+       (*(xprt)->xp_ops->xp_getargs)((xprt), (xargs), (argsp))
+
+#define SVC_REPLY(xprt, msg)                           \
+       (*(xprt)->xp_ops->xp_reply) ((xprt), (msg))
+#define svc_reply(xprt, msg)                           \
+       (*(xprt)->xp_ops->xp_reply) ((xprt), (msg))
+
+#define SVC_FREEARGS(xprt, xargs, argsp)               \
+       (*(xprt)->xp_ops->xp_freeargs)((xprt), (xargs), (argsp))
+#define svc_freeargs(xprt, xargs, argsp)               \
+       (*(xprt)->xp_ops->xp_freeargs)((xprt), (xargs), (argsp))
+
+#define SVC_DESTROY(xprt)                              \
+       (*(xprt)->xp_ops->xp_destroy)(xprt)
+#define svc_destroy(xprt)                              \
+       (*(xprt)->xp_ops->xp_destroy)(xprt)
+
+
+/*
+ * Service request
+ */
+struct svc_req {
+       u_long          rq_prog;        /* service program number */
+       u_long          rq_vers;        /* service protocol version */
+       u_long          rq_proc;        /* the desired procedure */
+       struct opaque_auth rq_cred;     /* raw creds from the wire */
+       caddr_t         rq_clntcred;    /* read only cooked cred */
+       SVCXPRT *rq_xprt;               /* associated transport */
+};
+
+__BEGIN_DECLS
+
+/*
+ * Service registration
+ *
+ * svc_register(xprt, prog, vers, dispatch, protocol)
+ *     SVCXPRT *xprt;
+ *     u_long prog;
+ *     u_long vers;
+ *     void (*dispatch)();
+ *     int protocol;        // like TCP or UDP, zero means do not register
+ */
+extern bool_t  svc_register (SVCXPRT *, u_long, u_long, void (*)(), int);
+
+/*
+ * Service un-registration
+ *
+ * svc_unregister(prog, vers)
+ *     u_long prog;
+ *     u_long vers;
+ */
+extern void svc_unregister (u_long, u_long);
+
+/*
+ * Transport registration.
+ *
+ * xprt_register(xprt)
+ *     SVCXPRT *xprt;
+ */
+extern void xprt_register (SVCXPRT *);
+
+/*
+ * Transport un-register
+ *
+ * xprt_unregister(xprt)
+ *     SVCXPRT *xprt;
+ */
+extern void xprt_unregister (SVCXPRT *);
+
+
+
+/*
+ * When the service routine is called, it must first check to see if it
+ * knows about the procedure;  if not, it should call svcerr_noproc
+ * and return.  If so, it should deserialize its arguments via
+ * SVC_GETARGS (defined above).  If the deserialization does not work,
+ * svcerr_decode should be called followed by a return.  Successful
+ * decoding of the arguments should be followed the execution of the
+ * procedure's code and a call to svc_sendreply.
+ *
+ * Also, if the service refuses to execute the procedure due to too-
+ * weak authentication parameters, svcerr_weakauth should be called.
+ * Note: do not confuse access-control failure with weak authentication!
+ *
+ * NB: In pure implementations of rpc, the caller always waits for a reply
+ * msg.  This message is sent when svc_sendreply is called.
+ * Therefore pure service implementations should always call
+ * svc_sendreply even if the function logically returns void;  use
+ * xdr.h - xdr_void for the xdr routine.  HOWEVER, tcp based rpc allows
+ * for the abuse of pure rpc via batched calling or pipelining.  In the
+ * case of a batched call, svc_sendreply should NOT be called since
+ * this would send a return message, which is what batching tries to avoid.
+ * It is the service/protocol writer's responsibility to know which calls are
+ * batched and which are not.  Warning: responding to batch calls may
+ * deadlock the caller and server processes!
+ */
+
+extern bool_t svc_sendreply   (SVCXPRT *, xdrproc_t, char *);
+extern void   svcerr_decode   (SVCXPRT *);
+extern void   svcerr_weakauth (SVCXPRT *);
+extern void   svcerr_noproc   (SVCXPRT *);
+extern void   svcerr_progvers (SVCXPRT *, u_long, u_long);
+extern void   svcerr_auth     (SVCXPRT *, enum auth_stat);
+extern void   svcerr_noprog   (SVCXPRT *);
+extern void   svcerr_systemerr(SVCXPRT *);
+
+/*
+ * Lowest level dispatching -OR- who owns this process anyway.
+ * Somebody has to wait for incoming requests and then call the correct
+ * service routine.  The routine svc_run does infinite waiting; i.e.,
+ * svc_run never returns.
+ * Since another (co-existant) package may wish to selectively wait for
+ * incoming calls or other events outside of the rpc architecture, the
+ * routine svc_getreq is provided.  It must be passed readfds, the
+ * "in-place" results of a select system call (see select, section 2).
+ */
+
+/*
+ * Global keeper of rpc service descriptors in use
+ * dynamic; must be inspected before each call to select
+ */
+#ifdef FD_SETSIZE
+  extern void   svc_getreqset (fd_set *);
+  extern fd_set svc_fdset;
+  #define svc_fds svc_fdset.fds_bits[0]   /* compatibility */
+#else
+  extern int svc_fds;
+#endif
+
+/*
+ * a small program implemented by the svc_rpc implementation itself;
+ * also see clnt.h for protocol numbers.
+ */
+extern void rpctest_service();
+extern void svc_getreq  (int);
+extern void svc_run     (void);
+
+/*
+ * Socket to use on svcxxx_create call to get default socket
+ */
+#define        RPC_ANYSOCK     -1
+
+/*
+ * These are the existing service side transport implementations
+ */
+
+/*
+ * Memory based rpc for testing and timing.
+ */
+extern SVCXPRT *svcraw_create (void);
+
+
+/*
+ * Udp based rpc.
+ */
+extern SVCXPRT *svcudp_create (int);
+extern SVCXPRT *svcudp_bufcreate (int, u_int, u_int);
+
+/*
+ * Tcp based rpc.
+ */
+extern SVCXPRT *svctcp_create (int, u_int, u_int);
+
+__END_DECLS
+
+#endif
diff --git a/libs/watt32/rpc/svc_auth.h b/libs/watt32/rpc/svc_auth.h
new file mode 100644 (file)
index 0000000..24fb7ba
--- /dev/null
@@ -0,0 +1,56 @@
+/*!\file rpc/svc_auth.h
+ * RPC authentication (server-side).
+ */
+
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ *
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ *
+ *     from: @(#)svc_auth.h 1.6 86/07/16 SMI
+ *     from: @(#)svc_auth.h    2.1 88/07/29 4.0 RPCSRC
+ *     $Id: svc_auth.h,v 1.4 1996/01/30 23:32:36 mpp Exp $
+ */
+
+/*
+ * svc_auth.h, Service side of rpc authentication.
+ *
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
+
+#ifndef __RPC_SVC_AUTH_H
+#define __RPC_SVC_AUTH_H
+
+/*
+ * Server side authenticator
+ */
+__BEGIN_DECLS
+
+extern enum auth_stat _authenticate (struct svc_req *, struct rpc_msg *);
+
+__END_DECLS
+
+#endif
diff --git a/libs/watt32/rpc/types.h b/libs/watt32/rpc/types.h
new file mode 100644 (file)
index 0000000..4de3acc
--- /dev/null
@@ -0,0 +1,70 @@
+/*!\file rpc/types.h
+ * RPC type definitions.
+ */
+
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ *
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ *
+ *     from: @(#)types.h 1.18 87/07/24 SMI
+ *     from: @(#)types.h       2.3 88/08/15 4.0 RPCSRC
+ *     $Id: types.h,v 1.4 1996/01/30 23:32:39 mpp Exp $
+ */
+
+/*
+ * Rpc additions to <sys/wtypes.h>
+ */
+#ifndef __RPC_TYPES_H
+#define __RPC_TYPES_H
+
+#define        bool_t  int
+#define        enum_t  int
+#define __dontcare__   -1
+
+#ifndef FALSE
+#      define FALSE    (0)
+#endif
+#ifndef TRUE
+#      define TRUE     (1)
+#endif
+
+#define mem_alloc(bsize)       malloc(bsize)
+#define mem_free(ptr, bsize)   free(ptr)
+
+#include <sys/wtypes.h>
+#include <sys/wtime.h>
+#include <netinet/in.h>
+
+#ifndef INADDR_LOOPBACK
+#define        INADDR_LOOPBACK         (u_long)0x7F000001
+#endif
+
+#ifndef MAXHOSTNAMELEN
+#define MAXHOSTNAMELEN          64
+#endif
+
+#endif
diff --git a/libs/watt32/rpc/xdr.h b/libs/watt32/rpc/xdr.h
new file mode 100644 (file)
index 0000000..10a712b
--- /dev/null
@@ -0,0 +1,311 @@
+/*!\file rpc/xdr.h
+ * eXternal Data Representation.
+ */
+
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ *
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ *
+ *     from: @(#)xdr.h 1.19 87/04/22 SMI
+ *     from: @(#)xdr.h 2.2 88/07/29 4.0 RPCSRC
+ *     $Id: xdr.h,v 1.4 1996/01/30 23:32:45 mpp Exp $
+ */
+
+/*
+ * xdr.h, External Data Representation Serialization Routines.
+ *
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
+
+#ifndef __RPC_XDR_H
+#define __RPC_XDR_H
+
+#ifndef __SYS_CDEFS_H
+#include <sys/cdefs.h>
+#endif
+
+/*
+ * XDR provides a conventional way for converting between C data
+ * types and an external bit-string representation.  Library supplied
+ * routines provide for the conversion on built-in C data types.  These
+ * routines and utility routines defined here are used to help implement
+ * a type encode/decode routine for each user-defined type.
+ *
+ * Each data type provides a single procedure which takes two arguments:
+ *
+ *     bool_t
+ *     xdrproc(xdrs, argresp)
+ *             XDR *xdrs;
+ *             <type> *argresp;
+ *
+ * xdrs is an instance of a XDR handle, to which or from which the data
+ * type is to be converted.  argresp is a pointer to the structure to be
+ * converted.  The XDR handle contains an operation field which indicates
+ * which of the operations (ENCODE, DECODE * or FREE) is to be performed.
+ *
+ * XDR_DECODE may allocate space if the pointer argresp is null.  This
+ * data can be freed with the XDR_FREE operation.
+ *
+ * We write only one procedure per data type to make it easy
+ * to keep the encode and decode procedures for a data type consistent.
+ * In many cases the same code performs all operations on a user defined type,
+ * because all the hard work is done in the component type routines.
+ * decode as a series of calls on the nested data types.
+ */
+
+/*
+ * Xdr operations.  XDR_ENCODE causes the type to be encoded into the
+ * stream.  XDR_DECODE causes the type to be extracted from the stream.
+ * XDR_FREE can be used to release the space allocated by an XDR_DECODE
+ * request.
+ */
+enum xdr_op {
+     XDR_ENCODE = 0,
+     XDR_DECODE = 1,
+     XDR_FREE   = 2
+   };
+
+/*
+ * This is the number of bytes per unit of external data.
+ */
+#define BYTES_PER_XDR_UNIT     (4)
+#define RNDUP(x)  ((((x) + BYTES_PER_XDR_UNIT - 1) / BYTES_PER_XDR_UNIT) \
+                   * BYTES_PER_XDR_UNIT)
+
+/*
+ * A xdrproc_t exists for each data type which is to be encoded or decoded.
+ *
+ * The second argument to the xdrproc_t is a pointer to an opaque pointer.
+ * The opaque pointer generally points to a structure of the data type
+ * to be decoded.  If this pointer is 0, then the type routines should
+ * allocate dynamic storage of the appropriate size and return it.
+ * bool_t      (*xdrproc_t)(XDR *, caddr_t *);
+ */
+typedef        bool_t (*xdrproc_t)();
+
+/*
+ * The XDR handle.
+ * Contains operation which is being applied to the stream,
+ * an operations vector for the particular implementation (e.g. see xdr_mem.c),
+ * and two private fields for the use of the particular implementation.
+ */
+typedef struct {
+       enum xdr_op     x_op;           /* operation; fast additional param */
+       struct xdr_ops {
+               bool_t  (*x_getlong)(); /* get a long from underlying stream */
+               bool_t  (*x_putlong)(); /* put a long to " */
+               bool_t  (*x_getbytes)();/* get some bytes from " */
+               bool_t  (*x_putbytes)();/* put some bytes to " */
+               u_int   (*x_getpostn)();/* returns bytes off from beginning */
+               bool_t  (*x_setpostn)();/* lets you reposition the stream */
+               long *  (*x_inline)();  /* buf quick ptr to buffered data */
+               void    (*x_destroy)(); /* free privates of this xdr_stream */
+       } *x_ops;
+       caddr_t         x_public;       /* users' data */
+       caddr_t         x_private;      /* pointer to private data */
+       caddr_t         x_base;         /* private used for position info */
+       int             x_handy;        /* extra private word */
+} XDR;
+
+/*
+ * Operations defined on a XDR handle
+ *
+ * XDR         *xdrs;
+ * long                *longp;
+ * caddr_t      addr;
+ * u_int        len;
+ * u_int        pos;
+ */
+#define XDR_GETLONG(xdrs, longp)                       \
+       (*(xdrs)->x_ops->x_getlong)(xdrs, longp)
+#define xdr_getlong(xdrs, longp)                       \
+       (*(xdrs)->x_ops->x_getlong)(xdrs, longp)
+
+#define XDR_PUTLONG(xdrs, longp)                       \
+       (*(xdrs)->x_ops->x_putlong)(xdrs, longp)
+#define xdr_putlong(xdrs, longp)                       \
+       (*(xdrs)->x_ops->x_putlong)(xdrs, longp)
+
+#define XDR_GETBYTES(xdrs, addr, len)                  \
+       (*(xdrs)->x_ops->x_getbytes)(xdrs, addr, len)
+#define xdr_getbytes(xdrs, addr, len)                  \
+       (*(xdrs)->x_ops->x_getbytes)(xdrs, addr, len)
+
+#define XDR_PUTBYTES(xdrs, addr, len)                  \
+       (*(xdrs)->x_ops->x_putbytes)(xdrs, addr, len)
+#define xdr_putbytes(xdrs, addr, len)                  \
+       (*(xdrs)->x_ops->x_putbytes)(xdrs, addr, len)
+
+#define XDR_GETPOS(xdrs)                               \
+       (*(xdrs)->x_ops->x_getpostn)(xdrs)
+#define xdr_getpos(xdrs)                               \
+       (*(xdrs)->x_ops->x_getpostn)(xdrs)
+
+#define XDR_SETPOS(xdrs, pos)                          \
+       (*(xdrs)->x_ops->x_setpostn)(xdrs, pos)
+#define xdr_setpos(xdrs, pos)                          \
+       (*(xdrs)->x_ops->x_setpostn)(xdrs, pos)
+
+#define        XDR_INLINE(xdrs, len)                           \
+       (*(xdrs)->x_ops->x_inline)(xdrs, len)
+#define        xdr_inline(xdrs, len)                           \
+       (*(xdrs)->x_ops->x_inline)(xdrs, len)
+
+#define        XDR_DESTROY(xdrs)                               \
+       if ((xdrs)->x_ops->x_destroy)                   \
+               (*(xdrs)->x_ops->x_destroy)(xdrs)
+#define        xdr_destroy(xdrs)                               \
+       if ((xdrs)->x_ops->x_destroy)                   \
+               (*(xdrs)->x_ops->x_destroy)(xdrs)
+
+/*
+ * Support struct for discriminated unions.
+ * You create an array of xdrdiscrim structures, terminated with
+ * a entry with a null procedure pointer.  The xdr_union routine gets
+ * the discriminant value and then searches the array of structures
+ * for a matching value.  If a match is found the associated xdr routine
+ * is called to handle that part of the union.  If there is
+ * no match, then a default routine may be called.
+ * If there is no match and no default routine it is an error.
+ */
+#define NULL_xdrproc_t ((xdrproc_t)0L)
+struct xdr_discrim {
+       int     value;
+       xdrproc_t proc;
+};
+
+/*
+ * In-line routines for fast encode/decode of primitive data types.
+ * Caveat emptor: these use single memory cycles to get the
+ * data from the underlying buffer, and will fail to operate
+ * properly if the data is not aligned.  The standard way to use these
+ * is to say:
+ *     if ((buf = XDR_INLINE(xdrs, count)) == NULL)
+ *             return (FALSE);
+ *     <<< macro calls >>>
+ * where ``count'' is the number of bytes of data occupied
+ * by the primitive data types.
+ *
+ * N.B. and frozen for all time: each data type here uses 4 bytes
+ * of external representation.
+ */
+#define IXDR_GET_LONG(buf)         ((long)ntohl((u_long)*(buf)++))
+#define IXDR_PUT_LONG(buf, v)      (*(buf)++ = (long)htonl((u_long)v))
+
+#define IXDR_GET_BOOL(buf)         ((bool_t)IXDR_GET_LONG(buf))
+#define IXDR_GET_ENUM(buf, t)      ((t)IXDR_GET_LONG(buf))
+#define IXDR_GET_U_LONG(buf)       ((u_long)IXDR_GET_LONG(buf))
+#define IXDR_GET_SHORT(buf)        ((short)IXDR_GET_LONG(buf))
+#define IXDR_GET_U_SHORT(buf)      ((u_short)IXDR_GET_LONG(buf))
+
+#define IXDR_PUT_BOOL(buf, v)      IXDR_PUT_LONG((buf), ((long)(v)))
+#define IXDR_PUT_ENUM(buf, v)      IXDR_PUT_LONG((buf), ((long)(v)))
+#define IXDR_PUT_U_LONG(buf, v)    IXDR_PUT_LONG((buf), ((long)(v)))
+#define IXDR_PUT_SHORT(buf, v)     IXDR_PUT_LONG((buf), ((long)(v)))
+#define IXDR_PUT_U_SHORT(buf, v)   IXDR_PUT_LONG((buf), ((long)(v)))
+
+/*
+ * These are the "generic" xdr routines.
+ */
+
+__BEGIN_DECLS
+
+extern bool_t   xdr_void       (XDR *, caddr_t);
+extern bool_t   xdr_int        (XDR *, int *);
+extern bool_t   xdr_u_int      (XDR *, u_int *);
+extern bool_t   xdr_long       (XDR *, long *);
+extern bool_t   xdr_u_long     (XDR *, u_long *);
+extern bool_t   xdr_short      (XDR *, short *);
+extern bool_t   xdr_u_short    (XDR *, u_short *);
+extern bool_t   xdr_bool       (XDR *, bool_t *);
+extern bool_t   xdr_enum       (XDR *, enum_t *);
+extern bool_t   xdr_array      (XDR *, char **, u_int *, u_int, u_int, xdrproc_t);
+extern bool_t   xdr_bytes      (XDR *, char **, u_int *, u_int);
+extern bool_t __xdr_opaque     (XDR *, caddr_t, u_int);
+extern bool_t   xdr_string     (XDR *, char **, u_int);
+extern bool_t   xdr_union      (XDR *, enum_t *, char *, struct xdr_discrim *, xdrproc_t);
+extern bool_t   xdr_char       (XDR *, char *);
+extern bool_t   xdr_u_char     (XDR *, char *);
+extern bool_t   xdr_vector     (XDR *, char *, u_int, u_int, xdrproc_t);
+extern bool_t   xdr_float      (XDR *, float *);
+extern bool_t   xdr_double     (XDR *, double *);
+extern bool_t   xdr_reference  (XDR *, caddr_t *, u_int, xdrproc_t);
+extern bool_t   xdr_pointer    (XDR *, caddr_t *, u_int, xdrproc_t);
+extern bool_t   xdr_wrapstring (XDR *, char **);
+extern void     xdr_free       (xdrproc_t, char *);
+
+/*
+ * Hack to avoid missing typecast from rpcgen when
+ * producing xdr_opaque()
+ */
+#define xdr_opaque(xdr,obj,size) __xdr_opaque(xdr,(caddr_t)obj,size) 
+
+__END_DECLS
+
+/*
+ * Common opaque bytes objects used by many rpc protocols;
+ * declared here due to commonality.
+ */
+#define MAX_NETOBJ_SZ 1024
+struct netobj {
+       u_int   n_len;
+       char    *n_bytes;
+};
+typedef struct netobj netobj;
+
+/*
+ * These are the public routines for the various implementations of
+ * xdr streams.
+ */
+
+__BEGIN_DECLS
+
+extern bool_t xdr_netobj (XDR *, struct netobj *);
+
+/* XDR using memory buffers */
+extern void xdrmem_create (XDR *, char *, u_int, enum xdr_op);
+
+#if defined(__STDIO_H) || defined(_STDIO_H) || defined(__dj_include_stdio_h_)
+/* XDR using stdio library */
+extern void xdrstdio_create (XDR *, FILE *, enum xdr_op);
+#endif
+
+/* XDR pseudo records for tcp */
+extern void xdrrec_create (XDR *, u_int, u_int, char *, int (*)(), int (*)());
+
+/* make end of xdr record */
+extern bool_t xdrrec_endofrecord (XDR *, int);
+
+/* move to beginning of next record */
+extern bool_t xdrrec_skiprecord (XDR *);
+
+/* true if no more input */
+extern bool_t xdrrec_eof (XDR *);
+
+__END_DECLS
+
+#endif
diff --git a/libs/watt32/rpcsvc/yp_prot.h b/libs/watt32/rpcsvc/yp_prot.h
new file mode 100644 (file)
index 0000000..bbb2b53
--- /dev/null
@@ -0,0 +1,334 @@
+/*!\file rpcsvc/yp_prot.h
+ * RPC service - Yellow Pages protocol definitions.
+ */
+
+/*
+ * Copyright (c) 1992/3 Theo de Raadt <deraadt@fsa.ca>
+ * 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. The name of the author may not be used to endorse or promote
+ *    products derived from this software without specific prior written
+ *    permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+ *
+ *     $Id: yp_prot.h,v 1.3 1996/01/30 23:33:04 mpp Exp $
+ */
+
+#ifndef __RPCSVC_YP_PROT_H
+#define __RPCSVC_YP_PROT_H
+
+/*
+ * YPSERV PROTOCOL:
+ *
+ * ypserv supports the following procedures:
+ *
+ * YPPROC_NULL         takes (void), returns (void).
+ *                     called to check if server is alive.
+ * YPPROC_DOMAIN       takes (char *), returns (bool_t).
+ *                     true if ypserv serves the named domain.
+ * YPPROC_DOMAIN_NOACK takes (char *), returns (bool_t).
+ *                     true if ypserv serves the named domain.
+ *                     used for broadcasts, does not ack if ypserv
+ *                     doesn't handle named domain.
+ * YPPROC_MATCH                takes (struct ypreq_key), returns (struct ypresp_val)
+ *                     does a lookup.
+ * YPPROC_FIRST                takes (struct ypreq_nokey) returns (ypresp_key_val).
+ *                     gets the first key/datum from the map.
+ * YPPROC_NEXT         takes (struct ypreq_key) returns (ypresp_key_val).
+ *                     gets the next key/datum from the map.
+ * YPPROC_XFR          takes (struct ypreq_xfr), returns (void).
+ *                     tells ypserv to check if there is a new version of
+ *                     the map.
+ * YPPROC_CLEAR                takes (void), returns (void).
+ *                     tells ypserv to flush it's file cache, so that
+ *                     newly transferred files will get read.
+ * YPPROC_ALL          takes (struct ypreq_nokey), returns (bool_t and
+ *                     struct ypresp_key_val).
+ *                     returns an array of data, with the bool_t being
+ *                     false on the last datum. read the source, it's
+ *                     convoluted.
+ * YPPROC_MASTER       takes (struct ypreq_nokey), returns (ypresp_master).
+ * YPPROC_ORDER                takes (struct ypreq_nokey), returns (ypresp_order).
+ * YPPROC_MAPLIST      takes (char *), returns (struct ypmaplist *).
+ */
+
+#ifndef BOOL_DEFINED
+typedef u_int bool;
+#define BOOL_DEFINED
+#endif
+
+bool_t xdr_datum();
+bool_t xdr_ypdomain_wrap_string();
+bool_t xdr_ypmap_wrap_string();
+bool_t xdr_ypreq_key();
+bool_t xdr_ypreq_nokey();
+bool_t xdr_ypreq_xfr();
+bool_t xdr_ypresp_val();
+bool_t xdr_ypresp_key_val();
+bool_t xdr_ypbind_resp();
+bool_t xdr_ypbind_setdom();
+bool_t xdr_yp_inaddr();
+bool_t xdr_ypmap_parms();
+bool_t xdr_ypowner_wrap_string();
+bool_t xdr_yppushresp_xfr();
+bool_t xdr_ypresp_order();
+bool_t xdr_ypresp_master();
+bool_t xdr_ypall();
+bool_t xdr_ypresp_maplist();
+
+/* Program and version symbols, magic numbers */
+
+#define YPPROG         ((u_long)100004)
+#define YPVERS         ((u_long)2)
+#define YPVERS_ORIG    ((u_long)1)
+#define YPMAXRECORD    ((u_long)1024)
+#define YPMAXDOMAIN    ((u_long)64)
+#define YPMAXMAP       ((u_long)64)
+#define YPMAXPEER      ((u_long)256)
+
+/*
+ * I don't know if anything of sun's depends on this, or if they
+ * simply defined it so that their own code wouldn't try to send
+ * packets over the ethernet MTU. This YP code doesn't use it.
+ */
+#define YPMSGSZ                1600
+
+#ifndef DATUM
+typedef struct {
+       char    *dptr;
+       int     dsize;
+} datum;
+#define DATUM
+#endif
+
+struct ypmap_parms {
+       char *domain;
+       char *map;
+       u_long ordernum;
+       char *owner;
+};
+
+struct ypreq_key {
+       char *domain;
+       char *map;
+       datum keydat;
+};
+
+struct ypreq_nokey {
+       char *domain;
+       char *map;
+};
+
+struct ypreq_xfr {
+       struct ypmap_parms map_parms;
+       u_long transid;
+       u_long proto;
+       u_short port;
+};
+#define ypxfr_domain   map_parms.domain
+#define ypxfr_map      map_parms.map
+#define ypxfr_ordernum map_parms.ordernum
+#define ypxfr_owner    map_parms.owner
+
+struct ypresp_val {
+       u_long status;
+       datum valdat;
+};
+
+struct ypresp_key_val {
+       u_long status;
+       datum keydat;
+       datum valdat;
+};
+
+struct ypresp_master {
+       u_long status;
+       char *master;
+};
+
+struct ypresp_order {
+       u_long status;
+       u_long ordernum;
+};
+
+struct ypmaplist {
+       char ypml_name[YPMAXMAP + 1];
+       struct ypmaplist *ypml_next;
+};
+
+struct ypresp_maplist {
+       u_long status;
+       struct ypmaplist *list;
+};
+
+/* ypserv procedure numbers */
+#define YPPROC_NULL            ((u_long)0)
+#define YPPROC_DOMAIN          ((u_long)1)
+#define YPPROC_DOMAIN_NONACK   ((u_long)2)
+#define YPPROC_MATCH           ((u_long)3)
+#define YPPROC_FIRST           ((u_long)4)
+#define YPPROC_NEXT            ((u_long)5)
+#define YPPROC_XFR             ((u_long)6)
+#define YPPROC_CLEAR           ((u_long)7)
+#define YPPROC_ALL             ((u_long)8)
+#define YPPROC_MASTER          ((u_long)9)
+#define YPPROC_ORDER           ((u_long)10)
+#define YPPROC_MAPLIST         ((u_long)11)
+
+/* ypserv procedure return status values */
+#define YP_TRUE                ((long)1)       /* general purpose success code */
+#define YP_NOMORE      ((long)2)       /* no more entries in map */
+#define YP_FALSE       ((long)0)       /* general purpose failure code */
+#define YP_NOMAP       ((long)-1)      /* no such map in domain */
+#define YP_NODOM       ((long)-2)      /* domain not supported */
+#define YP_NOKEY       ((long)-3)      /* no such key in map */
+#define YP_BADOP       ((long)-4)      /* invalid operation */
+#define YP_BADDB       ((long)-5)      /* server data base is bad */
+#define YP_YPERR       ((long)-6)      /* YP server error */
+#define YP_BADARGS     ((long)-7)      /* request arguments bad */
+#define YP_VERS                ((long)-8)      /* YP server version mismatch */
+
+/*
+ * Sun's header file says:
+ * "Domain binding data structure, used by ypclnt package and ypserv modules.
+ * Users of the ypclnt package (or of this protocol) don't HAVE to know about
+ * it, but it must be available to users because _yp_dobind is a public
+ * interface."
+ *
+ * This is totally bogus! Nowhere else does Sun state that _yp_dobind() is
+ * a public interface, and I don't know any reason anyone would want to call
+ * it. But, just in case anyone does actually expect it to be available..
+ * we provide this.. exactly as Sun wants it.
+ */
+struct dom_binding {
+       struct dom_binding *dom_pnext;
+       char                dom_domain[YPMAXDOMAIN + 1];
+       struct sockaddr_in  dom_server_addr;
+       u_short             dom_server_port;
+       int                 dom_socket;
+       CLIENT             *dom_client;
+       u_short             dom_local_port;
+       long                dom_vers;
+};
+
+/*
+ * YPBIND PROTOCOL:
+ *
+ * ypbind supports the following procedures:
+ *
+ * YPBINDPROC_NULL     takes (void), returns (void).
+ *                     to check if ypbind is running.
+ * YPBINDPROC_DOMAIN   takes (char *), returns (struct ypbind_resp).
+ *                     requests that ypbind start to serve the
+ *                     named domain (if it doesn't already)
+ * YPBINDPROC_SETDOM   takes (struct ypbind_setdom), returns (void).
+ *                     used by ypset.
+ */
+
+#define YPBINDPROG             ((u_long)100007)
+#define YPBINDVERS             ((u_long)2)
+#define YPBINDVERS_ORIG                ((u_long)1)
+
+/* ypbind procedure numbers */
+#define YPBINDPROC_NULL                ((u_long)0)
+#define YPBINDPROC_DOMAIN      ((u_long)1)
+#define YPBINDPROC_SETDOM      ((u_long)2)
+
+/* error code in ypbind_resp.ypbind_status */
+enum ypbind_resptype {
+       YPBIND_SUCC_VAL = 1,
+       YPBIND_FAIL_VAL = 2
+};
+
+/* network order, of course */
+struct ypbind_binding {
+       struct in_addr  ypbind_binding_addr;
+       u_short         ypbind_binding_port;
+     };
+
+struct ypbind_resp {
+       enum ypbind_resptype    ypbind_status;
+       union {
+         u_long                ypbind_error;
+         struct ypbind_binding ypbind_bindinfo;
+       } ypbind_respbody;
+     };
+
+/* error code in ypbind_resp.ypbind_respbody.ypbind_error */
+#define YPBIND_ERR_ERR         1       /* internal error */
+#define YPBIND_ERR_NOSERV      2       /* no bound server for passed domain */
+#define YPBIND_ERR_RESC                3       /* system resource allocation failure */
+
+/*
+ * Request data structure for ypbind "Set domain" procedure.
+ */
+struct ypbind_setdom {
+       char ypsetdom_domain[YPMAXDOMAIN + 1];
+       struct ypbind_binding ypsetdom_binding;
+       u_short ypsetdom_vers;
+};
+#define ypsetdom_addr ypsetdom_binding.ypbind_binding_addr
+#define ypsetdom_port ypsetdom_binding.ypbind_binding_port
+
+/*
+ * YPPUSH PROTOCOL:
+ *
+ * Sun says:
+ * "Protocol between clients (ypxfr, only) and yppush
+ *  yppush speaks a protocol in the transient range, which
+ *  is supplied to ypxfr as a command-line parameter when it
+ *  is activated by ypserv."
+ *
+ * This protocol is not implemented, naturally, because this YP
+ * implementation only does the client side.
+ */
+#define YPPUSHVERS             ((u_long)1)
+#define YPPUSHVERS_ORIG                ((u_long)1)
+
+/* yppush procedure numbers */
+#define YPPUSHPROC_NULL                ((u_long)0)
+#define YPPUSHPROC_XFRRESP     ((u_long)1)
+
+struct yppushresp_xfr {
+       u_long  transid;
+       u_long  status;
+};
+
+/* yppush status value in yppushresp_xfr.status */
+#define YPPUSH_SUCC    ((long)1)       /* Success */
+#define YPPUSH_AGE     ((long)2)       /* Master's version not newer */
+#define YPPUSH_NOMAP   ((long)-1)      /* Can't find server for map */
+#define YPPUSH_NODOM   ((long)-2)      /* Domain not supported */
+#define YPPUSH_RSRC    ((long)-3)      /* Local resource alloc failure */
+#define YPPUSH_RPC     ((long)-4)      /* RPC failure talking to server */
+#define YPPUSH_MADDR   ((long)-5)      /* Can't get master address */
+#define YPPUSH_YPERR   ((long)-6)      /* YP server/map db error */
+#define YPPUSH_BADARGS         ((long)-7)      /* Request arguments bad */
+#define YPPUSH_DBM     ((long)-8)      /* Local dbm operation failed */
+#define YPPUSH_FILE    ((long)-9)      /* Local file I/O operation failed */
+#define YPPUSH_SKEW    ((long)-10)     /* Map version skew during transfer */
+#define YPPUSH_CLEAR   ((long)-11)     /* Can't send "Clear" req to local ypserv */
+#define YPPUSH_FORCE   ((long)-12)     /* No local order number in map - use -f */
+#define YPPUSH_XFRERR  ((long)-13)     /* ypxfr error */
+#define YPPUSH_REFUSED ((long)-14)     /* Transfer request refused by ypserv */
+
+#endif
diff --git a/libs/watt32/rpcsvc/ypclnt.h b/libs/watt32/rpcsvc/ypclnt.h
new file mode 100644 (file)
index 0000000..015bdfc
--- /dev/null
@@ -0,0 +1,88 @@
+/*!\file rpcsvc/ypclnt.h
+ * RPC service - Yellow Pages client.
+ */
+
+/*
+ * Copyright (c) 1992/3 Theo de Raadt <deraadt@fsa.ca>
+ * 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. The name of the author may not be used to endorse or promote
+ *    products derived from this software without specific prior written
+ *    permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+ *
+ *     $Id: ypclnt.h,v 1.3 1995/05/30 04:55:49 rgrimes Exp $
+ */
+
+#ifndef __RPCSVC_YPCLNT_H
+#define __RPCSVC_YPCLNT_H
+
+#define YPERR_BADARGS  1               /* args to function are bad */
+#define YPERR_RPC      2               /* RPC failure */
+#define YPERR_DOMAIN   3               /* can't bind to a server for domain */
+#define YPERR_MAP      4               /* no such map in server's domain */
+#define YPERR_KEY      5               /* no such key in map */
+#define YPERR_YPERR    6               /* some internal YP server or client error */
+#define YPERR_RESRC    7               /* local resource allocation failure */
+#define YPERR_NOMORE   8               /* no more records in map database */
+#define YPERR_PMAP     9               /* can't communicate with portmapper */
+#define YPERR_YPBIND   10              /* can't communicate with ypbind */
+#define YPERR_YPSERV   11              /* can't communicate with ypserv */
+#define YPERR_NODOM    12              /* local domain name not set */
+#define YPERR_BADDB    13              /* YP data base is bad */
+#define YPERR_VERS     14              /* YP version mismatch */
+#define YPERR_ACCESS   15              /* access violation */
+#define YPERR_BUSY     16              /* database is busy */
+
+/*
+ * Types of update operations
+ */
+#define YPOP_CHANGE    1               /* change, do not add */
+#define YPOP_INSERT    2               /* add, do not change */
+#define YPOP_DELETE    3               /* delete this entry */
+#define YPOP_STORE     4               /* add, or change */
+
+struct ypall_callback {
+       int (*foreach)();       /* return non-0 to stop getting called */
+       char *data;             /* opaque pointer for use of callback fn */
+     };
+
+int   yp_get_default_domain (char **domp);
+int   yp_bind         (char *dom);
+int  _yp_dobind       (char *dom, struct dom_binding **ypdb);
+void  yp_unbind       (char *dom);
+int   yp_match        (char *indomain, char *inmap, const char *inkey,
+                       int inkeylen, char **outval, int *outvallen);
+int   yp_first        (char *indomain, char *inmap, char **outkey,
+                       int *outkeylen, char **outval, int *outvallen);
+int   yp_next         (char *indomain, char *inmap, char *inkey, int inkeylen,
+                       char **outkey, int *outkeylen, char **outval, int *outvallen);
+int   yp_master       (char *indomain, char *inmap, char **outname);
+int   yp_order        (char *indomain, char *inmap, int *outorder);
+int   yp_all          (char *indomain, char *inmap, struct ypall_callback *incallback);
+int   yp_invalid_domain (char *dom);
+char *yperr_string    (int incode);
+char *ypbinderr_string(int incode);
+int   ypprot_err      (unsigned int incode);
+
+#endif
+
diff --git a/libs/watt32/sys/borlandc.err b/libs/watt32/sys/borlandc.err
new file mode 100644 (file)
index 0000000..bd56a3d
--- /dev/null
@@ -0,0 +1,113 @@
+#ifndef __SYS_WERRNO_ERR
+#define __SYS_WERRNO_ERR
+
+/*
+ * THIS FILE IS GENERATED BY E:\NET\WATT\UTIL\BCC_ERR.EXE. DO NOT EDIT.
+ *
+ * Watt-32 errnos are after vendor's errnos (1 - 47)
+ */
+
+#ifndef __BORLANDC__
+#error This file is only for use by "__BORLANDC__"
+#endif
+
+#define ERRNO_VENDOR_VERSION  "4.60"
+
+#define EWOULDBLOCK       48
+#define EDOM              33
+#define ERANGE            34
+#define E2BIG             20
+#define EACCES            5
+#define EAGAIN            42
+#define EBADF             6
+#define EBUSY             44
+#define ECHILD            24
+#define EDEADLK           49
+#define EEXIST            35
+#define EFAULT            14
+#define EFBIG             27
+#define EINTR             39
+#define EINVAL            19
+#define EIO               40
+#define EISDIR            46
+#define EMFILE            4
+#define EMLINK            31
+#define ENAMETOOLONG      50
+#define ENFILE            23
+#define ENODEV            15
+#define ENOENT            2
+#define ENOEXEC           21
+#define ENOLCK            51
+#define ENOMEM            8
+#define ENOSPC            28
+#define ENOSYS            52
+#define ENOTDIR           45
+#define ENOTEMPTY         53
+#define ENOTTY            25
+#define ENXIO             41
+#define EPERM             37
+#define EPIPE             32
+#define EROFS             30
+#define ESPIPE            29
+#define ESRCH             38
+#define EXDEV             22
+#define ENMFILE           18
+#define EINPROGRESS       54
+#define EALREADY          55
+#define ENOTSOCK          56
+#define EDESTADDRREQ      57
+#define EMSGSIZE          58
+#define EPROTOTYPE        59
+#define ENOPROTOOPT       60
+#define EPROTONOSUPPORT   61
+#define ESOCKTNOSUPPORT   62
+#define EOPNOTSUPP        63
+#define EPFNOSUPPORT      64
+#define EAFNOSUPPORT      65
+#define EADDRINUSE        66
+#define EADDRNOTAVAIL     67
+#define ENETDOWN          68
+#define ENETUNREACH       69
+#define ENETRESET         70
+#define ECONNABORTED      71
+#define ECONNRESET        72
+#define ENOBUFS           73
+#define EISCONN           74
+#define ENOTCONN          75
+#define ESHUTDOWN         76
+#define ETIMEDOUT         77
+#define ECONNREFUSED      78
+#define EHOSTDOWN         79
+#define EHOSTUNREACH      80
+#define ESTALE            81
+#define EREMOTE           82
+#define EBADRPC           83
+#define ERPCMISMATCH      84
+#define EPROGUNAVAIL      85
+#define EPROGMISMATCH     86
+#define EPROCUNAVAIL      87
+#define EILSEQ            88
+#define EINVFNC           1
+#define ENOPATH           3
+#define ECONTR            7
+#define EINVMEM           9
+#define EINVENV           10
+#define EINVFMT           11
+#define EINVACC           12
+#define EINVDAT           13
+#define EDEADLOCK         36
+#define ECURDIR           16
+#define ENOTSAM           17
+#define ETXTBSY           26
+#define ENOTBLK           43
+#define EUCLEAN           47
+#define ETOOMANYREFS      89
+#define ELOOP             90
+#define EPROCLIM          91
+#define EUSERS            92
+#define EDQUOT            93
+#define EVDBAD            94
+#define ENORMTWD          95
+#define EOVERFLOW         96
+
+#endif /* __SYS_WERRNO_ERR */
diff --git a/libs/watt32/sys/cdefs.h b/libs/watt32/sys/cdefs.h
new file mode 100644 (file)
index 0000000..606c875
--- /dev/null
@@ -0,0 +1,257 @@
+/*!\file sys/cdefs.h
+ *
+ * C-compiler definitions.
+ */
+
+/*
+ * Copyright (c) 1991, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Berkeley Software Design, Inc.
+ *
+ * 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.
+ *
+ *     @(#)cdefs.h     8.7 (Berkeley) 1/21/94
+ */
+
+#ifndef __SYS_CDEFS_H
+#define __SYS_CDEFS_H
+
+#if defined(__DJGPP__) && !defined(djgpp_cdefs_incl)
+  #include "/dev/env/DJDIR/include/sys/cdefs.h"
+  #define djgpp_cdefs_incl
+#endif
+
+#ifdef __cplusplus
+  #define __BEGIN_DECLS  extern "C" {
+  #define __END_DECLS    }
+#else
+  #define __BEGIN_DECLS
+  #define __END_DECLS
+#endif
+
+#ifndef W32_NAMESPACE
+  #define W32_NAMESPACE(x) _w32_ ## x
+#endif
+
+#if defined(__CCDL__)
+  #define cdecl _cdecl
+
+#elif defined(__MINGW32__) && !defined(cdecl)
+  #define cdecl __attribute__((__cdecl__))
+
+#elif defined(_MSC_VER) || defined(__POCC__)
+  #undef  cdecl
+  #if (_MSC_VER <= 600)
+    #define cdecl _cdecl
+    #undef  __STDC__
+    #define __STDC__ 1
+  #else
+    #define cdecl __cdecl
+  #endif
+  #define NO_ANSI_KEYWORDS
+
+#elif defined(__DMC__)
+  #define NO_UNDERSCORE __syscall
+  /* e.g. int NO_UNDERSCORE foo (void); */
+#endif
+
+#ifndef cdecl
+#define cdecl
+#endif
+
+#if defined(_MSC_VER) && !defined(WIN32) && !defined(_WIN32)
+  /*
+   * MS's Quick-C/Visual-C (for DOS) insists that signal-handlers, atexit
+   * functions and var-arg functions must be defined cdecl.
+   * This is only an issue if a program is using 'fastcall' globally
+   * (cl option /Gr).
+   * On Win32 this isn't an issue since WATT-32.DLL cannot be built
+   * as 'fastcall' anyway.
+   */
+  #undef  MS_CDECL
+  #define MS_CDECL   cdecl
+#else
+  #define MS_CDECL
+#endif
+
+
+struct mbuf {
+       struct mbuf  *next;    /* Links mbufs belonging to single packets */
+       struct mbuf  *anext;   /* Links packets on queues */
+       unsigned      size;    /* Size of associated data buffer */
+       int           refcnt;  /* Reference count */
+       struct mbuf  *dup;     /* Pointer to duplicated mbuf */
+       char         *data;    /* Active working pointers */
+       unsigned      cnt;
+     };
+
+
+/*
+ * The __CONCAT macro is used to concatenate parts of symbol names, e.g.
+ * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
+ * The __CONCAT macro is a bit tricky -- make sure you don't put spaces
+ * in between its arguments.  __CONCAT can also concatenate double-quoted
+ * strings produced by the __STRING macro, but this only works with ANSI C.
+ */
+#if (defined(__STDC__) && __STDC__) || defined(__cplusplus) || defined(__TURBOC__)
+  #undef  __P
+  #define __P(protos)     protos        /* full-blown ANSI C */
+  #define __CONCAT(x,y)   x ## y
+  #define __STRING(x)     #x
+
+  #define __const         const         /* define reserved names to standard */
+  #define __signed        signed
+  #define __volatile      volatile
+  #if defined(__cplusplus)
+    #define __inline      inline        /* convert to C++ keyword */
+  #elif !defined(__GNUC__) && !defined(_MSC_VER) && !defined(__WATCOMC__)
+    #define __inline                    /* delete GCC/MSC/Watcom keyword */
+  #endif
+
+#else
+  #define __P(protos)     ()            /* traditional C preprocessor */
+  #define __CONCAT(x,y)   x/**/y
+  #define __STRING(x)     "x"
+
+  #if !defined(__GNUC__) && !defined(_MSC_VER) && !defined(__WATCOMC__)
+    #define __inline
+  #endif
+
+  #if !defined(__GNUC__)
+    #define __const                     /* delete pseudo-ANSI C keywords */
+    #define __signed
+    #define __volatile
+
+    /*
+     * In non-ANSI C environments, new programs will want ANSI-only C keywords
+     * deleted from the program and old programs will want them left alone.
+     * When using a compiler other than gcc, programs using the ANSI C keywords
+     * const, inline etc. as normal identifiers should define -DNO_ANSI_KEYWORDS.
+     * When using "gcc -traditional", we assume that this is the intent; if
+     * __GNUC__ is defined but __STDC__ is not, we leave the new keywords alone.
+     */
+    #if !defined(NO_ANSI_KEYWORDS)
+      #define const                     /* delete ANSI C keywords */
+      #define inline
+      #define signed
+      #define volatile
+    #endif
+  #endif  /* !__GNUC__ */
+#endif  /* !C++ */
+
+/*
+ * GCC1 and some versions of GCC2 declare dead (non-returning) and
+ * pure (no side effects) functions using "volatile" and "const";
+ * unfortunately, these then cause warnings under "-ansi -pedantic".
+ * GCC2 uses a new, peculiar __attribute__((attrs)) style.  All of
+ * these work for GNU C++ (modulo a slight glitch in the C++ grammar
+ * in the distribution version of 2.5.5).
+ */
+#if !defined(__GNUC__) || (__GNUC__ < 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ < 5))
+  #undef  __attribute__
+  #define __attribute__(x)   /* delete __attribute__ if non-gcc or older than gcc 2.5 */
+  #if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+    #undef __dead
+    #undef __pure
+    #define __dead  __volatile
+    #define __pure  __const
+    #undef  __dead2
+    #define __dead2
+  #endif
+#endif
+
+/*
+ * Delete pseudo-keywords wherever they are not available or needed.
+ * This seems to break MingW in mysterious ways, so leave it,
+ */
+#ifndef __dead
+#define __dead
+#endif
+
+#ifndef __dead2
+#define __dead2
+#endif
+
+#ifndef __pure
+#define __pure
+#endif
+
+/*
+ * min() & max() macros
+ */
+#if defined(__HIGHC__)
+  #undef  min
+  #undef  max
+  #define min(a,b) _min(a,b)  /* intrinsic functions */
+  #define max(a,b) _max(a,b)
+#endif
+
+#ifndef min
+#define min(a,b) (((a) < (b)) ? (a) : (b))
+#endif
+
+#ifndef max
+#define max(a,b) (((a) > (b)) ? (a) : (b))
+#endif
+
+/*
+ * from NetBSD's <sys/cdefs_aout.h>
+ *
+ * Written by J.T. Conklin <jtc@wimsey.com> 01/17/95.
+ * Public domain.
+ */
+
+/* #define _C_LABEL(x) __CONCAT(_,x) */
+
+#if defined(__GNUC__)
+  #define __indr_reference(sym,alias)                \
+          __asm__(".stabs \"_" #alias "\",11,0,0,0");\
+          __asm__(".stabs \"_" #sym "\",1,0,0,0");
+
+  #define __warn_references(sym,msg)                 \
+          __asm__(".stabs \"" msg "\",30,0,0,0");    \
+          __asm__(".stabs \"_" #sym "\",1,0,0,0");
+
+  #define __IDSTRING(name,string)  \
+          static const char name[] __attribute__((__unused__)) = string
+#else
+  #define __indr_reference(sym,alias)
+  #define __warn_references(sym,msg)
+  #define __IDSTRING(name,string)  static const char name[] = string
+#endif
+
+#define __RCSID(_s)                __IDSTRING(rcsid,_s)
+#define __COPYRIGHT(_s)            __IDSTRING(copyright,_s)
+
+#define __KERNEL_RCSID(_n,_s)      __IDSTRING(__CONCAT(rcsid,_n),_s)
+#define __KERNEL_COPYRIGHT(_n,_s)  __IDSTRING(__CONCAT(copyright,_n),_s)
+
+#endif
diff --git a/libs/watt32/sys/digmars.err b/libs/watt32/sys/digmars.err
new file mode 100644 (file)
index 0000000..8c26585
--- /dev/null
@@ -0,0 +1,110 @@
+#ifndef __SYS_WERRNO_ERR
+#define __SYS_WERRNO_ERR
+
+/*
+ * THIS FILE IS GENERATED BY E:\NET\WATT\UTIL\DM_ERR.EXE. DO NOT EDIT.
+ *
+ * Watt-32 errnos are after vendor's errnos (1 - 42)
+ */
+
+#ifndef __DMC__
+#error This file is only for use by "__DMC__"
+#endif
+
+#define EWOULDBLOCK       43
+#define EDOM              33
+#define ERANGE            34
+#define E2BIG             7
+#define EACCES            13
+#define EAGAIN            11
+#define EBADF             9
+#define EBUSY             16
+#define ECHILD            10
+#define EDEADLK           36
+#define EEXIST            17
+#define EFAULT            14
+#define EFBIG             27
+#define EINTR             4
+#define EINVAL            22
+#define EIO               5
+#define EISDIR            21
+#define EMFILE            24
+#define EMLINK            31
+#define ENAMETOOLONG      38
+#define ENFILE            23
+#define ENODEV            19
+#define ENOENT            2
+#define ENOEXEC           8
+#define ENOLCK            39
+#define ENOMEM            12
+#define ENOSPC            28
+#define ENOSYS            40
+#define ENOTDIR           20
+#define ENOTEMPTY         41
+#define ENOTTY            25
+#define ENXIO             6
+#define EPERM             1
+#define EPIPE             32
+#define EROFS             30
+#define ESPIPE            29
+#define ESRCH             3
+#define EXDEV             18
+#define ENMFILE           44
+#define EINPROGRESS       45
+#define EALREADY          46
+#define ENOTSOCK          47
+#define EDESTADDRREQ      48
+#define EMSGSIZE          49
+#define EPROTOTYPE        50
+#define ENOPROTOOPT       51
+#define EPROTONOSUPPORT   52
+#define ESOCKTNOSUPPORT   53
+#define EOPNOTSUPP        54
+#define EPFNOSUPPORT      55
+#define EAFNOSUPPORT      56
+#define EADDRINUSE        57
+#define EADDRNOTAVAIL     58
+#define ENETDOWN          59
+#define ENETUNREACH       60
+#define ENETRESET         61
+#define ECONNABORTED      62
+#define ECONNRESET        63
+#define ENOBUFS           64
+#define EISCONN           65
+#define ENOTCONN          66
+#define ESHUTDOWN         67
+#define ETIMEDOUT         68
+#define ECONNREFUSED      69
+#define EHOSTDOWN         70
+#define EHOSTUNREACH      71
+#define ESTALE            72
+#define EREMOTE           73
+#define EBADRPC           74
+#define ERPCMISMATCH      75
+#define EPROGUNAVAIL      76
+#define EPROGMISMATCH     77
+#define EPROCUNAVAIL      78
+#define EILSEQ            42
+#define EINVFNC           79
+#define ENOPATH           80
+#define ECONTR            81
+#define EINVMEM           82
+#define EINVENV           83
+#define EINVFMT           84
+#define EINVACC           85
+#define EINVDAT           86
+#define EDEADLOCK         36
+#define ECURDIR           87
+#define ENOTSAM           88
+#define ETXTBSY           26
+#define ENOTBLK           15
+#define EUCLEAN           35
+#define ETOOMANYREFS      89
+#define ELOOP             90
+#define EPROCLIM          91
+#define EUSERS            92
+#define EDQUOT            93
+#define EVDBAD            94
+#define ENORMTWD          95
+
+#endif /* __SYS_WERRNO_ERR */
diff --git a/libs/watt32/sys/djgpp.err b/libs/watt32/sys/djgpp.err
new file mode 100644 (file)
index 0000000..f7b2a3e
--- /dev/null
@@ -0,0 +1,113 @@
+#ifndef __SYS_WERRNO_ERR
+#define __SYS_WERRNO_ERR
+
+/*
+ * THIS FILE WAS GENERATED BY c:/net/watt/src/../util/dj_err.exe. DO NOT EDIT.
+ *
+ * Watt-32 errnos are after vendor's errnos (1 - 38)
+ */
+
+#ifndef __DJGPP__
+#error This file is only for use by "__DJGPP__"
+#endif
+
+#define ERRNO_VENDOR_VERSION  "2.03"
+
+#define EWOULDBLOCK       39
+#define EDOM              1
+#define ERANGE            2
+#define E2BIG             3
+#define EACCES            4
+#define EAGAIN            5
+#define EBADF             6
+#define EBUSY             7
+#define ECHILD            8
+#define EDEADLK           9
+#define EEXIST            10
+#define EFAULT            11
+#define EFBIG             12
+#define EINTR             13
+#define EINVAL            14
+#define EIO               15
+#define EISDIR            16
+#define EMFILE            17
+#define EMLINK            18
+#define ENAMETOOLONG      19
+#define ENFILE            20
+#define ENODEV            21
+#define ENOENT            22
+#define ENOEXEC           23
+#define ENOLCK            24
+#define ENOMEM            25
+#define ENOSPC            26
+#define ENOSYS            27
+#define ENOTDIR           28
+#define ENOTEMPTY         29
+#define ENOTTY            30
+#define ENXIO             31
+#define EPERM             32
+#define EPIPE             33
+#define EROFS             34
+#define ESPIPE            35
+#define ESRCH             36
+#define EXDEV             37
+#define ENMFILE           38
+#define EINPROGRESS       40
+#define EALREADY          41
+#define ENOTSOCK          42
+#define EDESTADDRREQ      43
+#define EMSGSIZE          44
+#define EPROTOTYPE        45
+#define ENOPROTOOPT       46
+#define EPROTONOSUPPORT   47
+#define ESOCKTNOSUPPORT   48
+#define EOPNOTSUPP        49
+#define EPFNOSUPPORT      50
+#define EAFNOSUPPORT      51
+#define EADDRINUSE        52
+#define EADDRNOTAVAIL     53
+#define ENETDOWN          54
+#define ENETUNREACH       55
+#define ENETRESET         56
+#define ECONNABORTED      57
+#define ECONNRESET        58
+#define ENOBUFS           59
+#define EISCONN           60
+#define ENOTCONN          61
+#define ESHUTDOWN         62
+#define ETIMEDOUT         63
+#define ECONNREFUSED      64
+#define EHOSTDOWN         65
+#define EHOSTUNREACH      66
+#define ESTALE            67
+#define EREMOTE           68
+#define EBADRPC           69
+#define ERPCMISMATCH      70
+#define EPROGUNAVAIL      71
+#define EPROGMISMATCH     72
+#define EPROCUNAVAIL      73
+#define EILSEQ            74
+#define EINVFNC           75
+#define ENOPATH           76
+#define ECONTR            77
+#define EINVMEM           78
+#define EINVENV           79
+#define EINVFMT           80
+#define EINVACC           81
+#define EINVDAT           82
+#define EDEADLOCK         83
+#define ECURDIR           84
+#define ENOTSAM           85
+#define ETXTBSY           86
+#define ENOTBLK           87
+#define EUCLEAN           88
+#define ETOOMANYREFS      89
+#define ELOOP             90
+#define EPROCLIM          91
+#define EUSERS            92
+#define EDQUOT            93
+#define EVDBAD            94
+#define ENORMTWD          95
+#define EOVERFLOW         96
+
+#endif /* __SYS_WERRNO_ERR */
diff --git a/libs/watt32/sys/errno.h b/libs/watt32/sys/errno.h
new file mode 100644 (file)
index 0000000..cb4f886
--- /dev/null
@@ -0,0 +1,15 @@
+/*!\file sys/errno.h
+ *
+ * Compatibility header.
+ */
+
+/*
+ * The naming <sys/w??.h> is required for those compilers that
+ * have <sys/??.h> in the usual place but doesn't define stuff
+ * related to Watt-32's BSD-socket interface.
+ */
+
+#ifndef __SYS_WERRNO_H
+#include <sys/werrno.h>
+#endif
+
diff --git a/libs/watt32/sys/highc.err b/libs/watt32/sys/highc.err
new file mode 100644 (file)
index 0000000..f3d2d7d
--- /dev/null
@@ -0,0 +1,110 @@
+#ifndef __SYS_WERRNO_ERR
+#define __SYS_WERRNO_ERR
+
+/*
+ * THIS FILE IS GENERATED BY E:\NET\WATT\UTIL\HC_ERR.EXE. DO NOT EDIT.
+ *
+ * Watt-32 errnos are after vendor's errnos (1 - 70)
+ */
+
+#ifndef __HIGHC__
+#error This file is only for use by "__HIGHC__"
+#endif
+
+#define EWOULDBLOCK       35
+#define EDOM              33
+#define ERANGE            34
+#define E2BIG             7
+#define EACCES            13
+#define EAGAIN            11
+#define EBADF             9
+#define EBUSY             16
+#define ECHILD            10
+#define EDEADLK           35
+#define EEXIST            17
+#define EFAULT            14
+#define EFBIG             27
+#define EINTR             4
+#define EINVAL            22
+#define EIO               5
+#define EISDIR            21
+#define EMFILE            24
+#define EMLINK            31
+#define ENAMETOOLONG      63
+#define ENFILE            23
+#define ENODEV            19
+#define ENOENT            2
+#define ENOEXEC           8
+#define ENOLCK            71
+#define ENOMEM            12
+#define ENOSPC            28
+#define ENOSYS            72
+#define ENOTDIR           20
+#define ENOTEMPTY         66
+#define ENOTTY            25
+#define ENXIO             6
+#define EPERM             1
+#define EPIPE             32
+#define EROFS             30
+#define ESPIPE            29
+#define ESRCH             3
+#define EXDEV             18
+#define ENMFILE           73
+#define EINPROGRESS       36
+#define EALREADY          37
+#define ENOTSOCK          38
+#define EDESTADDRREQ      39
+#define EMSGSIZE          40
+#define EPROTOTYPE        41
+#define ENOPROTOOPT       42
+#define EPROTONOSUPPORT   43
+#define ESOCKTNOSUPPORT   44
+#define EOPNOTSUPP        45
+#define EPFNOSUPPORT      46
+#define EAFNOSUPPORT      47
+#define EADDRINUSE        48
+#define EADDRNOTAVAIL     49
+#define ENETDOWN          50
+#define ENETUNREACH       51
+#define ENETRESET         52
+#define ECONNABORTED      53
+#define ECONNRESET        54
+#define ENOBUFS           55
+#define EISCONN           56
+#define ENOTCONN          57
+#define ESHUTDOWN         58
+#define ETIMEDOUT         60
+#define ECONNREFUSED      61
+#define EHOSTDOWN         64
+#define EHOSTUNREACH      65
+#define ESTALE            74
+#define EREMOTE           75
+#define EBADRPC           76
+#define ERPCMISMATCH      77
+#define EPROGUNAVAIL      78
+#define EPROGMISMATCH     79
+#define EPROCUNAVAIL      80
+#define EILSEQ            81
+#define EINVFNC           82
+#define ENOPATH           83
+#define ECONTR            84
+#define EINVMEM           85
+#define EINVENV           86
+#define EINVFMT           87
+#define EINVACC           88
+#define EINVDAT           89
+#define EDEADLOCK         35
+#define ECURDIR           90
+#define ENOTSAM           91
+#define ETXTBSY           26
+#define ENOTBLK           15
+#define EUCLEAN           92
+#define ETOOMANYREFS      59
+#define ELOOP             62
+#define EPROCLIM          67
+#define EUSERS            68
+#define EDQUOT            69
+#define EVDBAD            70
+#define ENORMTWD          93
+
+#endif /* __SYS_WERRNO_ERR */
diff --git a/libs/watt32/sys/ioctl.h b/libs/watt32/sys/ioctl.h
new file mode 100644 (file)
index 0000000..d8f1282
--- /dev/null
@@ -0,0 +1,142 @@
+/*!\file sys/ioctl.h
+ * BSD socket I/O control.
+ */
+
+/*-
+ * Copyright (c) 1982, 1986, 1990 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.
+ *
+ *     @(#)ioctl.h     7.19 (Berkeley) 6/26/91
+ */
+
+#ifndef __SYS_IOCTL_H
+#define __SYS_IOCTL_H
+
+/*
+ * Commands for ioctlsocket(),  taken from the BSD file fcntl.h.
+ *
+ *
+ * Ioctl's have the command encoded in the lower word,
+ * and the size of any in or out parameters in the upper
+ * word.  The high 2 bits of the upper word are used
+ * to encode the in/out status of the parameter; for now
+ * we restrict parameters to at most 128 bytes.
+ */
+
+#define IOCPARM_MASK 0x7f               /* parameters must be < 128 bytes */
+
+#define        IOCPARM_LEN(x)  (((x) >> 16) & IOCPARM_MASK)
+#define        IOCBASECMD(x)   ((x) & ~IOCPARM_MASK)
+#define        IOCGROUP(x)     (((x) >> 8) & 0xff)
+
+#define        IOCPARM_MAX     4096            /* max size of ioctl */
+#define        IOC_VOID        0x20000000      /* no parameters */
+#define        IOC_OUT         0x40000000      /* copy out parameters */
+#define        IOC_IN          0x80000000      /* copy in parameters */
+#define IOC_INOUT       (IOC_IN|IOC_OUT)  /* 0x20000000 distinguishes new &
+                                             old ioctl's */
+#define        IOC_DIRMASK     0xe0000000      /* mask for IN/OUT/VOID */
+
+#define _IO(x,y)    (IOC_VOID|(x<<8)|y)
+#define _IOR(x,y,t) (IOC_OUT|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)
+#define _IOW(x,y,t) (IOC_IN|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)
+/* this should be _IORW, but stdio got there first */
+#define _IOWR(x,y,t) (IOC_INOUT|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)
+
+/* 
+ * file i/o controls
+ */
+#define        FIOCLEX         _IO('f', 1)            /* set close on exec on fd */
+#define        FIONCLEX        _IO('f', 2)            /* remove close on exec */
+#define FIONREAD        _IOR('f', 127, int)    /* get # bytes to read */
+#define FIONBIO         _IOW('f', 126, int)    /* set/clear non-blocking i/o */
+#define FIOASYNC        _IOW('f', 125, int)    /* set/clear async i/o */
+#define FIOSETOWN       _IOW('f', 124, int)    /* set owner (struct Task *) */
+#define FIOGETOWN       _IOR('f', 123, int)    /* get owner (struct Task *) */
+
+/* 
+ * socket i/o controls
+ *
+ * SIOCSPGRP and SIOCGPGRP are identical to the FIOSETOWN and FIOGETOWN,
+ * respectively.
+ */
+#define SIOCSPGRP       _IOW('s',  8, int)    /* set process group */
+#define SIOCGPGRP       _IOR('s',  9, int)    /* get process group */
+
+/* #ifdef BSD */
+#define        SIOCADDRT       _IOW('r', 10, struct ortentry) /* add route */
+#define        SIOCDELRT       _IOW('r', 11, struct ortentry) /* delete route */
+
+#define        SIOCSIFADDR     _IOW('I', 12, struct ifreq)    /* set ifnet address */
+#define        OSIOCGIFADDR    _IOWR('I',13, struct ifreq)    /* get ifnet address */
+#define        SIOCGIFADDR     _IOWR('I',33, struct ifreq)    /* get ifnet address */
+#define        SIOCSIFDSTADDR  _IOW('I', 14, struct ifreq)    /* set p-p address */
+#define        OSIOCGIFDSTADDR _IOWR('I',15, struct ifreq)    /* get p-p address */
+#define        SIOCGIFDSTADDR  _IOWR('I',34, struct ifreq)    /* get p-p address */
+#define        SIOCSIFFLAGS    _IOW('I', 16, struct ifreq)    /* set ifnet flags */
+#define        SIOCGIFFLAGS    _IOWR('I',17, struct ifreq)    /* get ifnet flags */
+#define        OSIOCGIFBRDADDR _IOWR('I',18, struct ifreq)    /* get broadcast addr */
+#define        SIOCGIFBRDADDR  _IOWR('I',35, struct ifreq)    /* get broadcast addr */
+#define        SIOCSIFBRDADDR  _IOW('I',19, struct ifreq)     /* set broadcast addr */
+#define        OSIOCGIFCONF    _IOWR('I',20, struct ifconf)   /* get ifnet list */
+#define SIOCGIFCONF     _IOWR('I',36, struct ifconf)   /* get ifnet list */
+#define        OSIOCGIFNETMASK _IOWR('I',21, struct ifreq)    /* get net addr mask */
+#define        SIOCGIFNETMASK  _IOWR('I',37, struct ifreq)    /* get net addr mask */
+#define        SIOCSIFNETMASK  _IOW('I',22, struct ifreq)     /* set net addr mask */
+#define        SIOCGIFMETRIC   _IOWR('I',23, struct ifreq)    /* get IF metric */
+#define        SIOCSIFMETRIC   _IOW('I',24, struct ifreq)     /* set IF metric */
+#define        SIOCDIFADDR     _IOW('I',25, struct ifreq)     /* delete IF addr */
+#define        SIOCAIFADDR     _IOW('I',26, struct ifaliasreq) /* add/chg IF alias */
+#define SIOCGIFMTU      _IOWR('I',27, struct ifreq)    /* get IF mtu */
+#define SIOCGIFHWADDR   _IOWR('I',28, struct ifconf)   /* get hardware addr */
+#define OSIOCGIFHWADDR  SIOCGIFHWADDR
+
+#define        SIOCSARP        _IOW('I', 30, struct arpreq)   /* set arp entry */
+#define        OSIOCGARP       _IOWR('I',31, struct arpreq)   /* get arp entry */
+#define        SIOCGARP        _IOWR('I',38, struct arpreq)   /* get arp entry */
+#define        SIOCDARP        _IOW('I', 32, struct arpreq)   /* delete arp entry */
+/* #endif */ /* BSD */
+
+/* MS-DOS */
+#define SIOCSHIWAT  _IOW('s',  0, int)    /* set high watermark */
+#define SIOCGHIWAT  _IOR('s',  1, int)    /* get high watermark */
+#define SIOCSLOWAT  _IOW('s',  2, int)    /* set low watermark */
+#define SIOCGLOWAT  _IOR('s',  3, int)    /* get low watermark */
+#define SIOCATMARK  _IOR('s',  7, int)    /* at oob mark? */
+
+/* Since this file shadows the normal djgpp <sys/ioctl.h>, we provide
+ * this prototype here.
+ */
+#if defined(DJGPP)
+  int ioctl (int __fd, int __cmd, ...);
+#endif
+
+#endif /* !SYS_IOCTL_H */
diff --git a/libs/watt32/sys/ladsoft.err b/libs/watt32/sys/ladsoft.err
new file mode 100644 (file)
index 0000000..4a827ef
--- /dev/null
@@ -0,0 +1,113 @@
+#ifndef __SYS_WERRNO_ERR
+#define __SYS_WERRNO_ERR
+
+/*
+ * THIS FILE IS GENERATED BY E:\NET\WATT\UTIL\LS_ERR.EXE. DO NOT EDIT.
+ *
+ * Watt-32 errnos are after vendor's errnos (1 - 50)
+ */
+
+#ifndef __CCDL__
+#error This file is only for use by "__CCDL__"
+#endif
+
+#define ERRNO_VENDOR_VERSION  "2.30"
+
+#define EWOULDBLOCK       51
+#define EDOM              33
+#define ERANGE            34
+#define E2BIG             20
+#define EACCES            5
+#define EAGAIN            42
+#define EBADF             6
+#define EBUSY             44
+#define ECHILD            24
+#define EDEADLK           52
+#define EEXIST            35
+#define EFAULT            14
+#define EFBIG             27
+#define EINTR             39
+#define EINVAL            19
+#define EIO               40
+#define EISDIR            46
+#define EMFILE            4
+#define EMLINK            31
+#define ENAMETOOLONG      48
+#define ENFILE            23
+#define ENODEV            15
+#define ENOENT            2
+#define ENOEXEC           21
+#define ENOLCK            53
+#define ENOMEM            8
+#define ENOSPC            28
+#define ENOSYS            54
+#define ENOTDIR           45
+#define ENOTEMPTY         55
+#define ENOTTY            25
+#define ENXIO             41
+#define EPERM             37
+#define EPIPE             32
+#define EROFS             30
+#define ESPIPE            29
+#define ESRCH             38
+#define EXDEV             22
+#define ENMFILE           18
+#define EINPROGRESS       56
+#define EALREADY          57
+#define ENOTSOCK          58
+#define EDESTADDRREQ      59
+#define EMSGSIZE          60
+#define EPROTOTYPE        61
+#define ENOPROTOOPT       62
+#define EPROTONOSUPPORT   63
+#define ESOCKTNOSUPPORT   64
+#define EOPNOTSUPP        65
+#define EPFNOSUPPORT      66
+#define EAFNOSUPPORT      67
+#define EADDRINUSE        68
+#define EADDRNOTAVAIL     69
+#define ENETDOWN          70
+#define ENETUNREACH       71
+#define ENETRESET         72
+#define ECONNABORTED      73
+#define ECONNRESET        74
+#define ENOBUFS           75
+#define EISCONN           76
+#define ENOTCONN          77
+#define ESHUTDOWN         78
+#define ETIMEDOUT         79
+#define ECONNREFUSED      80
+#define EHOSTDOWN         81
+#define EHOSTUNREACH      82
+#define ESTALE            83
+#define EREMOTE           84
+#define EBADRPC           85
+#define ERPCMISMATCH      86
+#define EPROGUNAVAIL      87
+#define EPROGMISMATCH     88
+#define EPROCUNAVAIL      89
+#define EILSEQ            90
+#define EINVFNC           1
+#define ENOPATH           3
+#define ECONTR            7
+#define EINVMEM           9
+#define EINVENV           10
+#define EINVFMT           11
+#define EINVACC           12
+#define EINVDAT           13
+#define EDEADLOCK         36
+#define ECURDIR           16
+#define ENOTSAM           17
+#define ETXTBSY           26
+#define ENOTBLK           43
+#define EUCLEAN           47
+#define ETOOMANYREFS      91
+#define ELOOP             92
+#define EPROCLIM          93
+#define EUSERS            94
+#define EDQUOT            95
+#define EVDBAD            96
+#define ENORMTWD          97
+#define EOVERFLOW         98
+
+#endif /* __SYS_WERRNO_ERR */
diff --git a/libs/watt32/sys/lcc.err b/libs/watt32/sys/lcc.err
new file mode 100644 (file)
index 0000000..2042477
--- /dev/null
@@ -0,0 +1,111 @@
+#ifndef __SYS_WERRNO_ERR
+#define __SYS_WERRNO_ERR
+
+/*
+ * THIS FILE WAS GENERATED BY ..\util\lcc_err. DO NOT EDIT.
+ *
+ * Watt-32 errnos are after vendor's errnos (1 - 42)
+ */
+
+#ifndef __LCC__
+#error This file is only for use by "__LCC__"
+#endif
+
+#define EWOULDBLOCK       43
+#define EDOM              33
+#define ERANGE            34
+#define E2BIG             7
+#define EACCES            13
+#define EAGAIN            11
+#define EBADF             9
+#define EBUSY             16
+#define ECHILD            10
+#define EDEADLK           45
+#define EEXIST            17
+#define EFAULT            14
+#define EFBIG             27
+#define EINTR             4
+#define EINVAL            22
+#define EIO               5
+#define EISDIR            21
+#define EMFILE            24
+#define EMLINK            31
+#define ENAMETOOLONG      91
+#define ENFILE            23
+#define ENODEV            19
+#define ENOENT            2
+#define ENOEXEC           8
+#define ENOLCK            46
+#define ENOMEM            12
+#define ENOSPC            28
+#define ENOSYS            88
+#define ENOTDIR           20
+#define ENOTEMPTY         90
+#define ENOTTY            25
+#define ENXIO             6
+#define EPERM             1
+#define EPIPE             32
+#define EROFS             30
+#define ESPIPE            29
+#define ESRCH             3
+#define EXDEV             18
+#define ENMFILE           89
+#define EINPROGRESS       44
+#define EALREADY          45
+#define ENOTSOCK          46
+#define EDESTADDRREQ      47
+#define EMSGSIZE          48
+#define EPROTOTYPE        49
+#define ENOPROTOOPT       50
+#define EPROTONOSUPPORT   51
+#define ESOCKTNOSUPPORT   52
+#define EOPNOTSUPP        53
+#define EPFNOSUPPORT      54
+#define EAFNOSUPPORT      55
+#define EADDRINUSE        56
+#define EADDRNOTAVAIL     57
+#define ENETDOWN          58
+#define ENETUNREACH       59
+#define ENETRESET         60
+#define ECONNABORTED      61
+#define ECONNRESET        62
+#define ENOBUFS           63
+#define EISCONN           64
+#define ENOTCONN          65
+#define ESHUTDOWN         66
+#define ETIMEDOUT         67
+#define ECONNREFUSED      68
+#define EHOSTDOWN         69
+#define EHOSTUNREACH      70
+#define ESTALE            71
+#define EREMOTE           66
+#define EBADRPC           72
+#define ERPCMISMATCH      73
+#define EPROGUNAVAIL      74
+#define EPROGMISMATCH     75
+#define EPROCUNAVAIL      76
+#define EILSEQ            77
+#define EINVFNC           78
+#define ENOPATH           79
+#define ECONTR            80
+#define EINVMEM           81
+#define EINVENV           82
+#define EINVFMT           83
+#define EINVACC           84
+#define EINVDAT           85
+#define EDEADLOCK         56
+#define ECURDIR           86
+#define ENOTSAM           87
+#define ETXTBSY           26
+#define ENOTBLK           15
+#define EUCLEAN           88
+#define ETOOMANYREFS      89
+#define ELOOP             90
+#define EPROCLIM          91
+#define EUSERS            92
+#define EDQUOT            93
+#define EVDBAD            94
+#define ENORMTWD          95
+#define EOVERFLOW         96
+
+#endif /* __SYS_WERRNO_ERR */
diff --git a/libs/watt32/sys/mingw32.err b/libs/watt32/sys/mingw32.err
new file mode 100644 (file)
index 0000000..a397d54
--- /dev/null
@@ -0,0 +1,113 @@
+#ifndef __SYS_WERRNO_ERR
+#define __SYS_WERRNO_ERR
+
+/*
+ * THIS FILE WAS GENERATED BY ..\util\mw_err. DO NOT EDIT.
+ *
+ * Watt-32 errnos are after vendor's errnos (1 - 42)
+ */
+
+#ifndef __MINGW32__
+#error This file is only for use by "__MINGW32__"
+#endif
+
+#define ERRNO_VENDOR_VERSION  "3.7"
+
+#define EWOULDBLOCK       43
+#define EDOM              33
+#define ERANGE            34
+#define E2BIG             7
+#define EACCES            13
+#define EAGAIN            11
+#define EBADF             9
+#define EBUSY             16
+#define ECHILD            10
+#define EDEADLK           36
+#define EEXIST            17
+#define EFAULT            14
+#define EFBIG             27
+#define EINTR             4
+#define EINVAL            22
+#define EIO               5
+#define EISDIR            21
+#define EMFILE            24
+#define EMLINK            31
+#define ENAMETOOLONG      38
+#define ENFILE            23
+#define ENODEV            19
+#define ENOENT            2
+#define ENOEXEC           8
+#define ENOLCK            39
+#define ENOMEM            12
+#define ENOSPC            28
+#define ENOSYS            40
+#define ENOTDIR           20
+#define ENOTEMPTY         41
+#define ENOTTY            25
+#define ENXIO             6
+#define EPERM             1
+#define EPIPE             32
+#define EROFS             30
+#define ESPIPE            29
+#define ESRCH             3
+#define EXDEV             18
+#define ENMFILE           44
+#define EINPROGRESS       45
+#define EALREADY          46
+#define ENOTSOCK          47
+#define EDESTADDRREQ      48
+#define EMSGSIZE          49
+#define EPROTOTYPE        50
+#define ENOPROTOOPT       51
+#define EPROTONOSUPPORT   52
+#define ESOCKTNOSUPPORT   53
+#define EOPNOTSUPP        54
+#define EPFNOSUPPORT      55
+#define EAFNOSUPPORT      56
+#define EADDRINUSE        57
+#define EADDRNOTAVAIL     58
+#define ENETDOWN          59
+#define ENETUNREACH       60
+#define ENETRESET         61
+#define ECONNABORTED      62
+#define ECONNRESET        63
+#define ENOBUFS           64
+#define EISCONN           65
+#define ENOTCONN          66
+#define ESHUTDOWN         67
+#define ETIMEDOUT         68
+#define ECONNREFUSED      69
+#define EHOSTDOWN         70
+#define EHOSTUNREACH      71
+#define ESTALE            72
+#define EREMOTE           73
+#define EBADRPC           74
+#define ERPCMISMATCH      75
+#define EPROGUNAVAIL      76
+#define EPROGMISMATCH     77
+#define EPROCUNAVAIL      78
+#define EILSEQ            42
+#define EINVFNC           79
+#define ENOPATH           80
+#define ECONTR            81
+#define EINVMEM           82
+#define EINVENV           83
+#define EINVFMT           84
+#define EINVACC           85
+#define EINVDAT           86
+#define EDEADLOCK         36
+#define ECURDIR           87
+#define ENOTSAM           88
+#define ETXTBSY           89
+#define ENOTBLK           90
+#define EUCLEAN           91
+#define ETOOMANYREFS      92
+#define ELOOP             93
+#define EPROCLIM          94
+#define EUSERS            95
+#define EDQUOT            96
+#define EVDBAD            97
+#define ENORMTWD          98
+#define EOVERFLOW         99
+
+#endif /* __SYS_WERRNO_ERR */
diff --git a/libs/watt32/sys/packoff.h b/libs/watt32/sys/packoff.h
new file mode 100644 (file)
index 0000000..b40d1b1
--- /dev/null
@@ -0,0 +1,70 @@
+/*!\file sys/packoff.h
+ *
+ * Default packing of structures.
+ */
+
+/*++
+
+Copyright (c) 1990,91  Microsoft Corporation
+
+Module Name:
+
+    packoff.h
+
+Abstract:
+
+    This file turns packing of structures off.  (That is, it enables
+    automatic alignment of structure fields.)  An include file is needed
+    because various compilers do this in different ways.
+
+    packoff.h is the complement to packon.h.  An inclusion of packoff.h
+    MUST ALWAYS be preceded by an inclusion of packon.h, in one-to-one
+    correspondence.
+
+Author:
+
+    Chuck Lenzmeier (chuckl) 4-Mar-1990
+
+Revision History:
+
+    15-Apr-1991 JohnRo
+        Created lint-able variant.
+
+    20-Oct-1997 G.Vanem
+        Added Metaware support
+
+    05-Jul-1999 G.Vanem
+        Added LADsoft support
+
+    01-Nov-2000 G. Vanem
+        Added Visual C/C++ support
+
+--*/
+
+#if defined(__BORLANDC__) && (__BORLANDC__ >= 0x550)
+  #pragma option push -b -a8 -pc -A- /*P_O_Push*/
+#endif
+
+#if !(defined(lint) || defined(_lint))
+  #if defined(_MSC_VER) && (_MSC_VER >= 800)
+    #pragma warning(disable:4103)
+  #endif
+
+  #if defined(__CCDL__)
+    #pragma pack()
+  #elif defined(__HIGHC__)
+    #pragma pop_align_members();
+  #elif defined(__WATCOMC__) && (__WATCOMC__ >= 1000)
+    #pragma pack(__pop);
+  #elif (defined(_MSC_VER) && (_MSC_VER > 800)) || \
+        (defined(__BORLANDC__) && (__BORLANDC__ >= 0x500)) || \
+         defined(__POCC__) || defined(__LCC__)
+    #pragma pack(pop)
+  #else
+    #pragma pack()
+  #endif
+#endif
+
+#if defined(__BORLANDC__) && (__BORLANDC__ >= 0x550)
+  #pragma option pop  /*P_O_Pop*/
+#endif
diff --git a/libs/watt32/sys/packon.h b/libs/watt32/sys/packon.h
new file mode 100644 (file)
index 0000000..1c0250f
--- /dev/null
@@ -0,0 +1,66 @@
+/*!\file sys/packon.h
+ *
+ * Sets structure packing to 1 byte.
+ */
+
+/*++
+
+Copyright (c) 1990,91  Microsoft Corporation
+
+Module Name:
+
+    packon.h
+
+Abstract:
+
+    This file turns packing of structures on.  (That is, it disables
+    automatic alignment of structure fields.)  An include file is needed
+    because various compilers do this in different ways.
+
+    The file packoff.h is the complement to this file.
+
+Author:
+
+    Chuck Lenzmeier (chuckl) 4-Mar-1990
+
+Revision History:
+
+    15-Apr-1991 JohnRo
+        Created lint-able variant.
+
+    20-Oct-1997 G.Vanem
+        Added Metaware support
+
+    05-Jul-1999 G.Vanem
+        Added LADsoft support
+
+    01-Nov-2000 G. Vanem
+        Added Visual C/C++ support
+
+--*/
+
+#if defined(__BORLANDC__) && (__BORLANDC__ >= 0x550)
+  #pragma option push -b -a8 -pc -A- /*P_O_Push*/
+#endif
+
+#if !(defined(lint) || defined(_lint))
+  #if defined(_MSC_VER) && (_MSC_VER >= 800)
+    #pragma warning(disable:4103)
+  #endif
+
+  #if defined(__HIGHC__)
+    #pragma push_align_members(1);
+  #elif defined(__WATCOMC__) && (__WATCOMC__ >= 1000)
+    #pragma pack(__push,1);
+  #elif (defined(_MSC_VER) && (_MSC_VER > 800)) || \
+        (defined(__BORLANDC__) && (__BORLANDC__ >= 0x500)) || \
+         defined(__POCC__) || defined(__LCC__)
+    #pragma pack(push,1)
+  #else
+    #pragma pack(1)
+  #endif
+#endif
+
+#if defined(__BORLANDC__) && (__BORLANDC__ >= 0x550)
+  #pragma option pop  /*P_O_Pop*/
+#endif
diff --git a/libs/watt32/sys/param.h b/libs/watt32/sys/param.h
new file mode 100644 (file)
index 0000000..094c922
--- /dev/null
@@ -0,0 +1,35 @@
+/*!\file sys/param.h
+ *
+ * Miscellaneous defines.
+ */
+
+/* sys/param.h (wattcp) */
+
+#ifndef __SYS_PARAM_H
+#define __SYS_PARAM_H
+
+#ifndef PAGE_SIZE
+#define PAGE_SIZE      0x1000
+#endif
+
+#ifndef HZ
+#define HZ             100
+#endif
+
+#ifndef MAXNAMLEN
+#define MAXNAMLEN      260
+#endif
+
+#ifndef MAXPATHLEN
+#define MAXPATHLEN     260
+#endif
+
+#ifndef MAXHOSTNAMELEN
+#define MAXHOSTNAMELEN 256
+#endif
+
+#ifndef __SYS_SWAP_BYTES_H
+#include <sys/swap.h>
+#endif
+
+#endif
diff --git a/libs/watt32/sys/pellesc.err b/libs/watt32/sys/pellesc.err
new file mode 100644 (file)
index 0000000..9132c76
--- /dev/null
@@ -0,0 +1,113 @@
+#ifndef __SYS_WERRNO_ERR
+#define __SYS_WERRNO_ERR
+
+/*
+ * THIS FILE WAS GENERATED BY ..\util\po_err. DO NOT EDIT.
+ *
+ * Watt-32 errnos are after vendor's errnos (1 - 41)
+ */
+
+#ifndef __POCC__
+#error This file is only for use by "__POCC__"
+#endif
+
+#define ERRNO_VENDOR_VERSION  "4.0"
+
+#define EWOULDBLOCK       42
+#define EDOM              33
+#define ERANGE            34
+#define E2BIG             43
+#define EACCES            13
+#define EAGAIN            11
+#define EBADF             9
+#define EBUSY             44
+#define ECHILD            10
+#define EDEADLK           36
+#define EEXIST            17
+#define EFAULT            45
+#define EFBIG             46
+#define EINTR             47
+#define EINVAL            22
+#define EIO               48
+#define EISDIR            49
+#define EMFILE            24
+#define EMLINK            50
+#define ENAMETOOLONG      51
+#define ENFILE            52
+#define ENODEV            53
+#define ENOENT            2
+#define ENOEXEC           8
+#define ENOLCK            54
+#define ENOMEM            12
+#define ENOSPC            28
+#define ENOSYS            55
+#define ENOTDIR           56
+#define ENOTEMPTY         57
+#define ENOTTY            58
+#define ENXIO             59
+#define EPERM             60
+#define EPIPE             32
+#define EROFS             61
+#define ESPIPE            62
+#define ESRCH             63
+#define EXDEV             18
+#define ENMFILE           64
+#define EINPROGRESS       65
+#define EALREADY          66
+#define ENOTSOCK          67
+#define EDESTADDRREQ      68
+#define EMSGSIZE          69
+#define EPROTOTYPE        70
+#define ENOPROTOOPT       71
+#define EPROTONOSUPPORT   72
+#define ESOCKTNOSUPPORT   73
+#define EOPNOTSUPP        74
+#define EPFNOSUPPORT      75
+#define EAFNOSUPPORT      76
+#define EADDRINUSE        77
+#define EADDRNOTAVAIL     78
+#define ENETDOWN          79
+#define ENETUNREACH       80
+#define ENETRESET         81
+#define ECONNABORTED      82
+#define ECONNRESET        83
+#define ENOBUFS           84
+#define EISCONN           85
+#define ENOTCONN          86
+#define ESHUTDOWN         87
+#define ETIMEDOUT         88
+#define ECONNREFUSED      89
+#define EHOSTDOWN         90
+#define EHOSTUNREACH      91
+#define ESTALE            92
+#define EREMOTE           93
+#define EBADRPC           94
+#define ERPCMISMATCH      95
+#define EPROGUNAVAIL      96
+#define EPROGMISMATCH     97
+#define EPROCUNAVAIL      98
+#define EILSEQ            42
+#define EINVFNC           99
+#define ENOPATH           100
+#define ECONTR            101
+#define EINVMEM           102
+#define EINVENV           103
+#define EINVFMT           104
+#define EINVACC           105
+#define EINVDAT           106
+#define EDEADLOCK         107
+#define ECURDIR           108
+#define ENOTSAM           109
+#define ETXTBSY           110
+#define ENOTBLK           111
+#define EUCLEAN           112
+#define ETOOMANYREFS      113
+#define ELOOP             114
+#define EPROCLIM          115
+#define EUSERS            116
+#define EDQUOT            117
+#define EVDBAD            118
+#define ENORMTWD          119
+#define EOVERFLOW         120
+
+#endif /* __SYS_WERRNO_ERR */
diff --git a/libs/watt32/sys/poll.h b/libs/watt32/sys/poll.h
new file mode 100644 (file)
index 0000000..2b00580
--- /dev/null
@@ -0,0 +1,22 @@
+/*!\file sys/poll.h
+ *
+ */
+#ifndef __SYS_POLL_H
+#define __SYS_POLL_H
+
+#define POLLIN   0x0001
+#define POLLPRI  0x0002   /* not used */
+#define POLLOUT  0x0004
+#define POLLERR  0x0008
+#define POLLHUP  0x0010   /* not used */
+#define POLLNVAL 0x0020   /* not used */
+
+struct pollfd {
+       int fd;
+       int events;     /* in param: what to poll for */
+       int revents;    /* out param: what events occured */
+     };
+
+extern int poll (struct pollfd *p, int num, int timeout);
+
+#endif
diff --git a/libs/watt32/sys/queue.h b/libs/watt32/sys/queue.h
new file mode 100644 (file)
index 0000000..f0926ba
--- /dev/null
@@ -0,0 +1,263 @@
+/*!\file sys/queue.h
+ *
+ */
+
+/* 
+ * 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.
+ *
+ *     @(#)queue.h     8.5 (Berkeley) 8/20/94
+ */
+
+#ifndef __SYS_QUEUE_H
+#define __SYS_QUEUE_H
+
+/*
+ * This file defines three types of data structures: lists, tail queues,
+ * and circular queues.
+ *
+ * A list is headed by a single forward pointer (or an array of forward
+ * pointers for a hash table header). The elements are doubly linked
+ * so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before
+ * or after an existing element or at the head of the list. A list
+ * may only be traversed in the forward direction.
+ *
+ * A tail queue is headed by a pair of pointers, one to the head of the
+ * list and the other to the tail of the list. The elements are doubly
+ * linked so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before or
+ * after an existing element, at the head of the list, or at the end of
+ * the list. A tail queue may only be traversed in the forward direction.
+ *
+ * A circle queue is headed by a pair of pointers, one to the head of the
+ * list and the other to the tail of the list. The elements are doubly
+ * linked so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before or after
+ * an existing element, at the head of the list, or at the end of the list.
+ * A circle queue may be traversed in either direction, but has a more
+ * complex end of list detection.
+ *
+ * For details on the use of these macros, see the queue(3) manual page.
+ */
+
+/*
+ * List definitions.
+ */
+#define LIST_HEAD(name, type)                                          \
+struct name {                                                          \
+       struct type *lh_first;  /* first element */                     \
+}
+
+#define LIST_ENTRY(type)                                               \
+struct {                                                               \
+       struct type *le_next;   /* next element */                      \
+       struct type **le_prev;  /* address of previous next element */  \
+}
+
+/*
+ * List functions.
+ */
+#define        LIST_INIT(head) {                                               \
+       (head)->lh_first = NULL;                                        \
+}
+
+#define LIST_INSERT_AFTER(listelm, elm, field) {                       \
+       if (((elm)->field.le_next = (listelm)->field.le_next) != NULL)  \
+               (listelm)->field.le_next->field.le_prev =               \
+                   &(elm)->field.le_next;                              \
+       (listelm)->field.le_next = (elm);                               \
+       (elm)->field.le_prev = &(listelm)->field.le_next;               \
+}
+
+#define        LIST_INSERT_BEFORE(listelm, elm, field) {                       \
+       (elm)->field.le_prev = (listelm)->field.le_prev;                \
+       (elm)->field.le_next = (listelm);                               \
+       *(listelm)->field.le_prev = (elm);                              \
+       (listelm)->field.le_prev = &(elm)->field.le_next;               \
+}
+
+#define LIST_INSERT_HEAD(head, elm, field) {                           \
+       if (((elm)->field.le_next = (head)->lh_first) != NULL)          \
+               (head)->lh_first->field.le_prev = &(elm)->field.le_next;\
+       (head)->lh_first = (elm);                                       \
+       (elm)->field.le_prev = &(head)->lh_first;                       \
+}
+
+#define LIST_REMOVE(elm, field) {                                      \
+       if ((elm)->field.le_next != NULL)                               \
+               (elm)->field.le_next->field.le_prev =                   \
+                   (elm)->field.le_prev;                               \
+       *(elm)->field.le_prev = (elm)->field.le_next;                   \
+}
+
+/*
+ * Tail queue definitions.
+ */
+#define TAILQ_HEAD(name, type)                                         \
+struct name {                                                          \
+       struct type *tqh_first; /* first element */                     \
+       struct type **tqh_last; /* addr of last next element */         \
+}
+
+#define TAILQ_ENTRY(type)                                              \
+struct {                                                               \
+       struct type *tqe_next;  /* next element */                      \
+       struct type **tqe_prev; /* address of previous next element */  \
+}
+
+/*
+ * Tail queue functions.
+ */
+#define        TAILQ_INIT(head) {                                              \
+       (head)->tqh_first = NULL;                                       \
+       (head)->tqh_last = &(head)->tqh_first;                          \
+}
+
+#define TAILQ_INSERT_HEAD(head, elm, field) {                          \
+       if (((elm)->field.tqe_next = (head)->tqh_first) != NULL)        \
+               (head)->tqh_first->field.tqe_prev =                     \
+                   &(elm)->field.tqe_next;                             \
+       else                                                            \
+               (head)->tqh_last = &(elm)->field.tqe_next;              \
+       (head)->tqh_first = (elm);                                      \
+       (elm)->field.tqe_prev = &(head)->tqh_first;                     \
+}
+
+#define TAILQ_INSERT_TAIL(head, elm, field) {                          \
+       (elm)->field.tqe_next = NULL;                                   \
+       (elm)->field.tqe_prev = (head)->tqh_last;                       \
+       *(head)->tqh_last = (elm);                                      \
+       (head)->tqh_last = &(elm)->field.tqe_next;                      \
+}
+
+#define TAILQ_INSERT_AFTER(head, listelm, elm, field) {                        \
+       if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\
+               (elm)->field.tqe_next->field.tqe_prev =                 \
+                   &(elm)->field.tqe_next;                             \
+       else                                                            \
+               (head)->tqh_last = &(elm)->field.tqe_next;              \
+       (listelm)->field.tqe_next = (elm);                              \
+       (elm)->field.tqe_prev = &(listelm)->field.tqe_next;             \
+}
+
+#define        TAILQ_INSERT_BEFORE(listelm, elm, field) {                      \
+       (elm)->field.tqe_prev = (listelm)->field.tqe_prev;              \
+       (elm)->field.tqe_next = (listelm);                              \
+       *(listelm)->field.tqe_prev = (elm);                             \
+       (listelm)->field.tqe_prev = &(elm)->field.tqe_next;             \
+}
+
+#define TAILQ_REMOVE(head, elm, field) {                               \
+       if (((elm)->field.tqe_next) != NULL)                            \
+               (elm)->field.tqe_next->field.tqe_prev =                 \
+                   (elm)->field.tqe_prev;                              \
+       else                                                            \
+               (head)->tqh_last = (elm)->field.tqe_prev;               \
+       *(elm)->field.tqe_prev = (elm)->field.tqe_next;                 \
+}
+
+/*
+ * Circular queue definitions.
+ */
+#define CIRCLEQ_HEAD(name, type)                                       \
+struct name {                                                          \
+       struct type *cqh_first;         /* first element */             \
+       struct type *cqh_last;          /* last element */              \
+}
+
+#define CIRCLEQ_ENTRY(type)                                            \
+struct {                                                               \
+       struct type *cqe_next;          /* next element */              \
+       struct type *cqe_prev;          /* previous element */          \
+}
+
+/*
+ * Circular queue functions.
+ */
+#define        CIRCLEQ_INIT(head) {                                            \
+       (head)->cqh_first = (void *)(head);                             \
+       (head)->cqh_last = (void *)(head);                              \
+}
+
+#define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) {              \
+       (elm)->field.cqe_next = (listelm)->field.cqe_next;              \
+       (elm)->field.cqe_prev = (listelm);                              \
+       if ((listelm)->field.cqe_next == (void *)(head))                \
+               (head)->cqh_last = (elm);                               \
+       else                                                            \
+               (listelm)->field.cqe_next->field.cqe_prev = (elm);      \
+       (listelm)->field.cqe_next = (elm);                              \
+}
+
+#define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) {             \
+       (elm)->field.cqe_next = (listelm);                              \
+       (elm)->field.cqe_prev = (listelm)->field.cqe_prev;              \
+       if ((listelm)->field.cqe_prev == (void *)(head))                \
+               (head)->cqh_first = (elm);                              \
+       else                                                            \
+               (listelm)->field.cqe_prev->field.cqe_next = (elm);      \
+       (listelm)->field.cqe_prev = (elm);                              \
+}
+
+#define CIRCLEQ_INSERT_HEAD(head, elm, field) {                                \
+       (elm)->field.cqe_next = (head)->cqh_first;                      \
+       (elm)->field.cqe_prev = (void *)(head);                         \
+       if ((head)->cqh_last == (void *)(head))                         \
+               (head)->cqh_last = (elm);                               \
+       else                                                            \
+               (head)->cqh_first->field.cqe_prev = (elm);              \
+       (head)->cqh_first = (elm);                                      \
+}
+
+#define CIRCLEQ_INSERT_TAIL(head, elm, field) {                                \
+       (elm)->field.cqe_next = (void *)(head);                         \
+       (elm)->field.cqe_prev = (head)->cqh_last;                       \
+       if ((head)->cqh_first == (void *)(head))                        \
+               (head)->cqh_first = (elm);                              \
+       else                                                            \
+               (head)->cqh_last->field.cqe_next = (elm);               \
+       (head)->cqh_last = (elm);                                       \
+}
+
+#define        CIRCLEQ_REMOVE(head, elm, field) {                              \
+       if ((elm)->field.cqe_next == (void *)(head))                    \
+               (head)->cqh_last = (elm)->field.cqe_prev;               \
+       else                                                            \
+               (elm)->field.cqe_next->field.cqe_prev =                 \
+                   (elm)->field.cqe_prev;                              \
+       if ((elm)->field.cqe_prev == (void *)(head))                    \
+               (head)->cqh_first = (elm)->field.cqe_next;              \
+       else                                                            \
+               (elm)->field.cqe_prev->field.cqe_next =                 \
+                   (elm)->field.cqe_next;                              \
+}
+#endif
diff --git a/libs/watt32/sys/quickc.err b/libs/watt32/sys/quickc.err
new file mode 100644 (file)
index 0000000..81cbe0f
--- /dev/null
@@ -0,0 +1,110 @@
+#ifndef __SYS_WERRNO_ERR
+#define __SYS_WERRNO_ERR
+
+/*
+ * THIS FILE IS GENERATED BY E:\NET\WATT\UTIL\MS_ERR.EXE. DO NOT EDIT.
+ *
+ * Watt-32 errnos are after vendor's errnos (1 - 36)
+ */
+
+#ifndef _MSC_VER
+#error This file is only for use by "_MSC_VER"
+#endif
+
+#define EWOULDBLOCK       37
+#define EDOM              33
+#define ERANGE            34
+#define E2BIG             7
+#define EACCES            13
+#define EAGAIN            11
+#define EBADF             9
+#define EBUSY             16
+#define ECHILD            10
+#define EDEADLK           38
+#define EEXIST            17
+#define EFAULT            14
+#define EFBIG             27
+#define EINTR             4
+#define EINVAL            22
+#define EIO               5
+#define EISDIR            21
+#define EMFILE            24
+#define EMLINK            31
+#define ENAMETOOLONG      39
+#define ENFILE            23
+#define ENODEV            19
+#define ENOENT            2
+#define ENOEXEC           8
+#define ENOLCK            40
+#define ENOMEM            12
+#define ENOSPC            28
+#define ENOSYS            41
+#define ENOTDIR           20
+#define ENOTEMPTY         42
+#define ENOTTY            25
+#define ENXIO             6
+#define EPERM             1
+#define EPIPE             32
+#define EROFS             30
+#define ESPIPE            29
+#define ESRCH             3
+#define EXDEV             18
+#define ENMFILE           43
+#define EINPROGRESS       44
+#define EALREADY          45
+#define ENOTSOCK          46
+#define EDESTADDRREQ      47
+#define EMSGSIZE          48
+#define EPROTOTYPE        49
+#define ENOPROTOOPT       50
+#define EPROTONOSUPPORT   51
+#define ESOCKTNOSUPPORT   52
+#define EOPNOTSUPP        53
+#define EPFNOSUPPORT      54
+#define EAFNOSUPPORT      55
+#define EADDRINUSE        56
+#define EADDRNOTAVAIL     57
+#define ENETDOWN          58
+#define ENETUNREACH       59
+#define ENETRESET         60
+#define ECONNABORTED      61
+#define ECONNRESET        62
+#define ENOBUFS           63
+#define EISCONN           64
+#define ENOTCONN          65
+#define ESHUTDOWN         66
+#define ETIMEDOUT         67
+#define ECONNREFUSED      68
+#define EHOSTDOWN         69
+#define EHOSTUNREACH      70
+#define ESTALE            71
+#define EREMOTE           72
+#define EBADRPC           73
+#define ERPCMISMATCH      74
+#define EPROGUNAVAIL      75
+#define EPROGMISMATCH     76
+#define EPROCUNAVAIL      77
+#define EILSEQ            78
+#define EINVFNC           79
+#define ENOPATH           80
+#define ECONTR            81
+#define EINVMEM           82
+#define EINVENV           83
+#define EINVFMT           84
+#define EINVACC           85
+#define EINVDAT           86
+#define EDEADLOCK         36
+#define ECURDIR           87
+#define ENOTSAM           88
+#define ETXTBSY           26
+#define ENOTBLK           15
+#define EUCLEAN           35
+#define ETOOMANYREFS      89
+#define ELOOP             90
+#define EPROCLIM          91
+#define EUSERS            92
+#define EDQUOT            93
+#define EVDBAD            94
+#define ENORMTWD          95
+
+#endif /* __SYS_WERRNO_ERR */
diff --git a/libs/watt32/sys/select.h b/libs/watt32/sys/select.h
new file mode 100644 (file)
index 0000000..cf2e250
--- /dev/null
@@ -0,0 +1,6 @@
+/*!\file sys/select.h
+ *
+ * Compatibility header.
+ */
+
+#include <tcp.h>   /* select_s() */
diff --git a/libs/watt32/sys/so_ioctl.h b/libs/watt32/sys/so_ioctl.h
new file mode 100644 (file)
index 0000000..f9d747a
--- /dev/null
@@ -0,0 +1,98 @@
+/*!\file sys/so_ioctl.h
+ *
+ * BSD socket I/O control.
+ */
+
+/* so_ioctl.h derived from BSD's ioctl.h by hv and em 1994
+ *
+ * Copyright (c) 1982, 1986, 1990 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.
+ *
+ *     from: @(#)ioctl.h       7.19 (Berkeley) 6/26/91
+ */
+
+#ifndef __SYS_SO_IOCTL_H
+#define __SYS_SO_IOCTL_H
+
+#undef _IOC
+#undef _IOW
+#undef _IOR
+#undef _IOWR
+
+#define _IOC(a,b) ((a<<8)|b)
+#define _IOW(a,b,c) _IOC(a,b)
+#define _IOR(a,b,c) _IOC(a,b)
+#define _IOWR(a,b,c) _IOC(a,b)
+
+#define _TCPIP_FIONREAD _IOC('f', 127)
+#define FIONBIO         _IOC('f', 126)
+#define FIOASYNC        _IOC('f', 125)
+#define FIOTCPCKSUM     _IOC('f', 128)
+#define FIONSTATUS      _IOC('f', 120)
+#define FIONURG         _IOC('f', 121)
+
+/* socket i/o controls */
+#define SIOCSHIWAT      _IOW('s',  0, int)     /* set high watermark */
+#define SIOCGHIWAT      _IOR('s',  1, int)     /* get high watermark */
+#define SIOCSLOWAT      _IOW('s',  2, int)     /* set low watermark */
+#define SIOCGLOWAT      _IOR('s',  3, int)     /* get low watermark */
+#define SIOCATMARK      _IOR('s',  7, int)     /* at oob mark? */
+#define SIOCSPGRP       _IOW('s',  8, int)     /* set process group */
+#define SIOCGPGRP       _IOR('s',  9, int)     /* get process group */
+
+#define SIOCADDRT       _IOW('r', 10, struct ortentry) /* add route */
+#define SIOCDELRT       _IOW('r', 11, struct ortentry) /* delete route */
+
+#define SIOCSIFADDR     _IOW('i', 12, struct ifreq)    /* set ifnet address */
+#define SIOCGIFADDR     _IOWR('i',13, struct ifreg)    /* get ifnet addres */
+#define OSIOCGIFADDR   SIOCGIFADDR
+#define SIOCSIFDSTADDR  _IOW('i', 14, struct ifreq)    /* set p-p address */
+#define SIOCGIFDSTADDR  _IOWR('i',15, struct ifreq)    /* get p-p address */
+#define OSIOCGIFDSTADDR        SIOCGIFDSTADDR
+#define SIOCSIFFLAGS    _IOW('i', 16, struct ifreq)    /* set ifnet flags */
+#define SIOCGIFFLAGS    _IOWR('i',17, struct ifreq)    /* get ifnet flags */
+#define SIOCGIFBRDADDR  _IOWR('i',18, struct ifreq)    /* get broadcast addr */
+#define OSIOCGIFBRDADDR        SIOCGIFBRDADDR
+#define SIOCSIFBRDADDR  _IOW('i', 19, struct ifreq)    /* set broadcast addr */
+#define SIOCGIFCONF     _IOWR('i',20, struct ifreq)    /* get ifnet list */
+#define OSIOCGIFCONF   SIOCGIFCONF
+#define SIOCGIFNETMASK  _IOWR('i',21, struct ifreq)    /* get net addr mask */
+#define OSIOCGIFNETMASK        SIOCGIFNETMASK
+#define SIOCSIFNETMASK  _IOW('i', 22, struct ifreq)    /* set net addr mask */
+#define SIOCGIFMETRIC   _IOWR('i',23, struct ifreq)    /* get if metric */
+#define SIOCSIFMETRIC   _IOW('i', 24, struct ifreq)    /* set if metric */
+
+#define SIOCSARP        _IOW('i', 30, struct arpreq)   /* set arp entry */
+#define SIOCGARP        _IOWR('i',31, struct arpreq)   /* get arp entry */
+#define OSIOCGARP      SIOCGARP
+#define SIOCDARP        _IOW('i', 32, struct arpreq)   /* delete arp entry */
+
+#endif
diff --git a/libs/watt32/sys/socket.h b/libs/watt32/sys/socket.h
new file mode 100644 (file)
index 0000000..1dcd204
--- /dev/null
@@ -0,0 +1,305 @@
+/*!\file sys/socket.h
+ *
+ * BSD socket API.
+ */
+
+/* Modified for emx by hv and em 1994-1995
+ *
+ * Copyright (c) 1982,1985,1986,1988 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.
+ *
+ *      from: @(#)socket.h      7.13 (Berkeley) 4/20/91
+ *      $Id: socket.h,v 1.5 1993/06/27 05:59:06 andrew Exp $
+ */
+
+#ifndef __SYS_SOCKET_H
+#define __SYS_SOCKET_H
+
+#ifndef __SYS_W32API_H
+#include <sys/w32api.h>
+#endif
+
+#ifndef __SYS_WERRNO_H
+#include <sys/werrno.h>
+#endif
+
+#ifndef __SYS_CDEFS_H
+#include <sys/cdefs.h>
+#endif
+
+#ifndef __SYS_WTYPES_H
+#include <sys/wtypes.h>
+#endif
+
+#ifndef __SYS_WTIME_H
+#include <sys/wtime.h>
+#endif
+
+#ifndef __NETINET_IN_H
+#include <netinet/in.h>
+#endif
+
+/*
+ * Definitions related to sockets: types, address families, options.
+ */
+
+/*
+ * This is used instead of -1, since the socket type is signed.
+ */
+#define INVALID_SOCKET  (int)(~0)
+#define SOCKET_ERROR    (-1)
+
+/*
+ * Types
+ */
+#define SOCK_STREAM     1               /* stream socket */
+#define SOCK_DGRAM      2               /* datagram socket */
+#define SOCK_RAW        3               /* raw-protocol interface */
+#define SOCK_RDM        4               /* reliably-delivered message */
+#define SOCK_SEQPACKET  5               /* sequenced packet stream */
+#define SOCK_PACKET     10              /* linux specific way of        */
+                                        /* getting packets at the dev   */
+                                        /* level.  For writing rarp and */
+                                        /* other similar things on the  */
+                                        /* user level.                  */
+
+/*
+ * Option flags per-socket.
+ */
+#define SO_DEBUG        0x0001          /* turn on debugging info recording */
+#define SO_ACCEPTCONN   0x0002          /* socket has had listen() */
+#define SO_REUSEADDR    0x0004          /* allow local address reuse */
+#define SO_KEEPALIVE    0x0008          /* keep connections alive */
+#define SO_DONTROUTE    0x0010          /* just use interface addresses */
+#define SO_BROADCAST    0x0020          /* permit sending of broadcast msgs */
+#define SO_USELOOPBACK  0x0040          /* bypass hardware when possible */
+#define SO_LINGER       0x0080          /* linger on close if data present */
+#define SO_OOBINLINE    0x0100          /* leave received OOB data in line */
+
+#define SO_DONTLINGER   (int)(~SO_LINGER)
+
+/*
+ * Additional options, not kept in so_options.
+ */
+#define SO_SNDBUF       0x1001          /* send buffer size */
+#define SO_RCVBUF       0x1002          /* receive buffer size */
+#define SO_SNDLOWAT     0x1003          /* send low-water mark */
+#define SO_RCVLOWAT     0x1004          /* receive low-water mark */
+#define SO_SNDTIMEO     0x1005          /* send timeout */
+#define SO_RCVTIMEO     0x1006          /* receive timeout */
+#define SO_ERROR        0x1007          /* get error status and clear */
+#define SO_TYPE         0x1008          /* get socket type */
+
+
+#include <sys/packon.h>
+
+/*
+ * Structure used for manipulating linger option.
+ */
+struct linger {
+       int l_onoff;                /* option on/off */
+       int l_linger;               /* linger time */
+     };
+
+/*
+ * Level number for (get/set)sockopt() to apply to socket itself.
+ */
+#define SOL_SOCKET      0xffff          /* options for socket level */
+
+/*
+ * Address families.
+ */
+#define AF_UNSPEC       0               /* unspecified */
+#define AF_UNIX         1               /* local to host (pipes, portals) */
+#define AF_INET         2               /* internetwork: UDP, TCP, etc. */
+#define AF_IMPLINK      3               /* arpanet imp addresses */
+#define AF_PUP          4               /* pup protocols: e.g. BSP */
+#define AF_CHAOS        5               /* mit CHAOS protocols */
+#define AF_NS           6               /* XEROX NS protocols */
+#define AF_ISO          7               /* ISO protocols */
+#define AF_OSI          AF_ISO
+#define AF_ECMA         8               /* european computer manufacturers */
+#define AF_DATAKIT      9               /* datakit protocols */
+#define AF_CCITT        10              /* CCITT protocols, X.25 etc */
+#define AF_SNA          11              /* IBM SNA */
+#define AF_DECnet       12              /* DECnet */
+#define AF_DLI          13              /* DEC Direct data link interface */
+#define AF_LAT          14              /* LAT */
+#define AF_HYLINK       15              /* NSC Hyperchannel */
+#define AF_APPLETALK    16              /* Apple Talk */
+#define AF_ROUTE        17              /* Internal Routing Protocol */
+#define AF_LINK         18              /* Link layer interface */
+#define pseudo_AF_XTP   19              /* eXpress Transfer Protocol (no AF) */
+#define AF_INET6        24              /* IPv6 address family */
+#define AF_PACKET       25              /* raw packets */
+#define AF_MAX          26
+
+/*
+ * Structure used by kernel to store most
+ * addresses.
+ * is called struct osockaddr in 4.4BSD
+ */
+struct sockaddr {
+       u_short sa_family;              /* address family */
+       char    sa_data[14];            /* up to 14 bytes of direct address */
+     };
+
+/*
+ * Structure used by kernel to pass protocol
+ * information in raw sockets.
+ */
+struct sockproto {
+       u_short sp_family;              /* address family */
+       u_short sp_protocol;            /* protocol */
+     };
+
+/*
+ * Protocol families, same as address families for now.
+ */
+#define PF_UNSPEC       AF_UNSPEC
+#define PF_UNIX         AF_UNIX
+#define PF_INET         AF_INET
+#define PF_INET6        AF_INET6
+#define PF_IMPLINK      AF_IMPLINK
+#define PF_PUP          AF_PUP
+#define PF_CHAOS        AF_CHAOS
+#define PF_NS           AF_NS
+#define PF_ISO          AF_ISO
+#define PF_OSI          AF_ISO
+#define PF_ECMA         AF_ECMA
+#define PF_DATAKIT      AF_DATAKIT
+#define PF_CCITT        AF_CCITT
+#define PF_SNA          AF_SNA
+#define PF_DECnet       AF_DECnet
+#define PF_DLI          AF_DLI
+#define PF_LAT          AF_LAT
+#define PF_HYLINK       AF_HYLINK
+#define PF_APPLETALK    AF_APPLETALK
+#define PF_ROUTE        AF_ROUTE
+#define PF_LINK         AF_LINK
+#define PF_PACKET       AF_PACKET
+#define PF_XTP          pseudo_AF_XTP   /* really just proto family, no AF */
+
+#define PF_MAX          AF_MAX
+
+/*
+ * Maximum queue length specifiable by listen.
+ */
+#define SOMAXCONN       32
+#define MSG_OOB         0x1             /* process out-of-band data */
+#define MSG_PEEK        0x2             /* peek at incoming message */
+#define MSG_DONTROUTE   0x4             /* send without using routing tables */
+#define MSG_EOR         0x8             /* data completes record */
+#define MSG_TRUNC       0x10            /* data discarded before delivery */
+#define MSG_CTRUNC      0x20            /* control data lost before delivery */
+#define MSG_WAITALL     0x40            /* wait for full request or error */
+
+#define MSG_MAXIOVLEN   16
+
+
+/*
+ * Header for ancillary data objects in msg_control buffer.
+ * Used for additional information with/about a datagram
+ * not expressible by flags.  The format is a sequence
+ * of message elements headed by cmsghdr structures.
+ */
+struct cmsghdr {
+       u_int   cmsg_len;               /* data byte count, including hdr */
+       int     cmsg_level;             /* originating protocol */
+       int     cmsg_type;              /* protocol-specific type */
+       /* followed by  u_char  cmsg_data[]; */
+     };
+
+struct msghdr {
+       char         *msg_name;         /* Contains an optional address. */
+       int           msg_namelen;      /* len of optional address */
+       struct iovec *msg_iov;          /* scatter/gather array. */
+       int           msg_iovlen;       /* number of elements in msg_iov */
+       char         *msg_accrights;    /* does not apply to IP - not changed */
+       int           msg_accrightslen; /* does not apply to IP */
+     };
+
+/* CMSG_DATA clashes with <wincrypt.h>
+ */
+#if (defined(WIN32) || defined(_WIN32)) && \
+    !defined(_WINDOWS_H) && !defined(_INC_WINDOWS) && !defined(__windows_h__)
+  #error Include <windows.h> before this point.
+#endif
+
+/* given pointer to struct adatahdr, return pointer to data */
+#undef  CMSG_DATA
+#define CMSG_DATA(cmsg)         ((u_char *)((cmsg) + 1))
+
+/* given pointer to struct adatahdr, return pointer to next adatahdr */
+#define CMSG_NXTHDR(mhdr, cmsg) \
+        (((caddr_t)(cmsg) + (cmsg)->cmsg_len + sizeof(struct cmsghdr) > \
+            (mhdr)->msg_control + (mhdr)->msg_controllen) ? \
+            (struct cmsghdr *)NULL : \
+            (struct cmsghdr *)((caddr_t)(cmsg) + ALIGN((cmsg)->cmsg_len)))
+
+#define CMSG_FIRSTHDR(mhdr)     ((struct cmsghdr *)(mhdr)->msg_control)
+
+/* "Socket"-level control message types: */
+#define SCM_RIGHTS      0x01            /* access rights (array of int) */
+
+#include <sys/packoff.h>
+
+__BEGIN_DECLS
+
+W32_FUNC int    W32_CALL accept (int, struct sockaddr *, int *);
+W32_FUNC int    W32_CALL bind (int, const struct sockaddr *, int);
+W32_FUNC int    W32_CALL closesocket (int s);
+W32_FUNC int    W32_CALL connect (int, const struct sockaddr *, int);
+W32_FUNC int    W32_CALL ioctlsocket (int s, long cmd, char *argp);
+W32_FUNC int    MS_CDECL fcntlsocket (int s, int cmd, ...);
+
+W32_FUNC int    W32_CALL getdomainname (char *name, int len);
+W32_FUNC int    W32_CALL setdomainname (const char *name, int len);
+W32_FUNC int    W32_CALL gethostname (char *name, int len);
+W32_FUNC int    W32_CALL sethostname (const char *name, int len);
+
+W32_FUNC u_long W32_CALL gethostid (void);
+W32_FUNC u_long W32_CALL sethostid (u_long ip);
+W32_FUNC int    W32_CALL getpeername (int, struct sockaddr *, int *);
+W32_FUNC int    W32_CALL getsockname (int, struct sockaddr *, int *);
+W32_FUNC int    W32_CALL getsockopt (int, int, int, void *, int *);
+W32_FUNC int    W32_CALL listen (int, int);
+W32_FUNC int    W32_CALL recv (int, void *, int, int);
+W32_FUNC int    W32_CALL recvfrom (int, void *, int, int, struct sockaddr *, int *);
+W32_FUNC int    W32_CALL send (int, const void *, int, int);
+W32_FUNC int    W32_CALL sendto (int, const void *, int, int, const struct sockaddr *, int);
+W32_FUNC int    W32_CALL setsockopt (int, int, int, const void *, int);
+W32_FUNC int    W32_CALL shutdown (int, int);
+W32_FUNC int    W32_CALL socket (int, int, int);
+
+__END_DECLS
+
+#endif
diff --git a/libs/watt32/sys/swap.h b/libs/watt32/sys/swap.h
new file mode 100644 (file)
index 0000000..a73582f
--- /dev/null
@@ -0,0 +1,229 @@
+/*!\file sys/swap.h
+ * Swapping of short/long values.
+ */
+
+#ifndef __SYS_SWAP_BYTES_H
+#define __SYS_SWAP_BYTES_H
+
+#ifndef __SYS_W32API_H
+#include <sys/w32api.h>
+#endif
+
+#ifndef __SYS_CDEFS_H
+#include <sys/cdefs.h>
+#endif
+
+#ifndef __NETINET_IN_H
+#include <netinet/in.h>
+#endif
+
+#if defined(__dj_include_netinet_in_h_)
+#error "You are using the wrong version of <netinet/in.h>. Ref. point 10 of the INSTALL file"
+#endif
+
+
+__BEGIN_DECLS
+
+#if defined(WIN32) || defined(_WIN32) /* provide some real versions too */
+  W32_FUNC unsigned short W32_CALL ntohs (unsigned short);
+  W32_FUNC unsigned short W32_CALL htons (unsigned short);
+  W32_FUNC unsigned long  W32_CALL ntohl (unsigned long);
+  W32_FUNC unsigned long  W32_CALL htonl (unsigned long);
+  W32_FUNC unsigned long  cdecl   _w32_intel   (unsigned long x);
+  W32_FUNC unsigned short cdecl   _w32_intel16 (unsigned short x);
+#endif
+
+#undef  ntohs
+#undef  htons
+#undef  ntohl
+#undef  htonl
+#define ntohs(x)  intel16(x)
+#define htons(x)  intel16(x)
+#define ntohl(x)  intel(x)
+#define htonl(x)  intel(x)
+
+
+/*
+ * Hard to believe, but someone uses Watt-32 on a
+ * Motorola/PowerPC embedded target.
+ */
+#if defined(BIG_ENDIAN_MACHINE) || defined(USE_BIGENDIAN)
+  #define intel(x)    x
+  #define intel16(x)  x
+
+#elif defined(__GNUC__) && !defined(__NO_INLINE__)  /* -O0 */
+  #define intel(x)   __ntohl(x)
+  #define intel16(x) __ntohs(x)
+
+  /*
+   * Ripped (and adapted) from <linux/include/asm-386/byteorder.h>
+   */
+  /*@unused@*/ extern __inline__ unsigned long __ntohl (unsigned long x)
+  {
+    __asm__ __volatile (
+             "xchgb %b0, %h0\n\t"   /* swap lower bytes  */
+             "rorl  $16, %0\n\t"    /* swap words        */
+             "xchgb %b0, %h0"       /* swap higher bytes */
+            : "=q" (x) : "0" (x));
+    return (x);
+  }
+
+  /*@unused@*/ extern __inline__ unsigned short __ntohs (unsigned short x)
+  {
+    __asm__ __volatile__ (
+              "xchgb %b0, %h0"       /* swap bytes */
+            : "=q" (x) : "0" (x));
+    return (x);
+  }
+
+#elif defined(__POCC__)             /* PellesC */
+  #define intel(x)   __ntohl(x)
+  #define intel16(x) __ntohs(x)
+
+  __declspec(naked) inline unsigned long __fastcall __ntohl (unsigned long x)
+  {
+    __asm xchg cl, ch    /* 'x' is in ecx */
+    __asm ror  ecx, 16
+    __asm xchg cl, ch
+    __asm mov  eax, ecx
+    __asm ret
+  }
+
+  __declspec(naked) inline unsigned short __fastcall __ntohs (unsigned short x)
+  {
+    __asm xchg  cl, ch    /* 'x' is in ecx */
+    __asm movzx eax, cx
+    __asm ret
+  }
+
+#elif (defined(_MSC_VER) && (_MSC_VER >= 1200)) &&  /* MSVC 6+ */ \
+      !defined(__POCC__)           /* "pocc -Ze" sets _MSC_VER */
+  #define intel(x)   __ntohl(x)
+  #define intel16(x) __ntohs(x)
+
+  __declspec(naked) static unsigned long __ntohl (unsigned long x)
+  {
+    __asm mov  eax, [esp+4]
+    __asm xchg al, ah
+    __asm ror  eax, 16
+    __asm xchg al, ah
+    __asm ret
+  }
+
+  __declspec(naked) static unsigned short __ntohs (unsigned short x)
+  {
+    __asm mov  ax, [esp+4]
+    __asm xchg al, ah
+    __asm ret
+  }
+
+#elif defined(__WATCOMC__) && defined(__FLAT__)  /* Watcom 32-bit */
+  #define intel(x)   __ntohl(x)
+  #define intel16(x) __ntohs(x)
+
+  extern unsigned long __ntohl (unsigned long x);
+  #pragma aux  __ntohl =     \
+              "xchg al, ah"  \
+              "ror  eax, 16" \
+              "xchg al, ah"  \
+              parm   [eax]   \
+              modify [eax];
+
+  extern unsigned short __ntohs (unsigned short x);
+  #pragma aux __ntohs =     \
+              "xchg al, ah" \
+              parm   [ax]   \
+              modify [ax];
+
+#elif defined(__WATCOMC__) && !defined(__FLAT__)  /* Watcom 16-bit */
+  #define intel(x)   __ntohl(x)
+  #define intel16(x) __ntohs(x)
+
+  extern unsigned long __ntohl (unsigned long x);
+  #pragma aux  __ntohl =     \
+              "xchg al, dh"  \
+              "xchg ah, dl"  \
+              parm   [dx ax] \
+              modify [dx ax];
+
+  extern unsigned short __ntohs (unsigned short x);
+  #pragma aux __ntohs =     \
+              "xchg al, ah" \
+              parm   [ax]   \
+              modify [ax];
+
+#elif (defined(__BORLANDC__) && defined(__FLAT__)) || /* bcc32 */ \
+      (defined(__DMC__) && (__INTSIZE==4))            /* dmc -mx */
+  #include <dos.h>
+
+  #define intel(x)    __ntohl(x)
+  #define intel16(x)  __ntohs(x)
+
+  #define __ntohs(x)  (_AX = x, \
+                       __emit__(0x86,0xC4),      /* xchg al, ah */ \
+                       _AX)
+
+  #define __ntohl(x)  (_EAX = x, \
+                       __emit__(0x86,0xC4),      /* xchg al, ah  */ \
+                       __emit__(0xC1,0xC8,0x10), /* ror  eax, 16 */ \
+                       __emit__(0x86,0xC4),      /* xchg al, ah  */ \
+                       _EAX)
+
+#elif defined(__CCDL__) && defined(__386__)      /* LadSoft 386 */
+  #define intel(x)    __ntohl(x)
+  #define intel16(x)  __ntohs(x)
+
+  static unsigned long __ntohl (unsigned long x)
+  {
+    asm { mov  eax, [x]
+          xchg al, ah
+          ror  eax, 16
+          xchg al, ah
+        }
+    return (_EAX);
+  }
+  static unsigned short __ntohs (unsigned short x)
+  {
+    asm { mov  ax, [x]
+          xchg al, ah
+        }
+    return (unsigned short)_EAX;  /* doesn't have _AX */
+  }
+
+  /* This crashes mysteriously if we use _bswap()
+   */
+#elif defined(__LCC__) && 0              /* LCC-Win32 */
+  #define intel(x)    __ntohl(x)
+  #define intel16(x)  __ntohs(x)
+  #if 0
+    #include <intrinsics.h>
+    #define W32_LCC_INTRINSICS_INCLUDED  /* header guard is missing */
+    #define __ntohl(x)   (unsigned long) _bswap(x)
+    #define __ntohs(x)  ((unsigned short) (_bswap(x) >> 16))
+  #else
+    unsigned long inline __declspec(naked) __ntohl (unsigned long x)
+    {
+      _asm ("movl (%esp), %eax");
+      _asm ("xchg %ah, %al");
+      _asm ("rorl $16, %eax");
+      _asm ("xchg %ah, %al");
+    }
+    unsigned short inline __declspec(naked) __ntohs (unsigned short x)
+    {
+      _asm ("movs (%esp), %ax");
+      _asm ("xchg %ah, %al");
+    }
+  #endif
+
+#else  /* no inlining possible (or worth the effort) */
+  #define intel   W32_NAMESPACE (intel)
+  #define intel16 W32_NAMESPACE (intel16)
+  #define WATT_NO_INLINE_INTEL
+
+  W32_FUNC unsigned long  cdecl intel   (unsigned long x);
+  W32_FUNC unsigned short cdecl intel16 (unsigned short x);
+#endif
+
+__END_DECLS
+
+#endif /* __SYS_SWAP_BYTES_H */
diff --git a/libs/watt32/sys/syslog.h b/libs/watt32/sys/syslog.h
new file mode 100644 (file)
index 0000000..f082151
--- /dev/null
@@ -0,0 +1,160 @@
+/*!\file sys/syslog.h
+ * syslog() facility.
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 1988, 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.
+ *
+ *     @(#)syslog.h    8.1 (Berkeley) 6/2/93
+ * $Id: syslog.h,v 1.15 1997/10/06 20:37:01 joerg Exp $
+ */
+
+#ifndef __SYS_SYSLOG_H
+#define __SYS_SYSLOG_H
+
+#ifndef _PATH_LOG
+#define        _PATH_LOG       "/var/run/log"
+#endif
+
+#ifndef _PATH_OLDLOG
+#define _PATH_OLDLOG    "/dev/log"      /* backward compatibility */
+#endif
+
+/*
+ * priorities/facilities are encoded into a single 32-bit quantity, where the
+ * bottom 3 bits are the priority (0-7) and the top 28 bits are the facility
+ * (0-big number).  Both the priorities and the facilities map roughly
+ * one-to-one to strings in the syslogd(8) source code.  This mapping is
+ * included in this file.
+ *
+ * priorities (these are ordered)
+ */
+#define        LOG_EMERG       0       /* system is unusable */
+#define        LOG_ALERT       1       /* action must be taken immediately */
+#define        LOG_CRIT        2       /* critical conditions */
+#define        LOG_ERR         3       /* error conditions */
+#define        LOG_WARNING     4       /* warning conditions */
+#define        LOG_NOTICE      5       /* normal but significant condition */
+#define        LOG_INFO        6       /* informational */
+#define        LOG_DEBUG       7       /* debug-level messages */
+
+#define        LOG_PRIMASK     0x07    /* mask to extract priority part (internal) */
+                               /* extract priority */
+#define        LOG_PRI(p)      ((p) & LOG_PRIMASK)
+#define        LOG_MAKEPRI(fac, pri)   ((fac) | (pri))
+
+#define INTERNAL_NOPRI  0x10    /* the "no priority" priority */
+                               /* mark "facility" */
+#define        INTERNAL_MARK   LOG_MAKEPRI((LOG_NFACILITIES<<3), 0)
+
+typedef struct _code {
+        unsigned long c_val;
+        const char   *c_name;
+      } CODE;
+
+extern CODE prioritynames[13];
+
+/* facility codes */
+#define        LOG_KERN        (0<<3)  /* kernel messages */
+#define        LOG_USER        (1<<3)  /* random user-level messages */
+#define        LOG_MAIL        (2<<3)  /* mail system */
+#define        LOG_DAEMON      (3<<3)  /* system daemons */
+#define        LOG_AUTH        (4<<3)  /* security/authorization messages */
+#define        LOG_SYSLOG      (5<<3)  /* messages generated internally by syslogd */
+#define        LOG_LPR         (6<<3)  /* line printer subsystem */
+#define        LOG_NEWS        (7<<3)  /* network news subsystem */
+#define        LOG_UUCP        (8<<3)  /* UUCP subsystem */
+#define        LOG_CRON        (9<<3)  /* clock daemon */
+#define        LOG_AUTHPRIV    (10<<3) /* security/authorization messages (private) */
+                               /* Facility #10 clashes in DEC UNIX, where */
+                               /* it's defined as LOG_MEGASAFE for AdvFS  */
+                               /* event logging.                          */
+#define        LOG_FTP         (11<<3) /* ftp daemon */
+#define        LOG_NTP         (12<<3) /* NTP subsystem */
+
+       /* other codes through 15 reserved for system use */
+#define        LOG_LOCAL0      (16<<3) /* reserved for local use */
+#define        LOG_LOCAL1      (17<<3) /* reserved for local use */
+#define        LOG_LOCAL2      (18<<3) /* reserved for local use */
+#define        LOG_LOCAL3      (19<<3) /* reserved for local use */
+#define        LOG_LOCAL4      (20<<3) /* reserved for local use */
+#define        LOG_LOCAL5      (21<<3) /* reserved for local use */
+#define        LOG_LOCAL6      (22<<3) /* reserved for local use */
+#define        LOG_LOCAL7      (23<<3) /* reserved for local use */
+
+#define        LOG_NFACILITIES 24      /* current number of facilities */
+#define        LOG_FACMASK     0x03f8  /* mask to extract facility part */
+                               /* facility of pri */
+#define        LOG_FAC(p)      (((p) & LOG_FACMASK) >> 3)
+
+extern CODE facilitynames[24];
+
+/*
+ * arguments to setlogmask.
+ */
+#define        LOG_MASK(pri)   (1 << (pri))            /* mask for one priority */
+#define        LOG_UPTO(pri)   ((1 << ((pri)+1)) - 1)  /* all priorities through pri */
+
+/*
+ * Option flags for openlog.
+ *
+ * LOG_ODELAY no longer does anything.
+ * LOG_NDELAY is the inverse of what it used to be.
+ */
+#define        LOG_PID         0x01    /* log the pid with each message */
+#define        LOG_CONS        0x02    /* log on the console if errors in sending */
+#define        LOG_ODELAY      0x04    /* delay open until first syslog() (default) */
+#define        LOG_NDELAY      0x08    /* don't delay open */
+#define        LOG_NOWAIT      0x10    /* don't wait for console forks: DEPRECATED */
+#define        LOG_PERROR      0x20    /* log to stderr as well */
+
+#include <stdarg.h>
+
+#ifndef __SYS_W32API_H
+#include <sys/w32api.h>
+#endif
+
+#ifndef __SYS_CDEFS_H
+#include <sys/cdefs.h>
+#endif
+
+__BEGIN_DECLS
+
+W32_FUNC void  closelog   (void);
+W32_FUNC void  openlog    (const char *, int, int);
+W32_FUNC int   setlogmask (int);
+W32_FUNC void  syslog     (int, const char *, ...);
+W32_FUNC void  vsyslog    (int, const char *, va_list);
+
+__END_DECLS
+
+#endif
diff --git a/libs/watt32/sys/turboc.err b/libs/watt32/sys/turboc.err
new file mode 100644 (file)
index 0000000..28c3b3b
--- /dev/null
@@ -0,0 +1,64 @@
+#ifndef __SYS_WERRNO_ERR
+#define __SYS_WERRNO_ERR
+
+/*
+ * THIS FILE IS GENERATED BY E:\NET\WATT\UTIL\TCC_ERR.EXE. DO NOT EDIT.
+ *
+ * Watt-32 errnos are after vendor's errnos (1 - 35)
+ */
+
+#ifndef __TURBOC__
+#error This file is only for use by "__TURBOC__"
+#endif
+
+#define EWOULDBLOCK       36
+#define EDEADLK           40
+#define ENAMETOOLONG      47
+#define ENOLCK            49
+#define ENOSYS            51
+#define ENOTEMPTY         53
+#define EINPROGRESS       61
+#define EALREADY          62
+#define ENOTSOCK          63
+#define EDESTADDRREQ      64
+#define EMSGSIZE          65
+#define EPROTOTYPE        66
+#define ENOPROTOOPT       67
+#define EPROTONOSUPPORT   68
+#define ESOCKTNOSUPPORT   69
+#define EOPNOTSUPP        70
+#define EPFNOSUPPORT      71
+#define EAFNOSUPPORT      72
+#define EADDRINUSE        73
+#define EADDRNOTAVAIL     74
+#define ENETDOWN          75
+#define ENETUNREACH       76
+#define ENETRESET         77
+#define ECONNABORTED      78
+#define ECONNRESET        79
+#define ENOBUFS           80
+#define EISCONN           81
+#define ENOTCONN          82
+#define ESHUTDOWN         83
+#define ETIMEDOUT         84
+#define ECONNREFUSED      85
+#define EHOSTDOWN         86
+#define EHOSTUNREACH      87
+#define ESTALE            88
+#define EREMOTE           89
+#define EBADRPC           90
+#define ERPCMISMATCH      91
+#define EPROGUNAVAIL      92
+#define EPROGMISMATCH     93
+#define EPROCUNAVAIL      94
+#define EILSEQ            95
+#define EDEADLOCK         96
+#define ETOOMANYREFS      100
+#define ELOOP             101
+#define EPROCLIM          102
+#define EUSERS            103
+#define EDQUOT            104
+#define EVDBAD            105
+#define ENORMTWD          106
+
+#endif /* __SYS_WERRNO_ERR */
diff --git a/libs/watt32/sys/uio.h b/libs/watt32/sys/uio.h
new file mode 100644 (file)
index 0000000..4cd107d
--- /dev/null
@@ -0,0 +1,11 @@
+/*!\file sys/uio.h
+ * Dummy header.
+ */
+
+#ifndef __SYS_UIO_H
+#define __SYS_UIO_H
+
+/* This dummy header is required while building e.g. tcpdump
+ */
+
+#endif
diff --git a/libs/watt32/sys/visualc.err b/libs/watt32/sys/visualc.err
new file mode 100644 (file)
index 0000000..548725a
--- /dev/null
@@ -0,0 +1,113 @@
+#ifndef __SYS_WERRNO_ERR
+#define __SYS_WERRNO_ERR
+
+/*
+ * THIS FILE WAS GENERATED BY ..\util\vc_err. DO NOT EDIT.
+ *
+ * Watt-32 errnos are after vendor's errnos (1 - 42)
+ */
+
+#ifndef _MSC_VER
+#error This file is only for use by "_MSC_VER"
+#endif
+
+#define ERRNO_VENDOR_VERSION  "12.0"
+
+#define EWOULDBLOCK       43
+#define EDOM              33
+#define ERANGE            34
+#define E2BIG             7
+#define EACCES            13
+#define EAGAIN            11
+#define EBADF             9
+#define EBUSY             16
+#define ECHILD            10
+#define EDEADLK           36
+#define EEXIST            17
+#define EFAULT            14
+#define EFBIG             27
+#define EINTR             4
+#define EINVAL            22
+#define EIO               5
+#define EISDIR            21
+#define EMFILE            24
+#define EMLINK            31
+#define ENAMETOOLONG      38
+#define ENFILE            23
+#define ENODEV            19
+#define ENOENT            2
+#define ENOEXEC           8
+#define ENOLCK            39
+#define ENOMEM            12
+#define ENOSPC            28
+#define ENOSYS            40
+#define ENOTDIR           20
+#define ENOTEMPTY         41
+#define ENOTTY            25
+#define ENXIO             6
+#define EPERM             1
+#define EPIPE             32
+#define EROFS             30
+#define ESPIPE            29
+#define ESRCH             3
+#define EXDEV             18
+#define ENMFILE           44
+#define EINPROGRESS       45
+#define EALREADY          46
+#define ENOTSOCK          47
+#define EDESTADDRREQ      48
+#define EMSGSIZE          49
+#define EPROTOTYPE        50
+#define ENOPROTOOPT       51
+#define EPROTONOSUPPORT   52
+#define ESOCKTNOSUPPORT   53
+#define EOPNOTSUPP        54
+#define EPFNOSUPPORT      55
+#define EAFNOSUPPORT      56
+#define EADDRINUSE        57
+#define EADDRNOTAVAIL     58
+#define ENETDOWN          59
+#define ENETUNREACH       60
+#define ENETRESET         61
+#define ECONNABORTED      62
+#define ECONNRESET        63
+#define ENOBUFS           64
+#define EISCONN           65
+#define ENOTCONN          66
+#define ESHUTDOWN         67
+#define ETIMEDOUT         68
+#define ECONNREFUSED      69
+#define EHOSTDOWN         70
+#define EHOSTUNREACH      71
+#define ESTALE            72
+#define EREMOTE           73
+#define EBADRPC           74
+#define ERPCMISMATCH      75
+#define EPROGUNAVAIL      76
+#define EPROGMISMATCH     77
+#define EPROCUNAVAIL      78
+#define EILSEQ            42
+#define EINVFNC           79
+#define ENOPATH           80
+#define ECONTR            81
+#define EINVMEM           82
+#define EINVENV           83
+#define EINVFMT           84
+#define EINVACC           85
+#define EINVDAT           86
+#define EDEADLOCK         36
+#define ECURDIR           87
+#define ENOTSAM           88
+#define ETXTBSY           89
+#define ENOTBLK           90
+#define EUCLEAN           91
+#define ETOOMANYREFS      92
+#define ELOOP             93
+#define EPROCLIM          94
+#define EUSERS            95
+#define EDQUOT            96
+#define EVDBAD            97
+#define ENORMTWD          98
+#define EOVERFLOW         99
+
+#endif /* __SYS_WERRNO_ERR */
diff --git a/libs/watt32/sys/w32api.h b/libs/watt32/sys/w32api.h
new file mode 100644 (file)
index 0000000..3770f7e
--- /dev/null
@@ -0,0 +1,71 @@
+/*!\file sys/w32api.h
+ *
+ * Watt-32 API decoration for Win32 targets.
+ */
+#ifndef __SYS_W32API_H
+#define __SYS_W32API_H
+
+#if !defined(_WATT32_FAKE_WINSOCK_H) && (defined(_WINSOCK_H) || defined(_WINSOCKAPI_))
+  #error Never include the real <winsock.h> in Watt-32 programs.
+  #error Change your include-path so the fake <winsock.h> gets included first.
+#endif
+
+#if !defined(_WATT32_FAKE_WINSOCK2_H) && (defined(_WINSOCK2_H) || defined(_WINSOCK2API_))
+  #error Never include the real <winsock2.h> in Watt-32 programs.
+  #error Change your include-path so the fake <winsock2.h> gets included first.
+#endif
+
+#if !defined(_WATT32_FAKE_WS2TCPIP_H) && defined(_WS2TCPIP_H)
+  #error Never include the real <ws2tcpip.h> in Watt-32 programs.
+  #error Change your include-path so the fake <ws2tcpip.h> gets included first.
+#endif
+
+#if defined(WIN32) || defined(_WIN32)
+  /* Don't include the real <winsock*.h> */
+  #define _WINSOCKAPI_
+  #define _WINSOCK2API_
+  #define _WINSOCK_H
+  #define _WINSOCK2_H
+  #ifndef WIN32_LEAN_AND_MEAN
+  #define WIN32_LEAN_AND_MEAN
+  #endif
+  #include <windows.h>
+#endif
+
+/*
+ * For non-Win32 targets the .\util\mkimp program (a small C-preprocessor)
+ * is meant to search all headers for W32_FUNC/W32_DATA prefixes. All
+ * functions with a W32_FUNC prefix will produce an export stub function.
+ * See dj_dxe.mak. Very experimental at the moment.
+ *
+ * Note: only a small subset of the Winsock extensions are implemented in
+ *       watt-32.dll (hardly any WSA*() functions yet).
+ */
+#if (defined(WIN32) || defined(_WIN32)) && !defined(WATT32_STATIC)
+  #if defined(WATT32_BUILD)
+    #define W32_FUNC  extern __declspec(dllexport)
+    #define W32_DATA  extern __declspec(dllexport)
+  #else
+    #define W32_FUNC  extern __declspec(dllimport)
+    #define W32_DATA  extern __declspec(dllimport)
+  #endif
+#else
+  #define W32_FUNC  extern
+  #define W32_DATA  extern
+#endif
+
+/*
+ * W32_CALL is *not* defined to `stdcall' due to a bug in MingW's
+ * linker. This bug prevents a MingW generated WATT-32.DLL from
+ * being used by e.g. a MSVC program.
+ * Ref. http://sources.redhat.com/bugzilla/show_bug.cgi?id=351
+ * (last paragraph)
+ */
+#if (defined(WIN32) || defined(_WIN32)) && 0
+  #define W32_CALL  __stdcall /* maybe __fastcall instead for MSVC? */
+#else
+  #define W32_CALL
+#endif
+
+#endif
+
diff --git a/libs/watt32/sys/watcom.err b/libs/watt32/sys/watcom.err
new file mode 100644 (file)
index 0000000..8d7ffa7
--- /dev/null
@@ -0,0 +1,113 @@
+#ifndef __SYS_WERRNO_ERR
+#define __SYS_WERRNO_ERR
+
+/*
+ * THIS FILE WAS GENERATED BY C:\NET\WATT\SRC\..\util\WC_ERR.EXE. DO NOT EDIT.
+ *
+ * Watt-32 errnos are after vendor's errnos (1 - 41)
+ */
+
+#ifndef __WATCOMC__
+#error This file is only for use by "__WATCOMC__"
+#endif
+
+#define ERRNO_VENDOR_VERSION  "12.40"
+
+#define EWOULDBLOCK       42
+#define EDOM              13
+#define ERANGE            14
+#define E2BIG             2
+#define EACCES            6
+#define EAGAIN            18
+#define EBADF             4
+#define EBUSY             19
+#define ECHILD            17
+#define EDEADLK           15
+#define EEXIST            7
+#define EFAULT            34
+#define EFBIG             20
+#define EINTR             16
+#define EINVAL            9
+#define EIO               21
+#define EISDIR            22
+#define EMFILE            11
+#define EMLINK            24
+#define ENAMETOOLONG      35
+#define ENFILE            10
+#define ENODEV            36
+#define ENOENT            1
+#define ENOEXEC           3
+#define ENOLCK            37
+#define ENOMEM            5
+#define ENOSPC            12
+#define ENOSYS            38
+#define ENOTDIR           23
+#define ENOTEMPTY         39
+#define ENOTTY            26
+#define ENXIO             27
+#define EPERM             28
+#define EPIPE             29
+#define EROFS             30
+#define ESPIPE            31
+#define ESRCH             32
+#define EXDEV             8
+#define ENMFILE           43
+#define EINPROGRESS       44
+#define EALREADY          45
+#define ENOTSOCK          46
+#define EDESTADDRREQ      47
+#define EMSGSIZE          48
+#define EPROTOTYPE        49
+#define ENOPROTOOPT       50
+#define EPROTONOSUPPORT   51
+#define ESOCKTNOSUPPORT   52
+#define EOPNOTSUPP        53
+#define EPFNOSUPPORT      54
+#define EAFNOSUPPORT      55
+#define EADDRINUSE        56
+#define EADDRNOTAVAIL     57
+#define ENETDOWN          58
+#define ENETUNREACH       59
+#define ENETRESET         60
+#define ECONNABORTED      61
+#define ECONNRESET        62
+#define ENOBUFS           63
+#define EISCONN           64
+#define ENOTCONN          65
+#define ESHUTDOWN         66
+#define ETIMEDOUT         67
+#define ECONNREFUSED      68
+#define EHOSTDOWN         69
+#define EHOSTUNREACH      70
+#define ESTALE            71
+#define EREMOTE           72
+#define EBADRPC           73
+#define ERPCMISMATCH      74
+#define EPROGUNAVAIL      75
+#define EPROGMISMATCH     76
+#define EPROCUNAVAIL      77
+#define EILSEQ            40
+#define EINVFNC           78
+#define ENOPATH           79
+#define ECONTR            80
+#define EINVMEM           81
+#define EINVENV           82
+#define EINVFMT           83
+#define EINVACC           84
+#define EINVDAT           85
+#define EDEADLOCK         15
+#define ECURDIR           86
+#define ENOTSAM           87
+#define ETXTBSY           33
+#define ENOTBLK           25
+#define EUCLEAN           88
+#define ETOOMANYREFS      89
+#define ELOOP             90
+#define EPROCLIM          91
+#define EUSERS            92
+#define EDQUOT            93
+#define EVDBAD            94
+#define ENORMTWD          95
+#define EOVERFLOW         96
+
+#endif /* __SYS_WERRNO_ERR */
diff --git a/libs/watt32/sys/werrno.h b/libs/watt32/sys/werrno.h
new file mode 100644 (file)
index 0000000..34c06fc
--- /dev/null
@@ -0,0 +1,141 @@
+/*!\file sys/werrno.h
+ *
+ * sys_errlist[] and errno's for compilers with limited errnos.
+ * For WIN32, we do NOT use the <winsock.h> WSAE* codes.
+ *
+ * G. Vanem <giva@bgnett.no> 1998 - 2004
+ */
+
+#ifndef __SYS_WERRNO_H
+#define __SYS_WERRNO_H
+
+/* When doing "gcc -MM" with gcc 3.0 we must include <sys/version.h>
+ * (via stdio.h) in order for __DJGPP__ to be defined
+ */
+#include <stdio.h>
+#include <errno.h>
+
+#ifndef __SYS_W32API_H
+#include <sys/w32api.h>
+#endif
+
+/* Hack: fix for compiling with djgpp 2.04, but
+ *       ./util/dj_err.exe was compiled with 2.03
+ */
+#if defined(MIXING_DJGPP_203_AND_204)
+#undef ELOOP
+#endif
+
+#if defined(__MINGW32__)
+  #include <sys/mingw32.err>
+
+#elif defined(__HIGHC__)
+  #undef EDEADLK
+  #undef EDEADLOCK
+  #include <sys/highc.err>
+
+#elif defined(__BORLANDC__)
+  #ifdef __FLAT__
+  #undef ENAMETOOLONG  /* bcc32 4.0 */
+  #endif
+  #ifdef _WIN32
+  #undef ENOTEMPTY
+  #endif
+  #include <sys/borlandc.err>
+
+#elif defined(__TURBOC__)
+  #include <sys/turboc.err>
+
+#elif defined(__WATCOMC__)
+  #include <sys/watcom.err>
+
+#elif defined(__DJGPP__)
+  #include <sys/djgpp.err>
+
+#elif defined(__DMC__)                        /* Digital Mars Compiler */
+  #include <sys/digmars.err>
+
+#elif defined(_MSC_VER) && (_MSC_VER <= 800)  /* MSC 8.0 or older */
+  #include <sys/quickc.err>
+
+#elif defined(_MSC_VER) && (_MSC_VER > 800)   /* Visual C on Windows */
+  #undef EDEADLOCK
+  #include <sys/visualc.err>
+
+#elif defined(__CCDL__)                       /* LadSoft's cc386.exe */
+  #include <sys/ladsoft.err>
+
+#elif defined(__LCC__)
+  #include <sys/lcc.err>
+
+#elif defined(__POCC__)
+  #include <sys/pellesc.err>
+
+#else
+  #error Unknown target in <sys/werrno.h>.
+#endif
+
+/*
+ * Ugly hack ahead. Someone tell me a better way, but
+ * errno and friends are macros on Windows. Redefine them
+ * to point to our variables.
+ *
+ * On Windows, the usual 'errno' is a macro "(*_errno)()" that
+ * is problematic to use as a lvalue.
+ * On other platforms we modify the global 'errno' variable directly.
+ * (see SOCK_ERRNO() in misc.h). So no need to redefine it in any way.
+ */
+
+W32_DATA int   _w32_errno;
+W32_DATA int   _w32_sys_nerr;
+W32_DATA char *_w32_sys_errlist[];
+
+#if 0
+  #undef  sys_nerr
+  #define sys_nerr      _w32_sys_nerr
+
+  #undef  _sys_nerr
+  #define _sys_nerr     _w32_sys_nerr
+
+  #undef  __sys_nerr
+  #define __sys_nerr    _w32_sys_nerr
+
+  #undef  sys_errlist
+  #define sys_errlist   _w32_sys_errlist
+
+  #undef  _sys_errlist
+  #define _sys_errlist  _w32_sys_errlist
+
+  #undef  __sys_errlist
+  #define __sys_errlist _w32_sys_errlist
+#endif
+
+/*
+ * Incase you have trouble with duplicate defined symbols,
+ * make sure the "*_s()" versions are referenced before normal
+ * perror() and strerror() in your C-library.
+ */
+W32_FUNC void  perror_s   (const char *str);
+W32_FUNC char *strerror_s (int errnum);
+
+#if defined(__cplusplus)  /* Damn C++ */
+  #include <stdlib.h>
+  #include <string.h>
+
+#elif !defined(_MSC_VER) && !defined(WIN32)
+  #if !defined(_INC_STDLIB) && !defined(_STDLIB_H_) && !defined(_STDIO_H)
+  W32_FUNC void perror (const char *str);
+  #endif
+
+  #if !defined(_INC_STRING) && !defined(_STRING_H) && !defined(_STRING_H_)
+  W32_FUNC char *strerror (int errnum);
+  #endif
+#endif
+
+#if defined(WIN32) || defined(_WIN32)
+  W32_FUNC int  __stdcall WSAGetLastError (void);
+  W32_FUNC void __stdcall WSASetLastError (int err);
+#endif
+
+#endif  /* __SYS_WERRNO_H */
+
diff --git a/libs/watt32/sys/wtime.h b/libs/watt32/sys/wtime.h
new file mode 100644 (file)
index 0000000..37986eb
--- /dev/null
@@ -0,0 +1,112 @@
+/*!\file sys/wtime.h
+ *
+ * Watt-32 time functions.
+ */
+
+#ifndef __SYS_WTIME_H
+#define __SYS_WTIME_H
+
+/*
+ * The naming <sys/wtime.h> is required for those compilers that
+ * have <sys/time.h> in the usual place but doesn't define
+ * the following.
+ */
+
+#include <time.h>
+
+#ifdef __BORLANDC__
+#undef timezone   /* a macro in bcc 5+ */
+#endif
+
+#ifndef __SYS_W32API_H
+#include <sys/w32api.h>
+#endif
+
+#ifndef __SYS_CDEFS_H
+#include <sys/cdefs.h>
+#endif
+
+#if defined(__DJGPP__)
+  #include <sys/time.h>
+  #include <sys/times.h>
+
+#elif defined(__MINGW32__)
+  #include <sys/time.h>
+
+#else
+  struct timeval {
+         time_t tv_sec;
+         long   tv_usec;
+       };
+  #define STRUCT_TIMEVAL_DEFINED
+#endif
+
+#if !defined(__DJGPP__)
+  struct timezone {
+         int tz_minuteswest;
+         int tz_dsttime;
+       };
+
+  struct tms {
+         unsigned long tms_utime;
+         unsigned long tms_cstime;
+         unsigned long tms_cutime;
+         unsigned long tms_stime;
+       };
+  #define STRUCT_TIMEZONE_DEFINED
+  #define STRUCT_TMS_DEFINED
+
+  __BEGIN_DECLS
+
+  #define ITIMER_REAL  0
+  #define ITIMER_PROF  1
+
+  struct itimerval {
+         struct timeval it_interval;  /* timer interval */
+         struct timeval it_value;     /* current value */
+       };
+
+  W32_FUNC int getitimer (int, struct itimerval *);
+  W32_FUNC int setitimer (int, struct itimerval *, struct itimerval *);
+
+  W32_FUNC int gettimeofday (struct timeval *tp, struct timezone *tz);
+
+  __END_DECLS
+
+#endif      /* !__DJGPP__ */
+
+#if !defined(_STRUCT_TIMESPEC) && !defined(_pthread_signal_h)
+  #define _STRUCT_TIMESPEC
+  struct timespec {
+         time_t tv_sec;
+         long   tv_nsec;
+       };
+#endif
+
+#ifndef HZ
+#define HZ 18.2F
+#endif
+
+__BEGIN_DECLS
+
+W32_FUNC unsigned long net_times (struct tms *buffer);
+W32_FUNC int           gettimeofday2 (struct timeval *tv, struct timezone *tz);
+
+__END_DECLS
+
+/*
+ * Operations on timevals.
+ *
+ * NB: timercmp does not work for >= or <=.
+ */
+#ifndef timerisset
+  #define timerisset(tvp)         ((tvp)->tv_sec || (tvp)->tv_usec)
+
+  #define timercmp(tvp, uvp, cmp) ((tvp)->tv_sec cmp (uvp)->tv_sec || \
+                                   ((tvp)->tv_sec == (uvp)->tv_sec &&  \
+                                    (tvp)->tv_usec cmp (uvp)->tv_usec))
+
+  #define timerclear(tvp)         (tvp)->tv_sec = (tvp)->tv_usec = 0
+#endif
+
+#endif  /* !__SYS_WTIME_H */
diff --git a/libs/watt32/sys/wtypes.h b/libs/watt32/sys/wtypes.h
new file mode 100644 (file)
index 0000000..ecdf5a0
--- /dev/null
@@ -0,0 +1,200 @@
+/*!\file sys/wtypes.h
+ * Watt-32 type definitions.
+ */
+
+/*-
+ * Copyright (c) 1982, 1986, 1991 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.
+ *
+ *     @(#)types.h     7.17 (Berkeley) 5/6/91
+ *      @(#)wtypes.h    Waterloo TCP/IP
+ */
+
+/*
+ * the naming <sys/wtypes.h> is required for those compilers that
+ * have <sys/types.h> in the usual place but doesn't define
+ * the following types. This file is included from <sys/socket.h>,
+ * <tcp.h> etc.
+ */
+
+#ifndef __SYS_WTYPES_H
+#define __SYS_WTYPES_H
+
+#if 0                     /* No, that causes trouble */
+  #undef  FD_SETSIZE
+  #define FD_SETSIZE 512  /* use same FD_SETSIZE for all targets */
+#endif
+
+#if defined(__DJGPP__) || defined(__DMC__) || defined(__MINGW32__) || defined(__POCC__)
+  #include <sys/types.h>
+#endif
+
+#if defined(__DJGPP__)
+  #include <machine/endian.h>
+#endif
+
+#if defined(__MINGW32__) || (defined(__DJGPP__) && DJGPP_MINOR >= 4) || \
+    (defined(__WATCOMC__) && __WATCOMC__ >= 1230) ||  /* OW 1.3+ */     \
+    defined(__POCC__)                                 /* PellesC */
+  #undef  HAVE_STDINT_H
+  #define HAVE_STDINT_H
+  #include <stdint.h>   /* doesn't define 'u_char' etc. */
+#endif
+
+
+#if !defined(HAVE_U_INT64_T) && !defined(u_int64_t)
+  #if defined(__HIGHC__) || defined(__GNUC__)
+    typedef unsigned long long  u_int64_t;
+    #define HAVE_U_INT64_T
+
+  #elif defined(__DMC__) && (__INTSIZE == 4)
+    typedef unsigned long long  u_int64_t;
+    #define HAVE_U_INT64_T
+
+  #elif defined(__WATCOMC__) && defined(__WATCOM_INT64__)
+    typedef unsigned __int64  u_int64_t;
+    #define HAVE_U_INT64_T
+
+  #elif (defined(_MSC_VER) && (_MSC_VER >= 900)) || defined(__POCC__)
+    typedef unsigned __int64  u_int64_t;
+    #define HAVE_U_INT64_T
+  #endif
+#endif
+
+#if !defined(__GLIBC__)
+  #if !defined(HAVE_U_CHAR) && !defined(u_char)
+    typedef unsigned char  u_char;
+    #define HAVE_U_CHAR
+  #endif
+
+  #if !defined(HAVE_U_SHORT) && !defined(u_short)
+    typedef unsigned short  u_short;
+    #define HAVE_U_SHORT
+  #endif
+
+  #if !defined(HAVE_USHORT) && !defined(ushort)
+    typedef unsigned short  ushort;   /* SysV compatibility */
+    #define HAVE_USHORT
+  #endif
+
+  #if !defined(HAVE_U_LONG) && !defined(u_long)
+    typedef unsigned long  u_long;
+    #define HAVE_U_LONG
+  #endif
+
+  #if !defined(HAVE_U_INT) && !defined(u_int)
+    #if defined(__SMALL__) || defined(__LARGE__)
+      typedef unsigned long u_int;  /* too many headers assumes u_int is >=32-bit */
+    #else
+      typedef unsigned int  u_int;
+    #endif
+    #define HAVE_U_INT
+  #endif
+
+  #if !defined(HAVE_CADDR_T) && !defined(caddr_t)
+    typedef unsigned long  caddr_t;
+    #define HAVE_CADDR_T
+  #endif
+#endif
+
+#if !defined(HAVE_U_INT8_T) && !defined(u_int8_t)
+  typedef unsigned char  u_int8_t;
+#endif
+
+#if !defined(HAVE_U_INT16_T) && !defined(u_int16_t)
+  typedef unsigned short  u_int16_t;
+#endif
+
+#if !defined(HAVE_U_INT32_T) && !defined(u_int32_t)
+  typedef unsigned long  u_int32_t;
+#endif
+
+#if !defined(HAVE_STDINT_H)
+  #if !defined(HAVE_INT16_T) && !defined(int16_t)
+    typedef short  int16_t;
+    #define HAVE_INT16_T
+  #endif
+
+  #if !defined(HAVE_INT32_T) && !defined(int32_t)
+    typedef long  int32_t;
+    #define HAVE_INT32_T
+  #endif
+#endif
+
+#if !defined(HAVE_U_QUAD_T) && !defined(u_quad_t)
+  #define HAVE_U_QUAD_T
+  #ifdef HAVE_U_INT64_T
+    #define u_quad_t  u_int64_t
+  #else
+    #define u_quad_t  unsigned long
+  #endif
+#endif
+
+#if !defined(IOVEC_DEFINED)
+  #define IOVEC_DEFINED
+  struct iovec {
+         void *iov_base;
+         int   iov_len;
+       };
+#endif
+
+
+#define __BIT_TYPES_DEFINED__
+
+#if !defined(FD_SET)  /* not djgpp */
+
+  #undef  FD_SETSIZE
+  #define FD_SETSIZE    512
+  #define FD_SET(n, p)  ((p)->fd_bits[(n)/8] |=  (1 << ((n) & 7)))
+  #define FD_CLR(n, p)  ((p)->fd_bits[(n)/8] &= ~(1 << ((n) & 7)))
+  #define FD_ISSET(n,p) ((p)->fd_bits[(n)/8] &   (1 << ((n) & 7)))
+  #define FD_ZERO(p)    memset ((void*)(p), 0, sizeof(*(p)))
+
+  typedef struct fd_set {
+          unsigned char fd_bits [(FD_SETSIZE+7)/8];
+        } fd_set;
+#endif
+
+#ifndef LITTLE_ENDIAN
+#define LITTLE_ENDIAN 1234
+#endif
+
+#ifndef BIG_ENDIAN
+#define BIG_ENDIAN    4321
+#endif
+
+#if defined(BIG_ENDIAN_MACHINE) || defined(USE_BIGENDIAN)
+  #define BYTE_ORDER  BIG_ENDIAN
+#else
+  #define BYTE_ORDER  LITTLE_ENDIAN
+#endif
+
+#endif
diff --git a/libs/watt32/syslog.h b/libs/watt32/syslog.h
new file mode 100644 (file)
index 0000000..fa3b7c9
--- /dev/null
@@ -0,0 +1,9 @@
+/*!\file inc/syslog.h
+ * syslog header.
+ */
+/*
+ * POSIX requires (AFAIK) this file in a base-dir
+ */
+#ifndef __SYS_SYSLOG_H
+#include <sys/syslog.h>
+#endif
diff --git a/libs/watt32/tcp.h b/libs/watt32/tcp.h
new file mode 100644 (file)
index 0000000..f572ed2
--- /dev/null
@@ -0,0 +1,796 @@
+/*!\file inc/tcp.h
+ * Watt-32 public API.
+ */
+
+/*
+ * Waterloo TCP
+ *
+ * Copyright (c) 1990-1993 Erick Engelke
+ *
+ * Portions copyright others, see copyright.h for details.
+ *
+ * This library is free software; you can use it or redistribute under
+ * the terms of the license included in LICENSE.H.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * file LICENSE.H for more details.
+ *
+ */
+
+#ifndef __WATT_TCP_H
+#define __WATT_TCP_H
+
+/*
+ * Version (major.minor.dev-rel), 8-bit each.
+ */
+#define WATTCP_MAJOR_VER  2
+#define WATTCP_MINOR_VER  2
+#define WATTCP_DEVEL_REL  10
+
+#define WATTCP_VER  ((WATTCP_MAJOR_VER << 16) + \
+                     (WATTCP_MINOR_VER << 8) +  \
+                     WATTCP_DEVEL_REL)
+
+#define WATTCP_VER_STRING  "2.2.10"
+
+#if !defined(RC_INVOKED)
+
+#include <stdio.h>
+#include <sys/wtypes.h>  /* fd_set, iovec */
+#include <sys/wtime.h>   /* struct timeval, cdecl */
+#include <sys/swap.h>    /* intel(), intel16() */
+#include <sys/w32api.h>  /* W32_FUNC, W32_DATA etc. */
+
+#ifdef __WATCOMC__
+  #pragma read_only_directory;
+#endif
+
+#ifdef __cplusplus
+  extern "C" {
+  #if 0  /* keep Emacs's auto-indent happy */
+  }
+  #endif
+#endif
+
+W32_DATA const char *wattcpCopyright;  /* "See COPYRIGHT.H for details" */
+
+W32_FUNC const char *wattcpVersion (void);      /* WatTCP target version/date */
+W32_FUNC const char *wattcpCapabilities (void); /* what's been compiled in */
+
+#if !defined(WATT32_BUILD)
+
+/*
+ * Typedefs and constants
+ */
+#ifndef BYTE
+#define BYTE   unsigned char
+#endif
+
+#ifndef WORD
+#define WORD   unsigned short
+#endif
+
+#ifndef DWORD
+#define DWORD  unsigned long
+#endif
+
+#ifndef BOOL
+#define BOOL   int
+#endif
+
+#ifndef sock_type
+#define sock_type  void
+#endif
+
+/*
+ * Old compatibility
+ */
+#ifndef byte
+#define byte  unsigned char
+#endif
+
+#ifndef word
+#define word  unsigned short
+#endif
+
+#ifndef dword
+#define dword unsigned long
+#endif
+
+#ifndef longword
+#define longword unsigned long
+#endif
+
+/*
+ * Basic typedefs
+ */
+typedef BYTE  eth_address[6];
+typedef BYTE  ip6_address[16];
+
+typedef int (*ProtoHandler) (void *sock, const BYTE *data, unsigned len,
+                             const void *tcp_phdr, const void *udp_hdr);
+
+typedef int (*UserHandler)  (void *sock);
+
+#endif /* WATT32_BUILD */
+
+
+typedef struct {
+        BYTE   undoc [4470];
+      } tcp_Socket;
+
+typedef struct {
+        BYTE   undoc [1740];
+      } udp_Socket;
+
+
+/* Silly C++ compilers needs this to supress warning at max warning level
+ */
+typedef void (*VoidProc)(void);
+
+#define MAX_COOKIES      10
+#define MAX_NAMESERVERS  10
+#define MAX_HOSTLEN      80
+
+/* Modes for sock_mode()
+ */
+#define TCP_MODE_BINARY  0x01   /* deprecated */
+#define TCP_MODE_ASCII   0x02   /* deprecated */
+#define SOCK_MODE_BINARY 0x01   /* new name */
+#define SOCK_MODE_ASCII  0x02   /* new name */
+#define UDP_MODE_CHK     0x04   /* defaults to checksum */
+#define UDP_MODE_NOCHK   0x08
+#define TCP_MODE_NAGLE   0x10   /* Nagle's algorithm */
+#define TCP_MODE_NONAGLE 0x20
+
+/* wait-states for sock_sselect()
+ */
+#define SOCKESTABLISHED  1
+#define SOCKDATAREADY    2
+#define SOCKCLOSED       4
+
+/*
+ * Hide "private" symbols by prefixing with "_w32_"
+ */
+#undef  W32_NAMESPACE
+#define W32_NAMESPACE(x)   _w32_ ## x
+
+#define init_misc          W32_NAMESPACE (init_misc)
+#define Random             W32_NAMESPACE (Random)
+#define set_timeout        W32_NAMESPACE (set_timeout)
+#define chk_timeout        W32_NAMESPACE (chk_timeout)
+#define cmp_timeout        W32_NAMESPACE (cmp_timeout)
+#define hires_timer        W32_NAMESPACE (hires_timer)
+#define set_timediff       W32_NAMESPACE (set_timediff)
+#define get_timediff       W32_NAMESPACE (get_timediff)
+#define timeval_diff       W32_NAMESPACE (timeval_diff)
+
+#define my_ip_addr         W32_NAMESPACE (my_ip_addr)
+#define sin_mask           W32_NAMESPACE (sin_mask)
+#define sock_delay         W32_NAMESPACE (sock_delay)
+#define sock_inactive      W32_NAMESPACE (sock_inactive)
+#define sock_data_timeout  W32_NAMESPACE (sock_data_timeout)
+#define multihomes         W32_NAMESPACE (multihomes)
+#define block_tcp          W32_NAMESPACE (block_tcp)
+#define block_udp          W32_NAMESPACE (block_udp)
+#define block_ip           W32_NAMESPACE (block_ip)
+#define block_icmp         W32_NAMESPACE (block_icmp)
+#define last_cookie        W32_NAMESPACE (last_cookie)
+#define cookies            W32_NAMESPACE (cookies)
+#define survive_eth        W32_NAMESPACE (survive_eth)
+#define survive_bootp      W32_NAMESPACE (survive_bootp)
+#define survive_dhcp       W32_NAMESPACE (survive_dhcp)
+#define survive_rarp       W32_NAMESPACE (survive_rarp)
+#define loopback_handler   W32_NAMESPACE (loopback_handler)
+#define usr_init           W32_NAMESPACE (usr_init)
+#define usr_post_init      W32_NAMESPACE (usr_post_init)
+#define in_checksum        W32_NAMESPACE (in_checksum)
+#define aton               W32_NAMESPACE (aton)
+#define isaddr             W32_NAMESPACE (isaddr)
+#define _printf            W32_NAMESPACE (_printf)
+#define _outch             W32_NAMESPACE (_outch)
+#define outs               W32_NAMESPACE (outs)
+#define outsnl             W32_NAMESPACE (outsnl)
+#define outsn              W32_NAMESPACE (outsn)
+#define outhexes           W32_NAMESPACE (outhexes)
+#define outhex             W32_NAMESPACE (outhex)
+#define rip                W32_NAMESPACE (rip)
+#define parse_config_table W32_NAMESPACE (parse_config_table)
+#define init_timer_isr     W32_NAMESPACE (init_timer_isr)
+#define exit_timer_isr     W32_NAMESPACE (exit_timer_isr)
+
+#undef  sock_init
+#define sock_init() watt_sock_init (sizeof(tcp_Socket), sizeof(udp_Socket))
+
+W32_FUNC int         watt_sock_init (size_t, size_t);
+W32_FUNC const char *sock_init_err  (int rc);
+
+W32_FUNC void sock_exit (void);
+W32_FUNC void dbug_init (void);  /* effective if compiled with `USE_DEBUG' */
+W32_FUNC void init_misc (void);  /* may be called before sock_init() */
+W32_FUNC void sock_sig_exit (const char *msg, int sigint);
+
+#if !defined(WATT32_BUILD)
+/*
+ * `s' is the pointer to a udp or tcp socket
+ */
+W32_FUNC int    sock_read       (void *s, char *dp, int len);
+W32_FUNC int    sock_preread    (void *s, char *dp, int len);
+W32_FUNC int    sock_fastread   (void *s, char *dp, int len);
+W32_FUNC int    sock_write      (void *s, const char *dp, int len);
+W32_FUNC int    sock_enqueue    (void *s, const char *dp, int len);
+W32_FUNC int    sock_fastwrite  (void *s, const char *dp, int len);
+W32_FUNC size_t sock_setbuf     (void *s, char *buf, size_t len);
+W32_FUNC void   sock_flush      (void *s);
+W32_FUNC void   sock_noflush    (void *s);
+W32_FUNC void   sock_flushnext  (void *s);
+W32_FUNC int    sock_puts       (void *s, const char *dp);
+W32_FUNC WORD   sock_gets       (void *s, char *dp, int n);
+W32_FUNC BYTE   sock_putc       (void *s, char c);
+W32_FUNC int    sock_getc       (void *s);
+W32_FUNC WORD   sock_dataready  (void *s);
+W32_FUNC int    sock_established(void *s);
+W32_FUNC int    sock_close      (void *s);
+W32_FUNC int    sock_abort      (void *s);
+W32_FUNC void (*sock_yield      (void *s, VoidProc fn)) (void);
+W32_FUNC int    sock_mode       (void *s, WORD mode);
+W32_FUNC int    sock_sselect    (void *s, int waitstate);
+W32_FUNC int    sock_timeout    (void *s, int seconds);
+W32_FUNC int    sock_recv       (void *s, char *buf, unsigned len);
+W32_FUNC int    sock_recv_init  (void *s, char *buf, unsigned len);
+W32_FUNC int    sock_recv_from  (void *s, DWORD *ip, WORD *port, char *buf, unsigned len, int peek);
+W32_FUNC int    sock_recv_used  (void *s);
+W32_FUNC int    sock_keepalive  (void *s);
+
+W32_FUNC size_t sock_rbsize     (const void *s);
+W32_FUNC size_t sock_rbused     (const void *s);
+W32_FUNC size_t sock_rbleft     (const void *s);
+W32_FUNC size_t sock_tbsize     (const void *s);
+W32_FUNC size_t sock_tbused     (const void *s);
+W32_FUNC size_t sock_tbleft     (const void *s);
+
+W32_FUNC int MS_CDECL sock_printf (void *s, const char *fmt, ...)
+  #if defined(__GNUC__)
+  __attribute__((format(printf,2,3)))
+  #endif
+  ;
+
+W32_FUNC int MS_CDECL sock_scanf (void *s, const char *fmt, ...)
+  #if defined(__GNUC__)
+  __attribute__((format(scanf,2,3)))
+  #endif
+  ;
+
+/*
+ * TCP or UDP specific stuff, must be used for open's and listens, but
+ * sock stuff above is used for everything else
+ */
+W32_FUNC int udp_open   (void *s, WORD lport, DWORD ina, WORD port, ProtoHandler handler);
+W32_FUNC int tcp_open   (void *s, WORD lport, DWORD ina, WORD port, ProtoHandler handler);
+W32_FUNC int udp_listen (void *s, WORD lport, DWORD ina, WORD port, ProtoHandler handler);
+W32_FUNC int tcp_listen (void *s, WORD lport, DWORD ina, WORD port, ProtoHandler handler, WORD timeout);
+W32_FUNC int tcp_established (const void *s);
+
+#endif  /* WATT32_BUILD */
+
+
+W32_FUNC DWORD resolve    (const char *name);
+W32_FUNC int   resolve_ip (DWORD ip, char *name, int len);
+W32_FUNC DWORD lookup_host(const char *host, char *ip_str);
+W32_FUNC const char *dom_strerror (int err);
+
+/*
+ * less general functions
+ */
+W32_FUNC int   tcp_cbreak (int mode);
+
+W32_FUNC DWORD aton       (const char *name);
+W32_FUNC int   isaddr     (const char *name);
+W32_FUNC char *rip        (char *s);
+W32_FUNC int   watt_kbhit (void);
+
+#define tcp_cbrk(mode)  tcp_cbreak(mode) /* old name */
+
+/*
+ * Set MD5 secret for TCP option 19 (RFC-2385).
+ * Only if built with USE_TCP_MD5.
+ */
+W32_FUNC const char *tcp_md5_secret (void *s, const char *secret);
+
+/*
+ * timers
+ */
+W32_FUNC DWORD  set_timeout  (DWORD msec);
+W32_FUNC int    chk_timeout  (DWORD value);
+W32_FUNC int    cmp_timers   (DWORD t1, DWORD t2);
+W32_FUNC int    set_timediff (long msec);
+W32_FUNC long   get_timediff (DWORD now, DWORD t);
+W32_FUNC int    hires_timer  (int on);
+W32_FUNC double timeval_diff (const struct timeval *a, const struct timeval *b);
+
+W32_FUNC void   init_timer_isr (void);
+W32_FUNC void   exit_timer_isr (void);
+
+W32_FUNC void   init_userSuppliedTimerTick (void);
+W32_FUNC void   userTimerTick (DWORD);
+
+W32_FUNC void   ip_timer_init (sock_type *s , unsigned delayseconds);
+W32_FUNC int    ip_timer_expired (const sock_type *s);
+
+/*
+ * TCP/IP system variables
+ */
+W32_DATA DWORD my_ip_addr;
+W32_DATA DWORD sin_mask;       /* eg.  0xFFFFFE00L */
+W32_DATA int   sock_delay;
+W32_DATA int   sock_inactive;
+W32_DATA int   sock_data_timeout;
+W32_DATA WORD  multihomes;
+
+W32_DATA int   block_tcp;
+W32_DATA int   block_udp;
+W32_DATA int   block_icmp;
+W32_DATA int   block_ip;
+W32_DATA WORD  last_cookie;
+W32_DATA DWORD cookies [MAX_COOKIES];
+
+W32_DATA BOOL  survive_eth;
+W32_DATA BOOL  survive_bootp;
+W32_DATA BOOL  survive_dhcp;
+W32_DATA BOOL  survive_rarp;
+
+W32_DATA void (*loopback_handler) (void *ip);
+
+/*
+ * things you probably won't need to know about
+ */
+
+/*
+ * sock_debugdump
+ *      - dump some socket control block parameters
+ * used for testing the kernal, not recommended
+ */
+W32_FUNC void sock_debugdump (const sock_type *s);
+
+/*
+ * tcp_config - read a configuration file
+ *            - if special path desired, call after sock_init()
+ *            - NULL reads path WATTCP.CFG env-var or from program's path
+ * see sock_init();
+ */
+W32_FUNC long tcp_config (const char *path);
+
+/*
+ * tcp_tick - must be called periodically by user application.
+ *          - returns NULL when our socket closes
+ */
+W32_FUNC WORD tcp_tick (sock_type *s);
+
+/*
+ * tcp_set_debug_state - set to 1,2 or reset 0
+ */
+W32_FUNC void tcp_set_debug_state (WORD x);
+
+
+/*
+ * name domain constants, etc.
+ */
+#define def_domain       W32_NAMESPACE (def_domain)
+#define def_nameservers  W32_NAMESPACE (def_nameservers)
+#define dns_timeout      W32_NAMESPACE (dns_timeout)
+#define dom_errno        W32_NAMESPACE (dom_errno)
+#define last_nameserver  W32_NAMESPACE (last_nameserver)
+#define _mtu             W32_NAMESPACE (_mtu)
+#define _mss             W32_NAMESPACE (_mss)
+#define ctrace_on        W32_NAMESPACE (ctrace_on)
+#define has_rdtsc        W32_NAMESPACE (has_rdtsc)
+#define clocks_per_usec  W32_NAMESPACE (clocks_per_usec)
+#define psocket          W32_NAMESPACE (psocket)
+#define _inet_ntoa       W32_NAMESPACE (_inet_ntoa)
+#define _inet_addr       W32_NAMESPACE (_inet_addr)
+
+W32_DATA char         *def_domain;
+W32_DATA int           dom_errno;
+W32_DATA DWORD         def_nameservers [MAX_NAMESERVERS];
+W32_DATA WORD          dns_timeout;
+W32_DATA WORD          last_nameserver;
+W32_DATA WORD         _watt_handle_cbreak;      /* ^C/^Break handle mode */
+W32_DATA volatile int _watt_cbroke;             /* ^C/^Break occured */
+W32_DATA unsigned     _mtu, _mss;
+W32_DATA int           ctrace_on;
+W32_DATA int           has_rdtsc;
+W32_DATA DWORD         clocks_per_usec;
+
+/* Old compatibility
+ */
+#define wathndlcbrk  _watt_handle_cbreak
+#define watcbroke    _watt_cbroke
+
+/*
+ * sock_wait_ .. macros
+ */
+
+/*
+ * sock_wait_established()
+ *      - Waits until connected or aborts if timeout etc.
+ *
+ * sock_wait_input()
+ *      - Waits for received input on socket 's'.
+ *      - May not be valid input for sock_gets()..  check returned length.
+ *
+ * sock_tick()
+ *      - Do tick and jump on abort.
+ *
+ * sock_wait_closed()
+ *      - Close socket and wait until fully closed.
+ *        Discards all received data.
+ *
+ * All these macros jump to label sock_err with contents of *statusptr
+ * set to
+ *       1 on closed normally.
+ *      -1 on error, call sockerr(s) for cause.
+ *
+ */
+#if !defined(WATT32_BUILD)
+
+W32_FUNC int _ip_delay0 (void *s, int sec, UserHandler fn, void *statusptr);
+W32_FUNC int _ip_delay1 (void *s, int sec, UserHandler fn, void *statusptr);
+W32_FUNC int _ip_delay2 (void *s, int sec, UserHandler fn, void *statusptr);
+
+
+#define sock_wait_established(s,seconds,fn,statusptr) \
+        do {                                          \
+           if (_ip_delay0 (s,seconds,fn,statusptr))   \
+              goto sock_err;                          \
+        } while (0)
+
+#define sock_wait_input(s,seconds,fn,statusptr)       \
+        do {                                          \
+           if (_ip_delay1 (s,seconds,fn,statusptr))   \
+              goto sock_err;                          \
+        } while (0)
+
+#define sock_tick(s, statusptr)                       \
+        do {                                          \
+           if (!tcp_tick(s)) {                        \
+              if (statusptr) *statusptr = -1;         \
+              goto sock_err;                          \
+           }                                          \
+        } while (0)
+
+#define sock_wait_closed(s,seconds,fn,statusptr)      \
+        do {                                          \
+           if (_ip_delay2(s,seconds,fn,statusptr))    \
+              goto sock_err;                          \
+        } while (0)
+
+#endif  /* WATT32_BUILD */
+
+/*
+ * User hook for WATTCP.CFG initialisation file.
+ */
+W32_DATA void (*usr_init) (const char *keyword, const char *value);
+W32_DATA void (*usr_post_init) (void);
+
+enum config_tab_types {
+     ARG_ATOI,        /* convert to int */
+     ARG_ATOB,        /* convert to 8-bit byte */
+     ARG_ATOW,        /* convert to 16-bit word */
+     ARG_ATOIP,       /* convert to ip-address on host order */
+     ARG_ATOX_B,      /* convert to hex-byte */
+     ARG_ATOX_W,      /* convert to hex-word */
+     ARG_ATOX_D,      /* convert to hex-word */
+     ARG_STRDUP,      /* duplicate string value */
+     ARG_STRCPY,      /* copy string value */
+     ARG_RESOLVE,     /* resolve host to ip-address */
+     ARG_FUNC         /* call convertion function */
+   };
+
+struct config_table {
+       const char            *keyword;
+       enum config_tab_types  type;
+       void                  *arg_func;
+     };
+
+
+W32_FUNC int parse_config_table (const struct config_table *tab,
+                                 const char *section,
+                                 const char *name,
+                                 const char *value);
+
+/*
+ * Run with no config file (embedded/diskless)
+ */
+W32_DATA int _watt_no_config;
+
+W32_FUNC void tcp_inject_config (
+              const struct config_table *cfg,
+              const char                *key,
+              const char                *value);
+
+typedef long (*WattUserConfigFunc) (int pass, const struct config_table *cfg);
+
+W32_FUNC WattUserConfigFunc _watt_user_config (WattUserConfigFunc fn);
+
+
+/*
+ * Bypass standard handling of DHCP transient configuration
+ */
+#include <sys/packon.h>
+
+struct DHCP_config {
+       DWORD  my_ip;
+       DWORD  netmask;
+       DWORD  gateway;
+       DWORD  nameserver;
+       DWORD  server;
+       DWORD  iplease;
+       DWORD  renewal;
+       DWORD  rebind;
+       DWORD  tcp_keep_intvl;
+       BYTE   default_ttl;
+       char   hostname [MAX_HOSTLEN+1];
+       char   domain [MAX_HOSTLEN+1];
+       char   loghost [MAX_HOSTLEN+1]; /* Only used if USE_BSD_FUNC defined */
+     };
+
+#include <sys/packoff.h>
+
+enum DHCP_config_op {
+     DHCP_OP_READ  = 0,
+     DHCP_OP_WRITE = 1,
+     DHCP_OP_ERASE = 2
+   };
+
+typedef int (*WattDHCPConfigFunc) (enum DHCP_config_op op,
+                                   struct DHCP_config *cfg);
+
+W32_FUNC WattDHCPConfigFunc dhcp_set_config_func (WattDHCPConfigFunc fn);
+
+
+/*
+ * Various function-pointer hooks etc.
+ */
+W32_DATA int (MS_CDECL *_printf) (const char *, ...);
+W32_DATA void (*_outch) (char c);
+W32_DATA int  (*_resolve_hook) (void);
+W32_DATA void (*wintr_chain) (void);
+
+W32_DATA int (*tftp_writer) (const void *buf, unsigned length);
+W32_DATA int (*tftp_terminator) (void);
+
+W32_FUNC void  outs    (const char *s);
+W32_FUNC void  outsnl  (const char *s);
+W32_FUNC void  outsn   (const char *s, int n);
+W32_FUNC void  outhexes(const char *s, int n);
+W32_FUNC void  outhex  (char ch);
+
+W32_FUNC int   wintr_enable (void);
+W32_FUNC void  wintr_disable (void);
+W32_FUNC void  wintr_shutdown (void);
+W32_FUNC void  wintr_init (void);
+
+W32_FUNC int   _ping     (DWORD host, DWORD num, const BYTE *pattern, long len);
+W32_FUNC DWORD _chk_ping (DWORD host, DWORD *ping_num);
+
+W32_FUNC int   _eth_init         (void);
+W32_FUNC void  _eth_release      (void);
+W32_FUNC void *_eth_formatpacket (const void *eth_dest, WORD eth_type);
+W32_FUNC void  _eth_free         (const void *buf);
+W32_FUNC void *_eth_arrived      (WORD *type, BOOL *brdcast);
+W32_FUNC int   _eth_send         (WORD len, const void *sock, const char *file, unsigned line);
+W32_FUNC int   _eth_set_addr     (const void *addr);
+W32_FUNC BYTE  _eth_get_hwtype   (BYTE *hwtype, BYTE *hwlen);
+
+W32_DATA void *(*_eth_recv_hook) (WORD *type);
+W32_DATA int   (*_eth_recv_peek) (void *mac_buf);
+W32_DATA int   (*_eth_xmit_hook) (const void *buf, unsigned len);
+W32_FUNC WORD    in_checksum     (const void *buf, unsigned len);
+
+#define inchksum(buf,len)  in_checksum(buf, len)
+
+
+/*
+ * BSD-socket similarities.
+ * Refer <sys/socket.h> for the real thing.
+ */
+#if !defined(WATT32_BUILD)
+
+struct watt_sockaddr {     /* for _getpeername, _getsockname */
+       WORD   s_type;
+       WORD   s_port;
+       DWORD  s_ip;
+       BYTE   s_spares[6]; /* unused */
+     };
+
+W32_FUNC DWORD _gethostid   (void);
+W32_FUNC DWORD _sethostid   (DWORD ip);
+W32_FUNC int   _getsockname (const void *s, void *dest, int *len);
+W32_FUNC int   _getpeername (const void *s, void *dest, int *len);
+
+W32_FUNC int   _chk_socket  (const void *s);
+W32_FUNC void  psocket      (const void *s);
+
+#endif
+
+W32_FUNC char *_inet_ntoa   (char *s, DWORD x);
+W32_FUNC DWORD _inet_addr   (const char *name);
+
+W32_FUNC BOOL _arp_register (DWORD use, DWORD instead_of);
+W32_FUNC BOOL _arp_resolve  (DWORD ina, eth_address *res);
+
+W32_FUNC int   addwattcpd (VoidProc p);
+W32_FUNC int   delwattcpd (VoidProc p);
+
+W32_FUNC void _sock_debug_on  (void);
+W32_FUNC void _sock_debug_off (void);
+
+#if !defined(WATT32_BUILD)
+
+W32_FUNC const char *sockerr  (const void *s);   /* UDP / TCP */
+W32_FUNC void  sockerr_clear  (void *s);         /* UDP / TCP */
+
+W32_FUNC const char *sockstate (const void *s);  /* UDP / TCP / Raw */
+
+/*
+ * Reduce internal states to "user-easy" states, GvB 2002-09
+ */
+enum TCP_SIMPLE_STATE {
+     TCP_CLOSED,
+     TCP_LISTENING,
+     TCP_OPENING,
+     TCP_OPEN,
+     TCP_CLOSING
+   };
+
+W32_FUNC enum TCP_SIMPLE_STATE tcp_simple_state (const tcp_Socket *s);
+
+#endif  /* WATT32_BUILD */
+
+
+/*
+ * BSD functions for read/write/select
+ */
+W32_FUNC int close_s  (int s);
+W32_FUNC int write_s  (int s, const char *buf, int nbyte);
+W32_FUNC int read_s   (int s,       char *buf, int nbyte);
+W32_FUNC int writev_s (int s, const struct iovec *vector, size_t count);
+W32_FUNC int readv_s  (int s, const struct iovec *vector, size_t count);
+
+W32_FUNC const sock_type *__get_sock_from_s (int s, int proto);
+                            /* Use 'IPPROTO_x' for proto */
+
+W32_FUNC int select_s (int num_sockets,
+                       fd_set *read_events,
+                       fd_set *write_events,
+                       fd_set *except_events,
+                       struct timeval *timeout);
+
+/* The only BSD/Winsock replacement in this file.
+ * Normally belongs in djgpp's <unistd.h>.
+ */
+#ifndef __DJGPP__
+W32_FUNC int W32_CALL select (int num_sockets,
+                              fd_set *read_events,
+                              fd_set *write_events,
+                              fd_set *except_events,
+                              struct timeval *timeout);
+#endif
+
+/* Duplicated from <sys/socket.h>
+ */
+W32_FUNC int W32_CALL gethostname (char *name, int len);
+
+/*
+ * Multicast stuff (if built with `USE_MULTICAST')
+ */
+W32_DATA int _multicast_on;
+
+W32_FUNC int join_mcast_group  (DWORD ip);
+W32_FUNC int leave_mcast_group (DWORD ip);
+W32_FUNC int _ip4_is_multicast (DWORD ip);
+W32_FUNC int multi_to_eth      (DWORD ip, eth_address *eth);
+W32_FUNC int udp_SetTTL        (udp_Socket *s, BYTE ttl);
+
+
+/*
+ * Commandline parsing
+ */
+#if defined(__DJGPP__)
+  #include <unistd.h>
+
+#elif defined(__MINGW32__)
+  #include <getopt.h>
+
+#elif !defined(_GETOPT_H)  /* not using a local getopt.c */
+  #define optarg    W32_NAMESPACE (optarg)
+  #define optind    W32_NAMESPACE (optind)
+  #define opterr    W32_NAMESPACE (opterr)
+  #define optopt    W32_NAMESPACE (optopt)
+  #define optswchar W32_NAMESPACE (optswchar)
+  #define optmode   W32_NAMESPACE (optmode)
+  #define getopt    W32_NAMESPACE (getopt)
+
+  W32_DATA char *optarg;       /* argument of current option                    */
+  W32_DATA int   optind;       /* index of next argument; default=0: initialize */
+  W32_DATA int   opterr;       /* 0=disable error messages; default=1: enable   */
+  W32_DATA int   optopt;       /* option char returned from getopt()            */
+  W32_DATA char *optswchar;    /* characters introducing options; default="-"   */
+
+  W32_DATA enum _optmode {
+           GETOPT_UNIX,        /* options at start of argument list (default)   */
+           GETOPT_ANY,         /* move non-options to the end                   */
+           GETOPT_KEEP,        /* return options in order                       */
+         } optmode;
+
+  W32_FUNC int getopt (int argc, char *const *argv, const char *opt_str);
+#endif
+
+
+/*
+ * Statistics printing
+ */
+W32_FUNC void print_mac_stats  (void);
+W32_FUNC void print_pkt_stats  (void);
+W32_FUNC void print_vjc_stats  (void);
+W32_FUNC void print_arp_stats  (void);
+W32_FUNC void print_pppoe_stats(void);
+W32_FUNC void print_ip4_stats  (void);
+W32_FUNC void print_ip6_stats  (void);
+W32_FUNC void print_icmp_stats (void);
+W32_FUNC void print_igmp_stats (void);
+W32_FUNC void print_udp_stats  (void);
+W32_FUNC void print_tcp_stats  (void);
+W32_FUNC void print_all_stats  (void);
+W32_FUNC void reset_stats      (void);
+
+#if !defined(WATT32_BUILD)
+W32_FUNC int sock_stats (void *s, DWORD *days, WORD *inactive,
+                         WORD *cwindow, DWORD *avg,  DWORD *sd);
+#endif
+
+
+/*
+ * Controlling timer interrupt handler for background processing.
+ * Not recommended, little tested
+ */
+W32_FUNC void backgroundon  (void);
+W32_FUNC void backgroundoff (void);
+W32_FUNC void backgroundfn  (VoidProc func);
+
+
+/*
+ * Misc functions
+ */
+#if !defined(__DJGPP__) && !(defined(__WATCOMC__) && (__WATCOMC__ >= 1240))
+  #define ffs W32_NAMESPACE (ffs)
+  W32_FUNC int ffs (int mask);
+#endif
+
+#if defined (__HIGHC__)
+  W32_FUNC int system (const char *cmd);
+  pragma Alias (system, "_mw_watt_system");
+#endif
+
+W32_FUNC unsigned Random (unsigned a, unsigned b);
+
+
+/*
+ * Tracing to RS-232 serial port, by Gundolf von Bachhaus <GBachhaus@gmx.net>
+ * Watt-32 library must be compiled with `USE_RS232_DBG' (see .\src\config.h)
+ */
+W32_FUNC int            trace2com_init (WORD portAddress, DWORD baudRate);
+W32_FUNC int MS_CDECL __trace2com      (const char *fmt, ...)
+  #if defined(__GNUC__)
+  __attribute__((format(printf,1,2)))
+  #endif
+  ;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* RC_INVOKED */
+#endif  /* __WATT_TCP_H */
diff --git a/libs/watt32/winsock.h b/libs/watt32/winsock.h
new file mode 100644 (file)
index 0000000..24f501b
--- /dev/null
@@ -0,0 +1,56 @@
+#ifndef _WATT32_FAKE_WINSOCK_H
+#define _WATT32_FAKE_WINSOCK_H
+
+#ifndef __SYS_W32API_H
+#include <sys/w32api.h>
+#endif
+
+#ifndef __SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+#ifndef __SYS_WERRNO_H
+#include <sys/werrno.h>
+#endif
+
+#if !defined(WIN32) && !defined(_WIN32)
+#error This file is only for Watt-32 targeting Windows programs.
+#endif
+
+#if !defined(_WATT32_FAKE_WINSOCK2_H)
+
+#define WSADESCRIPTION_LEN  256
+#define WSASYS_STATUS_LEN   128
+
+typedef struct WSAData {
+        unsigned short wVersion;
+        unsigned short wHighVersion;
+        char           szDescription[WSADESCRIPTION_LEN+1];
+        char           szSystemStatus[WSASYS_STATUS_LEN+1];
+        unsigned short iMaxSockets;
+        unsigned short iMaxUdpDg;
+        char          *lpVendorInfo;
+      } WSADATA, *LPWSADATA;
+
+W32_FUNC int __stdcall WSAStartup (unsigned short wVersionRequired,
+                                   WSADATA *WSAData);
+
+
+#ifndef FD_SETSIZE
+#define FD_SETSIZE  64
+#endif
+
+/*
+ * Needed if user compiled with the normal <winsock*.h> and just relinked
+ * with Watt-32 (import) library.
+ */
+typedef struct winsock_fd_set {
+        unsigned int fd_count;               /* how many are SET? */
+        int          fd_array [FD_SETSIZE];  /* an array of sockets */
+      } winsock_fd_set;
+
+W32_FUNC int __stdcall __WSAFDIsSet (int s, winsock_fd_set *fd);
+
+#endif  /* _WATT32_FAKE_WINSOCK2_H */
+#endif
+
diff --git a/libs/watt32/winsock2.h b/libs/watt32/winsock2.h
new file mode 100644 (file)
index 0000000..261bd6a
--- /dev/null
@@ -0,0 +1,56 @@
+#ifndef _WATT32_FAKE_WINSOCK2_H
+#define _WATT32_FAKE_WINSOCK2_H
+
+#ifndef __SYS_W32API_H
+#include <sys/w32api.h>
+#endif
+
+#ifndef __SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+#ifndef __SYS_WERRNO_H
+#include <sys/werrno.h>
+#endif
+
+#if !defined(WIN32) && !defined(_WIN32)
+#error This file is only for Watt-32 targeting Windows programs.
+#endif
+
+#if !defined(_WATT32_FAKE_WINSOCK_H)
+
+#define WSADESCRIPTION_LEN  256
+#define WSASYS_STATUS_LEN   128
+
+typedef struct WSAData {
+        unsigned short wVersion;
+        unsigned short wHighVersion;
+        char           szDescription[WSADESCRIPTION_LEN+1];
+        char           szSystemStatus[WSASYS_STATUS_LEN+1];
+        unsigned short iMaxSockets;
+        unsigned short iMaxUdpDg;
+        char          *lpVendorInfo;
+      } WSADATA, *LPWSADATA;
+
+W32_FUNC int __stdcall WSAStartup (unsigned short wVersionRequired,
+                                   WSADATA *WSAData);
+
+
+#ifndef FD_SETSIZE
+#define FD_SETSIZE  64
+#endif
+
+/*
+ * Needed if user compiled with the normal <winsock*.h> and just relinked
+ * with Watt-32 (import) library.
+ */
+typedef struct winsock_fd_set {
+        unsigned int fd_count;               /* how many are SET? */
+        int          fd_array [FD_SETSIZE];  /* an array of sockets */
+      } winsock_fd_set;
+
+W32_FUNC int __stdcall __WSAFDIsSet (int s, winsock_fd_set *fd);
+
+#endif  /* _WATT32_FAKE_WINSOCK_H */
+#endif  /* _WATT32_FAKE_WINSOCK2_H */
+
diff --git a/libs/watt32/ws2tcpip.h b/libs/watt32/ws2tcpip.h
new file mode 100644 (file)
index 0000000..1d985e9
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef _WATT32_FAKE_WS2TCPIP_H
+#define _WATT32_FAKE_WS2TCPIP_H
+
+#ifndef __SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+#if !defined(WIN32) && !defined(_WIN32)
+#error This file is only for Watt-32 targeting Windows programs.
+#endif
+
+#endif
+
index 4b36e4a..34632b6 100644 (file)
@@ -10,11 +10,61 @@ void cleanup_input(void)
 {
 }
 
+static int conv_special(int key)
+{
+       switch(key) {
+       case 72:
+               return KB_UP;
+       case 80:
+               return KB_DOWN;
+       case 75:
+               return KB_LEFT;
+       case 77:
+               return KB_RIGHT;
+       case 71:
+               return KB_HOME;
+       case 79:
+               return KB_END;
+       case 82:
+               return KB_INS;
+       case 83:
+               return KB_DEL;
+       case 73:
+               return KB_PGUP;
+       case 81:
+               return KB_PGDN;
+       default:
+               break;
+       }
+
+       if(key >= 58 && key <= 70) {
+               return KB_F1 + (key - 59);
+       }
+
+       return -1;
+}
+
 int poll_input(union event *ev)
 {
+       static int special;
+
        if(have_input()) {
                ev->type = EV_KEY;
-               ev->key.key = getch();
+               if((ev->key.key = getch()) == 0) {
+                       special = 1;
+                       return 0;
+               }
+
+               if(special) {
+                       special = 0;
+                       if((ev->key.key = conv_special(ev->key.key)) == -1) {
+                               return 0;
+                       }
+               } else {
+                       if(ev->key.key == '\r') {
+                               ev->key.key = '\n';
+                       }
+               }
                return 1;
        }
        return 0;
index c983835..39e5ccc 100644 (file)
@@ -11,6 +11,18 @@ static unsigned short *framebuf = (unsigned short*)0xb8000;
 
 #define UPD_ATTR       attr = (fgcol << 8) | (bgcol << 12)
 
+void tg_init(void)
+{
+}
+
+void tg_cleanup(void)
+{
+}
+
+void tg_redraw(void)
+{
+}
+
 void tg_clear(void)
 {
        tg_rect(0, 0, 0, 80, 25, 0);
index 07cec45..cf76a6b 100644 (file)
--- a/src/ftp.c
+++ b/src/ftp.c
@@ -6,6 +6,8 @@
 #include <ctype.h>
 #include <time.h>
 #include <sys/socket.h>
+#include <sys/select.h>
+#include <sys/swap.h>
 #include <arpa/inet.h>
 #include <netinet/in.h>
 #include <netdb.h>
 #include <fcntl.h>
 #define closesocket            close
 #define fcntlsocket            fcntl
+#else
+#define select select_s
+
+#ifndef O_NONBLOCK
+#define O_NONBLOCK     0x2000
+#endif
+#ifndef F_SETFL
+#define F_GETFL        101
+#define F_SETFL        102
+#endif
 #endif
 
 #define TIMEOUT        15
@@ -236,7 +248,7 @@ int ftp_queue(struct ftp *ftp, int op, const char *arg)
        return 0;
 }
 
-int ftp_waitresp(struct ftp *ftp, time_t timeout)
+int ftp_waitresp(struct ftp *ftp, long timeout)
 {
        fd_set rdset;
        struct timeval tv;
@@ -280,7 +292,7 @@ int ftp_waitresp(struct ftp *ftp, time_t timeout)
 static int ftp_active(struct ftp *ftp)
 {
        struct sockaddr_in sa = {0};
-       socklen_t len;
+       int len;
        unsigned long addr;
        unsigned short port;
 
@@ -692,8 +704,8 @@ static int cproc_pasv(struct ftp *ftp, int code, const char *buf, void *cls)
                goto nopasv;
        }
        port = (addr[4] << 8) | addr[5];
-       ipaddr = ((uint32_t)addr[0] << 24) | ((uint32_t)addr[1] << 16) |
-               ((uint32_t)addr[2] << 8) | addr[3];
+       ipaddr = ((unsigned int)addr[0] << 24) | ((unsigned int)addr[1] << 16) |
+               ((unsigned int)addr[2] << 8) | addr[3];
 
        if((ftp->data = socket(PF_INET, SOCK_STREAM, 0)) == -1) {
                fprintf(stderr, "ftp_passive: failed to allocate socket\n");
@@ -709,7 +721,7 @@ static int cproc_pasv(struct ftp *ftp, int code, const char *buf, void *cls)
 
        if(connect(ftp->data, (struct sockaddr*)&sa, sizeof sa) == -1) {
                errmsg("ftp_passive: failed to connect to %s:%p\n", inet_ntoa(sa.sin_addr), port);
-               close(ftp->data);
+               closesocket(ftp->data);
                ftp->data = -1;
                goto nopasv;
        }
index 5765b62..d588e56 100644 (file)
--- a/src/ftp.h
+++ b/src/ftp.h
@@ -76,7 +76,7 @@ int ftp_sockets(struct ftp *ftp, int *sockv, int maxsize);
 int ftp_handle(struct ftp *ftp, int s);
 
 int ftp_queue(struct ftp *ftp, int op, const char *arg);
-int ftp_waitresp(struct ftp *ftp, time_t timeout);
+int ftp_waitresp(struct ftp *ftp, long timeout);
 
 int ftp_update(struct ftp *ftp);
 int ftp_pwd(struct ftp *ftp);
index 9b4f9d5..5fdacc6 100644 (file)
@@ -3,7 +3,7 @@
 #include <signal.h>
 #include <errno.h>
 #include <assert.h>
-#ifdef __MSDOS__
+#ifdef __DOS__
 #include <direct.h>
 #else
 #include <unistd.h>
 #include "ftp.h"
 #include "darray.h"
 
+#ifdef __DOS__
+#define select select_s
+#endif
+
 void updateui(void);
 int update_localdir(void);
 int proc_input(void);
@@ -104,6 +108,10 @@ int main(int argc, char **argv)
                                break;
                        }
                }
+#else
+               if(proc_input() == -1) {
+                       break;
+               }
 #endif
 
                for(i=0; i<numsock; i++) {