[ovs-dev] [PATCH 1/7] ofproto: Consider datapath_type when looking for internal ports.
Daniele Di Proietto
diproiettod at vmware.com
Sat Jul 30 01:22:46 UTC 2016
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 at vmware.com>
---
ofproto/ofproto.c | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
index 8e59c69..088f91a 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;
}
--
2.8.1
More information about the dev
mailing list