summaryrefslogtreecommitdiff
path: root/pfinet.old/glue-include/linux
diff options
context:
space:
mode:
authorroot <root@(null).(none)>2009-05-03 17:20:00 +0200
committerroot <root@(null).(none)>2009-05-03 17:20:00 +0200
commite0faf22f31c48fb27b43c1825897d26e58feafc4 (patch)
tree65a09372b31e08a3a865bd0a88cd2718bafcd643 /pfinet.old/glue-include/linux
This is my initial working version.
There is a bug in boot in this version: subhurd sometimes cannot boot.
Diffstat (limited to 'pfinet.old/glue-include/linux')
-rw-r--r--pfinet.old/glue-include/linux/CVS/Entries36
-rw-r--r--pfinet.old/glue-include/linux/CVS/Repository1
-rw-r--r--pfinet.old/glue-include/linux/CVS/Root1
-rw-r--r--pfinet.old/glue-include/linux/autoconf.h0
-rw-r--r--pfinet.old/glue-include/linux/binfmts.h1
-rw-r--r--pfinet.old/glue-include/linux/config.h1
-rw-r--r--pfinet.old/glue-include/linux/errno.h13
-rw-r--r--pfinet.old/glue-include/linux/fcntl.h1
-rw-r--r--pfinet.old/glue-include/linux/fs.h21
-rw-r--r--pfinet.old/glue-include/linux/if.h3
-rw-r--r--pfinet.old/glue-include/linux/in.h44
-rw-r--r--pfinet.old/glue-include/linux/in6.h110
-rw-r--r--pfinet.old/glue-include/linux/interrupt.h44
-rw-r--r--pfinet.old/glue-include/linux/ioctl.h1
-rw-r--r--pfinet.old/glue-include/linux/ipv6.h117
-rw-r--r--pfinet.old/glue-include/linux/kernel.h78
-rw-r--r--pfinet.old/glue-include/linux/limits.h8
-rw-r--r--pfinet.old/glue-include/linux/major.h0
-rw-r--r--pfinet.old/glue-include/linux/malloc.h27
-rw-r--r--pfinet.old/glue-include/linux/mm.h38
-rw-r--r--pfinet.old/glue-include/linux/param.h1
-rw-r--r--pfinet.old/glue-include/linux/personality.h1
-rw-r--r--pfinet.old/glue-include/linux/poll.h24
-rw-r--r--pfinet.old/glue-include/linux/proc_fs.h0
-rw-r--r--pfinet.old/glue-include/linux/sched.h203
-rw-r--r--pfinet.old/glue-include/linux/slab.h0
-rw-r--r--pfinet.old/glue-include/linux/socket.h148
-rw-r--r--pfinet.old/glue-include/linux/sockios.h0
-rw-r--r--pfinet.old/glue-include/linux/stat.h1
-rw-r--r--pfinet.old/glue-include/linux/string.h1
-rw-r--r--pfinet.old/glue-include/linux/termios.h1
-rw-r--r--pfinet.old/glue-include/linux/time.h10
-rw-r--r--pfinet.old/glue-include/linux/timer.h36
-rw-r--r--pfinet.old/glue-include/linux/timex.h0
-rw-r--r--pfinet.old/glue-include/linux/types.h31
-rw-r--r--pfinet.old/glue-include/linux/un.h0
-rw-r--r--pfinet.old/glue-include/linux/version.h3
-rw-r--r--pfinet.old/glue-include/linux/wait.h32
38 files changed, 1037 insertions, 0 deletions
diff --git a/pfinet.old/glue-include/linux/CVS/Entries b/pfinet.old/glue-include/linux/CVS/Entries
new file mode 100644
index 00000000..67752075
--- /dev/null
+++ b/pfinet.old/glue-include/linux/CVS/Entries
@@ -0,0 +1,36 @@
+/autoconf.h/1.1/Fri Feb 4 06:32:38 2000//
+/binfmts.h/1.1/Fri Feb 4 06:32:38 2000//
+/config.h/1.1/Fri Feb 4 06:32:38 2000//
+/errno.h/1.1/Fri Feb 4 06:32:39 2000//
+/fcntl.h/1.1/Fri Feb 4 06:32:39 2000//
+/fs.h/1.1/Fri Feb 4 06:32:39 2000//
+/if.h/1.2/Tue Jun 10 21:56:19 2008//
+/in.h/1.1/Fri Feb 4 06:32:39 2000//
+/in6.h/1.2/Mon Oct 8 21:59:09 2007//
+/interrupt.h/1.1/Fri Feb 4 06:32:39 2000//
+/ioctl.h/1.1/Fri Feb 4 06:32:39 2000//
+/ipv6.h/1.2/Mon Oct 8 21:59:10 2007//
+/kernel.h/1.1/Fri Feb 4 06:32:39 2000//
+/limits.h/1.1/Fri Feb 4 06:32:39 2000//
+/major.h/1.1/Fri Feb 4 06:32:39 2000//
+/malloc.h/1.1/Fri Feb 4 06:32:39 2000//
+/mm.h/1.2/Sat Feb 5 12:48:25 2000//
+/param.h/1.1/Fri Feb 4 06:32:39 2000//
+/personality.h/1.1/Fri Feb 4 06:32:39 2000//
+/poll.h/1.2/Wed Jul 26 18:44:39 2000//
+/proc_fs.h/1.1/Fri Feb 4 06:32:39 2000//
+/sched.h/1.2/Sun Oct 14 23:33:38 2001//
+/slab.h/1.1/Fri Feb 4 06:32:39 2000//
+/socket.h/1.5/Sun Aug 3 19:07:26 2008//
+/sockios.h/1.1/Fri Feb 4 06:32:39 2000//
+/stat.h/1.1/Fri Feb 4 06:32:39 2000//
+/string.h/1.1/Fri Feb 4 06:32:39 2000//
+/termios.h/1.1/Fri Feb 4 06:32:39 2000//
+/time.h/1.1/Fri Feb 4 06:32:39 2000//
+/timer.h/1.1/Fri Feb 4 06:32:39 2000//
+/timex.h/1.1/Fri Feb 4 06:32:39 2000//
+/types.h/1.1/Fri Feb 4 06:32:39 2000//
+/un.h/1.1/Fri Feb 4 06:32:39 2000//
+/version.h/1.1/Fri Feb 4 06:32:39 2000//
+/wait.h/1.1/Fri Feb 4 06:32:39 2000//
+D
diff --git a/pfinet.old/glue-include/linux/CVS/Repository b/pfinet.old/glue-include/linux/CVS/Repository
new file mode 100644
index 00000000..067eddbb
--- /dev/null
+++ b/pfinet.old/glue-include/linux/CVS/Repository
@@ -0,0 +1 @@
+hurd/pfinet/glue-include/linux
diff --git a/pfinet.old/glue-include/linux/CVS/Root b/pfinet.old/glue-include/linux/CVS/Root
new file mode 100644
index 00000000..55403097
--- /dev/null
+++ b/pfinet.old/glue-include/linux/CVS/Root
@@ -0,0 +1 @@
+:pserver:anonymous@cvs.savannah.gnu.org:/sources/hurd
diff --git a/pfinet.old/glue-include/linux/autoconf.h b/pfinet.old/glue-include/linux/autoconf.h
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/pfinet.old/glue-include/linux/autoconf.h
diff --git a/pfinet.old/glue-include/linux/binfmts.h b/pfinet.old/glue-include/linux/binfmts.h
new file mode 100644
index 00000000..c8229dad
--- /dev/null
+++ b/pfinet.old/glue-include/linux/binfmts.h
@@ -0,0 +1 @@
+#include <linux/capability.h>
diff --git a/pfinet.old/glue-include/linux/config.h b/pfinet.old/glue-include/linux/config.h
new file mode 100644
index 00000000..be1e4d3f
--- /dev/null
+++ b/pfinet.old/glue-include/linux/config.h
@@ -0,0 +1 @@
+#include <linux/errno.h>
diff --git a/pfinet.old/glue-include/linux/errno.h b/pfinet.old/glue-include/linux/errno.h
new file mode 100644
index 00000000..7afcd9fd
--- /dev/null
+++ b/pfinet.old/glue-include/linux/errno.h
@@ -0,0 +1,13 @@
+#ifndef _HACK_ERRNO_H
+#define _HACK_ERRNO_H
+
+#include <errno.h>
+#include <hurd.h>
+
+#define ERESTARTSYS EINTR
+#define ENOPKG ENOSYS
+#define ENOIOCTLCMD ENOTTY
+
+#undef errno
+
+#endif
diff --git a/pfinet.old/glue-include/linux/fcntl.h b/pfinet.old/glue-include/linux/fcntl.h
new file mode 100644
index 00000000..cd304557
--- /dev/null
+++ b/pfinet.old/glue-include/linux/fcntl.h
@@ -0,0 +1 @@
+#include <fcntl.h>
diff --git a/pfinet.old/glue-include/linux/fs.h b/pfinet.old/glue-include/linux/fs.h
new file mode 100644
index 00000000..45dbb19f
--- /dev/null
+++ b/pfinet.old/glue-include/linux/fs.h
@@ -0,0 +1,21 @@
+#ifndef _HACK_FS_H
+#define _HACK_FS_H
+
+#include <linux/net.h>
+
+/* Hackery */
+struct inode
+{
+ union
+ {
+ int i_garbage;
+ struct socket socket_i; /* icmp.c actually needs this!! */
+ } u;
+};
+#define i_uid u.i_garbage
+#define i_gid u.i_garbage
+#define i_sock u.i_garbage
+#define i_ino u.i_garbage
+#define i_mode u.i_garbage
+
+#endif
diff --git a/pfinet.old/glue-include/linux/if.h b/pfinet.old/glue-include/linux/if.h
new file mode 100644
index 00000000..7d4563c3
--- /dev/null
+++ b/pfinet.old/glue-include/linux/if.h
@@ -0,0 +1,3 @@
+#include <net/if.h>
+
+#define IFF_VOLATILE (IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|IFF_ALLMULTI)
diff --git a/pfinet.old/glue-include/linux/in.h b/pfinet.old/glue-include/linux/in.h
new file mode 100644
index 00000000..074c70e3
--- /dev/null
+++ b/pfinet.old/glue-include/linux/in.h
@@ -0,0 +1,44 @@
+#ifndef _HACK_IN_H_
+#define _HACK_IN_H_
+
+#include <netinet/in.h>
+
+/* IP_MTU_DISCOVER values */
+#define IP_PMTUDISC_DONT 0 /* Never send DF frames */
+#define IP_PMTUDISC_WANT 1 /* Use per route hints */
+#define IP_PMTUDISC_DO 2 /* Always DF */
+
+/* These need to appear somewhere around here */
+#define IP_DEFAULT_MULTICAST_TTL 1
+#define IP_DEFAULT_MULTICAST_LOOP 1
+
+struct ip_mreqn
+{
+ struct in_addr imr_multiaddr; /* IP multicast address of group */
+ struct in_addr imr_address; /* local IP address of interface */
+ int imr_ifindex; /* Interface index */
+};
+
+struct in_pktinfo
+{
+ int ipi_ifindex;
+ struct in_addr ipi_spec_dst;
+ struct in_addr ipi_addr;
+};
+
+
+/* <asm/byteorder.h> contains the htonl type stuff.. */
+#include <asm/byteorder.h>
+
+#ifdef __KERNEL__
+/* Some random defines to make it easier in the kernel.. */
+#define LOOPBACK(x) (((x) & htonl(0xff000000)) == htonl(0x7f000000))
+#define MULTICAST(x) (((x) & htonl(0xf0000000)) == htonl(0xe0000000))
+#define BADCLASS(x) (((x) & htonl(0xf0000000)) == htonl(0xf0000000))
+#define ZERONET(x) (((x) & htonl(0xff000000)) == htonl(0x00000000))
+#define LOCAL_MCAST(x) (((x) & htonl(0xFFFFFF00)) == htonl(0xE0000000))
+
+#endif
+
+
+#endif
diff --git a/pfinet.old/glue-include/linux/in6.h b/pfinet.old/glue-include/linux/in6.h
new file mode 100644
index 00000000..c3e5dfc4
--- /dev/null
+++ b/pfinet.old/glue-include/linux/in6.h
@@ -0,0 +1,110 @@
+#ifndef GLUE_LINUX_IN6_H
+#define GLUE_LINUX_IN6_H 1
+
+#include <netinet/in.h>
+
+#if 0
+struct ipv6_mreq {
+ /* IPv6 multicast address of group */
+ struct in6_addr ipv6mr_multiaddr;
+
+ /* local IPv6 address of interface */
+ int ipv6mr_ifindex;
+};
+#endif
+
+/* In Linux's struct ipv6_mreq the second member is called ipv6mr_ifindex,
+ * however it's called ipv6mr_interface in ours.
+ */
+#define ipv6mr_ifindex ipv6mr_interface
+
+struct in6_flowlabel_req
+{
+ struct in6_addr flr_dst;
+ __u32 flr_label;
+ __u8 flr_action;
+ __u8 flr_share;
+ __u16 flr_flags;
+ __u16 flr_expires;
+ __u16 flr_linger;
+ __u32 __flr_pad;
+ /* Options in format of IPV6_PKTOPTIONS */
+};
+
+#define IPV6_FL_A_GET 0
+#define IPV6_FL_A_PUT 1
+#define IPV6_FL_A_RENEW 2
+
+#define IPV6_FL_F_CREATE 1
+#define IPV6_FL_F_EXCL 2
+
+#define IPV6_FL_S_NONE 0
+#define IPV6_FL_S_EXCL 1
+#define IPV6_FL_S_PROCESS 2
+#define IPV6_FL_S_USER 3
+#define IPV6_FL_S_ANY 255
+
+
+/*
+ * Bitmask constant declarations to help applications select out the
+ * flow label and priority fields.
+ *
+ * Note that this are in host byte order while the flowinfo field of
+ * sockaddr_in6 is in network byte order.
+ */
+
+#define IPV6_FLOWINFO_FLOWLABEL 0x000fffff
+#define IPV6_FLOWINFO_PRIORITY 0x0ff00000
+
+/* These defintions are obsolete */
+#define IPV6_PRIORITY_UNCHARACTERIZED 0x0000
+#define IPV6_PRIORITY_FILLER 0x0100
+#define IPV6_PRIORITY_UNATTENDED 0x0200
+#define IPV6_PRIORITY_RESERVED1 0x0300
+#define IPV6_PRIORITY_BULK 0x0400
+#define IPV6_PRIORITY_RESERVED2 0x0500
+#define IPV6_PRIORITY_INTERACTIVE 0x0600
+#define IPV6_PRIORITY_CONTROL 0x0700
+#define IPV6_PRIORITY_8 0x0800
+#define IPV6_PRIORITY_9 0x0900
+#define IPV6_PRIORITY_10 0x0a00
+#define IPV6_PRIORITY_11 0x0b00
+#define IPV6_PRIORITY_12 0x0c00
+#define IPV6_PRIORITY_13 0x0d00
+#define IPV6_PRIORITY_14 0x0e00
+#define IPV6_PRIORITY_15 0x0f00
+
+/*
+ * IPv6 TLV options.
+ */
+#define IPV6_TLV_PAD0 0
+#define IPV6_TLV_PADN 1
+#define IPV6_TLV_ROUTERALERT 20
+#define IPV6_TLV_JUMBO 194
+
+/*
+ * IPV6 socket options
+ */
+
+#define IPV6_ADDRFORM 1
+#define IPV6_PKTINFO 2
+#define IPV6_HOPOPTS 3
+#define IPV6_DSTOPTS 4
+#define IPV6_RTHDR 5
+#define IPV6_PKTOPTIONS 6
+#define IPV6_CHECKSUM 7
+#define IPV6_HOPLIMIT 8
+#define IPV6_NEXTHOP 9
+#define IPV6_AUTHHDR 10
+#define IPV6_FLOWINFO 11
+
+/* IPV6_MTU_DISCOVER values */
+#define IPV6_PMTUDISC_DONT 0
+#define IPV6_PMTUDISC_WANT 1
+#define IPV6_PMTUDISC_DO 2
+
+/* Flowlabel */
+#define IPV6_FLOWLABEL_MGR 32
+#define IPV6_FLOWINFO_SEND 33
+
+#endif /* not GLUE_LINUX_IN6_H */
diff --git a/pfinet.old/glue-include/linux/interrupt.h b/pfinet.old/glue-include/linux/interrupt.h
new file mode 100644
index 00000000..5f485e32
--- /dev/null
+++ b/pfinet.old/glue-include/linux/interrupt.h
@@ -0,0 +1,44 @@
+#ifndef _HACK_INTERRUPT_H_
+#define _HACK_INTERRUPT_H_
+
+#include <linux/netdevice.h>
+#include "pfinet.h"
+
+#define in_interrupt() (0)
+#define synchronize_irq() ((void) 0)
+
+#define synchronize_bh() ((void) 0) /* XXX ? */
+
+/* The code that can call these are already entered holding
+ global_lock, which locks out the net_bh worker thread. */
+#define start_bh_atomic() ((void) 0)
+#define end_bh_atomic() ((void) 0)
+/*
+extern struct mutex net_bh_lock;
+#define start_bh_atomic() __mutex_lock (&net_bh_lock)
+#define end_bh_atomic() __mutex_unlock (&net_bh_lock)
+*/
+
+/* See sched.c::net_bh_worker comments. */
+extern struct condition net_bh_wakeup;
+
+#define NET_BH 0xb00bee51
+
+/* The only call to this ever reached is in net/core/dev.c::netif_rx,
+ to announce having enqueued a packet on `backlog'. */
+static inline void
+mark_bh (int bh)
+{
+ assert (bh == NET_BH);
+ condition_broadcast (&net_bh_wakeup);
+}
+
+void net_bh (void);
+static inline void
+init_bh (int bh, void (*fn) (void))
+{
+ assert (bh == NET_BH);
+ assert (fn == &net_bh);
+}
+
+#endif
diff --git a/pfinet.old/glue-include/linux/ioctl.h b/pfinet.old/glue-include/linux/ioctl.h
new file mode 100644
index 00000000..6ec92cf7
--- /dev/null
+++ b/pfinet.old/glue-include/linux/ioctl.h
@@ -0,0 +1 @@
+#include <sys/ioctl.h>
diff --git a/pfinet.old/glue-include/linux/ipv6.h b/pfinet.old/glue-include/linux/ipv6.h
new file mode 100644
index 00000000..5a1604a3
--- /dev/null
+++ b/pfinet.old/glue-include/linux/ipv6.h
@@ -0,0 +1,117 @@
+#ifndef _IPV6_H
+#define _IPV6_H
+
+#include <linux/in6.h>
+#include <asm/byteorder.h>
+
+/* The latest drafts declared increase in minimal mtu up to 1280. */
+
+#define IPV6_MIN_MTU 1280
+
+/*
+ * Advanced API
+ * source interface/address selection, source routing, etc...
+ * *under construction*
+ */
+
+
+struct in6_ifreq {
+ struct in6_addr ifr6_addr;
+ __u32 ifr6_prefixlen;
+ int 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 {
+ __u8 nexthdr;
+ __u8 hdrlen;
+ __u8 type;
+ __u8 segments_left;
+
+ /*
+ * type specific data
+ * variable length field
+ */
+};
+
+
+struct ipv6_opt_hdr {
+ __u8 nexthdr;
+ __u8 hdrlen;
+ /*
+ * TLV encoded option data follows.
+ */
+};
+
+#define ipv6_destopt_hdr ipv6_opt_hdr
+#define ipv6_hopopt_hdr ipv6_opt_hdr
+
+#ifdef __KERNEL__
+#define ipv6_optlen(p) (((p)->hdrlen+1) << 3)
+#endif
+
+/*
+ * routing header type 0 (used in cmsghdr struct)
+ */
+
+struct rt0_hdr {
+ struct ipv6_rt_hdr rt_hdr;
+ __u32 bitmap; /* strict/loose bit map */
+ struct in6_addr addr[0];
+
+#define rt0_type rt_hdr.type;
+};
+
+/*
+ * IPv6 fixed header
+ *
+ * BEWARE, it is incorrect. The first 4 bits of flow_lbl
+ * are glued to priority now, forming "class".
+ */
+
+struct ipv6hdr {
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+ __u8 priority:4,
+ version:4;
+#elif defined(__BIG_ENDIAN_BITFIELD)
+ __u8 version:4,
+ priority:4;
+#else
+#error "Please fix <asm/byteorder.h>"
+#endif
+ __u8 flow_lbl[3];
+
+ __u16 payload_len;
+ __u8 nexthdr;
+ __u8 hop_limit;
+
+ struct in6_addr saddr;
+ struct in6_addr daddr;
+};
+
+#ifdef __KERNEL__
+
+/*
+ This structure contains results of exthdrs parsing
+ as offsets from skb->nh.
+ */
+
+struct inet6_skb_parm
+{
+ int iif;
+ __u16 ra;
+ __u16 hop;
+ __u16 auth;
+ __u16 dst0;
+ __u16 srcrt;
+ __u16 dst1;
+};
+
+#endif
+
+#endif
diff --git a/pfinet.old/glue-include/linux/kernel.h b/pfinet.old/glue-include/linux/kernel.h
new file mode 100644
index 00000000..a0e101b9
--- /dev/null
+++ b/pfinet.old/glue-include/linux/kernel.h
@@ -0,0 +1,78 @@
+#ifndef _HACK_KERNEL_H
+#define _HACK_KERNEL_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+
+/* These don't actually matter since our locking protocols are different. */
+#define barrier() ((void)0) /*__asm__ __volatile__("": : :"memory") */
+
+#define NORET_TYPE /**/
+#define ATTRIB_NORET __attribute__((noreturn))
+#define NORET_AND noreturn,
+#define FASTCALL(x) x
+
+/* XXX do something syslogy */
+#define KERN_EMERG
+#define KERN_ALERT
+#define KERN_CRIT
+#define KERN_ERR
+#define KERN_WARNING
+#define KERN_NOTICE
+#define KERN_INFO
+#define KERN_DEBUG
+
+#define panic(str...) (printk (str), assert (!"panic"))
+
+/*
+ * Display an IP address in readable format.
+ */
+
+#define NIPQUAD(addr) \
+ ((unsigned char *)&addr)[0], \
+ ((unsigned char *)&addr)[1], \
+ ((unsigned char *)&addr)[2], \
+ ((unsigned char *)&addr)[3]
+
+
+#include <linux/sched.h>
+#include <linux/bitops.h>
+
+#define printk printf
+
+extern inline int
+getname (const char *name, char **newp)
+{
+ *newp = malloc (strlen (name) + 1);
+ strcpy (*newp, name);
+ return 0;
+}
+
+extern inline void
+putname (char *p)
+{
+ free (p);
+}
+
+/* These two functions are used only to send SIGURG. But I can't
+ find any SIGIO code at all. So we'll just punt on that; clearly
+ Linux is missing the point. SIGURG should only be sent for
+ sockets that have explicitly requested it. */
+extern inline int
+kill_proc (int pid, int signo, int priv)
+{
+ assert (signo == SIGURG);
+ return 0;
+}
+
+extern inline int
+kill_pg (int pgrp, int signo, int priv)
+{
+ assert (signo == SIGURG);
+ return 0;
+}
+
+
+#endif
diff --git a/pfinet.old/glue-include/linux/limits.h b/pfinet.old/glue-include/linux/limits.h
new file mode 100644
index 00000000..856c3bde
--- /dev/null
+++ b/pfinet.old/glue-include/linux/limits.h
@@ -0,0 +1,8 @@
+#ifndef _HACK_LIMITS_H
+#define _HACK_LIMITS_H
+
+#include <limits.h>
+
+#define UIO_MAXIOV 1024 /* probably 1 would do */
+
+#endif
diff --git a/pfinet.old/glue-include/linux/major.h b/pfinet.old/glue-include/linux/major.h
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/pfinet.old/glue-include/linux/major.h
diff --git a/pfinet.old/glue-include/linux/malloc.h b/pfinet.old/glue-include/linux/malloc.h
new file mode 100644
index 00000000..46ae1051
--- /dev/null
+++ b/pfinet.old/glue-include/linux/malloc.h
@@ -0,0 +1,27 @@
+#ifndef _HACK_MALLOC_H_
+#define _HACK_MALLOC_H_
+
+#include <linux/mm.h>
+
+#include <stdlib.h>
+
+static inline void *kmalloc (size_t sz, int ignored) { return malloc (sz); }
+static inline void kfree (void *ptr) { free (ptr); }
+static inline void kfree_s (void *ptr, size_t sz) { free (ptr); }
+#define free(x) kfree(x) /* just don't ask */
+
+
+typedef struct kmem_cache_s kmem_cache_t;
+
+#define SLAB_HWCACHE_ALIGN 0 /* flag everybody uses */
+#define SLAB_ATOMIC 0
+
+
+extern kmem_cache_t *kmem_cache_create(const char *, size_t, size_t, unsigned long,
+ void (*)(void *, kmem_cache_t *, unsigned long),
+ void (*)(void *, kmem_cache_t *, unsigned long));
+extern void *kmem_cache_alloc(kmem_cache_t *, int);
+extern void kmem_cache_free(kmem_cache_t *, void *);
+
+
+#endif
diff --git a/pfinet.old/glue-include/linux/mm.h b/pfinet.old/glue-include/linux/mm.h
new file mode 100644
index 00000000..546776e8
--- /dev/null
+++ b/pfinet.old/glue-include/linux/mm.h
@@ -0,0 +1,38 @@
+#ifndef _HACK_MM_H_
+#define _HACK_MM_H_
+
+#include <linux/kernel.h>
+#include <linux/sched.h>
+
+/* All memory addresses are presumptively valid, because they are
+ all internal. */
+#define verify_area(a,b,c) 0
+
+#define VERIFY_READ 0
+#define VERIFY_WRITE 0
+#define GFP_ATOMIC 0
+#define GFP_KERNEL 0
+#define GFP_BUFFER 0
+#define __GFP_WAIT 0
+
+#include <mach.h>
+#include <sys/mman.h>
+#include <stdint.h>
+
+#define PAGE_SIZE (1 << PAGE_SHIFT)
+
+/* The one use of this is by net/ipv4/tcp.c::tcp_init, which
+ uses the power of two above `num_physpages >> (20 - PAGE_SHIFT)'
+ as a starting point and halves from there the number of pages
+ it tries to allocate for the hash table of TCP connections. */
+#define num_physpages (64 << 20 >> PAGE_SHIFT) /* XXX calculate for 32MB */
+
+static inline uintptr_t
+__get_free_pages (int gfp_mask, unsigned long int order)
+{
+ void *ptr = mmap (0, PAGE_SIZE << order,
+ PROT_READ|PROT_WRITE, MAP_ANON, 0, 0);
+ return ptr == MAP_FAILED ? 0 : (uintptr_t) ptr;
+}
+
+#endif
diff --git a/pfinet.old/glue-include/linux/param.h b/pfinet.old/glue-include/linux/param.h
new file mode 100644
index 00000000..39efaf0d
--- /dev/null
+++ b/pfinet.old/glue-include/linux/param.h
@@ -0,0 +1 @@
+#include <sys/param.h>
diff --git a/pfinet.old/glue-include/linux/personality.h b/pfinet.old/glue-include/linux/personality.h
new file mode 100644
index 00000000..9e218435
--- /dev/null
+++ b/pfinet.old/glue-include/linux/personality.h
@@ -0,0 +1 @@
+#include <linux/linkage.h>
diff --git a/pfinet.old/glue-include/linux/poll.h b/pfinet.old/glue-include/linux/poll.h
new file mode 100644
index 00000000..b21c3c71
--- /dev/null
+++ b/pfinet.old/glue-include/linux/poll.h
@@ -0,0 +1,24 @@
+#ifndef _HACK_POLL_H_
+#define _HACK_POLL_H_
+
+#include <hurd/hurd_types.h>
+
+#define POLLIN SELECT_READ
+#define POLLRDNORM SELECT_READ
+#define POLLOUT SELECT_WRITE
+#define POLLWRNORM SELECT_WRITE
+#define POLLWRBAND SELECT_WRITE
+#define POLLPRI SELECT_URG
+#define POLLERR SELECT_READ | SELECT_WRITE
+#define POLLHUP SELECT_READ
+
+typedef struct poll_table_struct { } poll_table;
+
+#include <linux/sched.h>
+
+static inline void
+poll_wait(struct file * filp, struct wait_queue ** wait_address, poll_table *p)
+{
+}
+
+#endif
diff --git a/pfinet.old/glue-include/linux/proc_fs.h b/pfinet.old/glue-include/linux/proc_fs.h
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/pfinet.old/glue-include/linux/proc_fs.h
diff --git a/pfinet.old/glue-include/linux/sched.h b/pfinet.old/glue-include/linux/sched.h
new file mode 100644
index 00000000..f57de2c3
--- /dev/null
+++ b/pfinet.old/glue-include/linux/sched.h
@@ -0,0 +1,203 @@
+#ifndef _HACK_SCHED_H
+#define _HACK_SCHED_H
+
+#include <sys/signal.h>
+#include <sys/time.h>
+#include <mach.h>
+#include <hurd/hurd_types.h>
+#include <limits.h>
+#include <assert.h>
+#include <cthreads.h>
+
+#include "mapped-time.h"
+
+#include <linux/binfmts.h>
+#include <linux/personality.h>
+#include <linux/tasks.h>
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/times.h>
+#include <linux/timex.h>
+
+#include <asm/system.h>
+#if 0
+#include <asm/semaphore.h>
+#include <asm/page.h>
+
+#include <linux/smp.h>
+#include <linux/tty.h>
+#include <linux/sem.h>
+#include <linux/signal.h>
+#include <linux/securebits.h>
+#endif
+
+#include <linux/kernel.h>
+#include <linux/net.h>
+#include <linux/wait.h>
+#include <linux/timer.h>
+
+
+#define jiffies (fetch_jiffies ())
+
+#define current (&current_contents)
+extern struct task_struct current_contents;
+struct task_struct
+{
+ uid_t pgrp, pid;
+ int flags;
+ int timeout;
+ int signal;
+ int blocked;
+ int state, policy;
+ int isroot;
+ char *comm;
+ struct wait_queue **next_wait;
+};
+
+static inline void
+prepare_current (int isroot)
+{
+ current->signal = 0;
+ current->isroot = isroot;
+ /* All other members are constant zero and ignored. */
+}
+#define become_task(user) prepare_current ((user)->isroot)
+#define become_task_protid(protid) prepare_current ((protid)->isroot)
+
+#define signal_pending(current) ((current)->signal)
+
+/* FLAGS in task_struct's. */
+#define PF_EXITING 1
+/* STATE in task_struct's. */
+#define TASK_INTERRUPTIBLE 0
+#define TASK_RUNNING 0
+/* policy in task_struct's. */
+#define SCHED_YIELD 0
+
+struct semaphore { };
+
+
+extern inline int
+suser ()
+{
+ return current->isroot;
+};
+
+extern inline int
+capable(int cap)
+{
+ return current->isroot;
+}
+
+
+extern struct mutex global_lock;
+
+static inline void
+interruptible_sleep_on (struct wait_queue **p)
+{
+ struct condition **condp = (void *) p, *c;
+ int isroot;
+ struct wait_queue **next_wait;
+
+ c = *condp;
+ if (c == 0)
+ {
+ c = malloc (sizeof **condp);
+ assert (c);
+ condition_init (c);
+ *condp = c;
+ }
+
+ isroot = current->isroot; /* This is our context that needs switched. */
+ next_wait = current->next_wait; /* This too, for multiple schedule calls. */
+ current->next_wait = 0;
+ if (hurd_condition_wait (c, &global_lock))
+ current->signal = 1; /* We got cancelled, mark it for later. */
+ current->isroot = isroot; /* Switch back to our context. */
+ current->next_wait = next_wait;
+}
+#define sleep_on interruptible_sleep_on
+
+static inline void
+wake_up_interruptible (struct wait_queue **p)
+{
+ struct condition **condp = (void *) p, *c = *condp;
+ if (c)
+ condition_broadcast (c);
+}
+#define wake_up wake_up_interruptible
+
+
+static inline void
+add_wait_queue(struct wait_queue ** p, struct wait_queue * wait)
+{
+ assert (current->next_wait == 0);
+ current->next_wait = p;
+}
+
+static inline void
+remove_wait_queue(struct wait_queue ** p, struct wait_queue * wait)
+{
+ assert (current->next_wait == p);
+ current->next_wait = 0;
+}
+
+static inline void
+schedule (void)
+{
+ assert (current->next_wait);
+ interruptible_sleep_on (current->next_wait);
+}
+
+static inline void
+process_schedule_timeout (unsigned long data)
+{
+ struct wait_queue **sleep = (struct wait_queue **) data;
+
+ wake_up_interruptible (sleep);
+}
+
+static inline long
+schedule_timeout (long timeout)
+{
+ long expire = timeout + jiffies;
+ struct timer_list timer;
+ struct wait_queue *sleep = 0; /* See comment in wait.h why this suffices. */
+
+ init_timer (&timer);
+ timer.expires = expire;
+ timer.data = (unsigned long) &sleep;
+ timer.function = process_schedule_timeout;
+ add_timer (&timer);
+
+ interruptible_sleep_on (&sleep);
+ if (signal_pending (current))
+ {
+ /* We were canceled. */
+ del_timer (&timer);
+ expire -= jiffies;
+ if (expire >= 0)
+ return expire;
+ else
+ return 0;
+ }
+ return 0;
+}
+
+#define MAX_SCHEDULE_TIMEOUT LONG_MAX
+
+/* This function is used only to send SIGPIPE to the current
+ task. In all such cases, EPIPE is returned anyhow. In the
+ Hurd, servers are not responsible for SIGPIPE; the library
+ does that itself upon receiving EPIPE. So we can just
+ NOP such calls. */
+extern inline int
+send_sig (u_long signo, struct task_struct *task, int priv)
+{
+ assert (signo == SIGPIPE);
+ assert (task == current);
+ return 0;
+}
+
+
+#endif
diff --git a/pfinet.old/glue-include/linux/slab.h b/pfinet.old/glue-include/linux/slab.h
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/pfinet.old/glue-include/linux/slab.h
diff --git a/pfinet.old/glue-include/linux/socket.h b/pfinet.old/glue-include/linux/socket.h
new file mode 100644
index 00000000..3f2a7971
--- /dev/null
+++ b/pfinet.old/glue-include/linux/socket.h
@@ -0,0 +1,148 @@
+#ifndef _HACK_SOCKET_H_
+#define _HACK_SOCKET_H_
+
+#include <linux/types.h>
+#include <asm/system.h>
+
+#include <sys/socket.h>
+#include <sys/uio.h>
+#include <sys/ioctl.h>
+#include <limits.h>
+
+
+/* #define IP_MAX_MEMBERSHIPS 10 */
+
+#define IPTOS_LOWDELAY 0x10
+#define IPTOS_THROUGHPUT 0x08
+#define IPTOS_RELIABILITY 0x04
+
+#define SOPRI_INTERACTIVE 0
+#define SOPRI_NORMAL 1
+#define SOPRI_BACKGROUND 2
+
+#define SOL_IP IPPROTO_IP
+#define SOL_TCP IPPROTO_TCP
+#define SOL_IPV6 IPPROTO_IPV6
+#define SOL_ICMPV6 IPPROTO_ICMPV6
+#define SOL_RAW IPPROTO_RAW
+
+/* IP options */
+#define IP_PKTINFO 190
+#define IP_PKTOPTIONS 191
+#define IP_MTU_DISCOVER 192
+#define IP_RECVERR 193
+#define IP_RECVTTL 194
+#define IP_RECVTOS 195
+#define IP_MTU 196
+#define IP_ROUTER_ALERT 197
+
+
+/* TCP options */
+#define TCP_NODELAY 1
+#define TCP_MAXSEG 2
+#define TCP_CORK 3
+
+#define SO_NO_CHECK 11
+#define SO_PRIORITY 12
+
+#define SO_PASSCRED 190
+#define SO_PEERCRED 191
+#define SO_BSDCOMPAT 192
+
+/* Maximum queue length specifiable by listen. */
+#ifndef SOMAXCONN
+#define SOMAXCONN 128
+#endif
+
+#ifndef CMSG_DATA
+#define msg_control msg_accrights
+#define msg_controllen msg_accrightslen
+struct cmsghdr { int cmsg_garbage; };
+#define cmsg_len cmsg_garbage
+#define cmsg_type cmsg_garbage
+#define cmsg_level cmsg_garbage
+static inline int
+put_cmsg(struct msghdr *msg, int level, int type, int len, void *data)
+{ return 0; }
+#define CMSG_FIRSTHDR(msg) (0)
+#define CMSG_NXTHDR(msg, cmsg) (0)
+#define CMSG_DATA(cmsg) (0)
+#define CMSG_ALIGN(size) (0)
+#define CMSG_LEN(size) (0)
+#else
+static inline int
+put_cmsg(struct msghdr *msg, int level, int type, int len, void *data)
+{ return 0; }
+#endif
+
+#define MSG_ERRQUEUE 0
+
+/* There is no SOCK_PACKET, it is a bad bad thing. This chicanery is
+ because the one use of it is a comparison against a `short int' value;
+ using a value outside the range of that type ensures that the comparison
+ will always fail, and in fact it and the dead code will get optimized
+ out entirely at compile time. */
+#define SOCK_PACKET ((int)((uint32_t)USHRT_MAX) * 2)
+#define PF_PACKET 0
+
+#ifndef UIO_MAXIOV
+#define UIO_MAXIOV 4 /* 1 would do */
+#endif
+
+
+struct ucred {
+ pid_t pid;
+ uid_t uid;
+ gid_t gid;
+};
+
+
+extern inline int /* Does not modify IOV. */
+memcpy_fromiovecend (unsigned char *kdata, struct iovec *iov,
+ int offset, int len)
+{
+ assert (offset + len <= iov->iov_len);
+ memcpy (kdata, iov->iov_base + offset, len);
+ return 0;
+}
+extern inline int /* Modifies IOV to consume LEN bytes. */
+memcpy_fromiovec (unsigned char *kdata, struct iovec *iov, int len)
+{
+ assert (len <= iov->iov_len);
+ memcpy (kdata, iov->iov_base, len);
+ iov->iov_base += len;
+ iov->iov_len -= len;
+ return 0;
+}
+extern inline void /* Modifies IOV to consume LEN bytes. */
+memcpy_tokerneliovec (struct iovec *iov, unsigned char *kdata, int len)
+{
+ assert (len <= iov->iov_len);
+ memcpy (iov->iov_base, kdata, len);
+ iov->iov_base += len;
+ iov->iov_len -= len;
+}
+extern inline int /* Modifies IOV to consume LEN bytes. */
+memcpy_toiovec (struct iovec *iov, unsigned char *kdata, int len)
+{
+ memcpy_tokerneliovec (iov, kdata, len);
+ return 0;
+}
+
+extern int csum_partial_copy_fromiovecend(unsigned char *kdata,
+ struct iovec *iov,
+ int offset,
+ unsigned int len, int *csump);
+
+static inline int move_addr_to_kernel(void *uaddr, int ulen, void *kaddr)
+{
+ abort ();
+ return 0;
+}
+#if 0
+extern int verify_iovec(struct msghdr *m, struct iovec *iov, char *address, int mode);
+extern int move_addr_to_user(void *kaddr, int klen, void *uaddr, int *ulen);
+#endif
+
+
+#endif
diff --git a/pfinet.old/glue-include/linux/sockios.h b/pfinet.old/glue-include/linux/sockios.h
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/pfinet.old/glue-include/linux/sockios.h
diff --git a/pfinet.old/glue-include/linux/stat.h b/pfinet.old/glue-include/linux/stat.h
new file mode 100644
index 00000000..5165069b
--- /dev/null
+++ b/pfinet.old/glue-include/linux/stat.h
@@ -0,0 +1 @@
+#include <sys/stat.h>
diff --git a/pfinet.old/glue-include/linux/string.h b/pfinet.old/glue-include/linux/string.h
new file mode 100644
index 00000000..3b2f5900
--- /dev/null
+++ b/pfinet.old/glue-include/linux/string.h
@@ -0,0 +1 @@
+#include <string.h>
diff --git a/pfinet.old/glue-include/linux/termios.h b/pfinet.old/glue-include/linux/termios.h
new file mode 100644
index 00000000..9e269565
--- /dev/null
+++ b/pfinet.old/glue-include/linux/termios.h
@@ -0,0 +1 @@
+#include <termios.h>
diff --git a/pfinet.old/glue-include/linux/time.h b/pfinet.old/glue-include/linux/time.h
new file mode 100644
index 00000000..4973c4ab
--- /dev/null
+++ b/pfinet.old/glue-include/linux/time.h
@@ -0,0 +1,10 @@
+#ifndef _HACK_TIME_H_
+#define _HACK_TIME_H_
+
+#include <sys/time.h>
+#include "mapped-time.h"
+
+#define do_gettimeofday(tp) maptime_read (mapped_time, (tp))
+#define get_fast_time(tp) maptime_read (mapped_time, (tp))
+
+#endif
diff --git a/pfinet.old/glue-include/linux/timer.h b/pfinet.old/glue-include/linux/timer.h
new file mode 100644
index 00000000..cc8dec80
--- /dev/null
+++ b/pfinet.old/glue-include/linux/timer.h
@@ -0,0 +1,36 @@
+#ifndef _HACK_TIMER_H_
+#define _HACK_TIMER_H_
+
+#include <cthreads.h>
+
+enum tstate
+{
+ TIMER_INACTIVE,
+ TIMER_STARTING,
+ TIMER_STARTED,
+ TIMER_EXPIRED,
+ TIMER_FUNCTION_RUNNING,
+};
+
+struct timer_list
+{
+ struct timer_list *next, **prev; /* things like to test "T->prev != NULL" */
+ unsigned long expires;
+ unsigned long data;
+ void (*function)(unsigned long);
+};
+
+void add_timer (struct timer_list *);
+int del_timer (struct timer_list *);
+void mod_timer (struct timer_list *, unsigned long);
+void init_timer (struct timer_list *);
+
+
+#define time_after(a,b) ((long)(b) - (long)(a) < 0)
+#define time_before(a,b) time_after(b,a)
+
+#define time_after_eq(a,b) ((long)(a) - (long)(b) >= 0)
+#define time_before_eq(a,b) time_after_eq(b,a)
+
+
+#endif
diff --git a/pfinet.old/glue-include/linux/timex.h b/pfinet.old/glue-include/linux/timex.h
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/pfinet.old/glue-include/linux/timex.h
diff --git a/pfinet.old/glue-include/linux/types.h b/pfinet.old/glue-include/linux/types.h
new file mode 100644
index 00000000..604b8b14
--- /dev/null
+++ b/pfinet.old/glue-include/linux/types.h
@@ -0,0 +1,31 @@
+#ifndef _HACK_TYPES_H
+#define _HACK_TYPES_H
+
+#include <sys/types.h>
+#include <sys/uio.h>
+#include <stdint.h>
+#include <assert.h>
+#include <string.h>
+
+#define __u8 uint8_t
+#define __u16 uint16_t
+#define __u32 uint32_t
+#define __u64 uint64_t
+#define __s8 int8_t
+#define __s16 int16_t
+#define __s32 int32_t
+#define __s64 int64_t
+#define u8 uint8_t
+#define u16 uint16_t
+#define u32 uint32_t
+#define u64 uint64_t
+#define s8 int8_t
+#define s16 int16_t
+#define s32 int32_t
+#define s64 int64_t
+
+#include <asm/system.h>
+#include <asm/byteorder.h>
+#include <linux/errno.h>
+
+#endif
diff --git a/pfinet.old/glue-include/linux/un.h b/pfinet.old/glue-include/linux/un.h
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/pfinet.old/glue-include/linux/un.h
diff --git a/pfinet.old/glue-include/linux/version.h b/pfinet.old/glue-include/linux/version.h
new file mode 100644
index 00000000..3a49a481
--- /dev/null
+++ b/pfinet.old/glue-include/linux/version.h
@@ -0,0 +1,3 @@
+#define UTS_RELEASE "2.1.12"
+#define LINUX_VERSION_CODE KERNEL_VERSION(2,1,12)
+#define KERNEL_VERSION(x,y,z) (((x)<<16)+((y)<<8)+(z))
diff --git a/pfinet.old/glue-include/linux/wait.h b/pfinet.old/glue-include/linux/wait.h
new file mode 100644
index 00000000..7ee962dc
--- /dev/null
+++ b/pfinet.old/glue-include/linux/wait.h
@@ -0,0 +1,32 @@
+#ifndef _HACK_WAIT_H_
+#define _HACK_WAIT_H_
+
+#include <cthreads.h>
+
+/* This data structure actually represents one waiter on a wait queue,
+ and waiters always expect to initialize it with { current, NULL }.
+ The actual wait queue is a `struct wait_queue *' stored somewhere.
+ We ignore these structures provided by the waiters entirely.
+ In the `struct wait_queue *' that is the "head of the wait queue" slot,
+ we actually store a `struct condition *' pointing to malloc'd storage. */
+
+struct wait_queue
+{
+ struct task_struct *task; /* current */
+ struct wait_queue *next; /* NULL */
+};
+
+
+struct select_table_elt
+{
+ struct condition *dependent_condition;
+ struct select_table_elt *next;
+};
+
+typedef struct select_table_struct
+{
+ struct condition master_condition;
+ struct select_table_elt *head;
+} select_table;
+
+#endif