Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
The new route handling in ip_mc_finish_output() from 'net' overlapped with the new support for returning congestion notifications from BPF programs. In order to handle this I had to take the dev_loopback_xmit() calls out of the switch statement. The aquantia driver conflicts were simple overlapping changes. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -327,18 +327,35 @@ static int ip_finish_output(struct net *net, struct sock *sk, struct sk_buff *sk
|
||||
static int ip_mc_finish_output(struct net *net, struct sock *sk,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
int ret;
|
||||
struct rtable *new_rt;
|
||||
bool do_cn = false;
|
||||
int ret, err;
|
||||
|
||||
ret = BPF_CGROUP_RUN_PROG_INET_EGRESS(sk, skb);
|
||||
switch (ret) {
|
||||
case NET_XMIT_SUCCESS:
|
||||
return dev_loopback_xmit(net, sk, skb);
|
||||
case NET_XMIT_CN:
|
||||
return dev_loopback_xmit(net, sk, skb) ? : ret;
|
||||
do_cn = true;
|
||||
/* fall through */
|
||||
case NET_XMIT_SUCCESS:
|
||||
break;
|
||||
default:
|
||||
kfree_skb(skb);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Reset rt_iif so that inet_iif() will return skb->skb_iif. Setting
|
||||
* this to non-zero causes ipi_ifindex in in_pktinfo to be overwritten,
|
||||
* see ipv4_pktinfo_prepare().
|
||||
*/
|
||||
new_rt = rt_dst_clone(net->loopback_dev, skb_rtable(skb));
|
||||
if (new_rt) {
|
||||
new_rt->rt_iif = 0;
|
||||
skb_dst_drop(skb);
|
||||
skb_dst_set(skb, &new_rt->dst);
|
||||
}
|
||||
|
||||
err = dev_loopback_xmit(net, sk, skb);
|
||||
return (do_cn && err) ? ret : err;
|
||||
}
|
||||
|
||||
int ip_mc_output(struct net *net, struct sock *sk, struct sk_buff *skb)
|
||||
|
Reference in New Issue
Block a user