diff --git a/tools/hotplug/Linux/vif-openvswitch b/tools/hotplug/Linux/vif-openvswitch index 18bfb6cefb..ae3399bd1d 100644 --- a/tools/hotplug/Linux/vif-openvswitch +++ b/tools/hotplug/Linux/vif-openvswitch @@ -46,14 +46,22 @@ openvswitch_external_id() { openvswitch_external_id_all() { local dev=$1 - local frontend_id=$(xenstore_read "$XENBUS_PATH/frontend-id") - local vm_path=$(xenstore_read "/local/domain/${frontend_id}/vm") - local name=$(xenstore_read "${vm_path}/name") - openvswitch_external_id $dev "xen-vm-name" "$name" - local uuid=$(xenstore_read "${vm_path}/uuid") - openvswitch_external_id $dev "xen-vm-uuid" "$uuid" - local mac=$(xenstore_read "$XENBUS_PATH/mac") - openvswitch_external_id $dev "attached-mac" "$mac" + if [ -f /proc/xen/capabilities ]; then + local frontend_id=$(xenstore_read "$XENBUS_PATH/frontend-id") + local mac=$(xenstore_read "$XENBUS_PATH/mac") + openvswitch_external_id $dev "attached-mac" "$mac" + if [ "$(cat /proc/xen/capabilities)x" == "x" ]; then + # We're running in a driver domain, so don't try to get any + # privileged data from domu xenstore path. + openvswitch_external_id $dev "xen-vm-domid" "$frontend_id" + else + local vm_path=$(xenstore_read "/local/domain/${frontend_id}/vm") + local name=$(xenstore_read "${vm_path}/name") + openvswitch_external_id $dev "xen-vm-name" "$name" + local uuid=$(xenstore_read "${vm_path}/uuid") + openvswitch_external_id $dev "xen-vm-uuid" "$uuid" + fi + fi } add_to_openvswitch () {