Skip to content

Commit d8894a0

Browse files
committed
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking fixes from David Miller: 1) Fix crash on bpf_prog_load() errors, from Daniel Borkmann. 2) Fix ATM VCC memory accounting, from David Woodhouse. 3) fib6_info objects need RCU freeing, from Eric Dumazet. 4) Fix SO_BINDTODEVICE handling for TCP sockets, from David Ahern. 5) Fix clobbered error code in enic_open() failure path, from Govindarajulu Varadarajan. 6) Propagate dev_get_valid_name() error returns properly, from Li RongQing. 7) Fix suspend/resume in davinci_emac driver, from Bartosz Golaszewski. 8) Various act_ife fixes (recursive locking, IDR leaks, etc.) from Davide Caratti. 9) Fix buggy checksum handling in sungem driver, from Eric Dumazet. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (40 commits) ip: limit use of gso_size to udp stmmac: fix DMA channel hang in half-duplex mode net: stmmac: socfpga: add additional ocp reset line for Stratix10 net: sungem: fix rx checksum support bpfilter: ignore binary files bpfilter: fix build error net/usb/drivers: Remove useless hrtimer_active check net/sched: act_ife: preserve the action control in case of error net/sched: act_ife: fix recursive lock and idr leak net: ethernet: fix suspend/resume in davinci_emac net: propagate dev_get_valid_name return code enic: do not overwrite error code net/tcp: Fix socket lookups with SO_BINDTODEVICE ptp: replace getnstimeofday64() with ktime_get_real_ts64() net/ipv6: respect rcu grace period before freeing fib6_info net: net_failover: fix typo in net_failover_slave_register() ipvlan: use ETH_MAX_MTU as max mtu net: hamradio: use eth_broadcast_addr enic: initialize enic->rfs_h.lock in enic_probe MAINTAINERS: Add Sam as the maintainer for NCSI ...
2 parents 81e97f0 + 9887cba commit d8894a0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+371
-195
lines changed

MAINTAINERS

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9751,6 +9751,11 @@ L: [email protected]
97519751
S: Maintained
97529752
F: drivers/scsi/NCR_D700.*
97539753

9754+
NCSI LIBRARY:
9755+
M: Samuel Mendoza-Jonas <[email protected]>
9756+
S: Maintained
9757+
F: net/ncsi/
9758+
97549759
NCT6775 HARDWARE MONITOR DRIVER
97559760
M: Guenter Roeck <[email protected]>
97569761

drivers/bluetooth/hci_nokia.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
#include <linux/slab.h>
3030
#include <linux/string.h>
3131
#include <linux/types.h>
32-
#include <linux/unaligned/le_struct.h>
32+
#include <asm/unaligned.h>
3333
#include <net/bluetooth/bluetooth.h>
3434
#include <net/bluetooth/hci_core.h>
3535

drivers/net/ethernet/cisco/enic/enic_clsf.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ void enic_rfs_flw_tbl_init(struct enic *enic)
7979
enic->rfs_h.max = enic->config.num_arfs;
8080
enic->rfs_h.free = enic->rfs_h.max;
8181
enic->rfs_h.toclean = 0;
82-
enic_rfs_timer_start(enic);
8382
}
8483

8584
void enic_rfs_flw_tbl_free(struct enic *enic)
@@ -88,7 +87,6 @@ void enic_rfs_flw_tbl_free(struct enic *enic)
8887

8988
enic_rfs_timer_stop(enic);
9089
spin_lock_bh(&enic->rfs_h.lock);
91-
enic->rfs_h.free = 0;
9290
for (i = 0; i < (1 << ENIC_RFS_FLW_BITSHIFT); i++) {
9391
struct hlist_head *hhead;
9492
struct hlist_node *tmp;
@@ -99,6 +97,7 @@ void enic_rfs_flw_tbl_free(struct enic *enic)
9997
enic_delfltr(enic, n->fltr_id);
10098
hlist_del(&n->node);
10199
kfree(n);
100+
enic->rfs_h.free++;
102101
}
103102
}
104103
spin_unlock_bh(&enic->rfs_h.lock);

