[ovs-dev] [PATCH v2] vswitchd: Make Interface's ofport a persistent column.
Gurucharan Shetty
shettyg at nicira.com
Tue Nov 20 11:40:50 UTC 2012
From: Gurucharan Shetty <shettyg at nicira.com>
Currently, the 'ofport' column in Interface table is
ephemeral and is populated by vswitchd everytime it is
started or when a new interface is created with vswitchd
running.
Making it persistent lets vswitchd try and assign the
same ofport number to a particular interface across
restarts. This is just a fallback option when
'ofport_request' column is empty.
Signed-off-by: Gurucharan Shetty <gshetty at nicira.com>
---
vswitchd/bridge.c | 15 ++++++++++-----
vswitchd/vswitch.ovsschema | 7 +++----
2 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
index d1e24d0..8f16432 100644
--- a/vswitchd/bridge.c
+++ b/vswitchd/bridge.c
@@ -247,6 +247,7 @@ static void iface_refresh_cfm_stats(struct iface *);
static void iface_refresh_stats(struct iface *);
static void iface_refresh_status(struct iface *);
static bool iface_is_synthetic(const struct iface *);
+static int64_t iface_pick_ofport(const struct ovsrec_interface *);
/* Linux VLAN device support (e.g. "eth0.10" for VLAN 10.)
*
@@ -295,8 +296,7 @@ bridge_init_ofproto(const struct ovsrec_open_vswitch *cfg)
iface_hint = xmalloc(sizeof *iface_hint);
iface_hint->br_name = br_cfg->name;
iface_hint->br_type = br_cfg->datapath_type;
- iface_hint->ofp_port = if_cfg->n_ofport_request ?
- *if_cfg->ofport_request : OFPP_NONE;
+ iface_hint->ofp_port = iface_pick_ofport(if_cfg);
shash_add(&iface_hints, if_cfg->name, iface_hint);
}
@@ -322,7 +322,6 @@ bridge_init(const char *remote)
idl = ovsdb_idl_create(remote, &ovsrec_idl_class, true);
idl_seqno = ovsdb_idl_get_seqno(idl);
ovsdb_idl_set_lock(idl, "ovs_vswitchd");
- ovsdb_idl_verify_write_only(idl);
ovsdb_idl_omit_alert(idl, &ovsrec_open_vswitch_col_cur_cfg);
ovsdb_idl_omit_alert(idl, &ovsrec_open_vswitch_col_statistics);
@@ -347,7 +346,6 @@ bridge_init(const char *remote)
ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_link_state);
ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_link_resets);
ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_mtu);
- ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_ofport);
ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_statistics);
ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_status);
ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_cfm_fault);
@@ -2545,7 +2543,7 @@ bridge_queue_if_cfg(struct bridge *br,
if_cfg->cfg = cfg;
if_cfg->parent = parent;
- if_cfg->ofport = cfg->n_ofport_request ? *cfg->ofport_request : OFPP_NONE;
+ if_cfg->ofport = iface_pick_ofport(cfg);
hmap_insert(&br->if_cfg_todo, &if_cfg->hmap_node,
hash_string(if_cfg->cfg->name, 0));
}
@@ -3478,6 +3476,13 @@ iface_is_synthetic(const struct iface *iface)
return ovsdb_idl_row_is_synthetic(&iface->cfg->header_);
}
+static int64_t
+iface_pick_ofport(const struct ovsrec_interface *cfg)
+{
+ int64_t ofport = cfg->n_ofport ? *cfg->ofport : OFPP_NONE;
+ return cfg->n_ofport_request ? *cfg->ofport_request : ofport;
+}
+
/* Port mirroring. */
diff --git a/vswitchd/vswitch.ovsschema b/vswitchd/vswitch.ovsschema
index fd2bb4b..293a11b 100644
--- a/vswitchd/vswitch.ovsschema
+++ b/vswitchd/vswitch.ovsschema
@@ -1,6 +1,6 @@
{"name": "Open_vSwitch",
- "version": "6.11.1",
- "cksum": "2684374538 17324",
+ "version": "6.11.2",
+ "cksum": "2033079075 17296",
"tables": {
"Open_vSwitch": {
"columns": {
@@ -180,8 +180,7 @@
"external_ids": {
"type": {"key": "string", "value": "string", "min": 0, "max": "unlimited"}},
"ofport": {
- "type": {"key": "integer", "min": 0, "max": 1},
- "ephemeral": true},
+ "type": {"key": "integer", "min": 0, "max": 1}},
"ofport_request": {
"type": {
"key": {"type": "integer",
--
1.7.9.5
More information about the dev
mailing list