ipv6: Convert to use flowi6 where applicable.
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -884,7 +884,7 @@ static inline int ip6_tnl_xmit_ctl(struct ip6_tnl *t)
|
||||
static int ip6_tnl_xmit2(struct sk_buff *skb,
|
||||
struct net_device *dev,
|
||||
__u8 dsfield,
|
||||
struct flowi *fl,
|
||||
struct flowi6 *fl6,
|
||||
int encap_limit,
|
||||
__u32 *pmtu)
|
||||
{
|
||||
@@ -904,11 +904,11 @@ static int ip6_tnl_xmit2(struct sk_buff *skb,
|
||||
if ((dst = ip6_tnl_dst_check(t)) != NULL)
|
||||
dst_hold(dst);
|
||||
else {
|
||||
dst = ip6_route_output(net, NULL, fl);
|
||||
dst = ip6_route_output(net, NULL, fl6);
|
||||
|
||||
if (dst->error)
|
||||
goto tx_err_link_failure;
|
||||
dst = xfrm_lookup(net, dst, fl, NULL, 0);
|
||||
dst = xfrm_lookup(net, dst, flowi6_to_flowi(fl6), NULL, 0);
|
||||
if (IS_ERR(dst)) {
|
||||
err = PTR_ERR(dst);
|
||||
dst = NULL;
|
||||
@@ -963,7 +963,7 @@ static int ip6_tnl_xmit2(struct sk_buff *skb,
|
||||
|
||||
skb->transport_header = skb->network_header;
|
||||
|
||||
proto = fl->flowi_proto;
|
||||
proto = fl6->flowi6_proto;
|
||||
if (encap_limit >= 0) {
|
||||
init_tel_txopt(&opt, encap_limit);
|
||||
ipv6_push_nfrag_opts(skb, &opt.ops, &proto, NULL);
|
||||
@@ -971,13 +971,13 @@ static int ip6_tnl_xmit2(struct sk_buff *skb,
|
||||
skb_push(skb, sizeof(struct ipv6hdr));
|
||||
skb_reset_network_header(skb);
|
||||
ipv6h = ipv6_hdr(skb);
|
||||
*(__be32*)ipv6h = fl->fl6_flowlabel | htonl(0x60000000);
|
||||
*(__be32*)ipv6h = fl6->flowlabel | htonl(0x60000000);
|
||||
dsfield = INET_ECN_encapsulate(0, dsfield);
|
||||
ipv6_change_dsfield(ipv6h, ~INET_ECN_MASK, dsfield);
|
||||
ipv6h->hop_limit = t->parms.hop_limit;
|
||||
ipv6h->nexthdr = proto;
|
||||
ipv6_addr_copy(&ipv6h->saddr, &fl->fl6_src);
|
||||
ipv6_addr_copy(&ipv6h->daddr, &fl->fl6_dst);
|
||||
ipv6_addr_copy(&ipv6h->saddr, &fl6->saddr);
|
||||
ipv6_addr_copy(&ipv6h->daddr, &fl6->daddr);
|
||||
nf_reset(skb);
|
||||
pkt_len = skb->len;
|
||||
err = ip6_local_out(skb);
|
||||
@@ -1007,7 +1007,7 @@ ip4ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
struct ip6_tnl *t = netdev_priv(dev);
|
||||
struct iphdr *iph = ip_hdr(skb);
|
||||
int encap_limit = -1;
|
||||
struct flowi fl;
|
||||
struct flowi6 fl6;
|
||||
__u8 dsfield;
|
||||
__u32 mtu;
|
||||
int err;
|
||||
@@ -1019,16 +1019,16 @@ ip4ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
if (!(t->parms.flags & IP6_TNL_F_IGN_ENCAP_LIMIT))
|
||||
encap_limit = t->parms.encap_limit;
|
||||
|
||||
memcpy(&fl, &t->fl, sizeof (fl));
|
||||
fl.flowi_proto = IPPROTO_IPIP;
|
||||
memcpy(&fl6, &t->fl.u.ip6, sizeof (fl6));
|
||||
fl6.flowi6_proto = IPPROTO_IPIP;
|
||||
|
||||
dsfield = ipv4_get_dsfield(iph);
|
||||
|
||||
if ((t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS))
|
||||
fl.fl6_flowlabel |= htonl((__u32)iph->tos << IPV6_TCLASS_SHIFT)
|
||||
fl6.flowlabel |= htonl((__u32)iph->tos << IPV6_TCLASS_SHIFT)
|
||||
& IPV6_TCLASS_MASK;
|
||||
|
||||
err = ip6_tnl_xmit2(skb, dev, dsfield, &fl, encap_limit, &mtu);
|
||||
err = ip6_tnl_xmit2(skb, dev, dsfield, &fl6, encap_limit, &mtu);
|
||||
if (err != 0) {
|
||||
/* XXX: send ICMP error even if DF is not set. */
|
||||
if (err == -EMSGSIZE)
|
||||
@@ -1047,7 +1047,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
struct ipv6hdr *ipv6h = ipv6_hdr(skb);
|
||||
int encap_limit = -1;
|
||||
__u16 offset;
|
||||
struct flowi fl;
|
||||
struct flowi6 fl6;
|
||||
__u8 dsfield;
|
||||
__u32 mtu;
|
||||
int err;
|
||||
@@ -1069,16 +1069,16 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
} else if (!(t->parms.flags & IP6_TNL_F_IGN_ENCAP_LIMIT))
|
||||
encap_limit = t->parms.encap_limit;
|
||||
|
||||
memcpy(&fl, &t->fl, sizeof (fl));
|
||||
fl.flowi_proto = IPPROTO_IPV6;
|
||||
memcpy(&fl6, &t->fl.u.ip6, sizeof (fl6));
|
||||
fl6.flowi6_proto = IPPROTO_IPV6;
|
||||
|
||||
dsfield = ipv6_get_dsfield(ipv6h);
|
||||
if ((t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS))
|
||||
fl.fl6_flowlabel |= (*(__be32 *) ipv6h & IPV6_TCLASS_MASK);
|
||||
fl6.flowlabel |= (*(__be32 *) ipv6h & IPV6_TCLASS_MASK);
|
||||
if ((t->parms.flags & IP6_TNL_F_USE_ORIG_FLOWLABEL))
|
||||
fl.fl6_flowlabel |= (*(__be32 *) ipv6h & IPV6_FLOWLABEL_MASK);
|
||||
fl6.flowlabel |= (*(__be32 *) ipv6h & IPV6_FLOWLABEL_MASK);
|
||||
|
||||
err = ip6_tnl_xmit2(skb, dev, dsfield, &fl, encap_limit, &mtu);
|
||||
err = ip6_tnl_xmit2(skb, dev, dsfield, &fl6, encap_limit, &mtu);
|
||||
if (err != 0) {
|
||||
if (err == -EMSGSIZE)
|
||||
icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu);
|
||||
@@ -1141,21 +1141,21 @@ static void ip6_tnl_link_config(struct ip6_tnl *t)
|
||||
{
|
||||
struct net_device *dev = t->dev;
|
||||
struct ip6_tnl_parm *p = &t->parms;
|
||||
struct flowi *fl = &t->fl;
|
||||
struct flowi6 *fl6 = &t->fl.u.ip6;
|
||||
|
||||
memcpy(dev->dev_addr, &p->laddr, sizeof(struct in6_addr));
|
||||
memcpy(dev->broadcast, &p->raddr, sizeof(struct in6_addr));
|
||||
|
||||
/* Set up flowi template */
|
||||
ipv6_addr_copy(&fl->fl6_src, &p->laddr);
|
||||
ipv6_addr_copy(&fl->fl6_dst, &p->raddr);
|
||||
fl->flowi_oif = p->link;
|
||||
fl->fl6_flowlabel = 0;
|
||||
ipv6_addr_copy(&fl6->saddr, &p->laddr);
|
||||
ipv6_addr_copy(&fl6->daddr, &p->raddr);
|
||||
fl6->flowi6_oif = p->link;
|
||||
fl6->flowlabel = 0;
|
||||
|
||||
if (!(p->flags&IP6_TNL_F_USE_ORIG_TCLASS))
|
||||
fl->fl6_flowlabel |= IPV6_TCLASS_MASK & p->flowinfo;
|
||||
fl6->flowlabel |= IPV6_TCLASS_MASK & p->flowinfo;
|
||||
if (!(p->flags&IP6_TNL_F_USE_ORIG_FLOWLABEL))
|
||||
fl->fl6_flowlabel |= IPV6_FLOWLABEL_MASK & p->flowinfo;
|
||||
fl6->flowlabel |= IPV6_FLOWLABEL_MASK & p->flowinfo;
|
||||
|
||||
ip6_tnl_set_cap(t);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user