.. | .. |
---|
285 | 285 | { |
---|
286 | 286 | struct veth_priv *rcv_priv, *priv = netdev_priv(dev); |
---|
287 | 287 | struct veth_rq *rq = NULL; |
---|
| 288 | + int ret = NETDEV_TX_OK; |
---|
288 | 289 | struct net_device *rcv; |
---|
289 | 290 | int length = skb->len; |
---|
290 | 291 | bool rcv_xdp = false; |
---|
.. | .. |
---|
311 | 312 | } else { |
---|
312 | 313 | drop: |
---|
313 | 314 | atomic64_inc(&priv->dropped); |
---|
| 315 | + ret = NET_XMIT_DROP; |
---|
314 | 316 | } |
---|
315 | 317 | |
---|
316 | 318 | if (rcv_xdp) |
---|
.. | .. |
---|
318 | 320 | |
---|
319 | 321 | rcu_read_unlock(); |
---|
320 | 322 | |
---|
321 | | - return NETDEV_TX_OK; |
---|
| 323 | + return ret; |
---|
322 | 324 | } |
---|
323 | 325 | |
---|
324 | 326 | static u64 veth_stats_tx(struct net_device *dev, u64 *packets, u64 *bytes) |
---|
.. | .. |
---|
849 | 851 | xdp_set_return_frame_no_direct(); |
---|
850 | 852 | done = veth_xdp_rcv(rq, budget, &bq, &stats); |
---|
851 | 853 | |
---|
| 854 | + if (stats.xdp_redirect > 0) |
---|
| 855 | + xdp_do_flush(); |
---|
| 856 | + |
---|
852 | 857 | if (done < budget && napi_complete_done(napi, done)) { |
---|
853 | 858 | /* Write rx_notify_masked before reading ptr_ring */ |
---|
854 | 859 | smp_store_mb(rq->rx_notify_masked, false); |
---|
.. | .. |
---|
862 | 867 | |
---|
863 | 868 | if (stats.xdp_tx > 0) |
---|
864 | 869 | veth_xdp_flush(rq, &bq); |
---|
865 | | - if (stats.xdp_redirect > 0) |
---|
866 | | - xdp_do_flush(); |
---|
867 | 870 | xdp_clear_return_frame_no_direct(); |
---|
868 | 871 | |
---|
869 | 872 | return done; |
---|
.. | .. |
---|
1312 | 1315 | |
---|
1313 | 1316 | nla_peer = data[VETH_INFO_PEER]; |
---|
1314 | 1317 | ifmp = nla_data(nla_peer); |
---|
1315 | | - err = rtnl_nla_parse_ifla(peer_tb, |
---|
1316 | | - nla_data(nla_peer) + sizeof(struct ifinfomsg), |
---|
1317 | | - nla_len(nla_peer) - sizeof(struct ifinfomsg), |
---|
1318 | | - NULL); |
---|
| 1318 | + err = rtnl_nla_parse_ifinfomsg(peer_tb, nla_peer, extack); |
---|
1319 | 1319 | if (err < 0) |
---|
1320 | 1320 | return err; |
---|
1321 | 1321 | |
---|