1 diff -urN linux-2.2.17.org/include/linux/in6.h linux-2.2.17/include/linux/in6.h
2 --- linux-2.2.17.org/include/linux/in6.h Wed Dec 6 18:06:51 2000
3 +++ linux-2.2.17/include/linux/in6.h Wed Dec 6 18:09:01 2000
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-2.2.17.org/include/net/ipv6.h linux-2.2.17/include/net/ipv6.h
13 --- linux-2.2.17.org/include/net/ipv6.h Wed Dec 6 18:06:51 2000
14 +++ linux-2.2.17/include/net/ipv6.h Wed Dec 6 18:09:01 2000
16 #include <net/ndisc.h>
19 +#define SIN6_LEN_RFC2133 24
22 * NextHeader field of IPv6 header
24 diff -urN linux-2.2.17.org/net/ipv6/af_inet6.c linux-2.2.17/net/ipv6/af_inet6.c
25 --- linux-2.2.17.org/net/ipv6/af_inet6.c Wed Dec 6 18:06:51 2000
26 +++ linux-2.2.17/net/ipv6/af_inet6.c Wed Dec 6 18:09:01 2000
29 /* Check these errors (active socket, bad address length, double bind). */
30 if ((sk->state != TCP_CLOSE) ||
31 - (addr_len < sizeof(struct sockaddr_in6)) ||
32 + (addr_len < SIN6_LEN_RFC2133) ||
38 sin->sin6_port = sk->sport;
40 + sin->sin6_scope_id = 0;
41 *uaddr_len = sizeof(*sin);
44 diff -urN linux-2.2.17.org/net/ipv6/datagram.c linux-2.2.17/net/ipv6/datagram.c
45 --- linux-2.2.17.org/net/ipv6/datagram.c Wed Dec 6 18:06:51 2000
46 +++ linux-2.2.17/net/ipv6/datagram.c Wed Dec 6 18:10:00 2000
49 sin->sin6_family = AF_INET6;
50 sin->sin6_flowinfo = 0;
51 + sin->sin6_scope_id = 0;
52 sin->sin6_port = serr->port;
53 if (serr->ee.ee_origin == SO_EE_ORIGIN_ICMP6) {
54 memcpy(&sin->sin6_addr, skb->nh.raw + serr->addr_offset, 16);
55 + sin->sin6_scope_id = 0;
56 if (sk->net_pinfo.af_inet6.sndflow)
57 sin->sin6_flowinfo = *(u32*)(skb->nh.raw + serr->addr_offset - 24) & IPV6_FLOWINFO_MASK;
60 if (serr->ee.ee_origin != SO_EE_ORIGIN_LOCAL) {
61 sin->sin6_family = AF_INET6;
62 sin->sin6_flowinfo = 0;
63 + sin->sin6_scope_id = 0;
64 if (serr->ee.ee_origin == SO_EE_ORIGIN_ICMP6) {
65 memcpy(&sin->sin6_addr, &skb->nh.ipv6h->saddr, 16);
66 + sin->sin6_scope_id = 0;
67 if (sk->net_pinfo.af_inet6.rxopt.all)
68 datagram_recv_ctl(sk, msg, skb);
70 diff -urN linux-2.2.17.org/net/ipv6/raw.c linux-2.2.17/net/ipv6/raw.c
71 --- linux-2.2.17.org/net/ipv6/raw.c Wed Dec 6 18:06:51 2000
72 +++ linux-2.2.17/net/ipv6/raw.c Wed Dec 6 18:09:01 2000
76 /* Check these errors. */
77 - if (sk->state != TCP_CLOSE || (addr_len < sizeof(struct sockaddr_in6)))
78 + if (sk->state != TCP_CLOSE || (addr_len < SIN6_LEN_RFC2133))
81 addr_type = ipv6_addr_type(&addr->sin6_addr);
83 memcpy(&sin6->sin6_addr, &skb->nh.ipv6h->saddr,
84 sizeof(struct in6_addr));
85 sin6->sin6_flowinfo = 0;
86 + sin6->sin6_scope_id = 0;
89 if (sk->net_pinfo.af_inet6.rxopt.all)
94 - if (addr_len < sizeof(struct sockaddr_in6))
95 + if (addr_len < SIN6_LEN_RFC2133)
98 if (sin6->sin6_family && sin6->sin6_family != AF_INET6)
99 diff -urN linux-2.2.17.org/net/ipv6/tcp_ipv6.c linux-2.2.17/net/ipv6/tcp_ipv6.c
100 --- linux-2.2.17.org/net/ipv6/tcp_ipv6.c Wed Dec 6 18:06:51 2000
101 +++ linux-2.2.17/net/ipv6/tcp_ipv6.c Wed Dec 6 18:09:01 2000
103 if(!ipv6_addr_any(&np->daddr))
106 - if (addr_len < sizeof(struct sockaddr_in6))
107 + if (addr_len < SIN6_LEN_RFC2133)
110 if (usin->sin6_family && usin->sin6_family != AF_INET6)
111 @@ -1583,6 +1583,7 @@
112 sin6->sin6_port = sk->dport;
113 /* We do not store received flowlabel for TCP */
114 sin6->sin6_flowinfo = 0;
115 + sin6->sin6_scope_id = 0;
118 static struct tcp_func ipv6_specific = {
119 diff -urN linux-2.2.17.org/net/ipv6/udp.c linux-2.2.17/net/ipv6/udp.c
120 --- linux-2.2.17.org/net/ipv6/udp.c Wed Dec 6 18:06:51 2000
121 +++ linux-2.2.17/net/ipv6/udp.c Wed Dec 6 18:14:24 2000
126 - if (addr_len < sizeof(*usin))
127 + if (addr_len < SIN6_LEN_RFC2133)
130 if (usin->sin6_family && usin->sin6_family != AF_INET6)
132 sin6->sin6_family = AF_INET6;
133 sin6->sin6_port = skb->h.uh->source;
134 sin6->sin6_flowinfo = 0;
135 + sin6->sin6_scope_id = 0;
137 if (skb->protocol == __constant_htons(ETH_P_IP)) {
138 ipv6_addr_set(&sin6->sin6_addr, 0, 0,
140 memcpy(&sin6->sin6_addr, &skb->nh.ipv6h->saddr,
141 sizeof(struct in6_addr));
143 + sin6->sin6_scope_id = 0;
144 if (sk->net_pinfo.af_inet6.rxopt.all)
145 datagram_recv_ctl(sk, msg, skb);
148 if (sin6->sin6_family == AF_INET)
149 return udp_sendmsg(sk, msg, ulen);
151 - if (addr_len < sizeof(*sin6))
152 + if (addr_len < SIN6_LEN_RFC2133)
155 if (sin6->sin6_family && sin6->sin6_family != AF_INET6)