ipv6: Convert to use flowi6 where applicable.

Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
David S. Miller 2011-03-12 16:22:43 -05:00
parent 9cce96df5b
commit 4c9483b2fb
35 changed files with 622 additions and 620 deletions

View file

@ -135,14 +135,15 @@ static struct mr6_table *ip6mr_get_table(struct net *net, u32 id)
return NULL;
}
static int ip6mr_fib_lookup(struct net *net, struct flowi *flp,
static int ip6mr_fib_lookup(struct net *net, struct flowi6 *flp6,
struct mr6_table **mrt)
{
struct ip6mr_result res;
struct fib_lookup_arg arg = { .result = &res, };
int err;
err = fib_rules_lookup(net->ipv6.mr6_rules_ops, flp, 0, &arg);
err = fib_rules_lookup(net->ipv6.mr6_rules_ops,
flowi6_to_flowi(flp6), 0, &arg);
if (err < 0)
return err;
*mrt = res.mrt;
@ -270,7 +271,7 @@ static struct mr6_table *ip6mr_get_table(struct net *net, u32 id)
return net->ipv6.mrt6;
}
static int ip6mr_fib_lookup(struct net *net, struct flowi *flp,
static int ip6mr_fib_lookup(struct net *net, struct flowi6 *flp6,
struct mr6_table **mrt)
{
*mrt = net->ipv6.mrt6;
@ -617,9 +618,9 @@ static int pim6_rcv(struct sk_buff *skb)
struct net_device *reg_dev = NULL;
struct net *net = dev_net(skb->dev);
struct mr6_table *mrt;
struct flowi fl = {
.flowi_iif = skb->dev->ifindex,
.flowi_mark = skb->mark,
struct flowi6 fl6 = {
.flowi6_iif = skb->dev->ifindex,
.flowi6_mark = skb->mark,
};
int reg_vif_num;
@ -644,7 +645,7 @@ static int pim6_rcv(struct sk_buff *skb)
ntohs(encap->payload_len) + sizeof(*pim) > skb->len)
goto drop;
if (ip6mr_fib_lookup(net, &fl, &mrt) < 0)
if (ip6mr_fib_lookup(net, &fl6, &mrt) < 0)
goto drop;
reg_vif_num = mrt->mroute_reg_vif_num;
@ -687,14 +688,14 @@ static netdev_tx_t reg_vif_xmit(struct sk_buff *skb,
{
struct net *net = dev_net(dev);
struct mr6_table *mrt;
struct flowi fl = {
.flowi_oif = dev->ifindex,
.flowi_iif = skb->skb_iif,
.flowi_mark = skb->mark,
struct flowi6 fl6 = {
.flowi6_oif = dev->ifindex,
.flowi6_iif = skb->skb_iif,
.flowi6_mark = skb->mark,
};
int err;
err = ip6mr_fib_lookup(net, &fl, &mrt);
err = ip6mr_fib_lookup(net, &fl6, &mrt);
if (err < 0)
return err;
@ -1547,13 +1548,13 @@ int ip6mr_sk_done(struct sock *sk)
struct sock *mroute6_socket(struct net *net, struct sk_buff *skb)
{
struct mr6_table *mrt;
struct flowi fl = {
.flowi_iif = skb->skb_iif,
.flowi_oif = skb->dev->ifindex,
.flowi_mark= skb->mark,
struct flowi6 fl6 = {
.flowi6_iif = skb->skb_iif,
.flowi6_oif = skb->dev->ifindex,
.flowi6_mark = skb->mark,
};
if (ip6mr_fib_lookup(net, &fl, &mrt) < 0)
if (ip6mr_fib_lookup(net, &fl6, &mrt) < 0)
return NULL;
return mrt->mroute6_sk;
@ -1897,7 +1898,7 @@ static int ip6mr_forward2(struct net *net, struct mr6_table *mrt,
struct mif_device *vif = &mrt->vif6_table[vifi];
struct net_device *dev;
struct dst_entry *dst;
struct flowi fl;
struct flowi6 fl6;
if (vif->dev == NULL)
goto out_free;
@ -1915,12 +1916,12 @@ static int ip6mr_forward2(struct net *net, struct mr6_table *mrt,
ipv6h = ipv6_hdr(skb);
fl = (struct flowi) {
.flowi_oif = vif->link,
.fl6_dst = ipv6h->daddr,
fl6 = (struct flowi6) {
.flowi6_oif = vif->link,
.daddr = ipv6h->daddr,
};
dst = ip6_route_output(net, NULL, &fl);
dst = ip6_route_output(net, NULL, &fl6);
if (!dst)
goto out_free;
@ -2043,13 +2044,13 @@ int ip6_mr_input(struct sk_buff *skb)
struct mfc6_cache *cache;
struct net *net = dev_net(skb->dev);
struct mr6_table *mrt;
struct flowi fl = {
.flowi_iif = skb->dev->ifindex,
.flowi_mark= skb->mark,
struct flowi6 fl6 = {
.flowi6_iif = skb->dev->ifindex,
.flowi6_mark = skb->mark,
};
int err;
err = ip6mr_fib_lookup(net, &fl, &mrt);
err = ip6mr_fib_lookup(net, &fl6, &mrt);
if (err < 0)
return err;