aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/ip6_tunnel.c
diff options
context:
space:
mode:
authorYOSHIFUJI Hideaki / 吉藤英明 <yoshfuji@linux-ipv6.org>2013-01-13 00:01:39 -0500
committerDavid S. Miller <davem@davemloft.net>2013-01-13 20:17:13 -0500
commit3e4e4c1f2da66b29ee9379ca29f8dd620c2b5a1f (patch)
treeee6dfd76e5949b84b8c25136a4563925d0033cfa /net/ipv6/ip6_tunnel.c
parent00494be4546432a11d62ebfeca363256ff9822b5 (diff)
ipv6: Introduce ip6_flow_hdr() to fill version, tclass and flowlabel.
This is not only for readability but also for optimization. What we do here is to build the 32bit word at the beginning of the ipv6 header (the "ip6_flow" virtual member of struct ip6_hdr in RFC3542) and we do not need to read the tclass portion of the target buffer. Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/ip6_tunnel.c')
-rw-r--r--net/ipv6/ip6_tunnel.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index a14f28b280f5..fff83cbc197f 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -1030,9 +1030,7 @@ static int ip6_tnl_xmit2(struct sk_buff *skb,
1030 skb_push(skb, sizeof(struct ipv6hdr)); 1030 skb_push(skb, sizeof(struct ipv6hdr));
1031 skb_reset_network_header(skb); 1031 skb_reset_network_header(skb);
1032 ipv6h = ipv6_hdr(skb); 1032 ipv6h = ipv6_hdr(skb);
1033 *(__be32*)ipv6h = fl6->flowlabel | htonl(0x60000000); 1033 ip6_flow_hdr(ipv6h, INET_ECN_encapsulate(0, dsfield), fl6->flowlabel);
1034 dsfield = INET_ECN_encapsulate(0, dsfield);
1035 ipv6_change_dsfield(ipv6h, ~INET_ECN_MASK, dsfield);
1036 ipv6h->hop_limit = t->parms.hop_limit; 1034 ipv6h->hop_limit = t->parms.hop_limit;
1037 ipv6h->nexthdr = proto; 1035 ipv6h->nexthdr = proto;
1038 ipv6h->saddr = fl6->saddr; 1036 ipv6h->saddr = fl6->saddr;