changeset 0:f13167dff80d default tip

2 VSSI patches Found while cleaning up my Lacie disk
author Josef "Jeff" Sipek <jeffpc@josefsipek.net>
date Sat, 25 Aug 2007 19:49:24 -0400
parents
children
files vssi/vp2p vssi/vp2p-2.6.diff
diffstat 2 files changed, 2208 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vssi/vp2p	Sat Aug 25 19:49:24 2007 -0400
@@ -0,0 +1,1494 @@
+# This is a BitKeeper generated diff -Nru style patch.
+#
+# ChangeSet
+#   2004/12/20 20:47:55-05:00 jeffpc@optonline.net 
+#   Merge
+# 
+# init/main.c
+#   2004/12/20 20:47:52-05:00 jeffpc@optonline.net +0 -0
+#   SCCS merged
+# 
+# net/Makefile
+#   2004/12/20 20:30:42-05:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# include/linux/socket.h
+#   2004/12/20 20:30:42-05:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# include/linux/if_ether.h
+#   2004/12/20 20:30:42-05:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# arch/i386/Kconfig
+#   2004/12/20 20:30:42-05:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# ChangeSet
+#   2004/10/30 15:18:19-04:00 jeffpc@optonline.net 
+#   Added VSSI_INIT
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/10/30 15:18:10-04:00 jeffpc@optonline.net +3 -3
+#   Use VSSI_INIT
+# 
+# include/linux/vssi.h
+#   2004/10/30 15:18:10-04:00 jeffpc@optonline.net +4 -2
+#   Added VSSI_INIT
+# 
+# ChangeSet
+#   2004/09/21 00:51:12-04:00 jeffpc@optonline.net 
+#   Merge optonline.net:/home/jeffpc/linux/linux-2.5
+#   into optonline.net:/home/jeffpc/linux/vp2p-work
+# 
+# net/Makefile
+#   2004/09/21 00:51:06-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# init/main.c
+#   2004/09/21 00:51:06-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# include/linux/socket.h
+#   2004/09/21 00:51:06-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# include/linux/if_ether.h
+#   2004/09/21 00:51:06-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# arch/i386/Kconfig
+#   2004/09/21 00:51:06-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# ChangeSet
+#   2004/09/16 10:16:57-04:00 jeffpc@optonline.net 
+#   [VSSI] Added a check for closed connections
+#   
+#   Signed-off-by: Josef "Jeff" Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/09/16 10:16:46-04:00 jeffpc@optonline.net +12 -2
+#   Added a check for closed connections.
+# 
+# ChangeSet
+#   2004/08/16 14:31:09-04:00 jeffpc@optonline.net 
+#   Merge optonline.net:/home/jeffpc/linux/linux-2.5
+#   into optonline.net:/home/jeffpc/linux/vp2p-work
+# 
+# init/main.c
+#   2004/08/16 14:31:03-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# ChangeSet
+#   2004/07/16 11:14:56-04:00 jeffpc@optonline.net 
+#   [VSSI] Created 2 macros to manage connection stats
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/07/16 11:14:46-04:00 jeffpc@optonline.net +3 -3
+#   Created 2 macros to manage connection stats
+# 
+# include/linux/vssi.h
+#   2004/07/16 11:14:46-04:00 jeffpc@optonline.net +14 -0
+#   Created 2 macros to manage connection stats
+# 
+# ChangeSet
+#   2004/07/14 17:00:40-04:00 jeffpc@optonline.net 
+#   [VSSI] Added descriptions of the functions
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/07/14 17:00:32-04:00 jeffpc@optonline.net +20 -0
+#   Added descriptions of the functions
+# 
+# ChangeSet
+#   2004/07/14 16:39:19-04:00 jeffpc@optonline.net 
+#   [VSSI] Use RCU for connection list maintainance
+#   Remove destroy flag
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/07/14 16:39:09-04:00 jeffpc@optonline.net +34 -11
+#   Use RCU for connection list maintainance
+#   Remove destroy flag
+# 
+# include/linux/vssi.h
+#   2004/07/14 16:39:09-04:00 jeffpc@optonline.net +2 -1
+#   Use RCU for connection list maintainance
+#   Remove destroy flag
+# 
+# ChangeSet
+#   2004/07/11 09:58:23-04:00 jeffpc@optonline.net 
+#   [VSSI] Get rid of a compilation warning
+#   Include tcp.h since we are using TCP/IP
+#   Moved the destroy flag to the correct struct
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# include/linux/vssi.h
+#   2004/07/11 09:51:40-04:00 jeffpc@optonline.net +3 -3
+#   Get rid of a warning
+# 
+# net/vssi/daemon.c
+#   2004/07/11 09:50:22-04:00 jeffpc@optonline.net +10 -5
+#   Get rid of a warning
+# 
+# net/vssi/daemon.c
+#   2004/07/11 09:31:45-04:00 jeffpc@optonline.net +1 -0
+#   Include tcp.h since we are using TCP/IP
+# 
+# include/linux/vssi.h
+#   2004/07/11 09:29:06-04:00 jeffpc@optonline.net +1 -1
+#   Moved the destroy flag to the correct struct
+# 
+# ChangeSet
+#   2004/07/10 17:23:51-04:00 jeffpc@optonline.net 
+#   [VSSI] Added destroy flag
+#   Fix bug with ListeningDaemon() not sleeping
+#   Socket closing error fix
+#   Removed strange if statement
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# include/linux/vssi.h
+#   2004/07/10 17:20:55-04:00 jeffpc@optonline.net +1 -0
+#   Added destroy flag
+# 
+# net/vssi/daemon.c
+#   2004/07/10 16:57:23-04:00 jeffpc@batlh.(none) +25 -16
+#   Fix bug with ListeningDaemon() not sleeping
+#   Socket closing error fix
+#   Removed strange if statement
+# 
+# ChangeSet
+#   2004/07/09 06:09:00-04:00 jeffpc@batlh.(none) 
+#   [VSSI] Added ListeningDaemon() (runs as "vssid/l")
+#   ManagementDaemon() runs every HZ/2
+#   ManagementDaemon() doesn't listen for new connections now
+#   Added prototype for ListeningDaemon()
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/07/09 06:02:20-04:00 jeffpc@batlh.(none) +18 -3
+#   Added ListeningDaemon() (runs as "vssid/l")
+#   ManagementDaemon() runs every HZ/2
+#   ManagementDaemon() doesn't listen for new connections now
+# 
+# include/linux/vssi.h
+#   2004/07/09 06:00:49-04:00 jeffpc@optonline.net +1 -0
+#   Added prototype for ListeningDaemon()
+# 
+# ChangeSet
+#   2004/07/09 05:33:17-04:00 jeffpc@optonline.net 
+#   [VSSI] Combined atomic vars start and quit into startstop
+#   Added flags VSSI_START and VSSI_STOP
+#   Combined atomic variables start and quit into startstop
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# include/linux/vssi.h
+#   2004/07/09 05:24:18-04:00 jeffpc@optonline.net +4 -2
+#   Combined atomic vars start and quit into startstop
+#   Added flags VSSI_START and VSSI_STOP
+# 
+# net/vssi/daemon.c
+#   2004/07/09 05:22:21-04:00 jeffpc@optonline.net +8 -10
+#   Combined atomic variables start and quit into startstop
+# 
+# ChangeSet
+#   2004/07/06 21:00:51-04:00 jeffpc@optonline.net 
+#   [VSSI] Fixed maxconn statistics bug
+#   Add length of the "hello" message to tx_bytes
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/07/06 21:00:43-04:00 jeffpc@optonline.net +3 -1
+#   Fixed maxconn statistics bug
+#   Add length of the "hello" message to tx_bytes
+# 
+# ChangeSet
+#   2004/07/06 20:05:30-04:00 jeffpc@optonline.net 
+#   [VSSI] Added VSSI_PROC_FS
+#   Added vssi_stats
+#   Added /proc/vssi/{stats,conns} (configurable)
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/07/06 20:05:20-04:00 jeffpc@optonline.net +59 -4
+#   Added vssi_stats
+#   Added /proc/vssi/{stats,conns} (configurable)
+# 
+# include/linux/vssi.h
+#   2004/07/06 20:05:20-04:00 jeffpc@optonline.net +8 -0
+#   Added struct vssi_stats
+# 
+# arch/i386/Kconfig
+#   2004/07/06 20:05:20-04:00 jeffpc@optonline.net +9 -0
+#   Added VSSI_PROC_FS
+# 
+# ChangeSet
+#   2004/07/06 17:54:20-04:00 jeffpc@optonline.net 
+#   [VSSI] Created ManagementDaemon()
+#   Moved accept() code into ManagementDaemon()
+#   Changed the message sent to the other end
+#   MainDaemon() returns void
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/07/06 17:54:12-04:00 jeffpc@optonline.net +45 -25
+#   Created ManagementDaemon()
+#   Moved accept() code into ManagementDaemon()
+#   Changed the message sent to the other end
+# 
+# include/linux/vssi.h
+#   2004/07/06 17:54:12-04:00 jeffpc@optonline.net +3 -1
+#   MainDaemon returns void
+#   Added ManagementDaemon
+# 
+# ChangeSet
+#   2004/07/06 10:19:51-04:00 jeffpc@optonline.net 
+#   [VSSI] Moved code out of MainDaemon() into newly made vssi_accept_conns(),
+#   vssi_allocsock(), vssi_freesock(), and send_hello()
+#   Changed length type for vssi_Send() to u32
+#   Whitespace cleanup in vssi.h
+#   Added connection statistics struct
+#   conn->socket is a pointer
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/07/06 10:19:43-04:00 jeffpc@optonline.net +111 -53
+#   Moved code out of MainDaemon() into newly made vssi_accept_conns(),
+#   vssi_allocsock(), vssi_freesock(), and send_hello()
+#   Changed length type for vssi_Send() to u32
+# 
+# include/linux/vssi.h
+#   2004/07/06 10:19:43-04:00 jeffpc@optonline.net +14 -4
+#   Little whitespace cleanup
+#   Added connection statistics struct
+#   conn->socket is a pointer
+# 
+# ChangeSet
+#   2004/07/02 18:44:10-04:00 jeffpc@optonline.net 
+#   [VSSI] Added two out of memory checks
+#   Now using socket flags to accept connections
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/07/02 18:44:02-04:00 jeffpc@optonline.net +11 -2
+#   Added two out of memory checks
+#   Now using socket flags to accept connections
+# 
+# ChangeSet
+#   2004/06/28 11:11:09-04:00 jeffpc@optonline.net 
+#   Merge optonline.net:/home/jeffpc/linux/linux-2.5
+#   into optonline.net:/home/jeffpc/linux/vp2p-work
+# 
+# init/main.c
+#   2004/06/28 11:11:04-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# ChangeSet
+#   2004/06/25 00:40:41-04:00 jeffpc@optonline.net 
+#   Merge optonline.net:/home/jeffpc/linux/linux-2.5
+#   into optonline.net:/home/jeffpc/linux/vp2p-work
+# 
+# init/main.c
+#   2004/06/25 00:40:36-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# ChangeSet
+#   2004/06/25 00:28:02-04:00 jeffpc@optonline.net 
+#   [VSSI] Call daemonize() complete the setup
+#   Use TCP/IP instead of UDP/IP
+#   Prefix error messages with "vssi: "
+#   Fixed return value check (sock->ops->listen() call)
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/06/25 00:27:53-04:00 jeffpc@optonline.net +6 -5
+#   Call daemonize() complete the setup
+#   Use TCP/IP instead of UDP/IP
+#   Prefix error messages with "vssi: "
+#   Fixed return value check (sock->ops->listen() call)
+# 
+# ChangeSet
+#   2004/06/24 03:53:05-04:00 jeffpc@optonline.net 
+#   [VSSI] Use kernel_thread() instead of daemonize()
+#   
+#   Note: The kernel now not only compiles, but it also boots if you
+#   select both VSSI and VP2P
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/06/24 03:52:51-04:00 jeffpc@optonline.net +3 -5
+#   Use kernel_thread() instead of daemonize()
+# 
+# ChangeSet
+#   2004/06/23 03:36:25-04:00 jeffpc@optonline.net 
+#   Make sure we execute only on CPU 0
+#   Fix up 2 BUGS (check return values)
+# 
+# net/vssi/daemon.c
+#   2004/06/23 03:36:13-04:00 jeffpc@optonline.net +18 -6
+#   Make sure we execute only on CPU 0
+#   Fix up 2 BUGS (check return values)
+# 
+# ChangeSet
+#   2004/06/22 22:22:04-04:00 jeffpc@optonline.net 
+#   Merge optonline.net:/home/jeffpc/linux/vp2p-2.6
+#   into optonline.net:/home/jeffpc/linux/vp2p-work
+# 
+# init/main.c
+#   2004/06/22 22:22:01-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# arch/i386/Kconfig
+#   2004/06/22 22:22:01-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# ChangeSet
+#   2004/06/22 22:16:12-04:00 jeffpc@optonline.net 
+#   Merge
+# 
+# init/main.c
+#   2004/06/22 22:16:06-04:00 jeffpc@optonline.net +0 -0
+#   SCCS merged
+# 
+# arch/i386/Kconfig
+#   2004/06/22 22:09:40-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# ChangeSet
+#   2004/06/20 02:36:01-04:00 jeffpc@optonline.net 
+#   [VSSI] Fixed memory leak
+#   Send test packet
+# 
+# net/vssi/daemon.c
+#   2004/06/20 02:31:50-04:00 jeffpc@optonline.net +29 -0
+#   Fixed memory leak
+#   Send test packet
+# 
+# ChangeSet
+#   2004/06/19 23:26:52-04:00 jeffpc@optonline.net 
+#   Merge
+# 
+# init/main.c
+#   2004/06/19 23:26:48-04:00 jeffpc@optonline.net +0 -0
+#   SCCS merged
+# 
+# arch/i386/Kconfig
+#   2004/06/19 23:24:40-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# ChangeSet
+#   2004/06/11 22:12:48-04:00 jeffpc@optonline.net 
+#   [VSSI] Use VSSI_BACKLOG instead of a hardcoded number
+#   kfree buffer and buffer structure (this might not fly well)
+# 
+# net/vssi/daemon.c
+#   2004/06/11 22:12:42-04:00 jeffpc@optonline.net +9 -8
+#   Use VSSI_BACKLOG instead of a hardcoded number
+#   kfree buffer and buffer structure (this might not fly well)
+# 
+# include/linux/vssi.h
+#   2004/06/11 22:12:42-04:00 jeffpc@optonline.net +1 -0
+#   Backlog constant added
+# 
+# ChangeSet
+#   2004/06/10 12:31:49-04:00 jeffpc@jeff.home 
+#   vssiphp.c:
+#     Some changes
+#     bk cp fakephp.c vssiphp.c
+#     PCI hotplug: fix up a bunch of copyrights that were incorrectly declared.
+#     new file
+# 
+# drivers/pci/hotplug/vssiphp.c
+#   2004/06/10 12:31:09-04:00 jeffpc@jeff.home +8 -14
+#   Clean up of the comments, and several constants
+# 
+# drivers/pci/hotplug/vssiphp.c
+#   2004/06/10 12:22:57-04:00 jeffpc@jeff.home +0 -0
+#   bk cp fakephp.c vssiphp.c
+# 
+# ChangeSet
+#   2004/06/09 21:08:28-04:00 jeffpc@optonline.net 
+#   [VP2P] Add new buffer to the list of buffers to be tx
+#   Some changes in the struct vssi_buffer
+# 
+# net/vssi/daemon.c
+#   2004/06/09 21:08:20-04:00 jeffpc@optonline.net +13 -6
+#   Add new buffer to the list of buffers to be tx
+# 
+# include/linux/vssi.h
+#   2004/06/09 21:08:20-04:00 jeffpc@optonline.net +3 -2
+#   Renamed some structure members, added address field
+# 
+# ChangeSet
+#   2004/06/09 07:12:36-04:00 jeffpc@optonline.net 
+#   [VP2P] Clear the buffer list after going through it in tx_all
+#   Added basic body for Send()
+# 
+# net/vssi/daemon.c
+#   2004/06/09 07:12:30-04:00 jeffpc@optonline.net +20 -1
+#   Clear the buffer list after going through it in tx_all
+#   Added basic body for Send()
+# 
+# ChangeSet
+#   2004/06/08 22:02:49-04:00 jeffpc@optonline.net 
+#   [VP2P] Added vssi_tx_all() dummy code
+# 
+# net/vssi/daemon.c
+#   2004/06/08 22:02:42-04:00 jeffpc@optonline.net +14 -0
+#   Added vssi_tx_all() dummy code
+# 
+# include/linux/vssi.h
+#   2004/06/08 22:02:42-04:00 jeffpc@optonline.net +1 -0
+#   Added vssi_tx_all() prototype
+# 
+# ChangeSet
+#   2004/06/08 21:48:46-04:00 jeffpc@optonline.net 
+#   [VP2P] Clean up FIXME
+# 
+# net/vssi/daemon.c
+#   2004/06/08 21:48:39-04:00 jeffpc@optonline.net +5 -7
+#   Clean up FIXME
+# 
+# ChangeSet
+#   2004/06/08 21:33:56-04:00 jeffpc@optonline.net 
+#   [VP2P] Itterate through all the connections in the list
+# 
+# net/vssi/daemon.c
+#   2004/06/08 21:33:50-04:00 jeffpc@optonline.net +14 -6
+#   Itterate through all the connections in the list
+# 
+# ChangeSet
+#   2004/06/08 20:53:36-04:00 jeffpc@optonline.net 
+#   [VP2P] Fixed up compilation issue
+# 
+# net/vssi/daemon.c
+#   2004/06/08 20:53:30-04:00 jeffpc@optonline.net +4 -3
+#   Fix up compile
+# 
+# ChangeSet
+#   2004/06/06 20:21:34-04:00 jeffpc@optonline.net 
+#   Merge optonline.net:/home/jeffpc/linux/linux-2.5
+#   into optonline.net:/home/jeffpc/linux/vp2p-2.6
+# 
+# init/main.c
+#   2004/06/06 20:21:31-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# ChangeSet
+#   2004/06/06 20:14:10-04:00 jeffpc@optonline.net 
+#   [VSSI] Spelling/compilation fixes
+# 
+# net/vssi/daemon.c
+#   2004/06/06 20:14:04-04:00 jeffpc@optonline.net +5 -4
+#   Spelling/compilation fixes
+# 
+# init/main.c
+#   2004/06/06 20:14:04-04:00 jeffpc@optonline.net +1 -0
+#   Include linux/vssi.h
+# 
+# include/linux/vssi.h
+#   2004/06/06 20:14:04-04:00 jeffpc@optonline.net +5 -2
+#   Added additional prototypes
+# 
+# ChangeSet
+#   2004/06/06 19:15:46-04:00 jeffpc@optonline.net 
+#   [VSSI] Create new sockets upon accept()
+# 
+# net/vssi/daemon.c
+#   2004/06/06 19:15:40-04:00 jeffpc@optonline.net +17 -4
+#   Create new sockets upon accept()
+# 
+# include/linux/vssi.h
+#   2004/06/06 19:15:40-04:00 jeffpc@optonline.net +5 -0
+#   Added connection information structure
+# 
+# ChangeSet
+#   2004/06/05 01:40:47-04:00 jeffpc@optonline.net 
+#   Fixed up dependencies for CONFIG_VSSI
+#   Created CONFIG_VSSI_VP2P
+# 
+# arch/i386/Kconfig
+#   2004/06/05 01:40:41-04:00 jeffpc@optonline.net +10 -1
+#   Fixed up dependencies for CONFIG_VSSI
+#   Created CONFIG_VSSI_VP2P
+# 
+# ChangeSet
+#   2004/06/05 01:17:23-04:00 jeffpc@optonline.net 
+#   1.1612.diff
+# 
+# net/vssi/daemon.c
+#   2004/06/05 01:11:03-04:00 jeffpc@optonline.net +24 -0
+#   Import patch 1.1612.diff
+# 
+# include/linux/vssi.h
+#   2004/06/05 01:11:03-04:00 jeffpc@optonline.net +16 -2
+#   Import patch 1.1612.diff
+# 
+# ChangeSet
+#   2004/06/05 01:17:08-04:00 jeffpc@optonline.net 
+#   1.1611.diff
+# 
+# net/vssi/daemon.c
+#   2004/06/05 01:10:48-04:00 jeffpc@optonline.net +12 -6
+#   Import patch 1.1611.diff
+# 
+# include/linux/vssi.h
+#   2004/06/05 01:10:48-04:00 jeffpc@optonline.net +6 -0
+#   Import patch 1.1611.diff
+# 
+# ChangeSet
+#   2004/06/05 01:16:18-04:00 jeffpc@optonline.net 
+#   1.1610.diff
+# 
+# net/vssi/daemon.c
+#   2004/06/05 01:10:35-04:00 jeffpc@optonline.net +8 -4
+#   Import patch 1.1610.diff
+# 
+# include/net/vssip.h
+#   2004/06/05 01:10:35-04:00 jeffpc@optonline.net +4 -14
+#   Import patch 1.1610.diff
+# 
+# include/linux/socket.h
+#   2004/06/05 01:10:35-04:00 jeffpc@optonline.net +1 -3
+#   Import patch 1.1610.diff
+# 
+# include/linux/if_ether.h
+#   2004/06/05 01:10:35-04:00 jeffpc@optonline.net +0 -1
+#   Import patch 1.1610.diff
+# 
+# ChangeSet
+#   2004/06/05 01:16:01-04:00 jeffpc@optonline.net 
+#   1.1371.612.3.diff
+# 
+# net/vssi/daemon.c
+#   2004/06/05 01:09:42-04:00 jeffpc@optonline.net +9 -0
+#   Import patch 1.1371.612.3.diff
+# 
+# init/main.c
+#   2004/06/05 01:09:42-04:00 jeffpc@optonline.net +2 -0
+#   Import patch 1.1371.612.3.diff
+# 
+# include/linux/if_ether.h
+#   2004/06/05 01:09:42-04:00 jeffpc@optonline.net +1 -0
+#   Import patch 1.1371.612.3.diff
+# 
+# ChangeSet
+#   2004/06/05 01:15:27-04:00 jeffpc@optonline.net 
+#   Created basic skeleton for VSSI systems
+# 
+# net/vssi/daemon.c
+#   2004/06/05 01:09:20-04:00 jeffpc@optonline.net +81 -0
+#   BitKeeper file /home/jeffpc/linux/vssi-2.6/net/vssi/daemon.c
+# 
+# net/vssi/Makefile
+#   2004/06/05 01:09:20-04:00 jeffpc@optonline.net +5 -0
+#   BitKeeper file /home/jeffpc/linux/vssi-2.6/net/vssi/Makefile
+# 
+# include/net/vssip.h
+#   2004/06/05 01:09:20-04:00 jeffpc@optonline.net +20 -0
+#   BitKeeper file /home/jeffpc/linux/vssi-2.6/include/linux/vssi.h
+# 
+# net/vssi/daemon.c
+#   2004/06/05 01:09:20-04:00 jeffpc@optonline.net +0 -0
+#   BitKeeper file /home/jeffpc/linux/vp2p-2.6/net/vssi/daemon.c
+# 
+# net/vssi/Makefile
+#   2004/06/05 01:09:20-04:00 jeffpc@optonline.net +0 -0
+#   BitKeeper file /home/jeffpc/linux/vp2p-2.6/net/vssi/Makefile
+# 
+# net/Makefile
+#   2004/06/05 01:09:20-04:00 jeffpc@optonline.net +1 -0
+#   Build net/vssi/ if needed
+# 
+# include/net/vssip.h
+#   2004/06/05 01:09:20-04:00 jeffpc@optonline.net +0 -0
+#   BitKeeper file /home/jeffpc/linux/vp2p-2.6/include/net/vssip.h
+# 
+# include/linux/socket.h
+#   2004/06/05 01:09:20-04:00 jeffpc@optonline.net +3 -1
+#   Added VSSI Protocol and Address Family numbers
+# 
+# arch/i386/Kconfig
+#   2004/06/05 01:09:20-04:00 jeffpc@optonline.net +12 -0
+#   VSSI config option
+# 
+# drivers/pci/hotplug/vssiphp.c
+#   2003/08/27 07:44:50-07:00 greg@kroah.com +3 -3
+#   PCI hotplug: fix up a bunch of copyrights that were incorrectly declared.
+# 
+# drivers/pci/hotplug/vssiphp.c
+#   2003/06/25 17:24:41-07:00 greg@kroah.com +232 -0
+# 
+# drivers/pci/hotplug/vssiphp.c
+#   2003/06/25 17:24:41-07:00 greg@kroah.com +0 -0
+#   BitKeeper file /home/greg/linux/BK/pci-2.5/drivers/pci/hotplug/fakephp.c
+# 
+diff -Nru a/arch/i386/Kconfig b/arch/i386/Kconfig
+--- a/arch/i386/Kconfig	2005-05-07 12:54:02 -04:00
++++ b/arch/i386/Kconfig	2005-05-07 12:54:02 -04:00
+@@ -501,6 +501,36 @@
+ 	  cost of slightly increased overhead in some places. If unsure say
+ 	  N here.
+ 
++config VSSI
++	bool "Virtual Single System Image (EXPERIMENTAL)"
++	depends on SMP && !MODULES && HOTPLUG && EXPERIMENTAL
++	help
++	  This option enables the creation of a virtual single system image
++	  cluster. The resulting cluster will behave like a SSI system.
++	  
++	  Note: If you want to use more than 1GB of total RAM, make sure High Memory
++	  Support is turned on.
++	  
++	  If you don't know what to do here, say N.
++
++config VSSI_PROC_FS
++	bool "Virtual Single System Image /proc interface"
++	depends on VSSI && PROC_FS
++	help
++	  This option creates /proc/vssi/ directory along with several files
++	  with statistics and configuration.
++	  
++	  If you don't know what to do here, say N.
++
++config VSSI_VP2P
++	bool "Virtual PCI-2-PCI bridge (EXPERIMENTAL)"
++	depends on VSSI && HOTPLUG_PCI
++	help
++	  This option allows the kernel to create a virtual PCI-2-PCI bridge
++	  over standard ethernet interface.
++	  
++	  If you don't know what to do here, say N.
++
+ config PREEMPT
+ 	bool "Preemptible Kernel"
+ 	help
+diff -Nru a/drivers/pci/hotplug/vssiphp.c b/drivers/pci/hotplug/vssiphp.c
+--- /dev/null	Wed Dec 31 16:00:00 196900
++++ b/drivers/pci/hotplug/vssiphp.c	2005-05-07 12:54:02 -04:00
+@@ -0,0 +1,226 @@
++/*
++ * VSSI Virtual PCI Hot Plug Controller Driver
++ *
++ * Copyright (C) 2004 Josef "Jeff" Sipek <jeffpc@optonline.net>
++ *
++ * Based on Fake PCI Hot Plug Controller Driver (fakephp.c)
++ *
++ * All rights reserved.
++ *
++ * 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, version 2 of the License.
++ *
++ */
++
++/*
++ *
++ * This driver will use the VSSI layer and create virtual PCI bridges
++ * to allow communication between PCI buses on different hosts.
++ *
++ * WARNING, this does NOT turn off the power to the PCI device.  This is
++ * a "logical" removal, not a physical or electrical removal.
++ *
++ * Use this module at your own risk, you have been warned!
++ *
++ * Enabling PCI devices is left as an exercise for the reader...
++ *
++ */
++#include <linux/config.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/pci.h>
++#include <linux/init.h>
++#include "pci_hotplug.h"
++#include "../pci.h"
++
++#if !defined(CONFIG_HOTPLUG_PCI_FAKE_MODULE)
++	#define MY_NAME	"fakephp"
++#else
++	#define MY_NAME	THIS_MODULE->name
++#endif
++
++#define dbg(format, arg...)					\
++	do {							\
++		if (debug)					\
++			printk(KERN_DEBUG "%s: " format,	\
++				MY_NAME , ## arg); 		\
++	} while (0)
++#define err(format, arg...) printk(KERN_ERR "%s: " format, MY_NAME , ## arg)
++#define info(format, arg...) printk(KERN_INFO "%s: " format, MY_NAME , ## arg)
++
++#define DRIVER_AUTHOR	"Josef \"Jeff\" Sipek <jeffpc@optonline.net>"
++#define DRIVER_DESC	"Virtual PCI Hot Plug Controller Driver"
++
++struct dummy_slot {
++	struct list_head node;
++	struct hotplug_slot *slot;
++	struct pci_dev *dev;
++};
++
++static int debug;
++static LIST_HEAD(slot_list);
++
++static int enable_slot (struct hotplug_slot *slot);
++static int disable_slot (struct hotplug_slot *slot);
++
++static struct hotplug_slot_ops dummy_hotplug_slot_ops = {
++	.owner			= THIS_MODULE,
++	.enable_slot		= enable_slot,
++	.disable_slot		= disable_slot,
++};
++
++static void dummy_release(struct hotplug_slot *slot)
++{
++	struct dummy_slot *dslot = slot->private;
++
++	list_del(&dslot->node);
++	kfree(dslot->slot->info);
++	kfree(dslot->slot);
++	pci_dev_put(dslot->dev);
++	kfree(dslot);
++}
++
++static int add_slot(struct pci_dev *dev)
++{
++	struct dummy_slot *dslot;
++	struct hotplug_slot *slot;
++	int retval = -ENOMEM;
++
++	slot = kmalloc(sizeof(struct hotplug_slot), GFP_KERNEL);
++	if (!slot)
++		goto error;
++	memset(slot, 0, sizeof(*slot));
++
++	slot->info = kmalloc(sizeof(struct hotplug_slot_info), GFP_KERNEL);
++	if (!slot->info)
++		goto error_slot;
++	memset(slot->info, 0, sizeof(struct hotplug_slot_info));
++
++	slot->info->power_status = 1;
++	slot->info->max_bus_speed = PCI_SPEED_UNKNOWN;
++	slot->info->cur_bus_speed = PCI_SPEED_UNKNOWN;
++
++	slot->name = &dev->dev.bus_id[0];
++	dbg("slot->name = %s\n", slot->name);
++
++	dslot = kmalloc(sizeof(struct dummy_slot), GFP_KERNEL);
++	if (!dslot)
++		goto error_info;
++
++	slot->ops = &dummy_hotplug_slot_ops;
++	slot->release = &dummy_release;
++	slot->private = dslot;
++
++	retval = pci_hp_register(slot);
++	if (retval) {
++		err("pci_hp_register failed with error %d\n", retval);
++		goto error_dslot;
++	}
++
++	dslot->slot = slot;
++	dslot->dev = pci_dev_get(dev);
++	list_add (&dslot->node, &slot_list);
++	return retval;
++
++error_dslot:
++	kfree(dslot);
++error_info:
++	kfree(slot->info);
++error_slot:
++	kfree(slot);
++error:
++	return retval;
++}
++
++static int __init pci_scan_buses(void)
++{
++	struct pci_dev *dev = NULL;
++	int retval = 0;
++
++	while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) {
++		retval = add_slot(dev);
++		if (retval) {
++			pci_dev_put(dev);
++			break;
++		}
++	}
++
++	return retval;
++}
++
++static void remove_slot(struct dummy_slot *dslot)
++{
++	int retval;
++
++	dbg("removing slot %s\n", dslot->slot->name);
++	retval = pci_hp_deregister(dslot->slot);
++	if (retval)
++		err("Problem unregistering a slot %s\n", dslot->slot->name);
++}
++
++static int enable_slot(struct hotplug_slot *hotplug_slot)
++{
++	return -ENODEV;
++}
++
++static int disable_slot(struct hotplug_slot *slot)
++{
++	struct dummy_slot *dslot;
++
++	if (!slot)
++		return -ENODEV;
++	dslot = slot->private;
++
++	dbg("%s - physical_slot = %s\n", __FUNCTION__, slot->name);
++
++	/* don't disable bridged devices just yet, we can't handle them easily... */
++	if (dslot->dev->subordinate) {
++		err("Can't remove PCI devices with other PCI devices behind it yet.\n");
++		return -ENODEV;
++	}
++
++	/* remove the device from the pci core */
++	pci_remove_bus_device(dslot->dev);
++
++	/* blow away this sysfs entry and other parts. */
++	remove_slot(dslot);
++
++	return 0;
++}
++
++static void cleanup_slots (void)
++{
++	struct list_head *tmp;
++	struct list_head *next;
++	struct dummy_slot *dslot;
++
++	list_for_each_safe (tmp, next, &slot_list) {
++		dslot = list_entry (tmp, struct dummy_slot, node);
++		remove_slot(dslot);
++	}
++	
++}
++
++static int __init dummyphp_init(void)
++{
++	info(DRIVER_DESC "\n");
++
++	return pci_scan_buses();
++}
++
++
++static void __exit dummyphp_exit(void)
++{
++	cleanup_slots();
++}
++
++module_init(dummyphp_init);
++module_exit(dummyphp_exit);
++
++MODULE_AUTHOR(DRIVER_AUTHOR);
++MODULE_DESCRIPTION(DRIVER_DESC);
++MODULE_LICENSE("GPL");
++MODULE_PARM(debug, "i");
++MODULE_PARM_DESC(debug, "Debugging mode enabled or not");
++
+diff -Nru a/include/linux/vssi.h b/include/linux/vssi.h
+--- /dev/null	Wed Dec 31 16:00:00 196900
++++ b/include/linux/vssi.h	2005-05-07 12:54:02 -04:00
+@@ -0,0 +1,82 @@
++#ifndef _VSSIP_H
++#define _VSSIP_H
++
++#define VSSIPADDR_ANY	0xffff
++#define PORT		0x7A69
++#define VSSI_BACKLOG	32 /* FIXME: What's a sane backlog value? (== node number?) Should be configurable */
++
++#define VSSI_INIT	0x01
++#define VSSI_START	0x02
++#define VSSI_STOP	0x03
++
++/* global variables */
++extern struct socket *MainSocket;
++extern struct vssi_stats vssi_stats;
++extern atomic_t startstop;
++
++/* structure definitions */
++
++struct vssi_eth_hdr {
++	u8	version, arch;
++	u16	from, to;
++	u16	cmd;
++} __attribute__((packed));
++
++struct vssi_buffer {
++	struct list_head	list;
++	char*			buf;
++	u32			len;
++	u16			to;
++};
++
++struct vssi_stats {
++	u16			conns;
++	u16			maxconns;
++};
++
++struct vssi_conn_stats {
++	unsigned long		rx_bytes;
++	unsigned long		tx_bytes;
++};
++
++struct vssi_conn {
++	struct list_head	list;
++	struct socket*		socket;
++	struct vssi_conn_stats	stats;
++	struct rcu_head		rcuhead;
++};
++
++/* macros */
++
++#define inc_current_conns() \
++	do { \
++		vssi_stats.conns++; \
++		if (vssi_stats.conns > vssi_stats.maxconns) \
++			vssi_stats.maxconns = vssi_stats.conns; \
++	} while(0)
++
++#define dec_current_conns() \
++	do { \
++		vssi_stats.conns--; \
++	} while(0)
++
++/* prototypes */
++
++void vssi_init(void);
++int ManagementDaemon(void * unused);
++int ListeningDaemon(void * unused);
++int MainDaemon(void * unused);
++int StartListening(void);
++void StopListening(void);
++int vssi_Send(u16 node, u32 len, char* buff);
++int vssi_Receive(void);
++void vssi_tx_all(void);
++inline int vssi_accept_conns(void);
++struct vssi_conn * vssi_allocsock(void);
++void vssi_freesock(struct vssi_conn *conn);
++void send_hello(struct vssi_conn *conn);
++int vssi_read_procstats(char *buf, char **start, off_t offset, int count, int *eof, void *data);
++int vssi_read_procconns(char *buf, char **start, off_t offset, int count, int *eof, void *data);
++void vssi_rcufree_conn(struct rcu_head *conn);
++
++#endif
+diff -Nru a/init/main.c b/init/main.c
+--- a/init/main.c	2005-05-07 12:54:02 -04:00
++++ b/init/main.c	2005-05-07 12:54:02 -04:00
+@@ -46,6 +46,7 @@
+ #include <linux/rmap.h>
+ #include <linux/mempolicy.h>
+ #include <linux/key.h>
++#include <linux/vssi.h>
+ 
+ #include <asm/io.h>
+ #include <asm/bugs.h>
+@@ -743,6 +744,8 @@
+ 
+ 	(void) sys_dup(0);
+ 	(void) sys_dup(0);
++	
++	vssi_init();
+ 	
+ 	/*
+ 	 * We try each of these until one succeeds.
+diff -Nru a/net/Makefile b/net/Makefile
+--- a/net/Makefile	2005-05-07 12:54:02 -04:00
++++ b/net/Makefile	2005-05-07 12:54:02 -04:00
+@@ -42,6 +42,7 @@
+ obj-$(CONFIG_ECONET)		+= econet/
+ obj-$(CONFIG_VLAN_8021Q)	+= 8021q/
+ obj-$(CONFIG_IP_SCTP)		+= sctp/
++obj-$(CONFIG_VSSI)		+= vssi/
+ 
+ ifeq ($(CONFIG_NET),y)
+ obj-$(CONFIG_SYSCTL)		+= sysctl_net.o
+diff -Nru a/net/vssi/Makefile b/net/vssi/Makefile
+--- /dev/null	Wed Dec 31 16:00:00 196900
++++ b/net/vssi/Makefile	2005-05-07 12:54:02 -04:00
+@@ -0,0 +1,5 @@
++#
++# Makefile for the VSSI layer.
++#
++
++obj-y					+= daemon.o
+diff -Nru a/net/vssi/daemon.c b/net/vssi/daemon.c
+--- /dev/null	Wed Dec 31 16:00:00 196900
++++ b/net/vssi/daemon.c	2005-05-07 12:54:02 -04:00
+@@ -0,0 +1,451 @@
++#include <linux/rcupdate.h>
++#include <linux/proc_fs.h>
++#include <net/sock.h>
++#include <linux/in.h>
++#include <linux/tcp.h>
++#include <net/tcp.h>
++#include <linux/vssi.h>
++
++struct socket *MainSocket;
++struct vssi_stats vssi_stats;
++atomic_t startstop;
++
++LIST_HEAD(vssi_conns);
++spinlock_t vssi_conns_lock = SPIN_LOCK_UNLOCKED;
++LIST_HEAD(vssi_tx_buff);
++spinlock_t vssi_tx_buff_lock = SPIN_LOCK_UNLOCKED;
++
++/*
++ * Start up VSSI daemons
++ */
++
++void vssi_init()
++{
++#ifdef CONFIG_VSSI
++	printk(KERN_WARNING "vssi: 2004/05/09 Josef \"Jeff\" Sipek and Nur Hussein\n");
++	printk(KERN_WARNING "vssi: Enabling vssi management daemon...\n");
++	kernel_thread(ManagementDaemon, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
++	
++#ifdef CONFIG_VSSI_PROC_FS
++	/* Set up /proc/vssi/ structure */
++	proc_mkdir_mode("vssi",
++				0	/* default mode */,
++				NULL	/* parent dir */);
++	create_proc_read_entry("vssi/stats",
++				0	/* default mode */,
++				NULL	/* parent dir */,
++				vssi_read_procstats,
++				NULL	/* client data */);
++	create_proc_read_entry("vssi/conns",
++				0	/* default mode */,
++				NULL	/* parent dir */,
++				vssi_read_procconns,
++				NULL	/* client data */);
++#endif
++#endif
++}
++
++/*
++ * Management Daemon code
++ *	- Watch for admin tasks
++ */
++
++int ManagementDaemon(void * unused)
++{
++	atomic_set(&startstop,VSSI_INIT);
++	printk(KERN_WARNING "vssi: Enabling vssi daemon...\n");
++	kernel_thread(MainDaemon, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
++	kernel_thread(ListeningDaemon, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
++			
++	daemonize("vssid/m");
++	set_cpus_allowed(current, cpumask_of_cpu(0));
++
++	if (StartListening()) {
++		printk(KERN_WARNING "vssi: Error starting up...\n");
++		return 0;
++	}
++	
++	memset(&vssi_stats, 0, sizeof(struct vssi_stats));
++	
++	atomic_set(&startstop,VSSI_START);
++
++	while(atomic_read(&startstop)==VSSI_START) {
++		set_current_state(TASK_INTERRUPTIBLE);
++		schedule_timeout(HZ/2);
++		
++		// watch for admin tasks
++	}
++
++	atomic_set(&startstop,VSSI_STOP);
++
++	StopListening();
++	
++	return 0;
++}
++
++/*
++ * Daemon code dedicated to accepting connections
++ */
++
++int ListeningDaemon(void * unused)
++{
++	daemonize("vssid/l");
++	set_cpus_allowed(current, cpumask_of_cpu(0));
++	
++	while(atomic_read(&startstop)==VSSI_INIT) {
++		set_current_state(TASK_INTERRUPTIBLE);
++		schedule_timeout(HZ/10);
++	}
++
++	while(atomic_read(&startstop)==VSSI_START) {
++		set_current_state(TASK_INTERRUPTIBLE);
++		schedule_timeout(HZ/10);
++		
++		vssi_accept_conns();
++	}
++	
++	return 0;
++}
++
++/*
++ * Main Daemon code
++ */
++
++int MainDaemon(void * unused)
++{
++	struct vssi_conn *cc;
++	struct list_head *list;
++	
++	daemonize("vssid");
++	set_cpus_allowed(current, cpumask_of_cpu(0));
++	
++	while(atomic_read(&startstop)==VSSI_INIT) {
++		set_current_state(TASK_INTERRUPTIBLE);
++		schedule_timeout(HZ/10);
++	}
++	
++	while(atomic_read(&startstop)==VSSI_START) {
++		set_current_state(TASK_INTERRUPTIBLE);
++		schedule_timeout(HZ/10);
++		
++		rcu_read_lock();
++		list_for_each_rcu(list, &vssi_conns) {
++			cc = list_entry(list, struct vssi_conn, list);
++		
++			/* Remove dead sockets */
++			if (cc->socket->sk->sk_state != TCP_ESTABLISHED &&
++			    cc->socket->sk->sk_state != TCP_CLOSE_WAIT) {
++				list_del_rcu(&cc->list);
++				call_rcu(&cc->rcuhead, vssi_rcufree_conn);
++				continue;
++			}
++			
++			//cc->socket.ops->send(cc->socket, "hello", 5);
++			send_hello(cc);
++			
++			/* FIXME:
++				- read(cc->socket, BUFF, COUNT); (nonblock)
++				- add any new packets to a buffer
++			*/
++		}
++		rcu_read_unlock();
++		
++		vssi_tx_all();
++	}
++
++	return 0;
++}
++
++/*
++ * RCU free code
++ */
++
++void vssi_rcufree_conn(struct rcu_head *conn)
++{
++	vssi_freesock(container_of(conn, struct vssi_conn, rcuhead));
++}
++
++/*
++ * Accept connections, add them to the list
++ */
++
++inline int vssi_accept_conns()
++{
++	struct vssi_conn *conn;
++	static int err;
++	
++	if ((conn = vssi_allocsock())==NULL)
++		return -ENOMEM;
++	
++	do {
++		conn->socket->type = MainSocket->type;
++		conn->socket->ops  = MainSocket->ops;
++
++		//if (MainSocket->sk->tp_pinfo.af_tcp.accept_queue==NULL)
++		//	break;
++		
++		err = MainSocket->ops->accept(MainSocket, conn->socket, MainSocket->flags);
++		if (!err) {
++			list_add_rcu(&conn->list, &vssi_conns);
++			conn = vssi_allocsock();
++			
++			inc_current_conns();
++			
++			if (!conn)
++				return -ENOMEM;
++		}
++	} while(!err && atomic_read(&startstop)==VSSI_START);
++	
++	vssi_freesock(conn);
++	return err;
++}
++
++/*
++ * Allocate everything needed to set up a connection struct
++ */
++
++struct vssi_conn* vssi_allocsock()
++{
++	struct vssi_conn *conn;
++	
++	if ((conn = (struct vssi_conn*) kmalloc(sizeof(struct vssi_conn), GFP_ATOMIC)) == NULL)
++		goto nomem;
++	if ((conn->socket = (struct socket*) kmalloc(sizeof(struct socket), GFP_ATOMIC)) == NULL)
++		goto nomem_conn;
++	
++	memset(&conn->stats, 0, sizeof(struct vssi_conn_stats));
++
++	return conn;
++	
++nomem_conn:
++	kfree(conn);
++nomem:
++	printk(KERN_WARNING "vssi: Error allocating memory\n");
++	return NULL;
++}
++
++/*
++ * Free the connection struct
++ */
++
++void vssi_freesock(struct vssi_conn *conn)
++{
++	if (conn == NULL)
++		return;
++	
++	lock_sock(conn->socket->sk);
++	if (conn->socket->sk->sk_state == TCP_ESTABLISHED ||
++	    conn->socket->sk->sk_state == TCP_CLOSE_WAIT) {
++		//conn->socket->sk->sk_protinfo.af_tcp.nonagle = 0;
++		tcp_push_pending_frames(conn->socket->sk, conn->socket->sk->sk_protinfo);
++	}
++	release_sock(conn->socket->sk);
++	
++	sock_release(conn->socket);
++	asm("#d");
++	kfree(conn);
++	
++	dec_current_conns();
++}
++
++/*
++ * Send a "hello"-type message to the other end
++ */
++
++void send_hello(struct vssi_conn *conn)
++{
++	/* for packet sending.. */
++	struct msghdr	msg;
++	mm_segment_t	oldfs;
++	struct iovec	iov;
++	int 		len,len2;
++	
++	msg.msg_name     = 0;
++	msg.msg_namelen  = 0;
++	msg.msg_iov	 = &iov;
++	msg.msg_iovlen   = 1;
++	msg.msg_control  = NULL;
++	msg.msg_controllen = 0;
++	msg.msg_flags    = 0;  /* Synchronous for now */
++	
++	iov.iov_base = "hello from your kernel";
++	iov.iov_len  = 22;
++	
++	len2= 22;
++	len = 0;
++	
++	oldfs = get_fs(); set_fs(KERNEL_DS);
++	len = sock_sendmsg(conn->socket,&msg,len2);
++	set_fs(oldfs);
++
++	if (len != len2)
++		printk(KERN_WARNING "vssi: Warning, %d bytes prepared, but only %d sent\n", len2, len);
++	
++	conn->stats.tx_bytes += len;
++	
++	//conn->socket->ops->shutdown(conn->socket,2); // FIXME: close down the connection
++	
++}
++
++/*
++ * Start listening for new connections
++ */
++
++int StartListening()
++{
++	struct socket *sock;
++	struct sockaddr_in saddr;
++	int error;
++	
++	/* Create a socket */
++	
++	error = sock_create(PF_INET,SOCK_STREAM,IPPROTO_TCP,&sock);
++	if (error<0) {
++		printk(KERN_ERR "vssi: Error, could not create socket\n");
++		return -ERESTARTSYS;
++	}
++	
++	/* Bind to the socket */
++	
++	saddr.sin_family	= AF_INET;
++	saddr.sin_addr.s_addr	= INADDR_ANY;
++	saddr.sin_port		= htons((unsigned short)PORT);
++	
++	error = sock->ops->bind(sock,(struct sockaddr*)&saddr, sizeof(saddr));
++	if (error<0) {
++		printk(KERN_ERR "vssi: Error, could not bind to socket\n");
++		sock_release(sock);
++		return -ERESTARTSYS;
++	}
++
++	/* Somewhat pointless, since no one should be listing this early */
++	sock->sk->sk_reuse = 1;
++	
++	/* Start listening */
++	
++	error = sock->ops->listen(sock, VSSI_BACKLOG);
++	if (error != 0) {
++		printk(KERN_ERR "vssi: Error, could not start listening on socket\n");
++		sock_release(sock);
++		return -ERESTARTSYS;
++	}
++	
++	MainSocket = sock;
++
++	return 0;
++}
++
++/*
++ * Stop listening for new connections
++ */
++
++void StopListening()
++{
++	struct socket *sock;
++	
++	if (MainSocket==NULL)
++		return;
++	
++	sock = MainSocket;
++	MainSocket = NULL;
++	sock_release(sock);
++}
++
++/*
++ * Transmit all queued buffers
++ */
++
++void vssi_tx_all()
++{
++	struct list_head *list;
++	struct vssi_buffer *buf;
++
++	spin_lock(&vssi_tx_buff_lock);
++	
++	list_for_each(list, &vssi_tx_buff) {
++		buf = list_entry(list, struct vssi_buffer, list);
++			
++		/*
++			TODO:
++				- Send buf->buf to buf->to
++				- add buf->len to conn->stats.tx_bytes
++		*/
++		kfree(buf->buf);
++		kfree(buf); /* FIXME: this is going to cause oops at best, and mem corruption at worst */
++	}
++	
++	INIT_LIST_HEAD(&vssi_tx_buff);
++	
++	spin_unlock(&vssi_tx_buff_lock);
++}
++
++/*
++ * Send a buffer of length len to node
++ */
++ 
++int vssi_Send(u16 node, u32 len, char* ptr)
++{
++	struct vssi_buffer *buf = (struct vssi_buffer*) kmalloc(sizeof(struct vssi_buffer), GFP_ATOMIC);
++	
++	if (!buf)
++		return -ENOMEM;
++	
++	buf->to  = node;
++	buf->len = len;
++	buf->buf = ptr;
++	
++	spin_lock(&vssi_tx_buff_lock);
++	list_add_tail(&buf->list, &vssi_tx_buff);
++	spin_unlock(&vssi_tx_buff_lock);
++	
++	return 0;
++}
++
++/*
++ * Receive any streams, save them into newly allocated buffers,
++ * and invoke the appropreate kernel handler
++ */
++
++int vssi_Receive()
++{
++	return 0;
++}
++
++/*
++ * Read all the /proc/vssi/stats
++ */
++
++int vssi_read_procstats(char *buf, char **start, off_t offset, int count, int *eof, void *data)
++{
++	*eof = 1;
++	return sprintf(buf, "conns:\t\t%u\nmaxconns:\t%u\n", vssi_stats.conns, vssi_stats.maxconns);
++}
++
++/*
++ * Read all the /proc/vssi/conns
++ */
++
++int vssi_read_procconns(char *buf, char **start, off_t offset, int count, int *eof, void *data)
++{
++	struct list_head *list;
++	struct vssi_conn *cc;
++	static int len;
++	
++	if (!list_empty(&vssi_conns)) {
++		rcu_read_lock();
++		list_for_each_rcu(list, &vssi_conns) {
++			cc = list_entry(list, struct vssi_conn, list);
++		
++			len += sprintf(buf+len, "%lu %lu\n", cc->stats.rx_bytes, cc->stats.tx_bytes);
++		}
++		rcu_read_unlock();
++	} else
++		len = sprintf(buf, "No connections\n");
++	
++	*eof = 1;
++	return len;
++}
++
++EXPORT_SYMBOL(vssi_init);
++EXPORT_SYMBOL(vssi_Send);
++EXPORT_SYMBOL(vssi_Receive);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vssi/vp2p-2.6.diff	Sat Aug 25 19:49:24 2007 -0400
@@ -0,0 +1,714 @@
+# This is a BitKeeper generated diff -Nru style patch.
+#
+# ChangeSet
+#   2004/12/20 20:47:55-05:00 jeffpc@optonline.net 
+#   Merge
+# 
+# init/main.c
+#   2004/12/20 20:47:52-05:00 jeffpc@optonline.net +0 -0
+#   SCCS merged
+# 
+# net/Makefile
+#   2004/12/20 20:30:42-05:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# include/linux/socket.h
+#   2004/12/20 20:30:42-05:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# include/linux/if_ether.h
+#   2004/12/20 20:30:42-05:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# arch/i386/Kconfig
+#   2004/12/20 20:30:42-05:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# ChangeSet
+#   2004/10/30 15:18:19-04:00 jeffpc@optonline.net 
+#   Added VSSI_INIT
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/10/30 15:18:10-04:00 jeffpc@optonline.net +3 -3
+#   Use VSSI_INIT
+# 
+# include/linux/vssi.h
+#   2004/10/30 15:18:10-04:00 jeffpc@optonline.net +4 -2
+#   Added VSSI_INIT
+# 
+# ChangeSet
+#   2004/09/21 00:51:12-04:00 jeffpc@optonline.net 
+#   Merge optonline.net:/home/jeffpc/linux/linux-2.5
+#   into optonline.net:/home/jeffpc/linux/vp2p-work
+# 
+# net/Makefile
+#   2004/09/21 00:51:06-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# init/main.c
+#   2004/09/21 00:51:06-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# include/linux/socket.h
+#   2004/09/21 00:51:06-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# include/linux/if_ether.h
+#   2004/09/21 00:51:06-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# arch/i386/Kconfig
+#   2004/09/21 00:51:06-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# ChangeSet
+#   2004/09/16 10:16:57-04:00 jeffpc@optonline.net 
+#   [VSSI] Added a check for closed connections
+#   
+#   Signed-off-by: Josef "Jeff" Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/09/16 10:16:46-04:00 jeffpc@optonline.net +12 -2
+#   Added a check for closed connections.
+# 
+# ChangeSet
+#   2004/08/16 14:31:09-04:00 jeffpc@optonline.net 
+#   Merge optonline.net:/home/jeffpc/linux/linux-2.5
+#   into optonline.net:/home/jeffpc/linux/vp2p-work
+# 
+# init/main.c
+#   2004/08/16 14:31:03-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# ChangeSet
+#   2004/07/16 11:14:56-04:00 jeffpc@optonline.net 
+#   [VSSI] Created 2 macros to manage connection stats
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/07/16 11:14:46-04:00 jeffpc@optonline.net +3 -3
+#   Created 2 macros to manage connection stats
+# 
+# include/linux/vssi.h
+#   2004/07/16 11:14:46-04:00 jeffpc@optonline.net +14 -0
+#   Created 2 macros to manage connection stats
+# 
+# ChangeSet
+#   2004/07/14 17:00:40-04:00 jeffpc@optonline.net 
+#   [VSSI] Added descriptions of the functions
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/07/14 17:00:32-04:00 jeffpc@optonline.net +20 -0
+#   Added descriptions of the functions
+# 
+# ChangeSet
+#   2004/07/14 16:39:19-04:00 jeffpc@optonline.net 
+#   [VSSI] Use RCU for connection list maintainance
+#   Remove destroy flag
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/07/14 16:39:09-04:00 jeffpc@optonline.net +34 -11
+#   Use RCU for connection list maintainance
+#   Remove destroy flag
+# 
+# include/linux/vssi.h
+#   2004/07/14 16:39:09-04:00 jeffpc@optonline.net +2 -1
+#   Use RCU for connection list maintainance
+#   Remove destroy flag
+# 
+# ChangeSet
+#   2004/07/11 09:58:23-04:00 jeffpc@optonline.net 
+#   [VSSI] Get rid of a compilation warning
+#   Include tcp.h since we are using TCP/IP
+#   Moved the destroy flag to the correct struct
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# include/linux/vssi.h
+#   2004/07/11 09:51:40-04:00 jeffpc@optonline.net +3 -3
+#   Get rid of a warning
+# 
+# net/vssi/daemon.c
+#   2004/07/11 09:50:22-04:00 jeffpc@optonline.net +10 -5
+#   Get rid of a warning
+# 
+# net/vssi/daemon.c
+#   2004/07/11 09:31:45-04:00 jeffpc@optonline.net +1 -0
+#   Include tcp.h since we are using TCP/IP
+# 
+# include/linux/vssi.h
+#   2004/07/11 09:29:06-04:00 jeffpc@optonline.net +1 -1
+#   Moved the destroy flag to the correct struct
+# 
+# ChangeSet
+#   2004/07/10 17:23:51-04:00 jeffpc@optonline.net 
+#   [VSSI] Added destroy flag
+#   Fix bug with ListeningDaemon() not sleeping
+#   Socket closing error fix
+#   Removed strange if statement
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# include/linux/vssi.h
+#   2004/07/10 17:20:55-04:00 jeffpc@optonline.net +1 -0
+#   Added destroy flag
+# 
+# net/vssi/daemon.c
+#   2004/07/10 16:57:23-04:00 jeffpc@batlh.(none) +25 -16
+#   Fix bug with ListeningDaemon() not sleeping
+#   Socket closing error fix
+#   Removed strange if statement
+# 
+# ChangeSet
+#   2004/07/09 06:09:00-04:00 jeffpc@batlh.(none) 
+#   [VSSI] Added ListeningDaemon() (runs as "vssid/l")
+#   ManagementDaemon() runs every HZ/2
+#   ManagementDaemon() doesn't listen for new connections now
+#   Added prototype for ListeningDaemon()
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/07/09 06:02:20-04:00 jeffpc@batlh.(none) +18 -3
+#   Added ListeningDaemon() (runs as "vssid/l")
+#   ManagementDaemon() runs every HZ/2
+#   ManagementDaemon() doesn't listen for new connections now
+# 
+# include/linux/vssi.h
+#   2004/07/09 06:00:49-04:00 jeffpc@optonline.net +1 -0
+#   Added prototype for ListeningDaemon()
+# 
+# ChangeSet
+#   2004/07/09 05:33:17-04:00 jeffpc@optonline.net 
+#   [VSSI] Combined atomic vars start and quit into startstop
+#   Added flags VSSI_START and VSSI_STOP
+#   Combined atomic variables start and quit into startstop
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# include/linux/vssi.h
+#   2004/07/09 05:24:18-04:00 jeffpc@optonline.net +4 -2
+#   Combined atomic vars start and quit into startstop
+#   Added flags VSSI_START and VSSI_STOP
+# 
+# net/vssi/daemon.c
+#   2004/07/09 05:22:21-04:00 jeffpc@optonline.net +8 -10
+#   Combined atomic variables start and quit into startstop
+# 
+# ChangeSet
+#   2004/07/06 21:00:51-04:00 jeffpc@optonline.net 
+#   [VSSI] Fixed maxconn statistics bug
+#   Add length of the "hello" message to tx_bytes
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/07/06 21:00:43-04:00 jeffpc@optonline.net +3 -1
+#   Fixed maxconn statistics bug
+#   Add length of the "hello" message to tx_bytes
+# 
+# ChangeSet
+#   2004/07/06 20:05:30-04:00 jeffpc@optonline.net 
+#   [VSSI] Added VSSI_PROC_FS
+#   Added vssi_stats
+#   Added /proc/vssi/{stats,conns} (configurable)
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/07/06 20:05:20-04:00 jeffpc@optonline.net +59 -4
+#   Added vssi_stats
+#   Added /proc/vssi/{stats,conns} (configurable)
+# 
+# include/linux/vssi.h
+#   2004/07/06 20:05:20-04:00 jeffpc@optonline.net +8 -0
+#   Added struct vssi_stats
+# 
+# arch/i386/Kconfig
+#   2004/07/06 20:05:20-04:00 jeffpc@optonline.net +9 -0
+#   Added VSSI_PROC_FS
+# 
+# ChangeSet
+#   2004/07/06 17:54:20-04:00 jeffpc@optonline.net 
+#   [VSSI] Created ManagementDaemon()
+#   Moved accept() code into ManagementDaemon()
+#   Changed the message sent to the other end
+#   MainDaemon() returns void
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/07/06 17:54:12-04:00 jeffpc@optonline.net +45 -25
+#   Created ManagementDaemon()
+#   Moved accept() code into ManagementDaemon()
+#   Changed the message sent to the other end
+# 
+# include/linux/vssi.h
+#   2004/07/06 17:54:12-04:00 jeffpc@optonline.net +3 -1
+#   MainDaemon returns void
+#   Added ManagementDaemon
+# 
+# ChangeSet
+#   2004/07/06 10:19:51-04:00 jeffpc@optonline.net 
+#   [VSSI] Moved code out of MainDaemon() into newly made vssi_accept_conns(),
+#   vssi_allocsock(), vssi_freesock(), and send_hello()
+#   Changed length type for vssi_Send() to u32
+#   Whitespace cleanup in vssi.h
+#   Added connection statistics struct
+#   conn->socket is a pointer
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/07/06 10:19:43-04:00 jeffpc@optonline.net +111 -53
+#   Moved code out of MainDaemon() into newly made vssi_accept_conns(),
+#   vssi_allocsock(), vssi_freesock(), and send_hello()
+#   Changed length type for vssi_Send() to u32
+# 
+# include/linux/vssi.h
+#   2004/07/06 10:19:43-04:00 jeffpc@optonline.net +14 -4
+#   Little whitespace cleanup
+#   Added connection statistics struct
+#   conn->socket is a pointer
+# 
+# ChangeSet
+#   2004/07/02 18:44:10-04:00 jeffpc@optonline.net 
+#   [VSSI] Added two out of memory checks
+#   Now using socket flags to accept connections
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/07/02 18:44:02-04:00 jeffpc@optonline.net +11 -2
+#   Added two out of memory checks
+#   Now using socket flags to accept connections
+# 
+# ChangeSet
+#   2004/06/28 11:11:09-04:00 jeffpc@optonline.net 
+#   Merge optonline.net:/home/jeffpc/linux/linux-2.5
+#   into optonline.net:/home/jeffpc/linux/vp2p-work
+# 
+# init/main.c
+#   2004/06/28 11:11:04-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# ChangeSet
+#   2004/06/25 00:40:41-04:00 jeffpc@optonline.net 
+#   Merge optonline.net:/home/jeffpc/linux/linux-2.5
+#   into optonline.net:/home/jeffpc/linux/vp2p-work
+# 
+# init/main.c
+#   2004/06/25 00:40:36-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# ChangeSet
+#   2004/06/25 00:28:02-04:00 jeffpc@optonline.net 
+#   [VSSI] Call daemonize() complete the setup
+#   Use TCP/IP instead of UDP/IP
+#   Prefix error messages with "vssi: "
+#   Fixed return value check (sock->ops->listen() call)
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/06/25 00:27:53-04:00 jeffpc@optonline.net +6 -5
+#   Call daemonize() complete the setup
+#   Use TCP/IP instead of UDP/IP
+#   Prefix error messages with "vssi: "
+#   Fixed return value check (sock->ops->listen() call)
+# 
+# ChangeSet
+#   2004/06/24 03:53:05-04:00 jeffpc@optonline.net 
+#   [VSSI] Use kernel_thread() instead of daemonize()
+#   
+#   Note: The kernel now not only compiles, but it also boots if you
+#   select both VSSI and VP2P
+#   
+#   Signed-off-by: Josef 'Jeff' Sipek <jeffpc@optonline.net>
+# 
+# net/vssi/daemon.c
+#   2004/06/24 03:52:51-04:00 jeffpc@optonline.net +3 -5
+#   Use kernel_thread() instead of daemonize()
+# 
+# ChangeSet
+#   2004/06/23 03:36:25-04:00 jeffpc@optonline.net 
+#   Make sure we execute only on CPU 0
+#   Fix up 2 BUGS (check return values)
+# 
+# net/vssi/daemon.c
+#   2004/06/23 03:36:13-04:00 jeffpc@optonline.net +18 -6
+#   Make sure we execute only on CPU 0
+#   Fix up 2 BUGS (check return values)
+# 
+# ChangeSet
+#   2004/06/22 22:22:04-04:00 jeffpc@optonline.net 
+#   Merge optonline.net:/home/jeffpc/linux/vp2p-2.6
+#   into optonline.net:/home/jeffpc/linux/vp2p-work
+# 
+# init/main.c
+#   2004/06/22 22:22:01-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# arch/i386/Kconfig
+#   2004/06/22 22:22:01-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# ChangeSet
+#   2004/06/22 22:16:12-04:00 jeffpc@optonline.net 
+#   Merge
+# 
+# init/main.c
+#   2004/06/22 22:16:06-04:00 jeffpc@optonline.net +0 -0
+#   SCCS merged
+# 
+# arch/i386/Kconfig
+#   2004/06/22 22:09:40-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# ChangeSet
+#   2004/06/20 02:36:01-04:00 jeffpc@optonline.net 
+#   [VSSI] Fixed memory leak
+#   Send test packet
+# 
+# net/vssi/daemon.c
+#   2004/06/20 02:31:50-04:00 jeffpc@optonline.net +29 -0
+#   Fixed memory leak
+#   Send test packet
+# 
+# ChangeSet
+#   2004/06/19 23:26:52-04:00 jeffpc@optonline.net 
+#   Merge
+# 
+# init/main.c
+#   2004/06/19 23:26:48-04:00 jeffpc@optonline.net +0 -0
+#   SCCS merged
+# 
+# arch/i386/Kconfig
+#   2004/06/19 23:24:40-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# ChangeSet
+#   2004/06/11 22:12:48-04:00 jeffpc@optonline.net 
+#   [VSSI] Use VSSI_BACKLOG instead of a hardcoded number
+#   kfree buffer and buffer structure (this might not fly well)
+# 
+# net/vssi/daemon.c
+#   2004/06/11 22:12:42-04:00 jeffpc@optonline.net +9 -8
+#   Use VSSI_BACKLOG instead of a hardcoded number
+#   kfree buffer and buffer structure (this might not fly well)
+# 
+# include/linux/vssi.h
+#   2004/06/11 22:12:42-04:00 jeffpc@optonline.net +1 -0
+#   Backlog constant added
+# 
+# ChangeSet
+#   2004/06/10 12:31:49-04:00 jeffpc@jeff.home 
+#   vssiphp.c:
+#     Some changes
+#     bk cp fakephp.c vssiphp.c
+#     PCI hotplug: fix up a bunch of copyrights that were incorrectly declared.
+#     new file
+# 
+# drivers/pci/hotplug/vssiphp.c
+#   2004/06/10 12:31:09-04:00 jeffpc@jeff.home +8 -14
+#   Clean up of the comments, and several constants
+# 
+# drivers/pci/hotplug/vssiphp.c
+#   2004/06/10 12:22:57-04:00 jeffpc@jeff.home +0 -0
+#   bk cp fakephp.c vssiphp.c
+# 
+# ChangeSet
+#   2004/06/09 21:08:28-04:00 jeffpc@optonline.net 
+#   [VP2P] Add new buffer to the list of buffers to be tx
+#   Some changes in the struct vssi_buffer
+# 
+# net/vssi/daemon.c
+#   2004/06/09 21:08:20-04:00 jeffpc@optonline.net +13 -6
+#   Add new buffer to the list of buffers to be tx
+# 
+# include/linux/vssi.h
+#   2004/06/09 21:08:20-04:00 jeffpc@optonline.net +3 -2
+#   Renamed some structure members, added address field
+# 
+# ChangeSet
+#   2004/06/09 07:12:36-04:00 jeffpc@optonline.net 
+#   [VP2P] Clear the buffer list after going through it in tx_all
+#   Added basic body for Send()
+# 
+# net/vssi/daemon.c
+#   2004/06/09 07:12:30-04:00 jeffpc@optonline.net +20 -1
+#   Clear the buffer list after going through it in tx_all
+#   Added basic body for Send()
+# 
+# ChangeSet
+#   2004/06/08 22:02:49-04:00 jeffpc@optonline.net 
+#   [VP2P] Added vssi_tx_all() dummy code
+# 
+# net/vssi/daemon.c
+#   2004/06/08 22:02:42-04:00 jeffpc@optonline.net +14 -0
+#   Added vssi_tx_all() dummy code
+# 
+# include/linux/vssi.h
+#   2004/06/08 22:02:42-04:00 jeffpc@optonline.net +1 -0
+#   Added vssi_tx_all() prototype
+# 
+# ChangeSet
+#   2004/06/08 21:48:46-04:00 jeffpc@optonline.net 
+#   [VP2P] Clean up FIXME
+# 
+# net/vssi/daemon.c
+#   2004/06/08 21:48:39-04:00 jeffpc@optonline.net +5 -7
+#   Clean up FIXME
+# 
+# ChangeSet
+#   2004/06/08 21:33:56-04:00 jeffpc@optonline.net 
+#   [VP2P] Itterate through all the connections in the list
+# 
+# net/vssi/daemon.c
+#   2004/06/08 21:33:50-04:00 jeffpc@optonline.net +14 -6
+#   Itterate through all the connections in the list
+# 
+# ChangeSet
+#   2004/06/08 20:53:36-04:00 jeffpc@optonline.net 
+#   [VP2P] Fixed up compilation issue
+# 
+# net/vssi/daemon.c
+#   2004/06/08 20:53:30-04:00 jeffpc@optonline.net +4 -3
+#   Fix up compile
+# 
+# ChangeSet
+#   2004/06/06 20:21:34-04:00 jeffpc@optonline.net 
+#   Merge optonline.net:/home/jeffpc/linux/linux-2.5
+#   into optonline.net:/home/jeffpc/linux/vp2p-2.6
+# 
+# init/main.c
+#   2004/06/06 20:21:31-04:00 jeffpc@optonline.net +0 -0
+#   Auto merged
+# 
+# ChangeSet
+#   2004/06/06 20:14:10-04:00 jeffpc@optonline.net 
+#   [VSSI] Spelling/compilation fixes
+# 
+# net/vssi/daemon.c
+#   2004/06/06 20:14:04-04:00 jeffpc@optonline.net +5 -4
+#   Spelling/compilation fixes
+# 
+# init/main.c
+#   2004/06/06 20:14:04-04:00 jeffpc@optonline.net +1 -0
+#   Include linux/vssi.h
+# 
+# include/linux/vssi.h
+#   2004/06/06 20:14:04-04:00 jeffpc@optonline.net +5 -2
+#   Added additional prototypes
+# 
+# ChangeSet
+#   2004/06/06 19:15:46-04:00 jeffpc@optonline.net 
+#   [VSSI] Create new sockets upon accept()
+# 
+# net/vssi/daemon.c
+#   2004/06/06 19:15:40-04:00 jeffpc@optonline.net +17 -4
+#   Create new sockets upon accept()
+# 
+# include/linux/vssi.h
+#   2004/06/06 19:15:40-04:00 jeffpc@optonline.net +5 -0
+#   Added connection information structure
+# 
+# ChangeSet
+#   2004/06/05 01:40:47-04:00 jeffpc@optonline.net 
+#   Fixed up dependencies for CONFIG_VSSI
+#   Created CONFIG_VSSI_VP2P
+# 
+# arch/i386/Kconfig
+#   2004/06/05 01:40:41-04:00 jeffpc@optonline.net +10 -1
+#   Fixed up dependencies for CONFIG_VSSI
+#   Created CONFIG_VSSI_VP2P
+# 
+# ChangeSet
+#   2004/06/05 01:17:23-04:00 jeffpc@optonline.net 
+#   1.1612.diff
+# 
+# net/vssi/daemon.c
+#   2004/06/05 01:11:03-04:00 jeffpc@optonline.net +24 -0
+#   Import patch 1.1612.diff
+# 
+# include/linux/vssi.h
+#   2004/06/05 01:11:03-04:00 jeffpc@optonline.net +16 -2
+#   Import patch 1.1612.diff
+# 
+# ChangeSet
+#   2004/06/05 01:17:08-04:00 jeffpc@optonline.net 
+#   1.1611.diff
+# 
+# net/vssi/daemon.c
+#   2004/06/05 01:10:48-04:00 jeffpc@optonline.net +12 -6
+#   Import patch 1.1611.diff
+# 
+# include/linux/vssi.h
+#   2004/06/05 01:10:48-04:00 jeffpc@optonline.net +6 -0
+#   Import patch 1.1611.diff
+# 
+# ChangeSet
+#   2004/06/05 01:16:18-04:00 jeffpc@optonline.net 
+#   1.1610.diff
+# 
+# net/vssi/daemon.c
+#   2004/06/05 01:10:35-04:00 jeffpc@optonline.net +8 -4
+#   Import patch 1.1610.diff
+# 
+# include/net/vssip.h
+#   2004/06/05 01:10:35-04:00 jeffpc@optonline.net +4 -14
+#   Import patch 1.1610.diff
+# 
+# include/linux/socket.h
+#   2004/06/05 01:10:35-04:00 jeffpc@optonline.net +1 -3
+#   Import patch 1.1610.diff
+# 
+# include/linux/if_ether.h
+#   2004/06/05 01:10:35-04:00 jeffpc@optonline.net +0 -1
+#   Import patch 1.1610.diff
+# 
+# ChangeSet
+#   2004/06/05 01:16:01-04:00 jeffpc@optonline.net 
+#   1.1371.612.3.diff
+# 
+# net/vssi/daemon.c
+#   2004/06/05 01:09:42-04:00 jeffpc@optonline.net +9 -0
+#   Import patch 1.1371.612.3.diff
+# 
+# init/main.c
+#   2004/06/05 01:09:42-04:00 jeffpc@optonline.net +2 -0
+#   Import patch 1.1371.612.3.diff
+# 
+# include/linux/if_ether.h
+#   2004/06/05 01:09:42-04:00 jeffpc@optonline.net +1 -0
+#   Import patch 1.1371.612.3.diff
+# 
+# ChangeSet
+#   2004/06/05 01:15:27-04:00 jeffpc@optonline.net 
+#   Created basic skeleton for VSSI systems
+# 
+# net/vssi/daemon.c
+#   2004/06/05 01:09:20-04:00 jeffpc@optonline.net +81 -0
+#   BitKeeper file /home/jeffpc/linux/vssi-2.6/net/vssi/daemon.c
+# 
+# net/vssi/Makefile
+#   2004/06/05 01:09:20-04:00 jeffpc@optonline.net +5 -0
+#   BitKeeper file /home/jeffpc/linux/vssi-2.6/net/vssi/Makefile
+# 
+# include/net/vssip.h
+#   2004/06/05 01:09:20-04:00 jeffpc@optonline.net +20 -0
+#   BitKeeper file /home/jeffpc/linux/vssi-2.6/include/linux/vssi.h
+# 
+# net/vssi/daemon.c
+#   2004/06/05 01:09:20-04:00 jeffpc@optonline.net +0 -0
+#   BitKeeper file /home/jeffpc/linux/vp2p-2.6/net/vssi/daemon.c
+# 
+# net/vssi/Makefile
+#   2004/06/05 01:09:20-04:00 jeffpc@optonline.net +0 -0
+#   BitKeeper file /home/jeffpc/linux/vp2p-2.6/net/vssi/Makefile
+# 
+# net/Makefile
+#   2004/06/05 01:09:20-04:00 jeffpc@optonline.net +1 -0
+#   Build net/vssi/ if needed
+# 
+# include/net/vssip.h
+#   2004/06/05 01:09:20-04:00 jeffpc@optonline.net +0 -0
+#   BitKeeper file /home/jeffpc/linux/vp2p-2.6/include/net/vssip.h
+# 
+# include/linux/socket.h
+#   2004/06/05 01:09:20-04:00 jeffpc@optonline.net +3 -1
+#   Added VSSI Protocol and Address Family numbers
+# 
+# arch/i386/Kconfig
+#   2004/06/05 01:09:20-04:00 jeffpc@optonline.net +12 -0
+#   VSSI config option
+# 
+# drivers/pci/hotplug/vssiphp.c
+#   2003/08/27 07:44:50-07:00 greg@kroah.com +3 -3
+#   PCI hotplug: fix up a bunch of copyrights that were incorrectly declared.
+# 
+# drivers/pci/hotplug/vssiphp.c
+#   2003/06/25 17:24:41-07:00 greg@kroah.com +232 -0
+# 
+# drivers/pci/hotplug/vssiphp.c
+#   2003/06/25 17:24:41-07:00 greg@kroah.com +0 -0
+#   BitKeeper file /home/greg/linux/BK/pci-2.5/drivers/pci/hotplug/fakephp.c
+# 
+diff -Nru a/arch/i386/Kconfig b/arch/i386/Kconfig
+--- a/arch/i386/Kconfig	2005-05-14 18:49:11 -04:00
++++ b/arch/i386/Kconfig	2005-05-14 18:49:11 -04:00
+@@ -501,6 +501,36 @@
+ 	  cost of slightly increased overhead in some places. If unsure say
+ 	  N here.
+ 
++config VSSI
++	bool "Virtual Single System Image (EXPERIMENTAL)"
++	depends on SMP && !MODULES && HOTPLUG && EXPERIMENTAL
++	help
++	  This option enables the creation of a virtual single system image
++	  cluster. The resulting cluster will behave like a SSI system.
++	  
++	  Note: If you want to use more than 1GB of total RAM, make sure High Memory
++	  Support is turned on.
++	  
++	  If you don't know what to do here, say N.
++
++config VSSI_PROC_FS
++	bool "Virtual Single System Image /proc interface"
++	depends on VSSI && PROC_FS
++	help
++	  This option creates /proc/vssi/ directory along with several files
++	  with statistics and configuration.
++	  
++	  If you don't know what to do here, say N.
++
++config VSSI_VP2P
++	bool "Virtual PCI-2-PCI bridge (EXPERIMENTAL)"
++	depends on VSSI && HOTPLUG_PCI
++	help
++	  This option allows the kernel to create a virtual PCI-2-PCI bridge
++	  over standard ethernet interface.
++	  
++	  If you don't know what to do here, say N.
++
+ config PREEMPT
+ 	bool "Preemptible Kernel"
+ 	help
+diff -Nru a/init/main.c b/init/main.c
+--- a/init/main.c	2005-05-14 18:49:11 -04:00
++++ b/init/main.c	2005-05-14 18:49:11 -04:00
+@@ -46,6 +46,7 @@
+ #include <linux/rmap.h>
+ #include <linux/mempolicy.h>
+ #include <linux/key.h>
++#include <linux/vssi.h>
+ 
+ #include <asm/io.h>
+ #include <asm/bugs.h>
+@@ -743,6 +744,8 @@
+ 
+ 	(void) sys_dup(0);
+ 	(void) sys_dup(0);
++	
++	vssi_init();
+ 	
+ 	/*
+ 	 * We try each of these until one succeeds.
+diff -Nru a/net/Makefile b/net/Makefile
+--- a/net/Makefile	2005-05-14 18:49:11 -04:00
++++ b/net/Makefile	2005-05-14 18:49:11 -04:00
+@@ -42,6 +42,7 @@
+ obj-$(CONFIG_ECONET)		+= econet/
+ obj-$(CONFIG_VLAN_8021Q)	+= 8021q/
+ obj-$(CONFIG_IP_SCTP)		+= sctp/
++obj-$(CONFIG_VSSI)		+= vssi/
+ 
+ ifeq ($(CONFIG_NET),y)
+ obj-$(CONFIG_SYSCTL)		+= sysctl_net.o