1 diff -urN linux.orig/include/linux/in6.h linux/include/linux/in6.h
2 --- linux.orig/include/linux/in6.h Sun Mar 25 18:31:04 2001
3 +++ linux/include/linux/in6.h Thu May 9 18:31:33 2002
5 __u16 sin6_port; /* Transport layer port # */
6 __u32 sin6_flowinfo; /* IPv6 flow information */
7 struct in6_addr sin6_addr; /* IPv6 address */
8 + __u32 sin6_scope_id; /* scope id (new in RFC2553) */
12 diff -urN linux.orig/include/net/ipv6.h linux/include/net/ipv6.h
13 --- linux.orig/include/net/ipv6.h Sun Mar 25 18:31:08 2001
14 +++ linux/include/net/ipv6.h Thu May 9 18:31:33 2002
16 #include <net/ndisc.h>
19 +#define SIN6_LEN_RFC2133 24
22 * NextHeader field of IPv6 header
24 diff -urN linux.orig/net/ipv6/addrconf.c linux/net/ipv6/addrconf.c
25 --- linux.orig/net/ipv6/addrconf.c Sun Mar 25 18:31:13 2001
26 +++ linux/net/ipv6/addrconf.c Thu May 9 18:31:30 2002
28 idev = ipv6_add_dev(dev);
31 - if (dev->flags&IFF_UP)
43 ifp = ipv6_add_addr(idev, &addr, IFA_HOST);
51 #ifdef CONFIG_IPV6_EUI64
52 memset(&addr, 0, sizeof(struct in6_addr));
60 sit_add_v4_addrs(idev);
62 if (dev->flags&IFF_POINTOPOINT) {
63 diff -urN linux.orig/net/ipv6/af_inet6.c linux/net/ipv6/af_inet6.c
64 --- linux.orig/net/ipv6/af_inet6.c Sun Mar 25 18:31:13 2001
65 +++ linux/net/ipv6/af_inet6.c Thu May 9 18:31:33 2002
68 /* Check these errors (active socket, bad address length, double bind). */
69 if ((sk->state != TCP_CLOSE) ||
70 - (addr_len < sizeof(struct sockaddr_in6)) ||
71 + (addr_len < SIN6_LEN_RFC2133) ||
77 sin->sin6_port = sk->sport;
79 + sin->sin6_scope_id = 0;
80 *uaddr_len = sizeof(*sin);
83 diff -urN linux.orig/net/ipv6/datagram.c linux/net/ipv6/datagram.c
84 --- linux.orig/net/ipv6/datagram.c Sun Mar 25 18:31:13 2001
85 +++ linux/net/ipv6/datagram.c Thu May 9 18:31:33 2002
88 sin->sin6_family = AF_INET6;
89 sin->sin6_flowinfo = 0;
90 + sin->sin6_scope_id = 0;
91 sin->sin6_port = serr->port;
92 if (serr->ee.ee_origin == SO_EE_ORIGIN_ICMP6) {
93 memcpy(&sin->sin6_addr, skb->nh.raw + serr->addr_offset, 16);
94 + sin->sin6_scope_id = 0;
95 if (sk->net_pinfo.af_inet6.sndflow)
96 sin->sin6_flowinfo = *(u32*)(skb->nh.raw + serr->addr_offset - 24) & IPV6_FLOWINFO_MASK;
99 if (serr->ee.ee_origin != SO_EE_ORIGIN_LOCAL) {
100 sin->sin6_family = AF_INET6;
101 sin->sin6_flowinfo = 0;
102 + sin->sin6_scope_id = 0;
103 if (serr->ee.ee_origin == SO_EE_ORIGIN_ICMP6) {
104 memcpy(&sin->sin6_addr, &skb->nh.ipv6h->saddr, 16);
105 + sin->sin6_scope_id = 0;
106 if (sk->net_pinfo.af_inet6.rxopt.all)
107 datagram_recv_ctl(sk, msg, skb);
109 diff -urN linux.orig/net/ipv6/raw.c linux/net/ipv6/raw.c
110 --- linux.orig/net/ipv6/raw.c Fri Nov 2 17:39:16 2001
111 +++ linux/net/ipv6/raw.c Thu May 9 18:31:33 2002
115 /* Check these errors. */
116 - if (sk->state != TCP_CLOSE || (addr_len < sizeof(struct sockaddr_in6)))
117 + if (sk->state != TCP_CLOSE || (addr_len < SIN6_LEN_RFC2133))
120 addr_type = ipv6_addr_type(&addr->sin6_addr);
122 memcpy(&sin6->sin6_addr, &skb->nh.ipv6h->saddr,
123 sizeof(struct in6_addr));
124 sin6->sin6_flowinfo = 0;
125 + sin6->sin6_scope_id = 0;
128 if (sk->net_pinfo.af_inet6.rxopt.all)
130 fl.fl6_flowlabel = 0;
133 - if (addr_len < sizeof(struct sockaddr_in6))
134 + if (addr_len < SIN6_LEN_RFC2133)
137 if (sin6->sin6_family && sin6->sin6_family != AF_INET6)
138 diff -urN linux.orig/net/ipv6/tcp_ipv6.c linux/net/ipv6/tcp_ipv6.c
139 --- linux.orig/net/ipv6/tcp_ipv6.c Sun Mar 25 18:31:13 2001
140 +++ linux/net/ipv6/tcp_ipv6.c Thu May 9 18:31:33 2002
142 if(!ipv6_addr_any(&np->daddr))
145 - if (addr_len < sizeof(struct sockaddr_in6))
146 + if (addr_len < SIN6_LEN_RFC2133)
149 if (usin->sin6_family && usin->sin6_family != AF_INET6)
150 @@ -1583,6 +1583,7 @@
151 sin6->sin6_port = sk->dport;
152 /* We do not store received flowlabel for TCP */
153 sin6->sin6_flowinfo = 0;
154 + sin6->sin6_scope_id = 0;
157 static struct tcp_func ipv6_specific = {
158 diff -urN linux.orig/net/ipv6/udp.c linux/net/ipv6/udp.c
159 --- linux.orig/net/ipv6/udp.c Sun Mar 25 18:31:13 2001
160 +++ linux/net/ipv6/udp.c Thu May 9 18:31:33 2002
165 - if (addr_len < sizeof(*usin))
166 + if (addr_len < SIN6_LEN_RFC2133)
169 if (usin->sin6_family && usin->sin6_family != AF_INET6)
171 sin6->sin6_family = AF_INET6;
172 sin6->sin6_port = skb->h.uh->source;
173 sin6->sin6_flowinfo = 0;
174 + sin6->sin6_scope_id = 0;
176 if (skb->protocol == __constant_htons(ETH_P_IP)) {
177 ipv6_addr_set(&sin6->sin6_addr, 0, 0,
179 memcpy(&sin6->sin6_addr, &skb->nh.ipv6h->saddr,
180 sizeof(struct in6_addr));
182 + sin6->sin6_scope_id = 0;
183 if (sk->net_pinfo.af_inet6.rxopt.all)
184 datagram_recv_ctl(sk, msg, skb);
187 if (sin6->sin6_family == AF_INET)
188 return udp_sendmsg(sk, msg, ulen);
190 - if (addr_len < sizeof(*sin6))
191 + if (addr_len < SIN6_LEN_RFC2133)
194 if (sin6->sin6_family && sin6->sin6_family != AF_INET6)
195 diff -urN linux.orig/net/netsyms.c linux/net/netsyms.c
196 --- linux.orig/net/netsyms.c Sun Mar 25 18:37:41 2001
197 +++ linux/net/netsyms.c Thu May 9 18:31:20 2002
199 #include <net/sock.h>
202 -#ifdef CONFIG_SYSCTL
203 extern int sysctl_max_syn_backlog;
205 +#ifdef CONFIG_SYSCTL
206 extern int sysctl_ip_always_defrag;
210 EXPORT_SYMBOL(dev_loopback_xmit);
211 EXPORT_SYMBOL(tcp_regs);
213 -#ifdef CONFIG_SYSCTL
214 EXPORT_SYMBOL(sysctl_max_syn_backlog);
216 +#ifdef CONFIG_SYSCTL
217 EXPORT_SYMBOL(sysctl_ip_always_defrag);