patch-2.2.7 linux/net/ipv6/ipv6_sockglue.c

Next file: linux/net/ipv6/ndisc.c
Previous file: linux/net/ipv6/ip6_output.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.2.6/linux/net/ipv6/ipv6_sockglue.c linux/net/ipv6/ipv6_sockglue.c
@@ -7,7 +7,7 @@
  *
  *	Based on linux/net/ipv4/ip_sockglue.c
  *
- *	$Id: ipv6_sockglue.c,v 1.26 1999/03/25 10:04:53 davem Exp $
+ *	$Id: ipv6_sockglue.c,v 1.27 1999/04/22 10:07:43 davem Exp $
  *
  *	This program is free software; you can redistribute it and/or
  *      modify it under the terms of the GNU General Public License
@@ -151,6 +151,9 @@
 				goto addrform_done;
 			}
 
+			fl6_free_socklist(sk);
+			ipv6_sock_mc_close(sk);
+
 			if (sk->protocol == IPPROTO_TCP) {
 				struct tcp_opt *tp = &(sk->tp_pinfo.af_tcp);
 				
@@ -211,12 +214,19 @@
 		retv = 0;
 		break;
 
+	case IPV6_FLOWINFO:
+		np->rxopt.bits.rxflow = valbool;
+		return 0;
+
 	case IPV6_PKTOPTIONS:
 	{
 		struct ipv6_txoptions *opt = NULL;
 		struct msghdr msg;
+		struct flowi fl;
 		int junk;
-		struct in6_addr *saddr;
+
+		fl.fl6_flowlabel = 0;
+		fl.oif = sk->bound_dev_if;
 
 		if (optlen == 0)
 			goto update;
@@ -235,7 +245,7 @@
 		msg.msg_controllen = optlen;
 		msg.msg_control = (void*)(opt+1);
 
-		retv = datagram_send_ctl(&msg, &junk, &saddr, opt, &junk);
+		retv = datagram_send_ctl(&msg, &fl, opt, &junk);
 		if (retv)
 			goto done;
 update:
@@ -321,10 +331,15 @@
 		np->frag_size = val;
 		return 0;
 	case IPV6_RECVERR:
-		np->recverr = !!val;
+		np->recverr = valbool;
 		if (!val)
 			skb_queue_purge(&sk->error_queue);
 		return 0;
+	case IPV6_FLOWINFO_SEND:
+		np->sndflow = valbool;
+		return 0;
+	case IPV6_FLOWLABEL_MGR:
+		return ipv6_flowlabel_opt(sk, optval, optlen);
 	};
 
 out:

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)