mirror of
https://github.com/openvswitch/ovs
synced 2025-10-29 15:28:56 +00:00
xenserver: Update all external_ids in tap interfaces.
Commit 400430 "xenserver: Give tap devices iface-ids." copies the iface-id from vifs to their related tap device. It turns out this is not sufficient, so this commit copies all relevant external_ids over. Requested-by: Pankaj Thakkar <thakkar@nicira.com> Signed-off-by: Ethan Jackson <ethan@nicira.com> Bug #5954.
This commit is contained in:
@@ -124,8 +124,12 @@ def call_vsctl(args):
|
||||
s_log.warning("Couldn't call ovs-vsctl")
|
||||
|
||||
def set_external_id(table, record, key, value):
|
||||
col = 'external-ids:"' + key + '"="' + value + '"'
|
||||
call_vsctl(["set", table, record, col])
|
||||
if value:
|
||||
col = 'external-ids:"%s"="%s"' % (key, value)
|
||||
call_vsctl(["set", table, record, col])
|
||||
else:
|
||||
call_vsctl(["remove", table, record, "external-ids", key])
|
||||
|
||||
|
||||
# XenServer does not call interface-reconfigure on internal networks,
|
||||
# which is where the fail-mode would normally be set.
|
||||
@@ -235,6 +239,27 @@ def handler(signum, frame):
|
||||
if (signum == signal.SIGHUP):
|
||||
force_run = True
|
||||
|
||||
def update_tap_from_vif(idl, tap_name, vif_name):
|
||||
ifaces = idl.data["Interface"]
|
||||
tap = None
|
||||
vif = None
|
||||
|
||||
for i in ifaces.values():
|
||||
name = i.name.as_scalar().strip('"')
|
||||
if name == tap_name:
|
||||
tap = i
|
||||
elif name == vif_name:
|
||||
vif = i
|
||||
|
||||
if vif and tap:
|
||||
vxid = vif.external_ids
|
||||
txid = tap.external_ids
|
||||
|
||||
keys = ["attached-mac", "xs-network-uuid", "xs-vif-uuid", "xs-vm-uuid"]
|
||||
for k in keys:
|
||||
if vxid.get(k) != txid.get(k):
|
||||
set_external_id("Interface", tap_name, k, vxid.get(k))
|
||||
|
||||
def main(argv):
|
||||
global force_run
|
||||
|
||||
@@ -319,6 +344,8 @@ def main(argv):
|
||||
new_interfaces[vif]["iface-status"] = "inactive"
|
||||
new_interfaces[name]["iface-status"] = "active"
|
||||
|
||||
update_tap_from_vif(idl, name, vif)
|
||||
|
||||
if bridges != new_bridges:
|
||||
for name,ids in new_bridges.items():
|
||||
if name not in bridges:
|
||||
|
||||
Reference in New Issue
Block a user