mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/bonding/bond_alb.c drivers/net/ethernet/altera/altera_msgdma.c drivers/net/ethernet/altera/altera_sgdma.c net/ipv6/xfrm6_output.c Several cases of overlapping changes. The xfrm6_output.c has a bug fix which overlaps the renaming of skb->local_df to skb->ignore_df. In the Altera TSE driver cases, the register access cleanups in net-next overlapped with bug fixes done in net. Similarly a bug fix to send ALB packets in the bonding driver using the right source address overlaps with cleanups in net-next. Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
commit
54e5c4def0
528 changed files with 6232 additions and 3738 deletions
|
|
@ -196,7 +196,6 @@ static struct sk_buff **ipv6_gro_receive(struct sk_buff **head,
|
|||
unsigned int off;
|
||||
u16 flush = 1;
|
||||
int proto;
|
||||
__wsum csum;
|
||||
|
||||
off = skb_gro_offset(skb);
|
||||
hlen = off + sizeof(*iph);
|
||||
|
|
@ -264,13 +263,10 @@ static struct sk_buff **ipv6_gro_receive(struct sk_buff **head,
|
|||
|
||||
NAPI_GRO_CB(skb)->flush |= flush;
|
||||
|
||||
csum = skb->csum;
|
||||
skb_postpull_rcsum(skb, iph, skb_network_header_len(skb));
|
||||
skb_gro_postpull_rcsum(skb, iph, nlen);
|
||||
|
||||
pp = ops->callbacks.gro_receive(head, skb);
|
||||
|
||||
skb->csum = csum;
|
||||
|
||||
out_unlock:
|
||||
rcu_read_unlock();
|
||||
|
||||
|
|
|
|||
|
|
@ -1229,7 +1229,7 @@ int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to,
|
|||
unsigned int maxnonfragsize, headersize;
|
||||
|
||||
headersize = sizeof(struct ipv6hdr) +
|
||||
(opt ? opt->tot_len : 0) +
|
||||
(opt ? opt->opt_flen + opt->opt_nflen : 0) +
|
||||
(dst_allfrag(&rt->dst) ?
|
||||
sizeof(struct frag_hdr) : 0) +
|
||||
rt->rt6i_nfheader_len;
|
||||
|
|
|
|||
|
|
@ -1558,7 +1558,7 @@ static int ip6_tnl_validate(struct nlattr *tb[], struct nlattr *data[])
|
|||
{
|
||||
u8 proto;
|
||||
|
||||
if (!data)
|
||||
if (!data || !data[IFLA_IPTUN_PROTO])
|
||||
return 0;
|
||||
|
||||
proto = nla_get_u8(data[IFLA_IPTUN_PROTO]);
|
||||
|
|
|
|||
|
|
@ -511,6 +511,7 @@ static int vti6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
|
|||
u8 type, u8 code, int offset, __be32 info)
|
||||
{
|
||||
__be32 spi;
|
||||
__u32 mark;
|
||||
struct xfrm_state *x;
|
||||
struct ip6_tnl *t;
|
||||
struct ip_esp_hdr *esph;
|
||||
|
|
@ -524,6 +525,8 @@ static int vti6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
|
|||
if (!t)
|
||||
return -1;
|
||||
|
||||
mark = be32_to_cpu(t->parms.o_key);
|
||||
|
||||
switch (protocol) {
|
||||
case IPPROTO_ESP:
|
||||
esph = (struct ip_esp_hdr *)(skb->data + offset);
|
||||
|
|
@ -545,7 +548,7 @@ static int vti6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
|
|||
type != NDISC_REDIRECT)
|
||||
return 0;
|
||||
|
||||
x = xfrm_state_lookup(net, skb->mark, (const xfrm_address_t *)&iph->daddr,
|
||||
x = xfrm_state_lookup(net, mark, (const xfrm_address_t *)&iph->daddr,
|
||||
spi, protocol, AF_INET6);
|
||||
if (!x)
|
||||
return 0;
|
||||
|
|
@ -1094,7 +1097,6 @@ static int __init vti6_tunnel_init(void)
|
|||
|
||||
err = xfrm6_protocol_register(&vti_esp6_protocol, IPPROTO_ESP);
|
||||
if (err < 0) {
|
||||
unregister_pernet_device(&vti6_net_ops);
|
||||
pr_err("%s: can't register vti6 protocol\n", __func__);
|
||||
|
||||
goto out;
|
||||
|
|
@ -1103,7 +1105,6 @@ static int __init vti6_tunnel_init(void)
|
|||
err = xfrm6_protocol_register(&vti_ah6_protocol, IPPROTO_AH);
|
||||
if (err < 0) {
|
||||
xfrm6_protocol_deregister(&vti_esp6_protocol, IPPROTO_ESP);
|
||||
unregister_pernet_device(&vti6_net_ops);
|
||||
pr_err("%s: can't register vti6 protocol\n", __func__);
|
||||
|
||||
goto out;
|
||||
|
|
@ -1113,7 +1114,6 @@ static int __init vti6_tunnel_init(void)
|
|||
if (err < 0) {
|
||||
xfrm6_protocol_deregister(&vti_ah6_protocol, IPPROTO_AH);
|
||||
xfrm6_protocol_deregister(&vti_esp6_protocol, IPPROTO_ESP);
|
||||
unregister_pernet_device(&vti6_net_ops);
|
||||
pr_err("%s: can't register vti6 protocol\n", __func__);
|
||||
|
||||
goto out;
|
||||
|
|
|
|||
|
|
@ -851,7 +851,7 @@ out:
|
|||
static void ndisc_recv_na(struct sk_buff *skb)
|
||||
{
|
||||
struct nd_msg *msg = (struct nd_msg *)skb_transport_header(skb);
|
||||
const struct in6_addr *saddr = &ipv6_hdr(skb)->saddr;
|
||||
struct in6_addr *saddr = &ipv6_hdr(skb)->saddr;
|
||||
const struct in6_addr *daddr = &ipv6_hdr(skb)->daddr;
|
||||
u8 *lladdr = NULL;
|
||||
u32 ndoptlen = skb_tail_pointer(skb) - (skb_transport_header(skb) +
|
||||
|
|
@ -944,10 +944,7 @@ static void ndisc_recv_na(struct sk_buff *skb)
|
|||
/*
|
||||
* Change: router to host
|
||||
*/
|
||||
struct rt6_info *rt;
|
||||
rt = rt6_get_dflt_router(saddr, dev);
|
||||
if (rt)
|
||||
ip6_del_rt(rt);
|
||||
rt6_clean_tohost(dev_net(dev), saddr);
|
||||
}
|
||||
|
||||
out:
|
||||
|
|
|
|||
|
|
@ -2234,6 +2234,27 @@ void rt6_remove_prefsrc(struct inet6_ifaddr *ifp)
|
|||
fib6_clean_all(net, fib6_remove_prefsrc, &adni);
|
||||
}
|
||||
|
||||
#define RTF_RA_ROUTER (RTF_ADDRCONF | RTF_DEFAULT | RTF_GATEWAY)
|
||||
#define RTF_CACHE_GATEWAY (RTF_GATEWAY | RTF_CACHE)
|
||||
|
||||
/* Remove routers and update dst entries when gateway turn into host. */
|
||||
static int fib6_clean_tohost(struct rt6_info *rt, void *arg)
|
||||
{
|
||||
struct in6_addr *gateway = (struct in6_addr *)arg;
|
||||
|
||||
if ((((rt->rt6i_flags & RTF_RA_ROUTER) == RTF_RA_ROUTER) ||
|
||||
((rt->rt6i_flags & RTF_CACHE_GATEWAY) == RTF_CACHE_GATEWAY)) &&
|
||||
ipv6_addr_equal(gateway, &rt->rt6i_gateway)) {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void rt6_clean_tohost(struct net *net, struct in6_addr *gateway)
|
||||
{
|
||||
fib6_clean_all(net, fib6_clean_tohost, gateway);
|
||||
}
|
||||
|
||||
struct arg_dev_net {
|
||||
struct net_device *dev;
|
||||
struct net *net;
|
||||
|
|
@ -2709,6 +2730,9 @@ static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr* nlh)
|
|||
if (tb[RTA_OIF])
|
||||
oif = nla_get_u32(tb[RTA_OIF]);
|
||||
|
||||
if (tb[RTA_MARK])
|
||||
fl6.flowi6_mark = nla_get_u32(tb[RTA_MARK]);
|
||||
|
||||
if (iif) {
|
||||
struct net_device *dev;
|
||||
int flags = 0;
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ static struct sk_buff **tcp6_gro_receive(struct sk_buff **head,
|
|||
if (NAPI_GRO_CB(skb)->flush)
|
||||
goto skip_csum;
|
||||
|
||||
wsum = skb->csum;
|
||||
wsum = NAPI_GRO_CB(skb)->csum;
|
||||
|
||||
switch (skb->ip_summed) {
|
||||
case CHECKSUM_NONE:
|
||||
|
|
|
|||
|
|
@ -114,12 +114,6 @@ int xfrm6_prepare_output(struct xfrm_state *x, struct sk_buff *skb)
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
memset(IP6CB(skb), 0, sizeof(*IP6CB(skb)));
|
||||
#ifdef CONFIG_NETFILTER
|
||||
IP6CB(skb)->flags |= IP6SKB_XFRM_TRANSFORMED;
|
||||
#endif
|
||||
|
||||
skb->protocol = htons(ETH_P_IPV6);
|
||||
skb->ignore_df = 1;
|
||||
|
||||
return x->outer_mode->output2(x, skb);
|
||||
|
|
@ -128,11 +122,13 @@ EXPORT_SYMBOL(xfrm6_prepare_output);
|
|||
|
||||
int xfrm6_output_finish(struct sk_buff *skb)
|
||||
{
|
||||
memset(IP6CB(skb), 0, sizeof(*IP6CB(skb)));
|
||||
skb->protocol = htons(ETH_P_IPV6);
|
||||
|
||||
#ifdef CONFIG_NETFILTER
|
||||
IP6CB(skb)->flags |= IP6SKB_XFRM_TRANSFORMED;
|
||||
#endif
|
||||
|
||||
skb->protocol = htons(ETH_P_IPV6);
|
||||
return xfrm_output(skb);
|
||||
}
|
||||
|
||||
|
|
@ -142,6 +138,13 @@ static int __xfrm6_output(struct sk_buff *skb)
|
|||
struct xfrm_state *x = dst->xfrm;
|
||||
int mtu;
|
||||
|
||||
#ifdef CONFIG_NETFILTER
|
||||
if (!x) {
|
||||
IP6CB(skb)->flags |= IP6SKB_REROUTED;
|
||||
return dst_output(skb);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (skb->protocol == htons(ETH_P_IPV6))
|
||||
mtu = ip6_skb_dst_mtu(skb);
|
||||
else
|
||||
|
|
@ -165,6 +168,7 @@ static int __xfrm6_output(struct sk_buff *skb)
|
|||
|
||||
int xfrm6_output(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
return NF_HOOK(NFPROTO_IPV6, NF_INET_POST_ROUTING, skb, NULL,
|
||||
skb_dst(skb)->dev, __xfrm6_output);
|
||||
return NF_HOOK_COND(NFPROTO_IPV6, NF_INET_POST_ROUTING, skb,
|
||||
NULL, skb_dst(skb)->dev, __xfrm6_output,
|
||||
!(IP6CB(skb)->flags & IP6SKB_REROUTED));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,6 +50,10 @@ int xfrm6_rcv_cb(struct sk_buff *skb, u8 protocol, int err)
|
|||
{
|
||||
int ret;
|
||||
struct xfrm6_protocol *handler;
|
||||
struct xfrm6_protocol __rcu **head = proto_handlers(protocol);
|
||||
|
||||
if (!head)
|
||||
return 0;
|
||||
|
||||
for_each_protocol_rcu(*proto_handlers(protocol), handler)
|
||||
if ((ret = handler->cb_handler(skb, err)) <= 0)
|
||||
|
|
@ -184,10 +188,12 @@ int xfrm6_protocol_register(struct xfrm6_protocol *handler,
|
|||
struct xfrm6_protocol __rcu **pprev;
|
||||
struct xfrm6_protocol *t;
|
||||
bool add_netproto = false;
|
||||
|
||||
int ret = -EEXIST;
|
||||
int priority = handler->priority;
|
||||
|
||||
if (!proto_handlers(protocol) || !netproto(protocol))
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&xfrm6_protocol_mutex);
|
||||
|
||||
if (!rcu_dereference_protected(*proto_handlers(protocol),
|
||||
|
|
@ -230,6 +236,9 @@ int xfrm6_protocol_deregister(struct xfrm6_protocol *handler,
|
|||
struct xfrm6_protocol *t;
|
||||
int ret = -ENOENT;
|
||||
|
||||
if (!proto_handlers(protocol) || !netproto(protocol))
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&xfrm6_protocol_mutex);
|
||||
|
||||
for (pprev = proto_handlers(protocol);
|
||||
|
|
|
|||
Loading…
Reference in a new issue