標籤:add setup header lis struct flags code 網卡 against
在bond初始化的時候,我們可以看到如下屬性:
/* don‘t acquire bond device‘s netif_tx_lock when transmitting */ bond_dev->features |= NETIF_F_LLTX; 在lo口設定的時候,也可以看到這個屬性:
static void loopback_setup(struct net_device *dev){ dev->mtu = 64 * 1024; dev->hard_header_len = ETH_HLEN; /* 14 */ dev->addr_len = ETH_ALEN; /* 6 */ dev->type = ARPHRD_LOOPBACK; /* 0x0001*/ dev->flags = IFF_LOOPBACK; dev->priv_flags |= IFF_LIVE_ADDR_CHANGE | IFF_NO_QUEUE; netif_keep_dst(dev); dev->hw_features = NETIF_F_GSO_SOFTWARE; dev->features = NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_GSO_SOFTWARE | NETIF_F_HW_CSUM | NETIF_F_RXCSUM | NETIF_F_SCTP_CRC | NETIF_F_HIGHDMA | NETIF_F_LLTX | NETIF_F_NETNS_LOCAL | NETIF_F_VLAN_CHALLENGED | NETIF_F_LOOPBACK; dev->ethtool_ops = &loopback_ethtool_ops; dev->header_ops = ð_header_ops; dev->netdev_ops = &loopback_ops; dev->destructor = loopback_dev_free;}
NETIF_F_LLTX 屬性代表的是,我們在發包的時候,不需要擷取鎖。
而對於非虛擬設備,如實際網卡,則這個屬性一般是不設定的,也就是需要擷取TX的鎖。
不過,也有注釋說後面的驅動最好不要用這個特性:
* LLTX driver (deprecated for hardware drivers)NETIF_F_LLTX should be set in drivers that implement their own locking intransmit path or don‘t need locking at all (e.g. software tunnels).In ndo_start_xmit, it is recommended to use a try_lock and returnNETDEV_TX_LOCKED when the spin lock fails. The locking should also properlyprotect against other callbacks (the rules you need to find out).Don‘t use it for new drivers.
NETIF_F_LLTX 的屬性