diff options
author | David S. Miller <davem@davemloft.net> | 2013-07-03 17:50:41 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-07-03 17:55:13 -0400 |
commit | 0c1072ae0242fbdffd9a0bba36e7a7033d287f9c (patch) | |
tree | e0f4dbdbf5078d4a707911177e7bdc17a70bdce5 /net/ipv6 | |
parent | c50cd357887acf9fd7af3a5d492911bd825555a2 (diff) | |
parent | 8bb495e3f02401ee6f76d1b1d77f3ac9f079e376 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
drivers/net/ethernet/freescale/fec_main.c
drivers/net/ethernet/renesas/sh_eth.c
net/ipv4/gre.c
The GRE conflict is between a bug fix (kfree_skb --> kfree_skb_list)
and the splitting of the gre.c code into seperate files.
The FEC conflict was two sets of changes adding ethtool support code
in an "!CONFIG_M5272" CPP protected block.
Finally the sh_eth.c conflict was between one commit add bits set
in the .eesr_err_check mask whilst another commit removed the
.tx_error_check member and assignments.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/addrconf.c | 12 | ||||
-rw-r--r-- | net/ipv6/ip6_output.c | 13 | ||||
-rw-r--r-- | net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c | 2 |
3 files changed, 17 insertions, 10 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 75fd93bdd0d3..cfdcf7b2daf6 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
@@ -2656,6 +2656,9 @@ static void init_loopback(struct net_device *dev) | |||
2656 | if (sp_ifa->flags & (IFA_F_DADFAILED | IFA_F_TENTATIVE)) | 2656 | if (sp_ifa->flags & (IFA_F_DADFAILED | IFA_F_TENTATIVE)) |
2657 | continue; | 2657 | continue; |
2658 | 2658 | ||
2659 | if (sp_ifa->rt) | ||
2660 | continue; | ||
2661 | |||
2659 | sp_rt = addrconf_dst_alloc(idev, &sp_ifa->addr, 0); | 2662 | sp_rt = addrconf_dst_alloc(idev, &sp_ifa->addr, 0); |
2660 | 2663 | ||
2661 | /* Failure cases are ignored */ | 2664 | /* Failure cases are ignored */ |
@@ -4340,6 +4343,7 @@ static int inet6_set_iftoken(struct inet6_dev *idev, struct in6_addr *token) | |||
4340 | struct inet6_ifaddr *ifp; | 4343 | struct inet6_ifaddr *ifp; |
4341 | struct net_device *dev = idev->dev; | 4344 | struct net_device *dev = idev->dev; |
4342 | bool update_rs = false; | 4345 | bool update_rs = false; |
4346 | struct in6_addr ll_addr; | ||
4343 | 4347 | ||
4344 | if (token == NULL) | 4348 | if (token == NULL) |
4345 | return -EINVAL; | 4349 | return -EINVAL; |
@@ -4359,11 +4363,9 @@ static int inet6_set_iftoken(struct inet6_dev *idev, struct in6_addr *token) | |||
4359 | 4363 | ||
4360 | write_unlock_bh(&idev->lock); | 4364 | write_unlock_bh(&idev->lock); |
4361 | 4365 | ||
4362 | if (!idev->dead && (idev->if_flags & IF_READY)) { | 4366 | if (!idev->dead && (idev->if_flags & IF_READY) && |
4363 | struct in6_addr ll_addr; | 4367 | !ipv6_get_lladdr(dev, &ll_addr, IFA_F_TENTATIVE | |
4364 | 4368 | IFA_F_OPTIMISTIC)) { | |
4365 | ipv6_get_lladdr(dev, &ll_addr, IFA_F_TENTATIVE | | ||
4366 | IFA_F_OPTIMISTIC); | ||
4367 | 4369 | ||
4368 | /* If we're not ready, then normal ifup will take care | 4370 | /* If we're not ready, then normal ifup will take care |
4369 | * of this. Otherwise, we need to request our rs here. | 4371 | * of this. Otherwise, we need to request our rs here. |
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index be7589ef5cf9..6e3ddf806ec2 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c | |||
@@ -381,9 +381,8 @@ int ip6_forward(struct sk_buff *skb) | |||
381 | * cannot be fragmented, because there is no warranty | 381 | * cannot be fragmented, because there is no warranty |
382 | * that different fragments will go along one path. --ANK | 382 | * that different fragments will go along one path. --ANK |
383 | */ | 383 | */ |
384 | if (opt->ra) { | 384 | if (unlikely(opt->flags & IP6SKB_ROUTERALERT)) { |
385 | u8 *ptr = skb_network_header(skb) + opt->ra; | 385 | if (ip6_call_ra_chain(skb, ntohs(opt->ra))) |
386 | if (ip6_call_ra_chain(skb, (ptr[2]<<8) + ptr[3])) | ||
387 | return 0; | 386 | return 0; |
388 | } | 387 | } |
389 | 388 | ||
@@ -822,11 +821,17 @@ static struct dst_entry *ip6_sk_dst_check(struct sock *sk, | |||
822 | const struct flowi6 *fl6) | 821 | const struct flowi6 *fl6) |
823 | { | 822 | { |
824 | struct ipv6_pinfo *np = inet6_sk(sk); | 823 | struct ipv6_pinfo *np = inet6_sk(sk); |
825 | struct rt6_info *rt = (struct rt6_info *)dst; | 824 | struct rt6_info *rt; |
826 | 825 | ||
827 | if (!dst) | 826 | if (!dst) |
828 | goto out; | 827 | goto out; |
829 | 828 | ||
829 | if (dst->ops->family != AF_INET6) { | ||
830 | dst_release(dst); | ||
831 | return NULL; | ||
832 | } | ||
833 | |||
834 | rt = (struct rt6_info *)dst; | ||
830 | /* Yes, checking route validity in not connected | 835 | /* Yes, checking route validity in not connected |
831 | * case is not very simple. Take into account, | 836 | * case is not very simple. Take into account, |
832 | * that we do not support routing by source, TOS, | 837 | * that we do not support routing by source, TOS, |
diff --git a/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c b/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c index 97bcf2bae857..c9b6a6e6a1e8 100644 --- a/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c +++ b/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c | |||
@@ -204,7 +204,7 @@ static unsigned int __ipv6_conntrack_in(struct net *net, | |||
204 | if (ct != NULL && !nf_ct_is_untracked(ct)) { | 204 | if (ct != NULL && !nf_ct_is_untracked(ct)) { |
205 | help = nfct_help(ct); | 205 | help = nfct_help(ct); |
206 | if ((help && help->helper) || !nf_ct_is_confirmed(ct)) { | 206 | if ((help && help->helper) || !nf_ct_is_confirmed(ct)) { |
207 | nf_conntrack_get_reasm(skb); | 207 | nf_conntrack_get_reasm(reasm); |
208 | NF_HOOK_THRESH(NFPROTO_IPV6, hooknum, reasm, | 208 | NF_HOOK_THRESH(NFPROTO_IPV6, hooknum, reasm, |
209 | (struct net_device *)in, | 209 | (struct net_device *)in, |
210 | (struct net_device *)out, | 210 | (struct net_device *)out, |