connection tracking entry.
* New "ct-set-maxconns", "ct-get-maxconns", and "ct-get-nconns" commands
for userspace datapath.
+ - No longer send packets to the Linux TAP device if it's DOWN unless it is
+ in another networking namespace.
- DPDK:
* Add support for DPDK v17.11
* Add support for vHost IOMMU
/* For devices of class netdev_tap_class only. */
int tap_fd;
+ bool present; /* If the device is present in the namespace */
+ uint64_t tx_dropped; /* tap device can drop if the iface is down */
};
struct netdev_rxq_linux {
dev->ifindex = change->if_index;
dev->cache_valid |= VALID_IFINDEX;
dev->get_ifindex_error = 0;
+ dev->present = true;
} else {
netdev_linux_changed(dev, change->ifi_flags, 0);
+ dev->present = false;
}
} else if (rtnetlink_type_is_rtnlgrp_addr(change->nlmsg_type)) {
/* Invalidates in4, in6. */
{
struct netdev_linux *netdev = netdev_linux_cast(netdev_);
struct dp_packet *packet;
+
+ /* The Linux tap driver returns EIO if the device is not up,
+ * so if the device is not up, don't waste time sending it.
+ * However, if the device is in another network namespace
+ * then OVS can't retrieve the state. In that case, send the
+ * packets anyway. */
+ if (netdev->present && !(netdev->ifi_flags & IFF_UP)) {
+ netdev->tx_dropped += dp_packet_batch_size(batch);
+ return 0;
+ }
+
DP_PACKET_BATCH_FOR_EACH (packet, batch) {
size_t size = dp_packet_size(packet);
ssize_t retval;
stats->multicast += dev_stats.multicast;
stats->collisions += dev_stats.collisions;
}
+ stats->tx_dropped += netdev->tx_dropped;
ovs_mutex_unlock(&netdev->mutex);
return error;
imprecisely for internal interfaces.</dd>
<dt><code>tap</code></dt>
- <dd>A TUN/TAP device managed by Open vSwitch.</dd>
+ <dd>
+ <p>
+ A TUN/TAP device managed by Open vSwitch.
+ </p>
+ <p>
+ Open vSwitch checks the interface state before send packets
+ to the device. When it is <code>down</code>, the packets are
+ dropped and the tx_dropped statistic is updated accordingly.
+ Older versions of Open vSwitch did not check the interface state
+ and then the tx_packets was incremented along with tx_dropped.
+ </p>
+ </dd>
<dt><code>geneve</code></dt>
<dd>