Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Lots of overlapping changes. Also on the net-next side the XDP state management is handled more in the generic layers so undo the 'net' nfp fix which isn't applicable in net-next. Include a necessary change by Jakub Kicinski, with log message: ==================== cls_bpf no longer takes care of offload tracking. Make sure netdevsim performs necessary checks. This fixes a warning caused by TC trying to remove a filter it has not added. Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com> Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com> ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -210,7 +210,6 @@ lookup_protocol:
|
||||
np->mcast_hops = IPV6_DEFAULT_MCASTHOPS;
|
||||
np->mc_loop = 1;
|
||||
np->pmtudisc = IPV6_PMTUDISC_WANT;
|
||||
np->autoflowlabel = ip6_default_np_autolabel(net);
|
||||
np->repflow = net->ipv6.sysctl.flowlabel_reflect;
|
||||
sk->sk_ipv6only = net->ipv6.sysctl.bindv6only;
|
||||
|
||||
|
@@ -1772,6 +1772,7 @@ static void ip6gre_tap_setup(struct net_device *dev)
|
||||
|
||||
ether_setup(dev);
|
||||
|
||||
dev->max_mtu = 0;
|
||||
dev->netdev_ops = &ip6gre_tap_netdev_ops;
|
||||
dev->needs_free_netdev = true;
|
||||
dev->priv_destructor = ip6gre_dev_free;
|
||||
|
@@ -166,6 +166,14 @@ int ip6_output(struct net *net, struct sock *sk, struct sk_buff *skb)
|
||||
!(IP6CB(skb)->flags & IP6SKB_REROUTED));
|
||||
}
|
||||
|
||||
static bool ip6_autoflowlabel(struct net *net, const struct ipv6_pinfo *np)
|
||||
{
|
||||
if (!np->autoflowlabel_set)
|
||||
return ip6_default_np_autolabel(net);
|
||||
else
|
||||
return np->autoflowlabel;
|
||||
}
|
||||
|
||||
/*
|
||||
* xmit an sk_buff (used by TCP, SCTP and DCCP)
|
||||
* Note : socket lock is not held for SYNACK packets, but might be modified
|
||||
@@ -230,7 +238,7 @@ int ip6_xmit(const struct sock *sk, struct sk_buff *skb, struct flowi6 *fl6,
|
||||
hlimit = ip6_dst_hoplimit(dst);
|
||||
|
||||
ip6_flow_hdr(hdr, tclass, ip6_make_flowlabel(net, skb, fl6->flowlabel,
|
||||
np->autoflowlabel, fl6));
|
||||
ip6_autoflowlabel(net, np), fl6));
|
||||
|
||||
hdr->payload_len = htons(seg_len);
|
||||
hdr->nexthdr = proto;
|
||||
@@ -1626,7 +1634,7 @@ struct sk_buff *__ip6_make_skb(struct sock *sk,
|
||||
|
||||
ip6_flow_hdr(hdr, v6_cork->tclass,
|
||||
ip6_make_flowlabel(net, skb, fl6->flowlabel,
|
||||
np->autoflowlabel, fl6));
|
||||
ip6_autoflowlabel(net, np), fl6));
|
||||
hdr->hop_limit = v6_cork->hop_limit;
|
||||
hdr->nexthdr = proto;
|
||||
hdr->saddr = fl6->saddr;
|
||||
|
@@ -1126,8 +1126,13 @@ route_lookup:
|
||||
max_headroom += 8;
|
||||
mtu -= 8;
|
||||
}
|
||||
if (mtu < IPV6_MIN_MTU)
|
||||
mtu = IPV6_MIN_MTU;
|
||||
if (skb->protocol == htons(ETH_P_IPV6)) {
|
||||
if (mtu < IPV6_MIN_MTU)
|
||||
mtu = IPV6_MIN_MTU;
|
||||
} else if (mtu < 576) {
|
||||
mtu = 576;
|
||||
}
|
||||
|
||||
if (skb_dst(skb) && !t->parms.collect_md)
|
||||
skb_dst(skb)->ops->update_pmtu(skb_dst(skb), NULL, skb, mtu);
|
||||
if (skb->len - t->tun_hlen - eth_hlen > mtu && !skb_is_gso(skb)) {
|
||||
|
@@ -886,6 +886,7 @@ pref_skip_coa:
|
||||
break;
|
||||
case IPV6_AUTOFLOWLABEL:
|
||||
np->autoflowlabel = valbool;
|
||||
np->autoflowlabel_set = 1;
|
||||
retv = 0;
|
||||
break;
|
||||
case IPV6_RECVFRAGSIZE:
|
||||
|
@@ -2336,6 +2336,7 @@ struct dst_entry *icmp6_dst_alloc(struct net_device *dev,
|
||||
}
|
||||
|
||||
rt->dst.flags |= DST_HOST;
|
||||
rt->dst.input = ip6_input;
|
||||
rt->dst.output = ip6_output;
|
||||
rt->rt6i_gateway = fl6->daddr;
|
||||
rt->rt6i_dst.addr = fl6->daddr;
|
||||
@@ -4297,19 +4298,13 @@ static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,
|
||||
if (!ipv6_addr_any(&fl6.saddr))
|
||||
flags |= RT6_LOOKUP_F_HAS_SADDR;
|
||||
|
||||
if (!fibmatch)
|
||||
dst = ip6_route_input_lookup(net, dev, &fl6, flags);
|
||||
else
|
||||
dst = ip6_route_lookup(net, &fl6, 0);
|
||||
dst = ip6_route_input_lookup(net, dev, &fl6, flags);
|
||||
|
||||
rcu_read_unlock();
|
||||
} else {
|
||||
fl6.flowi6_oif = oif;
|
||||
|
||||
if (!fibmatch)
|
||||
dst = ip6_route_output(net, NULL, &fl6);
|
||||
else
|
||||
dst = ip6_route_lookup(net, &fl6, 0);
|
||||
dst = ip6_route_output(net, NULL, &fl6);
|
||||
}
|
||||
|
||||
|
||||
@@ -4326,6 +4321,14 @@ static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,
|
||||
goto errout;
|
||||
}
|
||||
|
||||
if (fibmatch && rt->from) {
|
||||
struct rt6_info *ort = rt->from;
|
||||
|
||||
dst_hold(&ort->dst);
|
||||
ip6_rt_put(rt);
|
||||
rt = ort;
|
||||
}
|
||||
|
||||
skb = alloc_skb(NLMSG_GOODSIZE, GFP_KERNEL);
|
||||
if (!skb) {
|
||||
ip6_rt_put(rt);
|
||||
|
Reference in New Issue
Block a user