drivers/net/ethernet/cisco/enic/enic_main.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1920,7 +1920,7 @@ static int enic_open(struct net_device *netdev)
19201920
{
19211921
struct enic *enic = netdev_priv(netdev);
19221922
unsigned int i;
1923-
int err;
1923+
int err, ret;
19241924

19251925
err = enic_request_intr(enic);
19261926
if (err) {
@@ -1971,16 +1971,15 @@ static int enic_open(struct net_device *netdev)
19711971
vnic_intr_unmask(&enic->intr[i]);
19721972

19731973
enic_notify_timer_start(enic);
1974-
enic_rfs_flw_tbl_init(enic);
1974+
enic_rfs_timer_start(enic);
19751975

19761976
return 0;
19771977

19781978
err_out_free_rq:
19791979
for (i = 0; i < enic->rq_count; i++) {
1980-
err = vnic_rq_disable(&enic->rq[i]);
1981-
if (err)
1982-
return err;
1983-
vnic_rq_clean(&enic->rq[i], enic_free_rq_buf);
1980+
ret = vnic_rq_disable(&enic->rq[i]);
1981+
if (!ret)
1982+
vnic_rq_clean(&enic->rq[i], enic_free_rq_buf);
19841983
}
19851984
enic_dev_notify_unset(enic);
19861985
err_out_free_intr:
@@ -2904,6 +2903,7 @@ static int enic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
29042903

29052904
timer_setup(&enic->notify_timer, enic_notify_timer, 0);
29062905

2906+
enic_rfs_flw_tbl_init(enic);
29072907
enic_set_rx_coal_setting(enic);
29082908
INIT_WORK(&enic->reset, enic_reset);
29092909
INIT_WORK(&enic->tx_hang_reset, enic_tx_hang_reset);

drivers/net/ethernet/faraday/ftgmac100.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1735,8 +1735,8 @@ static void ftgmac100_ncsi_handler(struct ncsi_dev *nd)
17351735
if (unlikely(nd->state != ncsi_dev_state_functional))
17361736
return;
17371737

1738-
netdev_info(nd->dev, "NCSI interface %s\n",
1739-
nd->link_up ? "up" : "down");
1738+
netdev_dbg(nd->dev, "NCSI interface %s\n",
1739+
nd->link_up ? "up" : "down");
17401740
}
17411741

17421742
static void ftgmac100_setup_clk(struct ftgmac100 *priv)

drivers/net/ethernet/intel/i40e/i40e_txrx.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2103,9 +2103,8 @@ static struct sk_buff *i40e_build_skb(struct i40e_ring *rx_ring,
21032103
unsigned int truesize = i40e_rx_pg_size(rx_ring) / 2;
21042104
#else
21052105
unsigned int truesize = SKB_DATA_ALIGN(sizeof(struct skb_shared_info)) +
2106-
SKB_DATA_ALIGN(I40E_SKB_PAD +
2107-
(xdp->data_end -
2108-
xdp->data_hard_start));
2106+
SKB_DATA_ALIGN(xdp->data_end -
2107+
xdp->data_hard_start);
21092108
#endif
21102109
struct sk_buff *skb;
21112110

@@ -2124,7 +2123,7 @@ static struct sk_buff *i40e_build_skb(struct i40e_ring *rx_ring,
21242123
return NULL;
21252124

21262125
/* update pointers within the skb to store the data */
2127-
skb_reserve(skb, I40E_SKB_PAD + (xdp->data - xdp->data_hard_start));
2126+
skb_reserve(skb, xdp->data - xdp->data_hard_start);
21282127
__skb_put(skb, xdp->data_end - xdp->data);
21292128
if (metasize)
21302129
skb_metadata_set(skb, metasize);

drivers/net/ethernet/qlogic/qed/qed_dcbx.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -255,9 +255,8 @@ qed_dcbx_get_app_protocol_type(struct qed_hwfn *p_hwfn,
255255
*type = DCBX_PROTOCOL_ROCE_V2;
256256
} else {
257257
*type = DCBX_MAX_PROTOCOL_TYPE;
258-
DP_ERR(p_hwfn,
259-
"No action required, App TLV id = 0x%x app_prio_bitmap = 0x%x\n",
260-
id, app_prio_bitmap);
258+
DP_ERR(p_hwfn, "No action required, App TLV entry = 0x%x\n",
259+
app_prio_bitmap);
261260
return false;
262261
}
263262

@@ -1479,8 +1478,8 @@ static u8 qed_dcbnl_getcap(struct qed_dev *cdev, int capid, u8 *cap)
14791478
*cap = 0x80;
14801479
break;
14811480
case DCB_CAP_ATTR_DCBX:
1482-
*cap = (DCB_CAP_DCBX_LLD_MANAGED | DCB_CAP_DCBX_VER_CEE |
1483-
DCB_CAP_DCBX_VER_IEEE | DCB_CAP_DCBX_STATIC);
1481+
*cap = (DCB_CAP_DCBX_VER_CEE | DCB_CAP_DCBX_VER_IEEE |
1482+
DCB_CAP_DCBX_STATIC);
14841483
break;
14851484
default:
14861485
*cap = false;
@@ -1548,8 +1547,6 @@ static u8 qed_dcbnl_getdcbx(struct qed_dev *cdev)
15481547
if (!dcbx_info)
15491548
return 0;
15501549

1551-
if (dcbx_info->operational.enabled)
1552-
mode |= DCB_CAP_DCBX_LLD_MANAGED;
15531550
if (dcbx_info->operational.ieee)
15541551
mode |= DCB_CAP_DCBX_VER_IEEE;
15551552
if (dcbx_info->operational.cee)

drivers/net/ethernet/qlogic/qed/qed_ll2.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,9 @@ void qed_ll2b_complete_rx_packet(void *cxt, struct qed_ll2_comp_rx_data *data)
201201

202202
skb = build_skb(buffer->data, 0);
203203
if (!skb) {
204-
rc = -ENOMEM;
205-
goto out_post;
204+
DP_INFO(cdev, "Failed to build SKB\n");
205+
kfree(buffer->data);
206+
goto out_post1;
206207
}
207208

208209
data->u.placement_offset += NET_SKB_PAD;
@@ -224,8 +225,14 @@ void qed_ll2b_complete_rx_packet(void *cxt, struct qed_ll2_comp_rx_data *data)
224225
cdev->ll2->cbs->rx_cb(cdev->ll2->cb_cookie, skb,
225226
data->opaque_data_0,
226227
data->opaque_data_1);
228+
} else {
229+
DP_VERBOSE(p_hwfn, (NETIF_MSG_RX_STATUS | NETIF_MSG_PKTDATA |
230+
QED_MSG_LL2 | QED_MSG_STORAGE),
231+
"Dropping the packet\n");
232+
kfree(buffer->data);
227233
}
228234

235+
out_post1:
229236
/* Update Buffer information and update FW producer */
230237
buffer->data = new_data;
231238
buffer->phys_addr = new_phys_addr;

drivers/net/ethernet/qlogic/qed/qed_main.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -567,8 +567,16 @@ static irqreturn_t qed_single_int(int irq, void *dev_instance)
567567
/* Fastpath interrupts */
568568
for (j = 0; j < 64; j++) {
569569
if ((0x2ULL << j) & status) {
570-
hwfn->simd_proto_handler[j].func(
571-
hwfn->simd_proto_handler[j].token);
570+
struct qed_simd_fp_handler *p_handler =
571+
&hwfn->simd_proto_handler[j];
572+
573+
if (p_handler->func)
574+
p_handler->func(p_handler->token);
575+
else
576+
DP_NOTICE(hwfn,
577+
"Not calling fastpath handler as it is NULL [handler #%d, status 0x%llx]\n",
578+
j, status);
579+
572580
status &= ~(0x2ULL << j);
573581
rc = IRQ_HANDLED;
574582
}

drivers/net/ethernet/stmicro/stmmac/Kconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ config DWMAC_ROCKCHIP
111111
config DWMAC_SOCFPGA
112112
tristate "SOCFPGA dwmac support"
113113
default ARCH_SOCFPGA
114-
depends on OF && (ARCH_SOCFPGA || COMPILE_TEST)
114+
depends on OF && (ARCH_SOCFPGA || ARCH_STRATIX10 || COMPILE_TEST)
115115
select MFD_SYSCON
116116
help
117117
Support for ethernet controller on Altera SOCFPGA

drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ struct socfpga_dwmac {
5555
struct device *dev;
5656
struct regmap *sys_mgr_base_addr;
5757
struct reset_control *stmmac_rst;
58+
struct reset_control *stmmac_ocp_rst;
5859
void __iomem *splitter_base;
5960
bool f2h_ptp_ref_clk;
6061
struct tse_pcs pcs;
@@ -262,8 +263,8 @@ static int socfpga_dwmac_set_phy_mode(struct socfpga_dwmac *dwmac)
262263
val = SYSMGR_EMACGRP_CTRL_PHYSEL_ENUM_GMII_MII;
263264

264265
/* Assert reset to the enet controller before changing the phy mode */
265-
if (dwmac->stmmac_rst)
266-
reset_control_assert(dwmac->stmmac_rst);
266+
reset_control_assert(dwmac->stmmac_ocp_rst);
267+
reset_control_assert(dwmac->stmmac_rst);
267268

268269
regmap_read(sys_mgr_base_addr, reg_offset, &ctrl);
269270
ctrl &= ~(SYSMGR_EMACGRP_CTRL_PHYSEL_MASK << reg_shift);
@@ -288,8 +289,8 @@ static int socfpga_dwmac_set_phy_mode(struct socfpga_dwmac *dwmac)
288289
/* Deassert reset for the phy configuration to be sampled by
289290
* the enet controller, and operation to start in requested mode
290291
*/
291-
if (dwmac->stmmac_rst)
292-
reset_control_deassert(dwmac->stmmac_rst);
292+
reset_control_deassert(dwmac->stmmac_ocp_rst);
293+
reset_control_deassert(dwmac->stmmac_rst);
293294
if (phymode == PHY_INTERFACE_MODE_SGMII) {
294295
if (tse_pcs_init(dwmac->pcs.tse_pcs_base, &dwmac->pcs) != 0) {
295296
dev_err(dwmac->dev, "Unable to initialize TSE PCS");
@@ -324,6 +325,15 @@ static int socfpga_dwmac_probe(struct platform_device *pdev)
324325
goto err_remove_config_dt;
325326
}
326327

328+
dwmac->stmmac_ocp_rst = devm_reset_control_get_optional(dev, "stmmaceth-ocp");
329+
if (IS_ERR(dwmac->stmmac_ocp_rst)) {
330+
ret = PTR_ERR(dwmac->stmmac_ocp_rst);
331+
dev_err(dev, "error getting reset control of ocp %d\n", ret);
332+
goto err_remove_config_dt;
333+
}
334+
335+
reset_control_deassert(dwmac->stmmac_ocp_rst);
336+
327337
ret = socfpga_dwmac_parse_data(dwmac, dev);
328338
if (ret) {
329339
dev_err(dev, "Unable to parse OF data\n");

drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -928,6 +928,7 @@ static void stmmac_check_pcs_mode(struct stmmac_priv *priv)
928928
static int stmmac_init_phy(struct net_device *dev)
929929
{
930930
struct stmmac_priv *priv = netdev_priv(dev);
931+
u32 tx_cnt = priv->plat->tx_queues_to_use;
931932
struct phy_device *phydev;
932933
char phy_id_fmt[MII_BUS_ID_SIZE + 3];
933934
char bus_id[MII_BUS_ID_SIZE];
@@ -968,6 +969,15 @@ static int stmmac_init_phy(struct net_device *dev)
968969
phydev->advertising &= ~(SUPPORTED_1000baseT_Half |
969970
SUPPORTED_1000baseT_Full);
970971

972+
/*
973+
* Half-duplex mode not supported with multiqueue
974+
* half-duplex can only works with single queue
975+
*/
976+
if (tx_cnt > 1)
977+
phydev->supported &= ~(SUPPORTED_1000baseT_Half |
978+
SUPPORTED_100baseT_Half |
979+
SUPPORTED_10baseT_Half);
980+
971981
/*
972982
* Broken HW is sometimes missing the pull-up resistor on the
973983
* MDIO line, which results in reads to non-existent devices returning

drivers/net/ethernet/sun/sungem.c

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,7 @@
6060
#include <linux/sungem_phy.h>
6161
#include "sungem.h"
6262

63-
/* Stripping FCS is causing problems, disabled for now */
64-
#undef STRIP_FCS
63+
#define STRIP_FCS
6564

6665
#define DEFAULT_MSG (NETIF_MSG_DRV | \
6766
NETIF_MSG_PROBE | \
@@ -435,7 +434,7 @@ static int gem_rxmac_reset(struct gem *gp)
435434
writel(desc_dma & 0xffffffff, gp->regs + RXDMA_DBLOW);
436435
writel(RX_RING_SIZE - 4, gp->regs + RXDMA_KICK);
437436
val = (RXDMA_CFG_BASE | (RX_OFFSET << 10) |
438-
((14 / 2) << 13) | RXDMA_CFG_FTHRESH_128);
437+
(ETH_HLEN << 13) | RXDMA_CFG_FTHRESH_128);
439438
writel(val, gp->regs + RXDMA_CFG);
440439
if (readl(gp->regs + GREG_BIFCFG) & GREG_BIFCFG_M66EN)
441440
writel(((5 & RXDMA_BLANK_IPKTS) |
@@ -760,7 +759,6 @@ static int gem_rx(struct gem *gp, int work_to_do)
760759
struct net_device *dev = gp->dev;
761760
int entry, drops, work_done = 0;
762761
u32 done;
763-
__sum16 csum;
764762

765763
if (netif_msg_rx_status(gp))
766764
printk(KERN_DEBUG "%s: rx interrupt, done: %d, rx_new: %d\n",
@@ -855,9 +853,13 @@ static int gem_rx(struct gem *gp, int work_to_do)
855853
skb = copy_skb;
856854
}
857855

858-
csum = (__force __sum16)htons((status & RXDCTRL_TCPCSUM) ^ 0xffff);
859-
skb->csum = csum_unfold(csum);
860-
skb->ip_summed = CHECKSUM_COMPLETE;
856+
if (likely(dev->features & NETIF_F_RXCSUM)) {
857+
__sum16 csum;
858+
859+
csum = (__force __sum16)htons((status & RXDCTRL_TCPCSUM) ^ 0xffff);
860+
skb->csum = csum_unfold(csum);
861+
skb->ip_summed = CHECKSUM_COMPLETE;
862+
}
861863
skb->protocol = eth_type_trans(skb, gp->dev);
862864

863865
napi_gro_receive(&gp->napi, skb);
@@ -1761,7 +1763,7 @@ static void gem_init_dma(struct gem *gp)
17611763
writel(0, gp->regs + TXDMA_KICK);
17621764

17631765
val = (RXDMA_CFG_BASE | (RX_OFFSET << 10) |
1764-
((14 / 2) << 13) | RXDMA_CFG_FTHRESH_128);
1766+
(ETH_HLEN << 13) | RXDMA_CFG_FTHRESH_128);
17651767
writel(val, gp->regs + RXDMA_CFG);
17661768

17671769
writel(desc_dma >> 32, gp->regs + RXDMA_DBHI);
@@ -2985,8 +2987,8 @@ static int gem_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
29852987
pci_set_drvdata(pdev, dev);
29862988

29872989
/* We can do scatter/gather and HW checksum */
2988-
dev->hw_features = NETIF_F_SG | NETIF_F_HW_CSUM;
2989-
dev->features |= dev->hw_features | NETIF_F_RXCSUM;
2990+
dev->hw_features = NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_RXCSUM;
2991+
dev->features = dev->hw_features;
29902992
if (pci_using_dac)
29912993
dev->features |= NETIF_F_HIGHDMA;
29922994

drivers/net/ethernet/ti/davinci_emac.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1385,6 +1385,11 @@ static int emac_devioctl(struct net_device *ndev, struct ifreq *ifrq, int cmd)
13851385
return -EOPNOTSUPP;
13861386
}
13871387

1388+
static int match_first_device(struct device *dev, void *data)
1389+
{
1390+
return !strncmp(dev_name(dev), "davinci_mdio", 12);
1391+
}
1392+
13881393
/**
13891394
* emac_dev_open - EMAC device open
13901395
* @ndev: The DaVinci EMAC network adapter
@@ -1484,8 +1489,14 @@ static int emac_dev_open(struct net_device *ndev)
14841489

14851490
/* use the first phy on the bus if pdata did not give us a phy id */
14861491
if (!phydev && !priv->phy_id) {
1487-
phy = bus_find_device_by_name(&mdio_bus_type, NULL,
1488-
"davinci_mdio");
1492+
/* NOTE: we can't use bus_find_device_by_name() here because
1493+
* the device name is not guaranteed to be 'davinci_mdio'. On
1494+
* some systems it can be 'davinci_mdio.0' so we need to use
1495+
* strncmp() against the first part of the string to correctly
1496+
* match it.
1497+
*/
1498+
phy = bus_find_device(&mdio_bus_type, NULL, NULL,
1499+
match_first_device);
14891500
if (phy) {
14901501
priv->phy_id = dev_name(phy);
14911502
if (!priv->phy_id || !*priv->phy_id)

drivers/net/hamradio/bpqether.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,6 @@
8989
static const char banner[] __initconst = KERN_INFO \
9090
"AX.25: bpqether driver version 004\n";
9191

92-
static char bcast_addr[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
93-
94-
static char bpq_eth_addr[6];
95-
9692
static int bpq_rcv(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
9793
static int bpq_device_event(struct notifier_block *, unsigned long, void *);
9894

@@ -501,8 +497,8 @@ static int bpq_new_device(struct net_device *edev)
501497
bpq->ethdev = edev;
502498
bpq->axdev = ndev;
503499

504-
memcpy(bpq->dest_addr, bcast_addr, sizeof(bpq_eth_addr));
505-
memcpy(bpq->acpt_addr, bcast_addr, sizeof(bpq_eth_addr));
500+
eth_broadcast_addr(bpq->dest_addr);
501+
eth_broadcast_addr(bpq->acpt_addr);
506502

507503
err = register_netdevice(ndev);
508504
if (err)

drivers/net/ipvlan/ipvlan_main.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -693,6 +693,7 @@ void ipvlan_link_setup(struct net_device *dev)
693693
{
694694
ether_setup(dev);
695695

696+
dev->max_mtu = ETH_MAX_MTU;
696697
dev->priv_flags &= ~(IFF_XMIT_DST_RELEASE | IFF_TX_SKB_SHARING);
697698
dev->priv_flags |= IFF_UNICAST_FLT | IFF_NO_QUEUE;
698699
dev->netdev_ops = &ipvlan_netdev_ops;

0 commit comments

Comments
 (0)