Diffs to .8

Alan Cox (alan@lxorguk.ukuu.org.uk)
Wed, 29 May 96 22:42 BST


diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/CREDITS linux/CREDITS
--- linux.vanilla/CREDITS Tue May 28 21:51:06 1996
+++ linux/CREDITS Wed May 29 22:11:33 1996
@@ -306,6 +306,14 @@
S: Pittsburgh, Pennsylvania 15237-5829
S: USA

+N: Eddie C. Dost
+E: ecd@skynet.be
+D: Linux/Sparc kernel hacker
+D: New Linux/Sparc maintainer (while davem is at SGI)
+S: Rue de la Chapelle 51
+S: 4850 Moresnet
+S: Belgium
+
N: Thomas Dunbar
E: tdunbar@vtaix.cc.vt.edu
D: TeX & METAFONT hacking/maintenance
@@ -875,6 +883,14 @@
S: RWTH-Aachen
S: D-52056 Aachen
S: Germany
+
+N: Nigel Metheringham
+E: Nigel.Metheringham@ThePLAnet.net
+D: IP Masquerading work and minor fixes
+S: Planet Online
+S: The White House, Melbourne Street, LEEDS
+S: LS2 7PS, UK
+P: 1024/31455639 B7 99 BD B8 00 17 BD 46 C1 15 B8 AB 87 BC 25 FA

N: Craig Metz
E: cmetz@tjhsst.edu
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/Documentation/Configure.help linux/Documentation/Configure.help
--- linux.vanilla/Documentation/Configure.help Tue May 28 21:53:15 1996
+++ linux/Documentation/Configure.help Tue May 28 22:31:04 1996
@@ -267,7 +267,7 @@
of the chipset, and permits faster I/O speeds to be set as well.
See the README.ide and ali14xx.c files for more info.

-PROMISE DC4030 support (ALPHA)
+PROMISE DC4030 support (EXPERIMENTAL)
CONFIG_BLK_DEV_PROMISE
This driver is enabled at runtime using the "ide0=dc4030" kernel
boot parameter. It enables support for the secondary IDE interface
@@ -866,14 +866,14 @@
packets it received. The information is handled by the klogd demon
which is responsible for kernel messages ("man klogd").

-IP: transparent proxying (ALPHA)
+IP: transparent proxying (EXPERIMENTAL)
CONFIG_IP_TRANSPARENT_PROXY
This enables you to redirect any network traffic to a local server,
acting as a "transparent proxy server". Redirection is activated
by defining special input firewall rules (using the ipfwadm utility)
and/or by doing an appropriate bind() system call.

-IP: masquerading (ALPHA)
+IP: masquerading (EXPERIMENTAL)
CONFIG_IP_MASQUERADE
If one of the computers on your local network for which your Linux
box acts as a firewall wants to send something to the outside, your
@@ -888,14 +888,12 @@
even if they don't have officially registered IP addresses. (This
last problem can also be solved by connecting the Linux box to the
Internet using SLiRP [SLiRP is a SLIP/PPP emulator that works if you
- have a regular dial up shell account on some UNIX computer; get if
- via ftp (user: anonymous) from
- sunsite.unc.edu:/pub/Linux/system/Network/serial/]). Details on how
- to set things up are contained in the IP Masquerading FAQ, available
- via ftp (user: anonymous) from ftp.eves.com:/pub/masq/. This is
- ALPHA code, which means that it need not be completely stable; it
- has nothing to do with the computer architecture of the same
- name. If you want this, say Y.
+ have a regular dial up shell account on some UNIX computer; get it
+ from ftp://sunsite.unc.edu/pub/Linux/system/Network/serial/
+ Details on how to set things up are contained in the
+ IP Masquerading FAQ, available at http://www.indyramp.com/masq/
+ This is EXPERIMENTAL code, which means that it need not be completely
+ stable. If you want this, say Y.

IP: always defragment
CONFIG_IP_ALWAYS_DEFRAG
@@ -909,7 +907,10 @@
have a more reliable firewall (otherwise second and further fragments
will always be accepted by the firewall). When using transparent
proxying (CONFIG_IP_TRANSPARENT_PROXY), this option is implicit,
- although it is safe to say Y here.
+ although it is safe to say Y here. Do not say Y to this option except
+ when running either a firewall that is the sole link to your network or
+ a transparent proxy. Never ever say Y to this for a normal router or
+ host.

IP: aliasing support
CONFIG_IP_ALIAS
@@ -1142,7 +1143,7 @@
sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini. The Bridging code is
still in test. If unsure, say N.

-Kernel/User network link driver(ALPHA)
+Kernel/User network link driver (EXPERIMENTAL)
CONFIG_NETLINK
This driver allows for two-way communication between certain parts
of the kernel or modules and user processes; the user processes are
@@ -1150,8 +1151,7 @@
directory having major mode 36. So far, the kernel uses it to
publish some network related information if you enable "Routing
messages", below. Say Y if you want to experiment with it; this is
- ALPHA code, which means that it need not be completely stable; it
- has nothing to do with the computer architecture of the same name.
+ EXPERIMENTAL code, which means that it need not be completely stable.
You need to include this if you want to use arpd, a daemon that
helps keep the internal ARP cache (a mapping between IP addresses
and hardware addresses on the local network) small. If unsure, say
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/MAINTAINERS linux/MAINTAINERS
--- linux.vanilla/MAINTAINERS Tue May 28 21:53:18 1996
+++ linux/MAINTAINERS Wed May 29 22:11:33 1996
@@ -257,8 +257,8 @@
S: Maintained

SPARC:
-P: David S. Miller
-M: davem@caip.rutgers.edu
+P: Eddie C. Dost
+M: ecd@skynet.be
L: sparclinux@vger.rutgers.edu
S: Maintained

diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/Makefile linux/Makefile
--- linux.vanilla/Makefile Tue May 28 21:50:56 1996
+++ linux/Makefile Wed May 29 22:16:35 1996
@@ -11,7 +11,7 @@
#
# NOTE! SMP is experimental. See the file Documentation/SMP.txt
#
-# SMP = 1
+SMP = 1
#
# SMP profiling options
# SMP_PROF = 1
@@ -37,7 +37,7 @@
AR =$(CROSS_COMPILE)ar
NM =$(CROSS_COMPILE)nm
STRIP =$(CROSS_COMPILE)strip
-MAKE =make
+MAKE =make -j2
AWK =gawk

