From 1145e4da1321f80b8f1fe9184bdd8e596f2dcd2a Mon Sep 17 00:00:00 2001
From: Stefan Siegl <stesie@brokenpipe.de>
Date: Mon, 8 Oct 2007 21:59:10 +0000
Subject: 2007-10-08  Stefan Siegl  <stesie@brokenpipe.de>

	* config.h (CONFIG_IPV6, CONFIG_IPV6_EUI64): New defines,
	set to 1.
	* Makefile (ipv6-srcs): New variable.
	(LINUXSRCS): Add ipv6-srcs.

	* ethernet.c (ethernet_demuxer): Call skb_put instead of changing
	skb->len directly, and thus now update skb->tail accordingly.
	* pfinet.h (PORTCLASS_INET, PORTCLASS_INET6): New enums.
	(trivfs_protid_portclasses, trivfs_protid_nportclasses)
	(trivfs_cntl_portclasses, trivfs_cntl_nportclasses): Declare
	these.
	(pfinet_bootstrap_portclass): New variable.
	(pfinet_bind): New function.
	* main.c: Define _HACK_ERRNO_H.  Include <errno.h>.
	(trivfs_protid_portclasses, trivfs_cntl_portclasses): New slots
	for PORTCLASS_INET6.
	(trivfs_protid_nportclasses, trivfs_cntl_nportclasses): Set to 2.
	(pfinet_bootstrap_portclass): New variable.
	(pfinet_bind): New function.
	(pfinet_activate_ipv6) [CONFIG_IPV6]: New function.
	(main) [CONFIG_IPV6]: Call inet6_proto_init.
	(main): Reordered to allow pfinet to not be started as a
	translator, if pfinet_bind is used.  If started as a translator,
	treat pfinet_bootstrap_portclass when calling trivfs_startup.
	* options.c: Include <net/sock.h>, <net/ip6_fib.h>,
	<net/ip6_route.h> and <net/addrconf.h>.
	(options): New option `ipv4'.
	(options) [CONFIG_IPV6]: New options `ipv6', `address6' and
	`gateway6'.
	(parse_interface) [CONFIG_IPV6]: Add address6 and gateway6.
	(parse_hook_add_interface) [CONFIG_IPV6]: Initialize address6 and
	gateway6.
	(parse_opt): Parse new args.
	* socket-ops.c (S_socket_create): Call either
	net_families[PF_INET]->create or net_families[PF_INET6]->create,
	depending on receiving master.
	(S_socket_create_address): Allow creation of AF_INET6 addresses.

	* glue-include/asm/delay.h: New stub file.
	* glue-include/linux/ipv6.h: Merged many bits unmodified from Linux
	header file.
	* glue-include/linux/in6.h: Likewise.
	(ipv6mr_ifindex): New define, glue to ipv6mr_interface.
	* glue-include/linux/socket.h (SOL_IPV6, SOL_ICMPV6): New defines.

	* linux-src/net/ipv6/addrconf.c (ipv6_find_idev, inet6_addr_add)
	(inet6_addr_del) [_HURD_]: Make these non-static.
	(addrconf_set_dstaddr, addrconf_add_ifaddr, addrconf_del_ifaddr)
	[_HURD_]: Don't define these functions.
	* linux-src/net/ipv6/route_ipv6.c (ipv6_route_ioctl) [_HURD_]:
	Likewise.
	* linux-src/net/ipv6/af_inet6.c (inet6_ioctl) [_HURD_]: Don't
	define the function, instead #define it to 0.
	(inet6_proto_init) [_HURD_]: Don't call sit_init.
	* linux-src/net/ipv6/udp_ipv6.c (udp_ioctl) [_HURD_]: Define
	to 0.
	(udp_v6_get_port): Put empty statement after label to silence
	compiler.
	* linux-src/net/ipv6/tcp_ipv6.c (tcp_v6_get_port, tcp_v6_rcv):
	Likewise.
	* linux-src/net/ipv6/icmpv6.c (icmpv6_rcv): Likewise.
	(icmpv6_init) [_HURD_]: Don't initialize i_uid and i_gid.
	* linux-src/net/ipv6/mcast.c (igmp6_init): Likewise.
	* linux-src/net/ipv6/ndisc.c (ndisc_init): Likewise.
	* linux-src/net/ipv6/ip6_fib.c (BUG_TRAP): Don't use __FUNCTION__
	as a string but a variable, to keep gcc happy.
	(fib6_walker_list): Make it non-static, to keep gcc happy.
	* linux-src/net/ipv6/ip6_flowlabel.c (fl_create) [_HURD_]: Drop
	IPV6_FL_S_USER support, since current->euid is not available.
---
 pfinet/linux-src/net/ipv6/addrconf.c      | 23 +++++++++++++++++++----
 pfinet/linux-src/net/ipv6/af_inet6.c      | 10 +++++++++-
 pfinet/linux-src/net/ipv6/icmpv6.c        |  5 ++++-
 pfinet/linux-src/net/ipv6/ip6_fib.c       |  6 +++---
 pfinet/linux-src/net/ipv6/ip6_flowlabel.c |  7 +++++++
 pfinet/linux-src/net/ipv6/mcast.c         |  4 +++-
 pfinet/linux-src/net/ipv6/ndisc.c         |  2 ++
 pfinet/linux-src/net/ipv6/route_ipv6.c    |  4 +++-
 pfinet/linux-src/net/ipv6/tcp_ipv6.c      |  6 +++++-
 pfinet/linux-src/net/ipv6/udp_ipv6.c      |  8 +++++++-
 10 files changed, 62 insertions(+), 13 deletions(-)

(limited to 'pfinet/linux-src')

diff --git a/pfinet/linux-src/net/ipv6/addrconf.c b/pfinet/linux-src/net/ipv6/addrconf.c
index f8428bd8..7fbf4061 100644
--- a/pfinet/linux-src/net/ipv6/addrconf.c
+++ b/pfinet/linux-src/net/ipv6/addrconf.c
@@ -5,7 +5,7 @@
  *	Authors:
  *	Pedro Roque		<roque@di.fc.ul.pt>	
  *
- *	$Id: addrconf.c,v 1.1 2007/10/08 21:12:30 stesie Exp $
+ *	$Id: addrconf.c,v 1.2 2007/10/08 21:59:10 stesie Exp $
  *
  *	This program is free software; you can redistribute it and/or
  *      modify it under the terms of the GNU General Public License
@@ -247,7 +247,10 @@ static struct inet6_dev * ipv6_add_dev(struct device *dev)
 	return ndev;
 }
 
-static struct inet6_dev * ipv6_find_idev(struct device *dev)
+#ifndef _HURD_
+static 
+#endif
+struct inet6_dev * ipv6_find_idev(struct device *dev)
 {
 	struct inet6_dev *idev;
 
@@ -808,6 +811,7 @@ ok:
 	}
 }
 
+#ifndef _HURD_
 /*
  *	Set destination address.
  *	Special case for SIT interfaces where we create a new "virtual"
@@ -865,11 +869,15 @@ err_exit:
 	rtnl_unlock();
 	return err;
 }
+#endif /* not _HURD_ */
 
 /*
  *	Manual configuration of address on an interface
  */
-static int inet6_addr_add(int ifindex, struct in6_addr *pfx, int plen)
+#ifndef _HURD_
+static 
+#endif
+int inet6_addr_add(int ifindex, struct in6_addr *pfx, int plen)
 {
 	struct inet6_ifaddr *ifp;
 	struct inet6_dev *idev;
@@ -900,7 +908,10 @@ static int inet6_addr_add(int ifindex, struct in6_addr *pfx, int plen)
 	return -ENOBUFS;
 }
 
-static int inet6_addr_del(int ifindex, struct in6_addr *pfx, int plen)
+#ifndef _HURD_
+static 
+#endif
+int inet6_addr_del(int ifindex, struct in6_addr *pfx, int plen)
 {
 	struct inet6_ifaddr *ifp;
 	struct inet6_dev *idev;
@@ -932,6 +943,7 @@ static int inet6_addr_del(int ifindex, struct in6_addr *pfx, int plen)
 }
 
 
+#ifndef _HURD_
 int addrconf_add_ifaddr(void *arg)
 {
 	struct in6_ifreq ireq;
@@ -948,7 +960,9 @@ int addrconf_add_ifaddr(void *arg)
 	rtnl_unlock();
 	return err;
 }
+#endif /* not _HURD_ */
 
+#ifndef _HURD_
 int addrconf_del_ifaddr(void *arg)
 {
 	struct in6_ifreq ireq;
@@ -965,6 +979,7 @@ int addrconf_del_ifaddr(void *arg)
 	rtnl_unlock();
 	return err;
 }
+#endif /* not _HURD_ */
 
 static void sit_add_v4_addrs(struct inet6_dev *idev)
 {
diff --git a/pfinet/linux-src/net/ipv6/af_inet6.c b/pfinet/linux-src/net/ipv6/af_inet6.c
index 4ad6403c..9077c0f1 100644
--- a/pfinet/linux-src/net/ipv6/af_inet6.c
+++ b/pfinet/linux-src/net/ipv6/af_inet6.c
@@ -7,7 +7,7 @@
  *
  *	Adapted from linux/net/ipv4/af_inet.c
  *
- *	$Id: af_inet6.c,v 1.1 2007/10/08 21:12:30 stesie Exp $
+ *	$Id: af_inet6.c,v 1.2 2007/10/08 21:59:10 stesie Exp $
  *
  *	This program is free software; you can redistribute it and/or
  *      modify it under the terms of the GNU General Public License
@@ -337,6 +337,10 @@ static int inet6_getname(struct socket *sock, struct sockaddr *uaddr,
 	return(0);
 }
 
+#ifdef _HURD_
+#define inet6_ioctl 0
+#else
+
 static int inet6_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
 {
 	struct sock *sk = sock->sk;
@@ -396,6 +400,8 @@ static int inet6_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
 	return(0);
 }
 
+#endif /* not _HURD_ */
+
 struct proto_ops inet6_stream_ops = {
 	PF_INET6,
 
@@ -542,7 +548,9 @@ __initfunc(void inet6_proto_init(struct net_proto *pro))
 	ip6_route_init();
 	ip6_flowlabel_init();
 	addrconf_init();
+#ifndef _HURD_
 	sit_init();
+#endif
 
 	/* Init v6 transport protocols. */
 	udpv6_init();
diff --git a/pfinet/linux-src/net/ipv6/icmpv6.c b/pfinet/linux-src/net/ipv6/icmpv6.c
index de5e7780..62dd149f 100644
--- a/pfinet/linux-src/net/ipv6/icmpv6.c
+++ b/pfinet/linux-src/net/ipv6/icmpv6.c
@@ -5,7 +5,7 @@
  *	Authors:
  *	Pedro Roque		<roque@di.fc.ul.pt>
  *
- *	$Id: icmpv6.c,v 1.1 2007/10/08 21:12:30 stesie Exp $
+ *	$Id: icmpv6.c,v 1.2 2007/10/08 21:59:10 stesie Exp $
  *
  *	Based on net/ipv4/icmp.c
  *
@@ -499,6 +499,7 @@ int icmpv6_rcv(struct sk_buff *skb, unsigned long len)
 		}
 	default:
 		/* CHECKSUM_UNNECESSARY */
+		break;
 	};
 
 	/*
@@ -600,8 +601,10 @@ int __init icmpv6_init(struct net_proto_family *ops)
 		       "Failed to create the ICMP6 control socket.\n");
 		return -1;
 	}
+#ifndef _HURD_
 	icmpv6_socket->inode->i_uid = 0;
 	icmpv6_socket->inode->i_gid = 0;
+#endif
 	icmpv6_socket->type = SOCK_RAW;
 
 	if ((err = ops->create(icmpv6_socket, IPPROTO_ICMPV6)) < 0) {
diff --git a/pfinet/linux-src/net/ipv6/ip6_fib.c b/pfinet/linux-src/net/ipv6/ip6_fib.c
index 69735248..18df5c38 100644
--- a/pfinet/linux-src/net/ipv6/ip6_fib.c
+++ b/pfinet/linux-src/net/ipv6/ip6_fib.c
@@ -5,7 +5,7 @@
  *	Authors:
  *	Pedro Roque		<roque@di.fc.ul.pt>	
  *
- *	$Id: ip6_fib.c,v 1.1 2007/10/08 21:12:30 stesie Exp $
+ *	$Id: ip6_fib.c,v 1.2 2007/10/08 21:59:10 stesie Exp $
  *
  *	This program is free software; you can redistribute it and/or
  *      modify it under the terms of the GNU General Public License
@@ -36,7 +36,7 @@
 #undef CONFIG_IPV6_SUBTREES
 
 #if RT6_DEBUG >= 1
-#define BUG_TRAP(x) ({ if (!(x)) { printk("Assertion (" #x ") failed at " __FILE__ "(%d):" __FUNCTION__ "\n", __LINE__); } })
+#define BUG_TRAP(x) ({ if (!(x)) { printk("Assertion (" #x ") failed at " __FILE__ "(%d):%s\n", __LINE__, __FUNCTION__); } })
 #else
 #define BUG_TRAP(x) do { ; } while (0)
 #endif
@@ -94,7 +94,7 @@ static struct timer_list ip6_fib_timer = {
 	fib6_run_gc
 };
 
-static struct fib6_walker_t fib6_walker_list = {
+struct fib6_walker_t fib6_walker_list = {
 	&fib6_walker_list, &fib6_walker_list, 
 };
 
diff --git a/pfinet/linux-src/net/ipv6/ip6_flowlabel.c b/pfinet/linux-src/net/ipv6/ip6_flowlabel.c
index 9aa60db4..4a34b878 100644
--- a/pfinet/linux-src/net/ipv6/ip6_flowlabel.c
+++ b/pfinet/linux-src/net/ipv6/ip6_flowlabel.c
@@ -340,8 +340,15 @@ fl_create(struct in6_flowlabel_req *freq, char *optval, int optlen, int *err_p)
 		fl->owner = current->pid;
 		break;
 	case IPV6_FL_S_USER:
+#ifdef _HURD_
+		/* FIXME
+		 * Which euid shall be assigned?  Where to get it, 
+		 * `struct task_struct' doesn't have a `euid'.
+		 */
+#else
 		fl->owner = current->euid;
 		break;
+#endif
 	default:
 		err = -EINVAL;
 		goto done;
diff --git a/pfinet/linux-src/net/ipv6/mcast.c b/pfinet/linux-src/net/ipv6/mcast.c
index 27d1d316..87e9e909 100644
--- a/pfinet/linux-src/net/ipv6/mcast.c
+++ b/pfinet/linux-src/net/ipv6/mcast.c
@@ -5,7 +5,7 @@
  *	Authors:
  *	Pedro Roque		<roque@di.fc.ul.pt>	
  *
- *	$Id: mcast.c,v 1.1 2007/10/08 21:12:30 stesie Exp $
+ *	$Id: mcast.c,v 1.2 2007/10/08 21:59:10 stesie Exp $
  *
  *	Based on linux/ipv4/igmp.c and linux/ipv4/ip_sockglue.c 
  *
@@ -671,8 +671,10 @@ __initfunc(int igmp6_init(struct net_proto_family *ops))
 		       "Failed to create the IGMP6 control socket.\n");
 		return -1;
 	}
+#ifndef _HURD_
 	igmp6_socket->inode->i_uid = 0;
 	igmp6_socket->inode->i_gid = 0;
+#endif
 	igmp6_socket->type = SOCK_RAW;
 
 	if((err = ops->create(igmp6_socket, IPPROTO_ICMPV6)) < 0) {
diff --git a/pfinet/linux-src/net/ipv6/ndisc.c b/pfinet/linux-src/net/ipv6/ndisc.c
index bb5e0837..3b3d3f4e 100644
--- a/pfinet/linux-src/net/ipv6/ndisc.c
+++ b/pfinet/linux-src/net/ipv6/ndisc.c
@@ -1164,8 +1164,10 @@ __initfunc(int ndisc_init(struct net_proto_family *ops))
 		       "Failed to create the NDISC control socket.\n");
 		return -1;
 	}
+#ifndef _HURD_
 	ndisc_socket->inode->i_uid = 0;
 	ndisc_socket->inode->i_gid = 0;
+#endif
 	ndisc_socket->type = SOCK_RAW;
 
 	if((err = ops->create(ndisc_socket, IPPROTO_ICMPV6)) < 0) {
diff --git a/pfinet/linux-src/net/ipv6/route_ipv6.c b/pfinet/linux-src/net/ipv6/route_ipv6.c
index c34a3b5d..5f79a226 100644
--- a/pfinet/linux-src/net/ipv6/route_ipv6.c
+++ b/pfinet/linux-src/net/ipv6/route_ipv6.c
@@ -5,7 +5,7 @@
  *	Authors:
  *	Pedro Roque		<roque@di.fc.ul.pt>	
  *
- *	$Id: route_ipv6.c,v 1.1 2007/10/08 21:12:31 stesie Exp $
+ *	$Id: route_ipv6.c,v 1.2 2007/10/08 21:59:10 stesie Exp $
  *
  *	This program is free software; you can redistribute it and/or
  *      modify it under the terms of the GNU General Public License
@@ -1156,6 +1156,7 @@ restart:
 	}
 }
 
+#ifndef _HURD_
 int ipv6_route_ioctl(unsigned int cmd, void *arg)
 {
 	struct in6_rtmsg rtmsg;
@@ -1194,6 +1195,7 @@ int ipv6_route_ioctl(unsigned int cmd, void *arg)
 
 	return -EINVAL;
 }
+#endif /* not _HURD_ */
 
 /*
  *	Drop the packet on the floor
diff --git a/pfinet/linux-src/net/ipv6/tcp_ipv6.c b/pfinet/linux-src/net/ipv6/tcp_ipv6.c
index e9d1d079..85a5ab27 100644
--- a/pfinet/linux-src/net/ipv6/tcp_ipv6.c
+++ b/pfinet/linux-src/net/ipv6/tcp_ipv6.c
@@ -5,7 +5,7 @@
  *	Authors:
  *	Pedro Roque		<roque@di.fc.ul.pt>	
  *
- *	$Id: tcp_ipv6.c,v 1.1 2007/10/08 21:12:31 stesie Exp $
+ *	$Id: tcp_ipv6.c,v 1.2 2007/10/08 21:59:10 stesie Exp $
  *
  *	Based on: 
  *	linux/net/ipv4/tcp.c
@@ -103,7 +103,10 @@ static int tcp_v6_get_port(struct sock *sk, unsigned short snum)
 				if (tb->port == rover)
 					goto next;
 			break;
+
 		next:
+			(void) 0;
+
 		} while (--remaining > 0);
 		tcp_port_rover = rover;
 
@@ -1426,6 +1429,7 @@ int tcp_v6_rcv(struct sk_buff *skb, unsigned long len)
 		}
 	default:
 		/* CHECKSUM_UNNECESSARY */
+		break;
 	};
 
 	if((th->doff * 4) < sizeof(struct tcphdr) ||
diff --git a/pfinet/linux-src/net/ipv6/udp_ipv6.c b/pfinet/linux-src/net/ipv6/udp_ipv6.c
index 377f5751..57b5db1a 100644
--- a/pfinet/linux-src/net/ipv6/udp_ipv6.c
+++ b/pfinet/linux-src/net/ipv6/udp_ipv6.c
@@ -7,7 +7,7 @@
  *
  *	Based on linux/ipv4/udp.c
  *
- *	$Id: udp_ipv6.c,v 1.1 2007/10/08 21:12:31 stesie Exp $
+ *	$Id: udp_ipv6.c,v 1.2 2007/10/08 21:59:10 stesie Exp $
  *
  *	This program is free software; you can redistribute it and/or
  *      modify it under the terms of the GNU General Public License
@@ -79,7 +79,9 @@ static int udp_v6_get_port(struct sock *sk, unsigned short snum)
 			} while ((sk = sk->next) != NULL);
 			best_size_so_far = size;
 			best = result;
+
 		next:
+			(void) 0;
 		}
 		result = best;
 		for(;; result += UDP_HTABLE_SIZE) {
@@ -890,6 +892,10 @@ static struct inet6_protocol udpv6_protocol =
 	"UDPv6"			/* name			*/
 };
 
+#ifdef _HURD_
+#define udp_ioctl 0
+#endif
+
 struct proto udpv6_prot = {
 	(struct sock *)&udpv6_prot,	/* sklist_next */
 	(struct sock *)&udpv6_prot,	/* sklist_prev */
-- 
cgit v1.2.3