Normally all the ports have the same mtu anyhow, so there is little
advantage in keeping track of the maximum mtu on a per-bridge basis.  In
upcoming commits, tracking mtu will require more locking and present
even less advantage (because the packet buffer will become per-thread, so
that reallocating once per thread becomes essentially a null cost).

Signed-off-by: Ben Pfaff <b...@nicira.com>
---
 lib/dpif-netdev.c |   20 ++++++++------------
 1 file changed, 8 insertions(+), 12 deletions(-)

diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 03121ec..b890e4f 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -93,7 +93,6 @@ struct dp_netdev {
     char *name;
     int open_cnt;
     bool destroyed;
-    int max_mtu;                /* Maximum MTU of any port added so far. */
 
     struct dp_netdev_queue queues[N_QUEUES];
     struct classifier cls;      /* Classifier. */
@@ -288,7 +287,6 @@ create_dp_netdev(const char *name, const struct dpif_class 
*class,
     dp->class = class;
     dp->name = xstrdup(name);
     dp->open_cnt = 0;
-    dp->max_mtu = ETH_PAYLOAD_MAX;
     for (i = 0; i < N_QUEUES; i++) {
         dp->queues[i].head = dp->queues[i].tail = 0;
     }
@@ -433,7 +431,6 @@ do_add_port(struct dp_netdev *dp, const char *devname, 
const char *type,
     struct netdev_rx *rx;
     enum netdev_flags flags;
     const char *open_type;
-    int mtu;
     int error;
 
     /* XXX reject devices already in some dp_netdev. */
@@ -476,11 +473,6 @@ do_add_port(struct dp_netdev *dp, const char *devname, 
const char *type,
     port->rx = rx;
     port->type = xstrdup(type);
 
-    error = netdev_get_mtu(netdev, &mtu);
-    if (!error && mtu > dp->max_mtu) {
-        dp->max_mtu = mtu;
-    }
-
     hmap_insert(&dp->ports, &port->node, hash_int(odp_to_u32(port_no), 0));
     seq_change(dp->port_seq);
 
@@ -1301,18 +1293,22 @@ dpif_netdev_run(struct dpif *dpif)
     struct dp_netdev_port *port;
     struct dp_netdev *dp;
     struct ofpbuf packet;
-    size_t buf_size;
 
     ovs_mutex_lock(&dp_netdev_mutex);
     dp = get_dp_netdev(dpif);
     ofpbuf_init(&packet, 0);
 
-    buf_size = DP_NETDEV_HEADROOM + VLAN_ETH_HEADER_LEN + dp->max_mtu;
-
     HMAP_FOR_EACH (port, node, &dp->ports) {
+        int buf_size;
         int error;
+        int mtu;
+
+        error = netdev_get_mtu(port->netdev, &mtu);
+        if (error) {
+            mtu = ETH_PAYLOAD_MAX;
+        }
+        buf_size = DP_NETDEV_HEADROOM + VLAN_ETH_HEADER_LEN + mtu;
 
-        /* Reset packet contents. Packet data may have been stolen. */
         ofpbuf_clear(&packet);
         ofpbuf_reserve_with_tailroom(&packet, DP_NETDEV_HEADROOM, buf_size);
 
-- 
1.7.10.4

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to