all: do-it-all
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/README linux/README
--- linux.vanilla/README Tue May 28 21:51:42 1996
+++ linux/README Tue May 28 22:35:11 1996
@@ -138,6 +138,11 @@
"make zlilo" if you have lilo installed to suit the kernel makefiles,
but you may want to check your particular lilo setup first.

+ - if you configured any of the parts of the kernel as `modules', you
+ will have to do "make modules" followed by "make modules_install".
+ Read Documentation/modules.txt for more information. For example,
+ an explanation of how to use the modules is included there.
+
- keep a backup kernel handy in case something goes wrong. This is
especially true for the development releases, since each new release
contains new code which has not been debugged.
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/arch/i386/Makefile linux/arch/i386/Makefile
--- linux.vanilla/arch/i386/Makefile Tue May 28 21:52:42 1996
+++ linux/arch/i386/Makefile Wed May 29 22:17:21 1996
@@ -122,6 +122,9 @@
install: vmlinux
@$(MAKEBOOT) install

+binstall: vmlinux
+ @$(MAKEBOOT) binstall
+
archclean:
@$(MAKEBOOT) clean
$(MAKE) -C arch/$(ARCH)/kernel clean
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/arch/i386/boot/Makefile linux/arch/i386/boot/Makefile
--- linux.vanilla/arch/i386/boot/Makefile Tue May 28 21:52:41 1996
+++ linux/arch/i386/boot/Makefile Wed May 29 22:17:08 1996
@@ -53,6 +53,9 @@
install: $(CONFIGURE) zImage
sh ./install.sh $(VERSION).$(PATCHLEVEL).$(SUBLEVEL) zImage $(TOPDIR)/System.map "$(INSTALL_PATH)"

+binstall: $(CONFIGURE) bzImage
+ sh ./binstall.sh $(VERSION).$(PATCHLEVEL).$(SUBLEVEL) bzImage $(TOPDIR)/System.map "$(INSTALL_PATH)"
+
tools/build: tools/build.c
$(HOSTCC) $(HOSTCFLAGS) -o $@ $< -I$(TOPDIR)/include

diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/arch/i386/boot/binstall.sh linux/arch/i386/boot/binstall.sh
--- linux.vanilla/arch/i386/boot/binstall.sh Thu Jan 1 01:00:00 1970
+++ linux/arch/i386/boot/binstall.sh Wed May 29 22:17:08 1996
@@ -0,0 +1,39 @@
+#!/bin/sh
+#
+# arch/i386/boot/binstall.sh
+#
+# This file is subject to the terms and conditions of the GNU General Public
+# License. See the file "COPYING" in the main directory of this archive
+# for more details.
+#
+# Copyright (C) 1995 by Linus Torvalds
+#
+# Adapted from code in arch/i386/boot/Makefile by H. Peter Anvin
+#
+# "make binstall" script for i386 architecture
+#
+# Arguments:
+# $1 - kernel version
+# $2 - kernel image file
+# $3 - kernel map file
+# $4 - default install path (blank if root directory)
+#
+
+# User may have a custom install script
+
+if [ -x /sbin/installbkernel ]; then exec /sbin/installbkernel "$@"; fi
+
+# Default install - same as make bzlilo
+
+if [ -f $4/vmlinuz ]; then
+ mv $4/vmlinuz $4/vmlinuz.old
+fi
+
+if [ -f $4/System.map ]; then
+ mv $4/System.map $4/System.old
+fi
+
+cat $2 > $4/vmlinuz
+cp $3 $4/System.map
+
+if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/drivers/char/Config.in linux/drivers/char/Config.in
--- linux.vanilla/drivers/char/Config.in Tue May 28 21:52:05 1996
+++ linux/drivers/char/Config.in Tue May 28 22:07:07 1996
@@ -14,13 +14,19 @@
fi
tristate 'SDL RISCom/8 card support' CONFIG_RISCOM8
tristate 'Parallel printer support' CONFIG_PRINTER
-tristate 'Logitech busmouse support' CONFIG_BUSMOUSE
-tristate 'PS/2 mouse (aka "auxiliary device") support' CONFIG_PSMOUSE
-if [ "$CONFIG_PSMOUSE" != "n" ]; then
- bool 'C&T 82C710 mouse port support (as on TI Travelmate)' CONFIG_82C710_MOUSE
+
+
+bool 'Bus Mouse Support' CONFIG_MOUSE
+if [ "$CONFIG_MOUSE" = "y" ]; then
+ tristate 'ATIXL busmouse support' CONFIG_ATIXL_BUSMOUSE
+ tristate 'Logitech busmouse support' CONFIG_BUSMOUSE
+ tristate 'Microsoft busmouse support' CONFIG_MS_BUSMOUSE
+ tristate 'PS/2 mouse (aka "auxiliary device") support' CONFIG_PSMOUSE
+ if [ "$CONFIG_PSMOUSE" != "n" ]; then
+ bool 'C&T 82C710 mouse port support (as on TI Travelmate)' CONFIG_82C710_MOUSE
+ fi
fi
-tristate 'Microsoft busmouse support' CONFIG_MS_BUSMOUSE
-tristate 'ATIXL busmouse support' CONFIG_ATIXL_BUSMOUSE
+
bool 'Support for user misc device modules' CONFIG_UMISC

bool 'QIC-02 tape support' CONFIG_QIC02_TAPE
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/drivers/net/ppp.c linux/drivers/net/ppp.c
--- linux.vanilla/drivers/net/ppp.c Tue May 28 21:51:43 1996
+++ linux/drivers/net/ppp.c Wed May 29 22:12:57 1996
@@ -6,7 +6,7 @@
* Dynamic PPP devices by Jim Freeman <jfree@caldera.com>.
* ppp_tty_receive ``noisy-raise-bug'' fixed by Ove Ewerlid <ewerlid@syscon.uu.se>
*
- * ==FILEVERSION 960303==
+ * ==FILEVERSION 960528==
*
* NOTE TO MAINTAINERS:
* If you modify this file at all, please set the number above to the
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/drivers/scsi/scsi.c linux/drivers/scsi/scsi.c
--- linux.vanilla/drivers/scsi/scsi.c Tue May 28 21:52:12 1996
+++ linux/drivers/scsi/scsi.c Wed May 29 22:25:36 1996
@@ -1569,9 +1569,15 @@
case SUGGEST_IS_OK:
break;
case SUGGEST_REMAP:
+#ifdef DEBUG
+ printk("SENSE SUGGEST REMAP - status = FINISHED\n");
+#endif
+ status = FINISHED;
+ exit = DRIVER_SENSE | SUGGEST_ABORT;
+ break;
case SUGGEST_RETRY:
#ifdef DEBUG
- printk("SENSE SUGGEST REMAP or SUGGEST RETRY - status = MAYREDO\n");
+ printk("SENSE SUGGEST RETRY - status = MAYREDO\n");
#endif
status = MAYREDO;
exit = DRIVER_SENSE | SUGGEST_RETRY;
@@ -1606,6 +1612,9 @@
status = REDO;
break;
case SUGGEST_REMAP:
+ status = FINISHED;
+ exit = DRIVER_SENSE | SUGGEST_ABORT;
+ break;
case SUGGEST_RETRY:
status = MAYREDO;
exit = DRIVER_SENSE | SUGGEST_RETRY;
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/drivers/scsi/scsi_ioctl.c linux/drivers/scsi/scsi_ioctl.c
--- linux.vanilla/drivers/scsi/scsi_ioctl.c Tue May 28 21:52:13 1996
+++ linux/drivers/scsi/scsi_ioctl.c Wed May 29 22:26:10 1996
@@ -150,7 +150,7 @@
result = SCpnt->result;
SCpnt->request.rq_status = RQ_INACTIVE;

- if(SCpnt->device->scsi_request_fn)
+ if (!SCpnt->device->was_reset && SCpnt->device->scsi_request_fn)
(*SCpnt->device->scsi_request_fn)();

wake_up(&SCpnt->device->device_wait);
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/fs/Config.in linux/fs/Config.in
--- linux.vanilla/fs/Config.in Tue May 28 21:51:00 1996
+++ linux/fs/Config.in Tue May 28 22:26:08 1996
@@ -35,9 +35,11 @@
tristate 'ISO9660 cdrom filesystem support' CONFIG_ISO9660_FS
tristate 'OS/2 HPFS filesystem support (read only)' CONFIG_HPFS_FS
tristate 'System V and Coherent filesystem support' CONFIG_SYSV_FS
-tristate 'Amiga FFS filesystem support (EXPERIMENTAL)' CONFIG_AFFS_FS
-if [ "$CONFIG_AFFS_FS" = "y" -o "$CONFIG_AFFS_FS" = "m" ]; then
- define_bool CONFIG_AMIGA_PARTITION y
+if [ "$CONFIG_EXPERIMENTAL = "y" ]; then
+ tristate 'Amiga FFS filesystem support (EXPERIMENTAL)' CONFIG_AFFS_FS
+ if [ "$CONFIG_AFFS_FS" != "n" ]; then
+ define_bool CONFIG_AMIGA_PARTITION y
+ fi
fi
tristate 'UFS filesystem support (read only)' CONFIG_UFS_FS
if [ "$CONFIG_UFS_FS" != "n" ]; then
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/fs/isofs/inode.c linux/fs/isofs/inode.c
--- linux.vanilla/fs/isofs/inode.c Tue May 28 21:50:57 1996
+++ linux/fs/isofs/inode.c Wed May 29 22:20:21 1996
@@ -455,6 +455,17 @@
return (inode->u.isofs_i.i_first_extent >> ISOFS_BUFFER_BITS(inode)) + block;
}

+
+static void test_and_set_uid(uid_t *p, uid_t value)
+{
+ if(value) {
+ *p = value;
+#if 0
+ printk("Resetting to %d\n", value);
+#endif
+ }
+}
+
void isofs_read_inode(struct inode * inode)
{
unsigned long bufsize = ISOFS_BUFFER_SIZE(inode);
@@ -593,8 +604,11 @@
/* Now test for possible Rock Ridge extensions which will override some of
these numbers in the inode structure. */

- if (!high_sierra)
+ if (!high_sierra) {
parse_rock_ridge_inode(raw_inode, inode);
+ /* hmm..if we want uid or gid set, override the rock ridge setting */
+ test_and_set_uid(&inode->i_uid, inode->i_sb->u.isofs_sb.s_uid);
+ }

#ifdef DEBUG
printk("Inode: %x extent: %x\n",inode->i_ino, inode->u.isofs_i.i_first_extent);
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/fs/nfs/dir.c linux/fs/nfs/dir.c
--- linux.vanilla/fs/nfs/dir.c Tue May 28 21:50:57 1996
+++ linux/fs/nfs/dir.c Tue May 28 22:37:43 1996
@@ -450,7 +450,12 @@
error = nfs_proc_create(NFS_SERVER(dir), NFS_FH(dir),
name, &sattr, &fhandle, &fattr);
if (!error)
+ {
nfs_lookup_cache_add(dir, name, &fhandle, &fattr);
+ /* The parent dir inode count may have changed ! */
+ nfs_lookup_cache_remove( NULL, dir, NULL);
+ }
+
iput(dir);
return error;
}
@@ -476,7 +481,12 @@
sattr.atime.seconds = sattr.mtime.seconds = (unsigned) -1;
error = nfs_proc_mkdir(NFS_SERVER(dir), NFS_FH(dir),
name, &sattr, &fhandle, &fattr);
- if (!error)
+ if (!error &&
+ /* Cope with NewsOS 4.1R Bug where News returns the attributes
+ of the parent not the newly created directory!
+ -- Dr Olaf Flebbe */
+ (fattr.fileid != dir->i_ino)
+ )
nfs_lookup_cache_add(dir, name, &fhandle, &fattr);
iput(dir);
return error;
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/fs/nfs/nfsroot.c linux/fs/nfs/nfsroot.c
--- linux.vanilla/fs/nfs/nfsroot.c Tue May 28 21:50:58 1996
+++ linux/fs/nfs/nfsroot.c Tue May 28 22:17:24 1996
@@ -1079,7 +1079,7 @@
sizeof(nfs_data.hostname)-1);

/* Set the name of the directory to mount */
- if (nfs_path[0] == '\0' || !strncmp(name, "default", 7))
+ if (nfs_path[0] == '\0' || strncmp(name, "default", 7))
strncpy(buf, name, NFS_MAXPATHLEN);
else
strncpy(buf, nfs_path, NFS_MAXPATHLEN);
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/include/linux/if_arp.h linux/include/linux/if_arp.h
--- linux.vanilla/include/linux/if_arp.h Tue May 28 21:51:11 1996
+++ linux/include/linux/if_arp.h Tue May 28 21:58:33 1996
@@ -34,6 +34,7 @@
#define ARPHRD_ARCNET 7 /* ARCnet */
#define ARPHRD_APPLETLK 8 /* APPLEtalk */
#define ARPHRD_DLCI 15 /* Frame Relay DLCI */
+#define ARPHRD_METRICOM 23 /* Metricom STRIP (new IANA id) */

/* Dummy types for non ARP hardware */
#define ARPHRD_SLIP 256
@@ -50,7 +51,6 @@
#define ARPHRD_SKIP 771 /* SKIP vif */
#define ARPHRD_LOOPBACK 772 /* Loopback device */
#define ARPHRD_LOCALTLK 773 /* Localtalk device */
-#define ARPHRD_METRICOM 774 /* Metricom STRIP */

/* ARP protocol opcodes. */
#define ARPOP_REQUEST 1 /* ARP request */
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/appletalk/ddp.c linux/net/appletalk/ddp.c
--- linux.vanilla/net/appletalk/ddp.c Tue May 28 21:51:28 1996
+++ linux/net/appletalk/ddp.c Tue May 28 22:49:59 1996
@@ -2024,6 +2024,7 @@
register_netdevice_notifier(&ddp_notifier);
aarp_proto_init();

+#ifdef CONFIG_PROC_FS
proc_net_register(&(struct proc_dir_entry) {
PROC_NET_ATALK, 9, "appletalk",
S_IFREG | S_IRUGO, 1, 0, 0,
@@ -2042,6 +2043,7 @@
0, &proc_net_inode_operations,
atalk_if_get_info
});
+#endif

printk(KERN_INFO "Appletalk 0.17 for Linux NET3.035\n");
}
@@ -2095,9 +2097,11 @@

aarp_cleanup_module();

+#ifdef CONFIG_PROC_FS
proc_net_unregister(PROC_NET_ATALK);
proc_net_unregister(PROC_NET_AT_ROUTE);
proc_net_unregister(PROC_NET_ATIF);
+#endif
unregister_netdevice_notifier(&ddp_notifier);
dev_remove_pack(&ltalk_packet_type);
dev_remove_pack(&ppptalk_packet_type);
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ax25/af_ax25.c linux/net/ax25/af_ax25.c
--- linux.vanilla/net/ax25/af_ax25.c Tue May 28 21:51:28 1996
+++ linux/net/ax25/af_ax25.c Tue May 28 22:49:04 1996
@@ -2395,7 +2395,7 @@
dev_add_pack(&bpq_packet_type);
#endif
register_netdevice_notifier(&ax25_dev_notifier);
-
+#ifdef CONFIG_PROC_FS
proc_net_register(&(struct proc_dir_entry) {
PROC_NET_AX25_ROUTE, 10, "ax25_route",
S_IFREG | S_IRUGO, 1, 0, 0,
@@ -2414,8 +2414,9 @@
0, &proc_net_inode_operations,
ax25_cs_get_info
});
+#endif

- printk(KERN_INFO "G4KLX/GW4PTS AX.25 for Linux. Version 0.32 BETA for Linux NET3.035 (Linux 2.0)\n");
+ printk(KERN_INFO "G4KLX/GW4PTS AX.25 for Linux. Version 0.32 for Linux NET3.035 (Linux 2.0)\n");

#ifdef CONFIG_BPQETHER
proc_net_register(&(struct proc_dir_entry) {
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/core/skbuff.c linux/net/core/skbuff.c
--- linux.vanilla/net/core/skbuff.c Tue May 28 21:51:30 1996
+++ linux/net/core/skbuff.c Tue May 28 22:25:22 1996
@@ -833,7 +833,8 @@
void skb_device_lock(struct sk_buff *skb)
{
if(skb->lock)
- printk("double lock on device queue!\n");
+ printk("double lock on device queue, lock=%d caller=%p\n",
+ skb->lock, __builtin_return_address(0));
else
net_locked++;
skb->lock++;
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ipv4/Config.in linux/net/ipv4/Config.in
--- linux.vanilla/net/ipv4/Config.in Tue May 28 21:51:32 1996
+++ linux/net/ipv4/Config.in Tue May 28 22:53:53 1996
@@ -8,8 +8,8 @@
if [ "$CONFIG_IP_FIREWALL" = "y" ]; then
bool 'IP: firewall packet logging' CONFIG_IP_FIREWALL_VERBOSE
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
- bool 'IP: masquerading (ALPHA)' CONFIG_IP_MASQUERADE
- bool 'IP: transparent proxy support (ALPHA)' CONFIG_IP_TRANSPARENT_PROXY
+ bool 'IP: masquerading (EXPERIMENTAL)' CONFIG_IP_MASQUERADE
+ bool 'IP: transparent proxy support (EXPERIMENTAL)' CONFIG_IP_TRANSPARENT_PROXY
fi
bool 'IP: always defragment' CONFIG_IP_ALWAYS_DEFRAG
fi
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ipv4/Makefile linux/net/ipv4/Makefile
--- linux.vanilla/net/ipv4/Makefile Tue May 28 21:51:31 1996
+++ linux/net/ipv4/Makefile Tue May 28 22:32:11 1996
@@ -40,7 +40,7 @@

ifeq ($(CONFIG_IP_MASQUERADE),y)
IPV4_OBJS += ip_masq.o ip_masq_app.o
-M_OBJS += ip_masq_ftp.o ip_masq_irc.o
+M_OBJS += ip_masq_ftp.o ip_masq_irc.o ip_masq_raudio.o
endif

ifeq ($(CONFIG_IP_ALIAS),y)
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ipv4/ip_fw.c linux/net/ipv4/ip_fw.c
--- linux.vanilla/net/ipv4/ip_fw.c Tue May 28 21:51:31 1996
+++ linux/net/ipv4/ip_fw.c Wed May 29 22:26:54 1996
@@ -1047,6 +1047,7 @@
struct ip_fw *i;
unsigned long flags;
int len, p;
+ int last_len = 0;


switch(stage)
@@ -1104,14 +1105,18 @@
len=0;
begin=pos;
}
+ else if(pos>offset+length)
+ {
+ len = last_len;
+ break;
+ }
else if(reset)
{
/* This needs to be done at this specific place! */
i->fw_pcnt=0L;
i->fw_bcnt=0L;
}
- if(pos>offset+length)
- break;
+ last_len = len;
i=i->fw_next;
}
restore_flags(flags);
@@ -1233,6 +1238,7 @@

void ip_fw_init(void)
{
+#ifdef CONFIG_PROC_FS
#ifdef CONFIG_IP_ACCT
proc_net_register(&(struct proc_dir_entry) {
PROC_NET_IPACCT, 7, "ip_acct",
@@ -1241,11 +1247,13 @@
ip_acct_procinfo
});
#endif
+#endif
#ifdef CONFIG_IP_FIREWALL

if(register_firewall(PF_INET,&ipfw_ops)<0)
panic("Unable to register IP firewall.\n");
-
+
+#ifdef CONFIG_PROC_FS
proc_net_register(&(struct proc_dir_entry) {
PROC_NET_IPFWIN, 8, "ip_input",
S_IFREG | S_IRUGO | S_IWUSR, 1, 0, 0,
@@ -1265,7 +1273,7 @@
ip_fw_fwd_procinfo
});
#endif
-
+#endif
#ifdef CONFIG_IP_MASQUERADE

/*
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ipv4/ip_input.c linux/net/ipv4/ip_input.c
--- linux.vanilla/net/ipv4/ip_input.c Tue May 28 21:51:32 1996
+++ linux/net/ipv4/ip_input.c Tue May 28 22:32:11 1996
@@ -529,25 +529,26 @@
}

#endif
+
#ifdef CONFIG_IP_MASQUERADE
- {
/*
* Do we need to de-masquerade this packet?
*/
- int ret = ip_fw_demasquerade(&skb,dev);
- if (ret < 0) {
- kfree_skb(skb, FREE_WRITE);
- return 0;
- }
-
- if (ret)
{
- struct iphdr *iph=skb->h.iph;
- if (ip_forward(skb, dev, IPFWD_MASQUERADED, iph->daddr))
+ int ret = ip_fw_demasquerade(&skb,dev);
+ if (ret < 0) {
kfree_skb(skb, FREE_WRITE);
- return 0;
+ return 0;
+ }
+
+ if (ret)
+ {
+ struct iphdr *iph=skb->h.iph;
+ if (ip_forward(skb, dev, IPFWD_MASQUERADED, iph->daddr))
+ kfree_skb(skb, FREE_WRITE);
+ return 0;
+ }
}
- }
#endif

/*
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ipv4/ip_masq.c linux/net/ipv4/ip_masq.c
--- linux.vanilla/net/ipv4/ip_masq.c Tue May 28 21:51:33 1996
+++ linux/net/ipv4/ip_masq.c Tue May 28 23:00:15 1996
@@ -12,10 +12,13 @@
* Juan Jose Ciarlante : Added hashed lookup by proto,maddr,mport and proto,saddr,sport
* Juan Jose Ciarlante : Fixed deadlock if free ports get exhausted
* Juan Jose Ciarlante : Added NO_ADDR status flag.
- * Nigel Metheringham : ICMP handling.
+ * Nigel Metheringham : Added ICMP handling for demasquerade
+ * Nigel Metheringham : Checksum checking of masqueraded data
+ *
*
*/

+#include <linux/config.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/kernel.h>
@@ -26,6 +29,7 @@
#include <linux/proc_fs.h>
#include <linux/in.h>
#include <linux/ip.h>
+#include <linux/inet.h>
#include <net/protocol.h>
#include <net/icmp.h>
#include <net/tcp.h>
@@ -458,6 +462,8 @@

/*
* We can only masquerade protocols with ports...
+ * [TODO]
+ * We may need to consider masq-ing some ICMP related to masq-ed protocols
*/

if (iph->protocol!=IPPROTO_UDP && iph->protocol!=IPPROTO_TCP)
@@ -575,8 +581,9 @@
struct iphdr *iph = skb->h.iph;
struct icmphdr *icmph = (struct icmphdr *)((char *)iph + (iph->ihl<<2));
struct iphdr *ciph; /* The ip header contained within the ICMP */
- __u16 *portptr; /* port numbers from TCP/UDP contained header */
+ __u16 *pptr; /* port numbers from TCP/UDP contained header */
struct ip_masq *ms;
+ unsigned short len = ntohs(iph->tot_len) - (iph->ihl * 4);

#ifdef DEBUG_CONFIG_IP_MASQUERADE
printk("Incoming ICMP (%d) %lX -> %lX\n",
@@ -600,19 +607,27 @@
* Find the ports involved - remember this packet was
* *outgoing* so the ports are reversed (and addresses)
*/
- portptr = (__u16 *)&(((char *)ciph)[ciph->ihl*4]);
- if (ntohs(portptr[0]) < PORT_MASQ_BEGIN ||
- ntohs(portptr[0]) > PORT_MASQ_END)
+ pptr = (__u16 *)&(((char *)ciph)[ciph->ihl*4]);
+ if (ntohs(pptr[0]) < PORT_MASQ_BEGIN ||
+ ntohs(pptr[0]) > PORT_MASQ_END)
return 0;

+ /* Ensure the checksum is correct */
+ if (ip_compute_csum((unsigned char *) icmph, len))
+ {
+ /* Failed checksum! */
+ printk(KERN_INFO "MASQ: ICMP: failed checksum from %s!\n", in_ntoa(iph->saddr));
+ return(-1);
+ }
+
#ifdef DEBUG_CONFIG_IP_MASQUERADE
printk("Handling ICMP for %lX:%X -> %lX:%X\n",
- ntohl(ciph->saddr), ntohs(portptr[0]),
- ntohl(ciph->daddr), ntohs(portptr[1]));
+ ntohl(ciph->saddr), ntohs(pptr[0]),
+ ntohl(ciph->daddr), ntohs(pptr[1]));
#endif

/* This is pretty much what ip_masq_in_get() does, except params are wrong way round */
- ms = ip_masq_in_get_2(ciph->protocol, ciph->daddr, portptr[1], ciph->saddr, portptr[0]);
+ ms = ip_masq_in_get_2(ciph->protocol, ciph->daddr, pptr[1], ciph->saddr, pptr[0]);

if (ms == NULL)
return 0;
@@ -627,17 +642,16 @@
ip_send_check(ciph);

/* the TCP/UDP source port - cannot redo check */
- portptr[0] = ms->sport;
+ pptr[0] = ms->sport;

/* And finally the ICMP checksum */
icmph->checksum = 0;
- icmph->checksum = ip_compute_csum((unsigned char *) icmph,
- skb->len - sizeof(struct iphdr));
+ icmph->checksum = ip_compute_csum((unsigned char *) icmph, len);

#ifdef DEBUG_CONFIG_IP_MASQUERADE
printk("Rewrote ICMP to %lX:%X -> %lX:%X\n",
- ntohl(ciph->saddr), ntohs(portptr[0]),
- ntohl(ciph->daddr), ntohs(portptr[1]));
+ ntohl(ciph->saddr), ntohs(pptr[0]),
+ ntohl(ciph->daddr), ntohs(pptr[1]));
#endif

return 1;
@@ -659,30 +673,44 @@
struct iphdr *iph = skb->h.iph;
__u16 *portptr;
struct ip_masq *ms;
- unsigned short frag;
-
- if (iph->protocol!=IPPROTO_UDP && iph->protocol!=IPPROTO_TCP
- && iph->protocol!=IPPROTO_ICMP)
- return 0;
-
- /*
- * Toss fragments, since we handle them in ip_rcv()
- */
+ unsigned short len;

- frag = ntohs(iph->frag_off);
+ switch (iph->protocol) {
+ case IPPROTO_ICMP:
+ return(ip_fw_demasq_icmp(skb_p, dev));
+ case IPPROTO_TCP:
+ case IPPROTO_UDP:
+ /* Make sure packet is in the masq range */
+ portptr = (__u16 *)&(((char *)iph)[iph->ihl*4]);
+ if (ntohs(portptr[1]) < PORT_MASQ_BEGIN ||
+ ntohs(portptr[1]) > PORT_MASQ_END)
+ return 0;
+ /* Check that the checksum is OK */
+ len = ntohs(iph->tot_len) - (iph->ihl * 4);
+ if ((iph->protocol == IPPROTO_UDP) && (portptr[3] == 0))
+ /* No UDP checksum */
+ break;

- if ((frag & IP_MF) != 0 || (frag & IP_OFFSET) != 0)
- {
+ switch (skb->ip_summed)
+ {
+ case CHECKSUM_NONE:
+ skb->csum = csum_partial((char *)portptr, len, 0);
+ case CHECKSUM_HW:
+ if (csum_tcpudp_magic(iph->saddr, iph->daddr, len,
+ iph->protocol, skb->csum))
+ {
+ printk(KERN_INFO "MASQ: failed TCP/UDP checksum from %s!\n",
+ in_ntoa(iph->saddr));
+ return -1;
+ }
+ default:
+ /* CHECKSUM_UNNECESSARY */
+ }
+ break;
+ default:
return 0;
}

- if (iph->protocol == IPPROTO_ICMP)
- return ip_fw_demasq_icmp(skb_p, dev);
-
- portptr = (__u16 *)&(((char *)iph)[iph->ihl*4]);
- if (ntohs(portptr[1]) < PORT_MASQ_BEGIN ||
- ntohs(portptr[1]) > PORT_MASQ_END)
- return 0;

#ifdef DEBUG_CONFIG_IP_MASQUERADE
printk("Incoming %s %lX:%X -> %lX:%X\n",
@@ -698,8 +726,6 @@

if (ms != NULL)
{
- int size;
-
/*
* Set dport if not defined yet.
*/
@@ -720,7 +746,6 @@
ntohs(ms->daddr));
#endif
}
- size = skb->len - ((unsigned char *)portptr - skb->h.raw);
iph->daddr = ms->saddr;
portptr[1] = ms->sport;

@@ -738,7 +763,7 @@
skb = *skb_p;
iph = skb->h.iph;
portptr = (__u16 *)&(((char *)iph)[iph->ihl*4]);
- size = skb->len - ((unsigned char *)portptr-skb->h.raw);
+ len = ntohs(iph->tot_len) - (iph->ihl * 4);
}

/*
@@ -750,7 +775,7 @@
*/
if (iph->protocol==IPPROTO_UDP)
{
- recalc_check((struct udphdr *)portptr,iph->saddr,iph->daddr,size);
+ recalc_check((struct udphdr *)portptr,iph->saddr,iph->daddr,len);
ip_masq_set_expire(ms, 0);
ip_masq_set_expire(ms, ip_masq_expire->udp_timeout);
}
@@ -758,8 +783,8 @@
{
struct tcphdr *th;
skb->csum = csum_partial((void *)(((struct tcphdr *)portptr) + 1),
- size - sizeof(struct tcphdr), 0);
- tcp_send_check((struct tcphdr *)portptr,iph->saddr,iph->daddr,size,skb);
+ len - sizeof(struct tcphdr), 0);
+ tcp_send_check((struct tcphdr *)portptr,iph->saddr,iph->daddr,len,skb);
/* Check if TCP RST */
th = (struct tcphdr *)portptr;
if (th->rst)
@@ -849,12 +874,14 @@
int ip_masq_init(void)
{
register_symtab (&ip_masq_syms);
+#ifdef CONFIG_PROC_FS
proc_net_register(&(struct proc_dir_entry) {
PROC_NET_IPMSQHST, 13, "ip_masquerade",
S_IFREG | S_IRUGO, 1, 0, 0,
0, &proc_net_inode_operations,
ip_msqhst_procinfo
});
+#endif
ip_masq_app_init();

return 0;
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ipv4/ip_masq_app.c linux/net/ipv4/ip_masq_app.c
--- linux.vanilla/net/ipv4/ip_masq_app.c Tue May 28 21:51:33 1996
+++ linux/net/ipv4/ip_masq_app.c Tue May 28 23:00:26 1996
@@ -21,6 +21,7 @@
*
*/

+#include <linux/config.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/kernel.h>
@@ -438,24 +439,25 @@
struct ip_masq_app * mapp;
unsigned idx;

- if (offset < 22)
- len=sprintf(buffer,"%-21s\n", "prot port n_attach");
- pos = 22;
+ if (offset < 40)
+ len=sprintf(buffer,"%-39s\n", "prot port n_attach name");
+ pos = 40;

for (idx=0 ; idx < IP_MASQ_APP_TAB_SIZE; idx++)
for (mapp = ip_masq_app_base[idx]; mapp ; mapp = mapp->next) {
/*
* If you change the length of this sprintf, then all
* the length calculations need fixing too!
- * Line length = 22 (3 + 2 + 7 + 1 + 7 + 1 + 1)
+ * Line length = 40 (3 + 2 + 7 + 1 + 7 + 1 + 2 + 17)
*/
- pos += 22;
+ pos += 40;
if (pos < offset)
continue;

- len += sprintf(buffer+len, "%-3s %-7u %-7d \n",
+ len += sprintf(buffer+len, "%-3s %-7u %-7d %-17s\n",
masq_proto_name(IP_MASQ_APP_PROTO(mapp->type)),
- IP_MASQ_APP_PORT(mapp->type), mapp->n_attach);
+ IP_MASQ_APP_PORT(mapp->type), mapp->n_attach,
+ mapp->name);

if(len >= length)
goto done;
@@ -478,14 +480,14 @@
{

register_symtab (&ip_masq_app_syms);
-
+#ifdef CONFIG_PROC_FS
proc_net_register(&(struct proc_dir_entry) {
PROC_NET_IP_MASQ_APP, 11, "ip_masq_app",
S_IFREG | S_IRUGO, 1, 0, 0,
0, &proc_net_inode_operations,
ip_masq_app_getinfo
});
-
+#endif
return 0;
}

diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ipv4/ip_masq_raudio.c linux/net/ipv4/ip_masq_raudio.c
--- linux.vanilla/net/ipv4/ip_masq_raudio.c Thu Jan 1 01:00:00 1970
+++ linux/net/ipv4/ip_masq_raudio.c Tue May 28 22:32:12 1996
@@ -0,0 +1,232 @@
+/*
+ * IP_MASQ_RAUDIO - Real Audio masquerading module
+ *
+ *
+ * Version: @(#)$Id: ip_masq_raudio.c,v 1.3 1996/05/20 13:24:26 nigel Exp $
+ *
+ * Author: Nigel Metheringham
+ * [strongly based on ftp module by Juan Jose Ciarlante & Wouter Gadeyne]
+ * [Real Audio information taken from Progressive Networks firewall docs]
+ *
+ *
+ *
+ *
+ * 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.
+ *
+ *
+ * Limitations
+ * The IP Masquerading proxies at present do not have access to a processed
+ * data stream. Hence for a protocol like the Real Audio control protocol,
+ * which depends on knowing where you are in the data stream, you either
+ * to keep a *lot* of state in your proxy, or you cheat and simplify the
+ * problem [needless to say I did the latter].
+ *
+ * This proxy only handles data in the first packet. Everything else is
+ * passed transparently. This means it should work under all normal
+ * circumstances, but it could be fooled by new data formats or a
+ * malicious application!
+ *
+ * At present the "first packet" is defined as a packet starting with
+ * the protocol ID string - "PNA".
+ * When the link is up there appears to be enough control data
+ * crossing the control link to keep it open even if a long audio
+ * piece is playing.
+ *
+ */
+
+#include <linux/module.h>
+#include <asm/system.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/skbuff.h>
+#include <linux/in.h>
+#include <linux/ip.h>
+#include <net/protocol.h>
+#include <net/tcp.h>
+#include <net/ip_masq.h>
+
+#ifndef DEBUG_CONFIG_IP_MASQ_RAUDIO
+#define DEBUG_CONFIG_IP_MASQ_RAUDIO 0
+#endif
+
+struct raudio_priv_data {
+ /* Associated data connection - setup but not used at present */
+ struct ip_masq *data_conn;
+ /* Have we seen and performed setup */
+ short seen_start;
+};
+
+static int
+masq_raudio_init_1 (struct ip_masq_app *mapp, struct ip_masq *ms)
+{
+ MOD_INC_USE_COUNT;
+ if ((ms->app_data = kmalloc(sizeof(struct raudio_priv_data),
+ GFP_ATOMIC)) == NULL)
+ printk(KERN_INFO "RealAudio: No memory for application data\n");
+ else
+ {
+ struct raudio_priv_data *priv =
+ (struct raudio_priv_data *)ms->app_data;
+ priv->seen_start = 0;
+ priv->data_conn = NULL;
+ }
+ return 0;
+}
+
+static int
+masq_raudio_done_1 (struct ip_masq_app *mapp, struct ip_masq *ms)
+{
+ MOD_DEC_USE_COUNT;
+ if (ms->app_data)
+ kfree_s(ms->app_data, sizeof(struct raudio_priv_data));
+ return 0;
+}
+
+int
+masq_raudio_out (struct ip_masq_app *mapp, struct ip_masq *ms, struct sk_buff **skb_p, struct device *dev)
+{
+ struct sk_buff *skb;
+ struct iphdr *iph;
+ struct tcphdr *th;
+ char *p, *data, *data_limit;
+ struct ip_masq *n_ms;
+ unsigned short version, msg_id, msg_len, udp_port;
+ struct raudio_priv_data *priv =
+ (struct raudio_priv_data *)ms->app_data;
+
+ /* Everything running correctly already */
+ if (priv && priv->seen_start)
+ return 0;
+
+ skb = *skb_p;
+ iph = skb->h.iph;
+ th = (struct tcphdr *)&(((char *)iph)[iph->ihl*4]);
+ data = (char *)&th[1];
+
+ data_limit = skb->h.raw + skb->len - 18;
+
+ /* Check to see if this is the first packet with protocol ID */
+ if (memcmp(data, "PNA", 3)) {
+#if DEBUG_CONFIG_IP_MASQ_RAUDIO
+ printk("RealAudio: not initial protocol packet - ignored\n");
+#endif
+ return(0);
+ }
+ data += 3;
+ memcpy(&version, data, 2);
+
+#if DEBUG_CONFIG_IP_MASQ_RAUDIO
+ printk("RealAudio: initial seen - protocol version %d\n",
+ ntohs(version));
+#endif
+ if (priv)
+ priv->seen_start = 1;
+
+ if (ntohs(version) >= 256)
+ {
+ printk(KERN_INFO "RealAudio: version (%d) not supported\n",
+ ntohs(version));
+ return 0;
+ }
+
+ data += 2;
+ while (data < data_limit) {
+ memcpy(&msg_id, data, 2);
+ data += 2;
+ memcpy(&msg_len, data, 2);
+ data += 2;
+#if DEBUG_CONFIG_IP_MASQ_RAUDIO
+ printk("RealAudio: msg %d - %d byte\n",
+ ntohs(msg_id), ntohs(msg_len));
+#endif
+ p = data;
+ data += ntohs(msg_len);
+ if (data > data_limit)
+ {
+ printk(KERN_INFO "RealAudio: Packet too short for data\n");
+ return 0;
+ }
+ if (ntohs(msg_id) == 1) {
+ /* This is a message detailing the UDP port to be used */
+ memcpy(&udp_port, p, 2);
+ n_ms = ip_masq_new(dev, IPPROTO_UDP,
+ ms->saddr, udp_port,
+ ms->daddr, 0,
+ IP_MASQ_F_NO_DPORT);
+
+ if (n_ms==NULL)
+ return 0;
+
+ memcpy(p, &(n_ms->mport), 2);
+#if DEBUG_CONFIG_IP_MASQ_RAUDIO
+ printk("RealAudio: rewrote UDP port %d -> %d\n",
+ ntohs(udp_port), ntohs(n_ms->mport));
+#endif
+ ip_masq_set_expire(n_ms, ip_masq_expire->udp_timeout);
+
+ /* Make ref in application data to data connection */
+ if (priv)
+ priv->data_conn = n_ms;
+
+ /*
+ * There is nothing else useful we can do
+ * Maybe a development could do more, but for now
+ * we exit gracefully!
+ */
+ return 0;
+
+ } else if (ntohs(msg_id) == 0)
+ return 0;
+ }
+ return 0;
+}
+
+struct ip_masq_app ip_masq_raudio = {
+ NULL, /* next */
+ "RealAudio", /* name */
+ 0, /* type */
+ 0, /* n_attach */
+ masq_raudio_init_1, /* ip_masq_init_1 */
+ masq_raudio_done_1, /* ip_masq_done_1 */
+ masq_raudio_out, /* pkt_out */
+ NULL /* pkt_in */
+};
+
+/*
+ * ip_masq_raudio initialization
+ */
+
+int ip_masq_raudio_init(void)
+{
+ return register_ip_masq_app(&ip_masq_raudio, IPPROTO_TCP, 7070);
+}
+
+/*
+ * ip_masq_raudio fin.
+ */
+
+int ip_masq_raudio_done(void)
+{
+ return unregister_ip_masq_app(&ip_masq_raudio);
+}
+
+#ifdef MODULE
+
+int init_module(void)
+{
+ if (ip_masq_raudio_init() != 0)
+ return -EIO;
+ register_symtab(0);
+ return 0;
+}
+
+void cleanup_module(void)
+{
+ if (ip_masq_raudio_done() != 0)
+ printk("ip_masq_raudio: can't remove module");
+}
+
+#endif /* MODULE */
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ipv4/ip_output.c linux/net/ipv4/ip_output.c
--- linux.vanilla/net/ipv4/ip_output.c Tue May 28 21:51:32 1996
+++ linux/net/ipv4/ip_output.c Tue May 28 22:48:06 1996
@@ -1115,12 +1115,14 @@
ip_udp_init();*/

#ifdef CONFIG_IP_MULTICAST
+#ifdef CONFIG_PROC_FS
proc_net_register(&(struct proc_dir_entry) {
PROC_NET_IGMP, 4, "igmp",
S_IFREG | S_IRUGO, 1, 0, 0,
0, &proc_net_inode_operations,
ip_mc_procinfo
});
+#endif
#endif
}

diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ipv4/ipmr.c linux/net/ipv4/ipmr.c
--- linux.vanilla/net/ipv4/ipmr.c Tue May 28 21:51:32 1996
+++ linux/net/ipv4/ipmr.c Tue May 28 22:59:59 1996
@@ -24,6 +24,7 @@
* Resolve IFF_ALLMULTI for rest of cards
*/

+#include <linux/config.h>
#include <asm/system.h>
#include <asm/segment.h>
#include <linux/types.h>
@@ -910,6 +911,7 @@
{
printk(KERN_INFO "Linux IP multicast router 0.05.\n");
register_netdevice_notifier(&ip_mr_notifier);
+#ifdef CONFIG_PROC_FS
proc_net_register(&(struct proc_dir_entry) {
PROC_NET_IPMR_VIF, 9 ,"ip_mr_vif",
S_IFREG | S_IRUGO, 1, 0, 0,
@@ -922,4 +924,5 @@
0, &proc_net_inode_operations,
ipmr_mfc_info
});
+#endif
}
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ipx/af_ipx.c linux/net/ipx/af_ipx.c
--- linux.vanilla/net/ipx/af_ipx.c Tue May 28 21:51:38 1996
+++ linux/net/ipx/af_ipx.c Tue May 28 22:50:32 1996
@@ -757,7 +757,7 @@
}
else
{
- printk(KERN_WARNING "IPX: Network number collision %lx\n\t%s %s and %s %s\n",
+ printk(KERN_WARNING "IPX: Network number collision %lx\n %s %s and %s %s\n",
htonl(ipx->ipx_source.net),
ipx_device_name(i),
ipx_frame_name(i->if_dlink_type),
@@ -2365,10 +2365,11 @@
printk(KERN_CRIT "IPX: Unable to register with SNAP\n");

register_netdevice_notifier(&ipx_dev_notifier);
-
+#ifdef CONFIG_PROC_FS
proc_net_register(&ipx_procinfo);
proc_net_register(&ipx_if_procinfo);
proc_net_register(&ipx_rt_procinfo);
+#endif

printk(KERN_INFO "Swansea University Computer Society IPX 0.34 for NET3.035\n");
printk(KERN_INFO "IPX Portions Copyright (c) 1995 Caldera, Inc.\n");
@@ -2399,9 +2400,11 @@
ipxitf_down(ifc);
}

+#ifdef CONFIG_PROC_FS
proc_net_unregister(PROC_NET_IPX_ROUTE);
proc_net_unregister(PROC_NET_IPX_INTERFACE);
proc_net_unregister(PROC_NET_IPX);
+#endif

unregister_netdevice_notifier(&ipx_dev_notifier);

diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/netrom/af_netrom.c linux/net/netrom/af_netrom.c
--- linux.vanilla/net/netrom/af_netrom.c Tue May 28 21:51:38 1996
+++ linux/net/netrom/af_netrom.c Tue May 28 22:49:21 1996
@@ -1418,6 +1418,7 @@
nr_default.window = NR_DEFAULT_WINDOW;
nr_default.paclen = NR_DEFAULT_PACLEN;

+#ifdef CONFIG_PROC_FS
proc_net_register(&(struct proc_dir_entry) {
PROC_NET_NR, 2, "nr",
S_IFREG | S_IRUGO, 1, 0, 0,
@@ -1436,6 +1437,7 @@
0, &proc_net_inode_operations,
nr_nodes_get_info
});
+#endif
}

#endif
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/scripts/Configure linux/scripts/Configure
--- linux.vanilla/scripts/Configure Tue May 28 21:53:10 1996
+++ linux/scripts/Configure Tue May 28 22:02:43 1996
@@ -90,7 +90,7 @@
then
echo; echo " Sorry, no help available for this option yet.";echo
else
- (echo; echo "$text"; echo) | more
+ (echo; echo "$text"; echo) | ${PAGER:-more}
fi
else
echo;