]> git.pld-linux.org Git - packages/kernel.git/blob - linux-ipv6-glibc2.2.patch
- added description of djurban's branch
[packages/kernel.git] / linux-ipv6-glibc2.2.patch
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
4 @@ -56,6 +56,7 @@
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) */
9  };
10  
11  
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
15 @@ -20,6 +20,8 @@
16  #include <net/ndisc.h>
17  #include <net/flow.h>
18  
19 +#define        SIN6_LEN_RFC2133        24
20 +
21  /*
22   *     NextHeader field of IPv6 header
23   */
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
27 @@ -199,7 +199,7 @@
28                 
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)               ||
33             (sk->num != 0))
34                 return -EINVAL;
35                 
36 @@ -334,6 +334,7 @@
37  
38                 sin->sin6_port = sk->sport;
39         }
40 +       sin->sin6_scope_id = 0;
41         *uaddr_len = sizeof(*sin);      
42         return(0);
43  }
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
47 @@ -133,9 +133,11 @@
48         if (sin) {
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;
58                 } else
59 @@ -150,8 +152,10 @@
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);
69                 } else {
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
73 @@ -117,7 +117,7 @@
74         int addr_type;
75  
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))
79                 return -EINVAL;
80  
81         addr_type = ipv6_addr_type(&addr->sin6_addr);
82 @@ -252,6 +252,7 @@
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;
87         }
88  
89         if (sk->net_pinfo.af_inet6.rxopt.all)
90 @@ -360,7 +361,7 @@
91         fl.fl6_flowlabel = 0;
92  
93         if (sin6) {
94 -               if (addr_len < sizeof(struct sockaddr_in6)) 
95 +               if (addr_len < SIN6_LEN_RFC2133) 
96                         return(-EINVAL);
97  
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
102 @@ -387,7 +387,7 @@
103         if(!ipv6_addr_any(&np->daddr))
104                 return -EINVAL;
105         
106 -       if (addr_len < sizeof(struct sockaddr_in6)) 
107 +       if (addr_len < SIN6_LEN_RFC2133) 
108                 return(-EINVAL);
109  
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;
116  }
117  
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
122 @@ -210,7 +210,7 @@
123                 goto ipv4_connected;
124         }
125  
126 -       if (addr_len < sizeof(*usin)) 
127 +       if (addr_len < SIN6_LEN_RFC2133) 
128                 return(-EINVAL);
129  
130         if (usin->sin6_family && usin->sin6_family != AF_INET6) 
131 @@ -414,6 +414,7 @@
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;
136  
137                 if (skb->protocol == __constant_htons(ETH_P_IP)) {
138                         ipv6_addr_set(&sin6->sin6_addr, 0, 0,
139 @@ -424,6 +425,7 @@
140                         memcpy(&sin6->sin6_addr, &skb->nh.ipv6h->saddr,
141                                sizeof(struct in6_addr));
142  
143 +                       sin6->sin6_scope_id = 0;
144                         if (sk->net_pinfo.af_inet6.rxopt.all)
145                                 datagram_recv_ctl(sk, msg, skb);
146                 }
147 @@ -777,7 +779,7 @@
148                 if (sin6->sin6_family == AF_INET)
149                         return udp_sendmsg(sk, msg, ulen);
150  
151 -               if (addr_len < sizeof(*sin6))
152 +               if (addr_len < SIN6_LEN_RFC2133)
153                         return(-EINVAL);
154  
155                 if (sin6->sin6_family && sin6->sin6_family != AF_INET6)
This page took 0.045818 seconds and 3 git commands to generate.