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