From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH v2 4/5] libxl: call hotplug scripts from xl for NetBSD Date: Thu, 26 Jul 2012 20:54:35 +0100 Message-ID: <1343332476-33765-5-git-send-email-roger.pau@citrix.com> References: <1343332476-33765-1-git-send-email-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1343332476-33765-1-git-send-email-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: Christoph Egger , Ian Jackson , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org Add the missing NetBSD functions to call hotplug scripts, and disable xenbackendd if libxl/disable_udev is not set. Cc: Christoph Egger Cc: Ian Jackson Acked-by: Ian Jackson Signed-off-by: Roger Pau Monne --- tools/libxl/libxl_netbsd.c | 57 ++++++++++++++++++++++++++++++++++++++- tools/xenbackendd/xenbackendd.c | 8 +++++- 2 files changed, 63 insertions(+), 2 deletions(-) diff --git a/tools/libxl/libxl_netbsd.c b/tools/libxl/libxl_netbsd.c index 28cdf21..9587833 100644 --- a/tools/libxl/libxl_netbsd.c +++ b/tools/libxl/libxl_netbsd.c @@ -32,10 +32,65 @@ char *libxl__devid_to_localdev(libxl__gc *gc, int devid) } /* Hotplug scripts caller functions */ +static int libxl__hotplug(libxl__gc *gc, libxl__device *dev, char ***args, + libxl__device_action action) +{ + char *be_path = libxl__device_backend_path(gc, dev); + char *script; + int nr = 0, rc = 0, arraysize = 4; + + script = libxl__xs_read(gc, XBT_NULL, + GCSPRINTF("%s/%s", be_path, "script")); + if (!script) { + LOGEV(ERROR, errno, "unable to read script from %s", be_path); + rc = ERROR_FAIL; + goto out; + } + + GCNEW_ARRAY(*args, arraysize); + (*args)[nr++] = script; + (*args)[nr++] = be_path; + (*args)[nr++] = GCSPRINTF("%d", action == DEVICE_CONNECT ? + XenbusStateInitWait : XenbusStateClosed); + (*args)[nr++] = NULL; + assert(nr == arraysize); + +out: + return rc; +} + int libxl__get_hotplug_script_info(libxl__gc *gc, libxl__device *dev, char ***args, char ***env, libxl__device_action action, int num_exec) { - return 0; + char *disable_udev = libxl__xs_read(gc, XBT_NULL, DISABLE_UDEV_PATH); + int rc; + + /* Check if we have to run hotplug scripts */ + if (!disable_udev || num_exec > 0) { + rc = 0; + goto out; + } + + switch (dev->backend_kind) { + case LIBXL__DEVICE_KIND_VBD: + case LIBXL__DEVICE_KIND_VIF: + if (num_exec != 0) { + rc = 0; + goto out; + } + rc = libxl__hotplug(gc, dev, args, action); + if (!rc) rc = 1; + break; + default: + /* If no need to execute any hotplug scripts, + * call the callback manually + */ + rc = 0; + break; + } + +out: + return rc; } diff --git a/tools/xenbackendd/xenbackendd.c b/tools/xenbackendd/xenbackendd.c index 6b5bb8e..5381a2a 100644 --- a/tools/xenbackendd/xenbackendd.c +++ b/tools/xenbackendd/xenbackendd.c @@ -33,6 +33,7 @@ #define DEVTYPE_UNKNOWN 0 #define DEVTYPE_VIF 1 #define DEVTYPE_VBD 2 +#define DISABLE_EXEC "libxl/disable_udev" #define DOMAIN_PATH "/local/domain/0" @@ -149,7 +150,7 @@ main(int argc, char * const argv[]) unsigned int num; char *s; int state; - char *sstate; + char *sstate, *sdisable; char *p; char buf[80]; int type; @@ -245,6 +246,10 @@ main(int argc, char * const argv[]) continue; } + sdisable = xs_read(xs, XBT_NULL, DISABLE_EXEC, 0); + if (sdisable) + goto next1; + if (strlen(vec[XS_WATCH_PATH]) < sizeof("state")) goto next1; @@ -314,6 +319,7 @@ next2: free(sstate); next1: + free(sdisable); free(vec); } -- 1.7.7.5 (Apple Git-26)