From e0faf22f31c48fb27b43c1825897d26e58feafc4 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 3 May 2009 17:20:00 +0200 Subject: This is my initial working version. There is a bug in boot in this version: subhurd sometimes cannot boot. --- pfinet.old/glue-include/linux/CVS/Entries | 36 +++++ pfinet.old/glue-include/linux/CVS/Repository | 1 + pfinet.old/glue-include/linux/CVS/Root | 1 + pfinet.old/glue-include/linux/autoconf.h | 0 pfinet.old/glue-include/linux/binfmts.h | 1 + pfinet.old/glue-include/linux/config.h | 1 + pfinet.old/glue-include/linux/errno.h | 13 ++ pfinet.old/glue-include/linux/fcntl.h | 1 + pfinet.old/glue-include/linux/fs.h | 21 +++ pfinet.old/glue-include/linux/if.h | 3 + pfinet.old/glue-include/linux/in.h | 44 ++++++ pfinet.old/glue-include/linux/in6.h | 110 +++++++++++++++ pfinet.old/glue-include/linux/interrupt.h | 44 ++++++ pfinet.old/glue-include/linux/ioctl.h | 1 + pfinet.old/glue-include/linux/ipv6.h | 117 +++++++++++++++ pfinet.old/glue-include/linux/kernel.h | 78 ++++++++++ pfinet.old/glue-include/linux/limits.h | 8 ++ pfinet.old/glue-include/linux/major.h | 0 pfinet.old/glue-include/linux/malloc.h | 27 ++++ pfinet.old/glue-include/linux/mm.h | 38 +++++ pfinet.old/glue-include/linux/param.h | 1 + pfinet.old/glue-include/linux/personality.h | 1 + pfinet.old/glue-include/linux/poll.h | 24 ++++ pfinet.old/glue-include/linux/proc_fs.h | 0 pfinet.old/glue-include/linux/sched.h | 203 +++++++++++++++++++++++++++ pfinet.old/glue-include/linux/slab.h | 0 pfinet.old/glue-include/linux/socket.h | 148 +++++++++++++++++++ pfinet.old/glue-include/linux/sockios.h | 0 pfinet.old/glue-include/linux/stat.h | 1 + pfinet.old/glue-include/linux/string.h | 1 + pfinet.old/glue-include/linux/termios.h | 1 + pfinet.old/glue-include/linux/time.h | 10 ++ pfinet.old/glue-include/linux/timer.h | 36 +++++ pfinet.old/glue-include/linux/timex.h | 0 pfinet.old/glue-include/linux/types.h | 31 ++++ pfinet.old/glue-include/linux/un.h | 0 pfinet.old/glue-include/linux/version.h | 3 + pfinet.old/glue-include/linux/wait.h | 32 +++++ 38 files changed, 1037 insertions(+) create mode 100644 pfinet.old/glue-include/linux/CVS/Entries create mode 100644 pfinet.old/glue-include/linux/CVS/Repository create mode 100644 pfinet.old/glue-include/linux/CVS/Root create mode 100644 pfinet.old/glue-include/linux/autoconf.h create mode 100644 pfinet.old/glue-include/linux/binfmts.h create mode 100644 pfinet.old/glue-include/linux/config.h create mode 100644 pfinet.old/glue-include/linux/errno.h create mode 100644 pfinet.old/glue-include/linux/fcntl.h create mode 100644 pfinet.old/glue-include/linux/fs.h create mode 100644 pfinet.old/glue-include/linux/if.h create mode 100644 pfinet.old/glue-include/linux/in.h create mode 100644 pfinet.old/glue-include/linux/in6.h create mode 100644 pfinet.old/glue-include/linux/interrupt.h create mode 100644 pfinet.old/glue-include/linux/ioctl.h create mode 100644 pfinet.old/glue-include/linux/ipv6.h create mode 100644 pfinet.old/glue-include/linux/kernel.h create mode 100644 pfinet.old/glue-include/linux/limits.h create mode 100644 pfinet.old/glue-include/linux/major.h create mode 100644 pfinet.old/glue-include/linux/malloc.h create mode 100644 pfinet.old/glue-include/linux/mm.h create mode 100644 pfinet.old/glue-include/linux/param.h create mode 100644 pfinet.old/glue-include/linux/personality.h create mode 100644 pfinet.old/glue-include/linux/poll.h create mode 100644 pfinet.old/glue-include/linux/proc_fs.h create mode 100644 pfinet.old/glue-include/linux/sched.h create mode 100644 pfinet.old/glue-include/linux/slab.h create mode 100644 pfinet.old/glue-include/linux/socket.h create mode 100644 pfinet.old/glue-include/linux/sockios.h create mode 100644 pfinet.old/glue-include/linux/stat.h create mode 100644 pfinet.old/glue-include/linux/string.h create mode 100644 pfinet.old/glue-include/linux/termios.h create mode 100644 pfinet.old/glue-include/linux/time.h create mode 100644 pfinet.old/glue-include/linux/timer.h create mode 100644 pfinet.old/glue-include/linux/timex.h create mode 100644 pfinet.old/glue-include/linux/types.h create mode 100644 pfinet.old/glue-include/linux/un.h create mode 100644 pfinet.old/glue-include/linux/version.h create mode 100644 pfinet.old/glue-include/linux/wait.h (limited to 'pfinet.old/glue-include/linux') 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 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 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 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 +#include + +#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 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 + +/* 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 + +#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 + +/* 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; +}; + + +/* contains the htonl type stuff.. */ +#include + +#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 + +#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 +#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 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 +#include + +/* 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 " +#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 +#include +#include + + +/* 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 +#include + +#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 + +#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 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 + +#include + +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 +#include + +/* 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 +#include +#include + +#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 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 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 + +#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 + +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 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 +#include +#include +#include +#include +#include +#include + +#include "mapped-time.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#if 0 +#include +#include + +#include +#include +#include +#include +#include +#endif + +#include +#include +#include +#include + + +#define jiffies (fetch_jiffies ()) + +#define current (¤t_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 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 +#include + +#include +#include +#include +#include + + +/* #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 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 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 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 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 +#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 + +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 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 +#include +#include +#include +#include + +#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 +#include +#include + +#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 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 + +/* 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 -- cgit v1.2.3