diff options
author | Daniele Di Proietto <diproiettod@vmware.com> | 2016-08-09 17:01:14 +0100 |
---|---|---|
committer | Daniele Di Proietto <diproiettod@vmware.com> | 2016-08-09 09:39:45 -0700 |
commit | 86fce577ec1a05c92764878ef6a423c75ff18149 (patch) | |
tree | 299aa4bae466851599712a88ba5dfc05fbe89d97 /ofproto | |
parent | 9f4ecd654dbcb88b15a424445184591fc887537e (diff) | |
download | openvswitch-86fce577ec1a05c92764878ef6a423c75ff18149.tar.gz |
ofproto: Consider datapath_type when looking for internal ports.
Interfaces with type "internal" end up having a netdev with type "tap"
in the dpif-netdev datapath, so a strcmp will fail to match internal
interfaces.
We can translate the types with ofproto_port_open_type() before calling
strcmp to fix this.
This fixes a minor issue where internal interfaces are considered
non-internal in the userspace datapath for the purpose of adjusting the
MTU.
Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
Acked-by: Thadeu Lima de Souza Cascardo <cascardo@redhat.com>
Diffstat (limited to 'ofproto')
-rw-r--r-- | ofproto/ofproto.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c index 8e59c699c..088f91af4 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -220,7 +220,8 @@ static void learned_cookies_flush(struct ofproto *, struct ovs_list *dead_cookie /* ofport. */ static void ofport_destroy__(struct ofport *) OVS_EXCLUDED(ofproto_mutex); static void ofport_destroy(struct ofport *, bool del); -static inline bool ofport_is_internal(const struct ofport *); +static inline bool ofport_is_internal(const struct ofproto *, + const struct ofport *); static int update_port(struct ofproto *, const char *devname); static int init_ports(struct ofproto *); @@ -2465,7 +2466,7 @@ static void ofport_remove(struct ofport *ofport) { struct ofproto *p = ofport->ofproto; - bool is_internal = ofport_is_internal(ofport); + bool is_internal = ofport_is_internal(p, ofport); connmgr_send_port_status(ofport->ofproto->connmgr, NULL, &ofport->pp, OFPPR_DELETE); @@ -2751,9 +2752,10 @@ init_ports(struct ofproto *p) } static inline bool -ofport_is_internal(const struct ofport *port) +ofport_is_internal(const struct ofproto *p, const struct ofport *port) { - return !strcmp(netdev_get_type(port->netdev), "internal"); + return !strcmp(netdev_get_type(port->netdev), + ofproto_port_open_type(p->type, "internal")); } /* Find the minimum MTU of all non-datapath devices attached to 'p'. @@ -2770,7 +2772,7 @@ find_min_mtu(struct ofproto *p) /* Skip any internal ports, since that's what we're trying to * set. */ - if (ofport_is_internal(ofport)) { + if (ofport_is_internal(p, ofport)) { continue; } @@ -2797,7 +2799,7 @@ update_mtu(struct ofproto *p, struct ofport *port) port->mtu = 0; return; } - if (ofport_is_internal(port)) { + if (ofport_is_internal(p, port)) { if (dev_mtu > p->min_mtu) { if (!netdev_set_mtu(port->netdev, p->min_mtu)) { dev_mtu = p->min_mtu; @@ -2827,7 +2829,7 @@ update_mtu_ofproto(struct ofproto *p) HMAP_FOR_EACH (ofport, hmap_node, &p->ports) { struct netdev *netdev = ofport->netdev; - if (ofport_is_internal(ofport)) { + if (ofport_is_internal(p, ofport)) { if (!netdev_set_mtu(netdev, p->min_mtu)) { ofport->mtu = p->min_mtu; } |