aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2006-11-08 03:25:17 -0500
committerDavid S. Miller <davem@sunset.davemloft.net>2006-12-03 00:21:21 -0500
commit90bcaf7b4a33bb9b100cc06869f0c033a870d4a0 (patch)
treefb8307b99fd9779d17fdfb0c35d836a8438d424a
parent92d9ece7af9c84bfbd1ff640926fac5b573a09f7 (diff)
[IPV6]: flowlabels are net-endian
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--include/linux/in6.h4
-rw-r--r--include/linux/ip6_tunnel.h2
-rw-r--r--include/linux/ipv6.h2
-rw-r--r--include/net/flow.h2
-rw-r--r--include/net/ipv6.h4
-rw-r--r--net/ipv6/af_inet6.c2
-rw-r--r--net/ipv6/datagram.c10
-rw-r--r--net/ipv6/ip6_flowlabel.c8
-rw-r--r--net/ipv6/ip6_output.c4
-rw-r--r--net/ipv6/ip6_tunnel.c6
-rw-r--r--net/ipv6/route.c2
11 files changed, 23 insertions, 23 deletions
diff --git a/include/linux/in6.h b/include/linux/in6.h
index f28621f638e0..4e8350ae8869 100644
--- a/include/linux/in6.h
+++ b/include/linux/in6.h
@@ -54,7 +54,7 @@ extern const struct in6_addr in6addr_loopback;
54struct sockaddr_in6 { 54struct sockaddr_in6 {
55 unsigned short int sin6_family; /* AF_INET6 */ 55 unsigned short int sin6_family; /* AF_INET6 */
56 __be16 sin6_port; /* Transport layer port # */ 56 __be16 sin6_port; /* Transport layer port # */
57 __u32 sin6_flowinfo; /* IPv6 flow information */ 57 __be32 sin6_flowinfo; /* IPv6 flow information */
58 struct in6_addr sin6_addr; /* IPv6 address */ 58 struct in6_addr sin6_addr; /* IPv6 address */
59 __u32 sin6_scope_id; /* scope id (new in RFC2553) */ 59 __u32 sin6_scope_id; /* scope id (new in RFC2553) */
60}; 60};
@@ -72,7 +72,7 @@ struct ipv6_mreq {
72struct in6_flowlabel_req 72struct in6_flowlabel_req
73{ 73{
74 struct in6_addr flr_dst; 74 struct in6_addr flr_dst;
75 __u32 flr_label; 75 __be32 flr_label;
76 __u8 flr_action; 76 __u8 flr_action;
77 __u8 flr_share; 77 __u8 flr_share;
78 __u16 flr_flags; 78 __u16 flr_flags;
diff --git a/include/linux/ip6_tunnel.h b/include/linux/ip6_tunnel.h
index 5c23aeb104ca..af3f4a70f3df 100644
--- a/include/linux/ip6_tunnel.h
+++ b/include/linux/ip6_tunnel.h
@@ -25,7 +25,7 @@ struct ip6_tnl_parm {
25 __u8 proto; /* tunnel protocol */ 25 __u8 proto; /* tunnel protocol */
26 __u8 encap_limit; /* encapsulation limit for tunnel */ 26 __u8 encap_limit; /* encapsulation limit for tunnel */
27 __u8 hop_limit; /* hop limit for tunnel */ 27 __u8 hop_limit; /* hop limit for tunnel */
28 __u32 flowinfo; /* traffic class and flowlabel for tunnel */ 28 __be32 flowinfo; /* traffic class and flowlabel for tunnel */
29 __u32 flags; /* tunnel flags */ 29 __u32 flags; /* tunnel flags */
30 struct in6_addr laddr; /* local tunnel end-point address */ 30 struct in6_addr laddr; /* local tunnel end-point address */
31 struct in6_addr raddr; /* remote tunnel end-point address */ 31 struct in6_addr raddr; /* remote tunnel end-point address */
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h
index 4f435c59de06..f8241130f5ea 100644
--- a/include/linux/ipv6.h
+++ b/include/linux/ipv6.h
@@ -274,7 +274,7 @@ struct ipv6_pinfo {
274 struct in6_addr *saddr_cache; 274 struct in6_addr *saddr_cache;
275#endif 275#endif
276 276
277 __u32 flow_label; 277 __be32 flow_label;
278 __u32 frag_size; 278 __u32 frag_size;
279 __s16 hop_limit; 279 __s16 hop_limit;
280 __s16 mcast_hops; 280 __s16 mcast_hops;
diff --git a/include/net/flow.h b/include/net/flow.h
index 5cda27cd9deb..270d4c1761af 100644
--- a/include/net/flow.h
+++ b/include/net/flow.h
@@ -27,7 +27,7 @@ struct flowi {
27 struct in6_addr daddr; 27 struct in6_addr daddr;
28 struct in6_addr saddr; 28 struct in6_addr saddr;
29 __u32 fwmark; 29 __u32 fwmark;
30 __u32 flowlabel; 30 __be32 flowlabel;
31 } ip6_u; 31 } ip6_u;
32 32
33 struct { 33 struct {
diff --git a/include/net/ipv6.h b/include/net/ipv6.h
index 4953fac1d070..0b8c9b990ac4 100644
--- a/include/net/ipv6.h
+++ b/include/net/ipv6.h
@@ -191,7 +191,7 @@ struct ipv6_txoptions
191struct ip6_flowlabel 191struct ip6_flowlabel
192{ 192{
193 struct ip6_flowlabel *next; 193 struct ip6_flowlabel *next;
194 u32 label; 194 __be32 label;
195 struct in6_addr dst; 195 struct in6_addr dst;
196 struct ipv6_txoptions *opt; 196 struct ipv6_txoptions *opt;
197 atomic_t users; 197 atomic_t users;
@@ -211,7 +211,7 @@ struct ipv6_fl_socklist
211 struct ip6_flowlabel *fl; 211 struct ip6_flowlabel *fl;
212}; 212};
213 213
214extern struct ip6_flowlabel *fl6_sock_lookup(struct sock *sk, u32 label); 214extern struct ip6_flowlabel *fl6_sock_lookup(struct sock *sk, __be32 label);
215extern struct ipv6_txoptions *fl6_merge_options(struct ipv6_txoptions * opt_space, 215extern struct ipv6_txoptions *fl6_merge_options(struct ipv6_txoptions * opt_space,
216 struct ip6_flowlabel * fl, 216 struct ip6_flowlabel * fl,
217 struct ipv6_txoptions * fopt); 217 struct ipv6_txoptions * fopt);
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
index 858cae29581c..92bfccf62cb7 100644
--- a/net/ipv6/af_inet6.c
+++ b/net/ipv6/af_inet6.c
@@ -678,7 +678,7 @@ int ipv6_opt_accepted(struct sock *sk, struct sk_buff *skb)
678 if (np->rxopt.all) { 678 if (np->rxopt.all) {
679 if ((opt->hop && (np->rxopt.bits.hopopts || 679 if ((opt->hop && (np->rxopt.bits.hopopts ||
680 np->rxopt.bits.ohopopts)) || 680 np->rxopt.bits.ohopopts)) ||
681 ((IPV6_FLOWINFO_MASK & *(u32*)skb->nh.raw) && 681 ((IPV6_FLOWINFO_MASK & *(__be32*)skb->nh.raw) &&
682 np->rxopt.bits.rxflow) || 682 np->rxopt.bits.rxflow) ||
683 (opt->srcrt && (np->rxopt.bits.srcrt || 683 (opt->srcrt && (np->rxopt.bits.srcrt ||
684 np->rxopt.bits.osrcrt)) || 684 np->rxopt.bits.osrcrt)) ||
diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c
index 7206747022fc..a67434af691f 100644
--- a/net/ipv6/datagram.c
+++ b/net/ipv6/datagram.c
@@ -318,7 +318,7 @@ int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len)
318 ipv6_addr_copy(&sin->sin6_addr, 318 ipv6_addr_copy(&sin->sin6_addr,
319 (struct in6_addr *)(skb->nh.raw + serr->addr_offset)); 319 (struct in6_addr *)(skb->nh.raw + serr->addr_offset));
320 if (np->sndflow) 320 if (np->sndflow)
321 sin->sin6_flowinfo = *(u32*)(skb->nh.raw + serr->addr_offset - 24) & IPV6_FLOWINFO_MASK; 321 sin->sin6_flowinfo = *(__be32*)(skb->nh.raw + serr->addr_offset - 24) & IPV6_FLOWINFO_MASK;
322 if (ipv6_addr_type(&sin->sin6_addr) & IPV6_ADDR_LINKLOCAL) 322 if (ipv6_addr_type(&sin->sin6_addr) & IPV6_ADDR_LINKLOCAL)
323 sin->sin6_scope_id = IP6CB(skb)->iif; 323 sin->sin6_scope_id = IP6CB(skb)->iif;
324 } else { 324 } else {
@@ -401,8 +401,8 @@ int datagram_recv_ctl(struct sock *sk, struct msghdr *msg, struct sk_buff *skb)
401 put_cmsg(msg, SOL_IPV6, IPV6_TCLASS, sizeof(tclass), &tclass); 401 put_cmsg(msg, SOL_IPV6, IPV6_TCLASS, sizeof(tclass), &tclass);
402 } 402 }
403 403
404 if (np->rxopt.bits.rxflow && (*(u32*)skb->nh.raw & IPV6_FLOWINFO_MASK)) { 404 if (np->rxopt.bits.rxflow && (*(__be32*)skb->nh.raw & IPV6_FLOWINFO_MASK)) {
405 u32 flowinfo = *(u32*)skb->nh.raw & IPV6_FLOWINFO_MASK; 405 __be32 flowinfo = *(__be32*)skb->nh.raw & IPV6_FLOWINFO_MASK;
406 put_cmsg(msg, SOL_IPV6, IPV6_FLOWINFO, sizeof(flowinfo), &flowinfo); 406 put_cmsg(msg, SOL_IPV6, IPV6_FLOWINFO, sizeof(flowinfo), &flowinfo);
407 } 407 }
408 408
@@ -560,12 +560,12 @@ int datagram_send_ctl(struct msghdr *msg, struct flowi *fl,
560 } 560 }
561 561
562 if (fl->fl6_flowlabel&IPV6_FLOWINFO_MASK) { 562 if (fl->fl6_flowlabel&IPV6_FLOWINFO_MASK) {
563 if ((fl->fl6_flowlabel^*(u32 *)CMSG_DATA(cmsg))&~IPV6_FLOWINFO_MASK) { 563 if ((fl->fl6_flowlabel^*(__be32 *)CMSG_DATA(cmsg))&~IPV6_FLOWINFO_MASK) {
564 err = -EINVAL; 564 err = -EINVAL;
565 goto exit_f; 565 goto exit_f;
566 } 566 }
567 } 567 }
568 fl->fl6_flowlabel = IPV6_FLOWINFO_MASK & *(u32 *)CMSG_DATA(cmsg); 568 fl->fl6_flowlabel = IPV6_FLOWINFO_MASK & *(__be32 *)CMSG_DATA(cmsg);
569 break; 569 break;
570 570
571 case IPV6_2292HOPOPTS: 571 case IPV6_2292HOPOPTS:
diff --git a/net/ipv6/ip6_flowlabel.c b/net/ipv6/ip6_flowlabel.c
index 6d4533b58dca..624fae251f4e 100644
--- a/net/ipv6/ip6_flowlabel.c
+++ b/net/ipv6/ip6_flowlabel.c
@@ -61,7 +61,7 @@ static DEFINE_RWLOCK(ip6_fl_lock);
61static DEFINE_RWLOCK(ip6_sk_fl_lock); 61static DEFINE_RWLOCK(ip6_sk_fl_lock);
62 62
63 63
64static __inline__ struct ip6_flowlabel * __fl_lookup(u32 label) 64static __inline__ struct ip6_flowlabel * __fl_lookup(__be32 label)
65{ 65{
66 struct ip6_flowlabel *fl; 66 struct ip6_flowlabel *fl;
67 67
@@ -72,7 +72,7 @@ static __inline__ struct ip6_flowlabel * __fl_lookup(u32 label)
72 return NULL; 72 return NULL;
73} 73}
74 74
75static struct ip6_flowlabel * fl_lookup(u32 label) 75static struct ip6_flowlabel * fl_lookup(__be32 label)
76{ 76{
77 struct ip6_flowlabel *fl; 77 struct ip6_flowlabel *fl;
78 78
@@ -153,7 +153,7 @@ static void ip6_fl_gc(unsigned long dummy)
153 write_unlock(&ip6_fl_lock); 153 write_unlock(&ip6_fl_lock);
154} 154}
155 155
156static int fl_intern(struct ip6_flowlabel *fl, __u32 label) 156static int fl_intern(struct ip6_flowlabel *fl, __be32 label)
157{ 157{
158 fl->label = label & IPV6_FLOWLABEL_MASK; 158 fl->label = label & IPV6_FLOWLABEL_MASK;
159 159
@@ -182,7 +182,7 @@ static int fl_intern(struct ip6_flowlabel *fl, __u32 label)
182 182
183/* Socket flowlabel lists */ 183/* Socket flowlabel lists */
184 184
185struct ip6_flowlabel * fl6_sock_lookup(struct sock *sk, u32 label) 185struct ip6_flowlabel * fl6_sock_lookup(struct sock *sk, __be32 label)
186{ 186{
187 struct ipv6_fl_socklist *sfl; 187 struct ipv6_fl_socklist *sfl;
188 struct ipv6_pinfo *np = inet6_sk(sk); 188 struct ipv6_pinfo *np = inet6_sk(sk);
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index 66716911962e..9ff1be1bc2e7 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -217,7 +217,7 @@ int ip6_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl,
217 if (tclass < 0) 217 if (tclass < 0)
218 tclass = 0; 218 tclass = 0;
219 219
220 *(u32 *)hdr = htonl(0x60000000 | (tclass << 20)) | fl->fl6_flowlabel; 220 *(__be32 *)hdr = htonl(0x60000000 | (tclass << 20)) | fl->fl6_flowlabel;
221 221
222 hdr->payload_len = htons(seg_len); 222 hdr->payload_len = htons(seg_len);
223 hdr->nexthdr = proto; 223 hdr->nexthdr = proto;
@@ -1311,7 +1311,7 @@ int ip6_push_pending_frames(struct sock *sk)
1311 1311
1312 skb->nh.ipv6h = hdr = (struct ipv6hdr*) skb_push(skb, sizeof(struct ipv6hdr)); 1312 skb->nh.ipv6h = hdr = (struct ipv6hdr*) skb_push(skb, sizeof(struct ipv6hdr));
1313 1313
1314 *(u32*)hdr = fl->fl6_flowlabel | 1314 *(__be32*)hdr = fl->fl6_flowlabel |
1315 htonl(0x60000000 | ((int)np->cork.tclass << 20)); 1315 htonl(0x60000000 | ((int)np->cork.tclass << 20));
1316 1316
1317 if (skb->len <= sizeof(struct ipv6hdr) + IPV6_MAXPLEN) 1317 if (skb->len <= sizeof(struct ipv6hdr) + IPV6_MAXPLEN)
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index 6a3026dd865a..4919f9294e2a 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -665,9 +665,9 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev)
665 665
666 dsfield = ipv6_get_dsfield(ipv6h); 666 dsfield = ipv6_get_dsfield(ipv6h);
667 if ((t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS)) 667 if ((t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS))
668 fl.fl6_flowlabel |= (*(__u32 *) ipv6h & IPV6_TCLASS_MASK); 668 fl.fl6_flowlabel |= (*(__be32 *) ipv6h & IPV6_TCLASS_MASK);
669 if ((t->parms.flags & IP6_TNL_F_USE_ORIG_FLOWLABEL)) 669 if ((t->parms.flags & IP6_TNL_F_USE_ORIG_FLOWLABEL))
670 fl.fl6_flowlabel |= (*(__u32 *) ipv6h & IPV6_FLOWLABEL_MASK); 670 fl.fl6_flowlabel |= (*(__be32 *) ipv6h & IPV6_FLOWLABEL_MASK);
671 671
672 if (encap_limit >= 0 && (opt = create_tel(encap_limit)) == NULL) 672 if (encap_limit >= 0 && (opt = create_tel(encap_limit)) == NULL)
673 goto tx_err; 673 goto tx_err;
@@ -735,7 +735,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev)
735 735
736 skb->nh.raw = skb_push(skb, sizeof(struct ipv6hdr)); 736 skb->nh.raw = skb_push(skb, sizeof(struct ipv6hdr));
737 ipv6h = skb->nh.ipv6h; 737 ipv6h = skb->nh.ipv6h;
738 *(u32*)ipv6h = fl.fl6_flowlabel | htonl(0x60000000); 738 *(__be32*)ipv6h = fl.fl6_flowlabel | htonl(0x60000000);
739 dsfield = INET_ECN_encapsulate(0, dsfield); 739 dsfield = INET_ECN_encapsulate(0, dsfield);
740 ipv6_change_dsfield(ipv6h, ~INET_ECN_MASK, dsfield); 740 ipv6_change_dsfield(ipv6h, ~INET_ECN_MASK, dsfield);
741 ipv6h->payload_len = htons(skb->len - sizeof(struct ipv6hdr)); 741 ipv6h->payload_len = htons(skb->len - sizeof(struct ipv6hdr));
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index b39ae99122d5..e9c1fc5f21b1 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -714,7 +714,7 @@ void ip6_route_input(struct sk_buff *skb)
714#ifdef CONFIG_IPV6_ROUTE_FWMARK 714#ifdef CONFIG_IPV6_ROUTE_FWMARK
715 .fwmark = skb->nfmark, 715 .fwmark = skb->nfmark,
716#endif 716#endif
717 .flowlabel = (* (u32 *) iph)&IPV6_FLOWINFO_MASK, 717 .flowlabel = (* (__be32 *) iph)&IPV6_FLOWINFO_MASK,
718 }, 718 },
719 }, 719 },
720 .proto = iph->nexthdr, 720 .proto = iph->nexthdr,