Yep, there is a nasty bug in setup-vif-rules.
See https://github.com/xen-org/xen-api/pull/953
That 'hardcoded' name is not simply 'not always works', it combines
'xenbr' line with devid (wich is network interface number in domU, not
the bridge number).
So the code is completely broken and works only in case 'xenbr0, devid=0'.
Here proper patch. (If you'll test is with xapi interfaces, please
report results):
diff --git a/scripts/setup-vif-rules b/scripts/setup-vif-rules
index 4ca7230..199b3e1 100755
--- a/scripts/setup-vif-rules
+++ b/scripts/setup-vif-rules
@@ -229,10 +229,15 @@ def create_vswitch_rules(bridge_name, port, config):
# Drop everything else.
add_flow(bridge_name,
"in_port=%s,priority=4000,idle_timeout=0,action=drop
+def get_bridge_name_vswitch(vif_name):
+ '''return bridge vif belong to'''
+ (rc, stdout, stderr) = doexec([vsctl, "iface-to-br", vif_name ])
+ return stdout.readline().strip()
+
def handle_vswitch(vif_type, domid, devid, action):
if (action == "clear") or (action == "filter"):
- bridge_name = "xenbr%s" % devid
vif_name = "%s%s.%s" % (vif_type, domid, devid)
+ bridge_name = get_bridge_name_vswitch(vif_name)
ip_link_set(vif_name, "down")
port = get_vswitch_port(vif_name)
clear_vswitch_rules(bridge_name, port)
30.12.2012 21:19, Tomas Sulo ?????:
Hi,
I think I've found a bug in the setup-vif-rules script. I have
configured locking mode on one VM:
/ locking-mode ( RW): locked
ipv4-allowed (SRW): 192.168.1.13
ipv6-allowed (SRW):/
However I found out that even after I change the IP on the VM it's
still available on the network.
I've checked the logs on the server and I found this for example:
/python: /opt/xensource/libexec/setup-vif-rules[18647] -
['/usr/bin/ovs-ofctl', 'add-flow', 'xenbr0',
'in_port=3,priority=8000,dl_type=0x
0800,nw_proto=0x11,tp_dst=67,dl_src=96:7e:2b:1c:45:81,idle_timeout=0,action=norm
al']/
Notice the xenbr0 interface.
/ovs-ofctl dump-flows xenbr0
ovs-ofctl: xenbr0 is not a bridge or a socket/
xenbr0 doesn't even exist, instead it should be applied to xapi2 in
this case.
The problem seems to be in the handle_vswitch definition in the
setup-vif-rules script:
/def handle_vswitch(vif_type, domid, devid, action):
if (action == "clear") or (action == "filter"):
bridge_name = "xenbr%s" % devid
vif_name = "%s%s.%s" % (vif_type, domid, devid)
ip_link_set(vif_name, "down")
port = get_vswitch_port(vif_name)
clear_vswitch_rules(bridge_name, port)
if action == "filter":
config = get_locking_config(domid, devid)
locking_mode = config["locking_mode"]
if locking_mode == "locked":
create_vswitch_rules(bridge_name, port, config)
if locking_mode in ["locked", "unlocked"]:
ip_link_set(vif_name, "up")
if action == "clear":
ip_link_set(vif_name, "up")/
Notice the hardcoded xenbr? After changing to /bridge_name = "xapi2"
/everything works fine. In my case it's always xapi2. I haven't had
time for an elegant solution.
After this I've started the VM again and everything was working as it
should. After I changed the IP of the VM it was no longer available on
the network.
And here are the ovs-ofctl flows:
/ ovs-ofctl dump-flows xapi2
NXST_FLOW reply (xid=0x4):
cookie=0x0, duration=55.637s, table=0, n_packets=0, n_bytes=0,
priority=4000,in_port=4 actions=drop
cookie=0x0, duration=55.769s, table=0, n_packets=5, n_bytes=270,
priority=6000,ip,in_port=4,dl_src=96:7e:2b:1c:45:81,nw_src=192.168.1.13 actions=NORMAL
cookie=0x0, duration=55.795s, table=0, n_packets=0, n_bytes=0,
priority=7000,arp,in_port=4,dl_src=96:7e:2b:1c:45:81,nw_src=0.0.0.0,arp_sha=96:7e:2b:1c:45:81
actions=NORMAL
cookie=0x0, duration=55.782s, table=0, n_packets=3, n_bytes=126,
priority=7000,arp,in_port=4,dl_src=96:7e:2b:1c:45:81,nw_src=192.168.1.13,arp_sha=96:7e:2b:1c:45:81
actions=NORMAL
cookie=0x0, duration=55.808s, table=0, n_packets=0, n_bytes=0,
priority=8000,udp,in_port=4,dl_src=96:7e:2b:1c:45:81,tp_dst=67
actions=NORMAL
cookie=0x0, duration=3788.414s, table=0, n_packets=309587,
n_bytes=91537264, priority=0 actions=NORMAL
cookie=0x0, duration=55.729s, table=0, n_packets=0, n_bytes=0,
priority=6000,icmp6,in_port=4,icmp_type=134 actions=drop
cookie=0x0, duration=55.703s, table=0, n_packets=0, n_bytes=0,
priority=6000,icmp6,in_port=4,icmp_type=146 actions=drop
cookie=0x0, duration=55.742s, table=0, n_packets=0, n_bytes=0,
priority=7000,icmp6,in_port=4,icmp_type=136 actions=drop
cookie=0x0, duration=55.65s, table=0, n_packets=0, n_bytes=0,
priority=6000,icmp6,in_port=4,icmp_type=153 actions=drop
cookie=0x0, duration=55.755s, table=0, n_packets=0, n_bytes=0,
priority=7000,icmp6,in_port=4,icmp_type=135 actions=drop
cookie=0x0, duration=55.716s, table=0, n_packets=0, n_bytes=0,
priority=6000,icmp6,in_port=4,icmp_type=137 actions=drop
cookie=0x0, duration=55.677s, table=0, n_packets=0, n_bytes=0,
priority=6000,icmp6,in_port=4,icmp_type=151 actions=drop
cookie=0x0, duration=55.69s, table=0, n_packets=0, n_bytes=0,
priority=6000,icmp6,in_port=4,icmp_type=147 actions=drop
cookie=0x0, duration=55.664s, table=0, n_packets=0, n_bytes=0,
priority=6000,icmp6,in_port=4,icmp_type=152 actions=drop/
I've seen on the internet that more users are facing this issue so
maybe this helps. I hope I didn't write anything stupid, I'm quite new
to XCP. :)
Tomas
_______________________________________________
Xen-api mailing list
Xen-api@lists.xen.org
http://lists.xen.org/cgi-bin/mailman/listinfo/xen-api
_______________________________________________
Xen-api mailing list
Xen-api@lists.xen.org
http://lists.xen.org/cgi-bin/mailman/listinfo/xen-api