Call hotplug scripts from libxl for NetBSD
PATCH 1/1 Call hotplug scripts from libxl for NetBSD
This patch adds support for NetBSD to call hotplug scripts directly from libxl, instead of relying on xenbackendd. Also some patches contain general bug fixes that apply to both NetBSD and Linux. Currently Linux hotplug script call functions are empty, so Linux continues to use udev rules to call hotplug scripts. This patch should be applied after Ian Campbell's "libxl: rationalise libxl_device_* APIs" series.
Please review, Roger.
PATCH 1/1 xenbackendd: pass type of block device to hotplug script
# HG changeset patch
# User Roger Pau Monne <[email protected]> # Date 1317386335 -7200
# Node ID deb93254ad05ffa13caa64f0159800f04c82666b # Parent c9c228ec718a4c2d22b58ce306f269868af0d12f
xenbackendd: pass type of block device to hotplug script
Pass the type of block device to attach to the block script instead of reading it from xenstore, since new Xen versions don't make a difference between a block device or an image.
tools/hotplug/NetBSD/block +1 -1
@@ -19,7 +19,7 @@ error() { xpath=$1 xstatus=$2 -xtype=$(xenstore-read "$xpath/type") +xtype=$3 xparams=$(xenstore-read "$xpath/params") case $xstatus in
tools/xenbackendd/xenbackendd.c +35 -5
@@ -89,15 +89,15 @@ dodebug(const char *fmt, ...) }static void -doexec (const char *cmd,const char *arg1,const char *arg2) +doexec (const char *cmd,const char *arg1,const char *arg2,const char *arg3) { -dodebug ("exec %s %s %s" , cmd, arg1, arg2); +dodebug ("exec %s %s %s %s" , cmd, arg1, arg2, arg3);switch (vfork ()) {case -1 :dolog (LOG_ERR ,"can't vfork: %s" ,strerror (errno));break ;case 0 : -execl (cmd, cmd, arg1, arg2,NULL ); +execl (cmd, cmd, arg1, arg2, arg3,NULL );dolog (LOG_ERR ,"can't exec %s: %s" , cmd,strerror (errno));exit (EXIT_FAILURE );/* NOTREACHED */
@@ -145,11 +145,14 @@ xen_setup(void)int main (int argc,char *const argv[]) { +struct stat stab;char **vec;unsigned int num;char *s;int state;char *sstate; +char *stype; +char *params;char *p;char buf[80 ];int type;
@@ -297,11 +300,38 @@ main(int argc, char * const argv[]) strerror(errno)); goto next2; } -doexec (s, vec[XS_WATCH_PATH ], sstate); +doexec (s, vec[XS_WATCH_PATH ], sstate,NULL );break ;case DEVTYPE_VBD : -doexec (vbd_script, vec[XS_WATCH_PATH ], sstate); +/* check if given file is a block device or a raw image */ +snprintf (buf,sizeof (buf),"%s/params" , vec[XS_WATCH_PATH ]); + params =xs_read (xs,XBT_NULL , buf,0 ); +if (params ==NULL ) { +dolog (LOG_ERR , +"Failed to read %s (%s)" , buf,strerror (errno)); + goto next2; + } +if (stat (params, &stab) <0 ) { +dolog (LOG_ERR , +"Failed to get info about %s (%s)" , params, +strerror (errno)); + goto next3; + } + stype =NULL ; +if (S_ISBLK (stab.st_mode)) + stype ="phy" ; +if (S_ISREG (stab.st_mode)) + stype ="file" ; +if (stype ==NULL ) { +dolog (LOG_ERR , +"Failed to attach %s (not a block device or raw image)" , + params,strerror (errno)); + goto next3; + } +doexec (vbd_script, vec[XS_WATCH_PATH ], sstate, stype); +next3: +free (params);break ;default :
PATCH 1/1 libxl: fix for libxl not waiting for devices to disconnect
In reply to Roger Pau Monne# HG changeset patch
# User Roger Pau Monne <[email protected]> # Date 1317386335 -7200
# Node ID 873e4a1309ce5da0305611ce2e2b460df052019b # Parent deb93254ad05ffa13caa64f0159800f04c82666b
libxl: fix for libxl not waiting for devices to disconnect
libxl was ignoring the timeout and the number of devices to wait before destroying them.
tools/libxl/libxl_device.c +4 -1
@@ -391,6 +391,9 @@ static int wait_for_dev_destroy(libxl__g }free (l1); } + }else { +/* timeout reached */ + rc =0 ; }return rc; }
@@ -531,7 +534,7 @@ int libxl__devices_destroy(libxl__gc *gc tv.tv_usec =0 ;while (n_watches >0 ) {if (wait_for_dev_destroy (gc, &tv)) { -break ; +continue ; }else { n_watches--; }
PATCH 1/1 libxl: add support for image files for NetBSD
In reply to Roger Pau Monne# HG changeset patch
# User Roger Pau Monne <[email protected]> # Date 1317386335 -7200
# Node ID 0865f90beac01012dd0ff4a86b07d8fb62575163 # Parent 873e4a1309ce5da0305611ce2e2b460df052019b
libxl: add support for image files for NetBSD
Created a helper function to detect if the OS is capable of using image files as phy backends. Create two OS specific files, and changed the Makefile to choose the correct one at compile time.
tools/libxl/Makefile +2 -0
@@ -31,6 +31,8 @@ LIBXL_OBJS-y += libxl_noblktap2.o endif LIBXL_OBJS-$(CONFIG_X86) += libxl_cpuid.o LIBXL_OBJS-$(CONFIG_IA64) += libxl_nocpuid.o +LIBXL_OBJS-$(CONFIG_NetBSD) += libxl_phybackend.o +LIBXL_OBJS-$(CONFIG_Linux) += libxl_nophybackend.o LIBXL_LIBS += -lyajl
tools/libxl/libxl_device.c +7 -8
@@ -138,15 +138,14 @@ static int disk_try_backend(disk_try_bac a->disk->format == LIBXL_DISK_FORMAT_EMPTY)) { goto bad_format; } -if (a->disk->format !=LIBXL_DISK_FORMAT_EMPTY && - !S_ISBLK (a->stab.st_mode)) { -LIBXL__LOG (ctx,LIBXL__LOG_DEBUG ,"Disk vdev=%s, backend phy" -" unsuitable as phys path not a block device" , - a->disk->vdev); -return 0 ; - } -return backend; +if (try_phy_backend (a->stab.st_mode)) +return backend; + +LIBXL__LOG (ctx,LIBXL__LOG_DEBUG ,"Disk vdev=%s, backend phy" +" unsuitable as phys path not a block device" , + a->disk->vdev); +return 0 ;case LIBXL_DISK_BACKEND_TAP :if (!libxl__blktap_enabled (a->gc)) {
tools/libxl/libxl_internal.h +3 -0
@@ -247,6 +247,9 @@ _hidden int libxl__device_destroy(libxl_ _hidden int libxl__devices_destroy(libxl__gc *gc, uint32_t domid, int force); _hidden int libxl__wait_for_backend(libxl__gc *gc, char *be_path, char *state); +/* OS dependant helper function */ +_hidden int try_phy_backend(mode_t st_mode); +/* from libxl_pci */ _hidden int libxl__device_pci_add(libxl__gc *gc, uint32_t domid, libxl_device_pci *pcidev, int starting);
tools/libxl/libxl_nophybackend.c new file +27 -0
@@ -0,0 +1,27 @@ +/* +* Copyright (C) 2011 +* Author Roger Pau Monne <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation; version 2.1 only. with the special +* exception on linking described in file LICENSE. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +*/ + +#include <sys/stat.h> + +#include "libxl_internal.h" + +int try_phy_backend (mode_t st_mode) +{ +if (!S_ISBLK (st_mode)) { +return 0 ; + } + +return 1 ; +}
tools/libxl/libxl_phybackend.c new file +26 -0
@@ -0,0 +1,26 @@ +/* +* Copyright (C) 2011 +* Author Roger Pau Monne <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation; version 2.1 only. with the special +* exception on linking described in file LICENSE. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +*/ + +#include <sys/stat.h> + +#include "libxl_internal.h" + +int try_phy_backend (mode_t st_mode) +{ +if (S_ISREG (st_mode) ||S_ISBLK (st_mode)) +return 1 ; + +return 0 ; +}
PATCH 1/1 libxl: add libxl__forkexec to execute hotplug scripts
In reply to Roger Pau Monne# HG changeset patch
# User Roger Pau Monne <[email protected]> # Date 1318592310 -7200
# Node ID 0235e192a519e29ac3d77e91fe59b38e6a6f06ef # Parent 0865f90beac01012dd0ff4a86b07d8fb62575163
libxl: add libxl__forkexec to execute hotplug scripts
Add a new function to libxl_exec that performs a vfork and executes the passed arguments using libxl__exec.
tools/libxl/libxl_exec.c +22 -0
@@ -308,3 +308,25 @@ int libxl__spawn_check(libxl__gc *gc, vo for_spawn->intermediate =0 ;return ERROR_FAIL ; } + +int libxl__forkexec (libxl__gc *gc,int stdinfd,int stdoutfd, +int stderrfd,char **args) +{ +libxl_ctx *ctx =libxl__gc_owner (gc); + +switch (vfork ()) { +case -1 : +LIBXL__LOG_ERRNO (ctx,LIBXL__LOG_ERROR ,"failed to vfork\n" ); +return -1 ; +case 0 : +libxl__exec (stdinfd, stdoutfd, stderrfd, args[0 ], args); +LIBXL__LOG_ERRNO (ctx,LIBXL__LOG_ERROR ,"failed to execute %s\n" , + args[0 ]); +exit (EXIT_FAILURE ); +break ; +default : +wait (NULL ); +break ; + } +return 0 ; +}
tools/libxl/libxl_internal.h +2 -0
@@ -342,6 +342,8 @@ _hidden int libxl__spawn_check(libxl__gc _hidden void libxl__exec(int stdinfd, int stdoutfd, int stderrfd,const char *arg0,char **args);// logs errors, never returns +_hidden int libxl__forkexec(libxl__gc *gc, int stdinfd, int stdoutfd, +int stderrfd,char **args); _hidden void libxl__log_child_exitstatus(libxl__gc *gc,const char *what,pid_t pid,int status);
PATCH 1/1 libxl: wait for devices to initialize upon addition to the domain
In reply to Roger Pau Monne# HG changeset patch
# User Roger Pau Monne <[email protected]>
# Date 1318592310 -7200
# Node ID d14479efe33c3955dcf41783a1b02c8d2bb572e6
# Parent 0235e192a519e29ac3d77e91fe59b38e6a6f06ef
libxl: wait for devices to initialize upon addition to the domain.
Block waiting for devices to initialize (switch to state 2).
tools/libxl/libxl.c +10 -1
@@ -1070,6 +1070,11 @@ int libxl_device_disk_add(libxl_ctx *ctxlibxl__xs_kvs_of_flexarray (&gc, back, back->count), libxl__xs_kvs_of_flexarray(&gc, front, front->count)); +if (libxl__wait_for_device_initialization (&gc, &device) <0 ) { + rc =-1 ; + goto out_free; + } + rc =0 ; out_free:
@@ -1513,7 +1518,11 @@ int libxl_device_nic_add(libxl_ctx *ctx,libxl__xs_kvs_of_flexarray (&gc, back, back->count), libxl__xs_kvs_of_flexarray(&gc, front, front->count)); -/* FIXME: wait for plug */ +if (libxl__wait_for_device_initialization (&gc, &device) <0 ) { + rc =-1 ; + goto out_free; + } + rc =0 ; out_free:flexarray_free (back);
tools/libxl/libxl_device.c +32 -0
@@ -366,6 +366,38 @@ int libxl__device_disk_dev_number(constreturn -1 ; } +int libxl__wait_for_device_initialization (libxl__gc *gc,libxl__device *device) +{ +libxl_ctx *ctx =libxl__gc_owner (gc); +char *be_path =libxl__device_backend_path (gc, device); +char *state_path =libxl__sprintf (gc,"%s/state" , be_path); +char *state =libxl__xs_read (gc,XBT_NULL , state_path); +int rc =-1 ; +char **l1 =NULL ; +unsigned int n; + +if (atoi (state) ==2 ) { + rc =0 ; + goto out; + } + +xs_watch (ctx->xsh, state_path, be_path); +while (atoi (state) !=2 ) { + l1 =xs_read_watch (ctx->xsh, &n); +if (l1 ==NULL ) { + goto out; + } + state =libxl__xs_read (gc,XBT_NULL , l1[XS_WATCH_PATH ]); +if (state ==NULL ) { + goto out; + } + } + rc =0 ; + +out: +return rc; +} +static int wait_for_dev_destroy (libxl__gc *gc,struct timeval *tv) {libxl_ctx *ctx =libxl__gc_owner (gc);
tools/libxl/libxl_internal.h +1 -1
@@ -231,7 +231,7 @@ _hidden int libxl__device_disk_set_backe _hidden int libxl__device_physdisk_major_minor(const char *physpath, int *major, int *minor); _hidden int libxl__device_disk_dev_number(const char *virtpath,int *pdisk,int *ppartition); - +_hidden int libxl__wait_for_device_initialization(libxl__gc *gc, libxl__device *device); _hidden int libxl__device_console_add(libxl__gc *gc, uint32_t domid,libxl_device_console *console,libxl__domain_build_state *state);
PATCH 1/1 libxl: execute hotplug scripts directly from libxl
In reply to Roger Pau Monne# HG changeset patch
# User Roger Pau Monne <[email protected]> # Date 1317386335 -7200
# Node ID 8800c37a5acba9e95ac8005ea123d3e9954be001 # Parent d14479efe33c3955dcf41783a1b02c8d2bb572e6
libxl: execute hotplug scripts directly from libxl.
Added the necessary handlers to execute hotplug scripts when necessary from libxl. Split NetBSD from Linux hotplug calls into two separate files, because parameters for hotplug scripts are different. Linux has empty functions, since the calling of hotplug scripts is still done using udev.
tools/libxl/Makefile +2 -0
@@ -33,6 +33,8 @@ LIBXL_OBJS-$(CONFIG_X86) += libxl_cpuid. LIBXL_OBJS-$(CONFIG_IA64) += libxl_nocpuid.o LIBXL_OBJS-$(CONFIG_NetBSD) += libxl_phybackend.o LIBXL_OBJS-$(CONFIG_Linux) += libxl_nophybackend.o +LIBXL_OBJS-$(CONFIG_NetBSD) += hotplug_netbsd.o +LIBXL_OBJS-$(CONFIG_Linux) += hotplug_linux.o LIBXL_LIBS += -lyajl
tools/libxl/hotplug_linux.c new file +26 -0
@@ -0,0 +1,26 @@ +/* +* Copyright (C) 2011 +* Author Roger Pau Monne <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation; version 2.1 only. with the special +* exception on linking described in file LICENSE. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +*/ + +#include "libxl_internal.h" + +int libxl_disk_hotplug (libxl__gc *gc,libxl__device *dev) +{ +return 0 ; +} + +int libxl_nic_hotplug_connect (libxl__gc *gc,libxl__device *dev) +{ +return 0 ; +}
tools/libxl/hotplug_netbsd.c new file +129 -0
129 lines not on this page · raw message
tools/libxl/libxl.c +20 -0
@@ -1056,6 +1056,10 @@ int libxl_device_disk_add(libxl_ctx *ctxflexarray_append (back, disk->readwrite ?"w" :"r" );flexarray_append (back,"device-type" );flexarray_append (back, disk->is_cdrom ?"cdrom" :"disk" ); +flexarray_append (back,"script" ); +flexarray_append (back,libxl__sprintf (&gc,"%s/%s" , +libxl_xen_script_dir_path (), +"block" ));flexarray_append (front,"backend-id" );flexarray_append (front,libxl__sprintf (&gc,"%d" , disk->backend_domid));
@@ -1075,6 +1079,14 @@ int libxl_device_disk_add(libxl_ctx *ctx goto out_free; } +/* Call hotplug scripts to attach device */ +if (libxl__device_execute_hotplug (&gc, &device) <0 ) { +LIBXL__LOG (ctx,LIBXL__LOG_ERROR ,"unable to execute hotplug script for disk: %s\n" , + disk->pdev_path); + rc =-1 ; + goto out_free; + } + rc =0 ; out_free:
@@ -1523,6 +1535,14 @@ int libxl_device_nic_add(libxl_ctx *ctx, goto out_free; } +/* Call hotplug scripts to attach device */ +if (libxl__device_execute_hotplug (&gc, &device) <0 ) { +LIBXL__LOG (ctx,LIBXL__LOG_ERROR ,"unable to execute hotplug script for nic: %s\n" , + nic->ifname); + rc =-1 ; + goto out_free; + } + rc =0 ; out_free:flexarray_free (back);
tools/libxl/libxl_device.c +29 -0
@@ -68,6 +68,24 @@ int libxl__parse_backend_path(libxl__gcreturn libxl__device_kind_from_string (strkind, &dev->backend_kind); } +int libxl__device_execute_hotplug (libxl__gc *gc,libxl__device *dev) +{ +int rc =0 ; + +switch (dev->kind) { +case LIBXL__DEVICE_KIND_VIF : + rc =libxl__nic_hotplug (gc, dev); +break ; +case LIBXL__DEVICE_KIND_VBD : + rc =libxl__disk_hotplug (gc, dev); +break ; +default : +break ; + } + +return rc; +} +int libxl__device_generic_add (libxl__gc *gc,libxl__device *device,char **bents,char **fents) {
@@ -405,6 +423,7 @@ static int wait_for_dev_destroy(libxl__gunsigned int n;fd_set rfds;char **l1 =NULL ; +libxl__device dev; rc =1 ; nfds =xs_fileno (ctx->xsh) +1 ;
@@ -416,6 +435,8 @@ static int wait_for_dev_destroy(libxl__gchar *state =libxl__xs_read (gc,XBT_NULL , l1[XS_WATCH_PATH ]);if (!state ||atoi (state) ==6 ) {xs_unwatch (ctx->xsh, l1[0 ], l1[1 ]); +libxl__parse_backend_path (gc, l1[XS_WATCH_PATH ], &dev); +libxl__device_execute_hotplug (gc, &dev);xs_rm (ctx->xsh,XBT_NULL , l1[XS_WATCH_TOKEN ]);LIBXL__LOG (ctx,LIBXL__LOG_DEBUG ,"Destroyed device backend at %s" , l1[XS_WATCH_TOKEN ]); rc =0 ;
@@ -442,6 +463,7 @@ int libxl__device_remove(libxl__gc *gc,if (!state) goto out;if (atoi (state) !=4 ) { +libxl__device_execute_hotplug (gc, dev);libxl__device_destroy_tapdisk (gc, be_path);xs_rm (ctx->xsh,XBT_NULL , be_path); goto out;
@@ -462,6 +484,7 @@ retry_transaction:xs_watch (ctx->xsh, state_path, be_path);libxl__device_destroy_tapdisk (gc, be_path); +libxl__device_execute_hotplug (gc, dev);if (wait) {struct timeval tv;
@@ -482,6 +505,12 @@ int libxl__device_destroy(libxl__gc *gc,char *be_path =libxl__device_backend_path (gc, dev);char *fe_path =libxl__device_frontend_path (gc, dev); +/* +* Run hotplug scripts, which will probably not be able to +* execute successfully since the device may still be plugged +*/ +libxl__device_execute_hotplug (gc, dev); +xs_rm (ctx->xsh,XBT_NULL , be_path);xs_rm (ctx->xsh,XBT_NULL , fe_path);
tools/libxl/libxl_internal.h +5 -0
@@ -250,6 +250,11 @@ _hidden int libxl__wait_for_backend(libx/* OS dependant helper function */ _hidden int try_phy_backend(mode_t st_mode); +/* hotplug functions */ +_hidden int libxl__device_execute_hotplug(libxl__gc *gc, libxl__device *dev); +_hidden int libxl__disk_hotplug(libxl__gc *gc, libxl__device *dev); +_hidden int libxl__nic_hotplug(libxl__gc *gc, libxl__device *dev); +/* from libxl_pci */ _hidden int libxl__device_pci_add(libxl__gc *gc, uint32_t domid, libxl_device_pci *pcidev, int starting);
PATCH 1/1 hotplug NetBSD: detach devices when state is 5 or 6
In reply to Roger Pau Monne# HG changeset patch
# User Roger Pau Monne <[email protected]> # Date 1317386335 -7200
# Node ID 2a7a580b84556a11e26be0f15864704ae5a7f0c0 # Parent 8800c37a5acba9e95ac8005ea123d3e9954be001 hotplug NetBSD: detach devices when state is 5 or 6
With the move of hotplug calls from xenbackendd to libxl, we can detach devices when the state is 5 or 6.
tools/hotplug/NetBSD/block +1 -1
@@ -23,7 +23,7 @@ xtype=$3 xparams=$(xenstore-read "$xpath/params") case $xstatus in -6) +5|6) # device removed case $xtype in file)
tools/hotplug/NetBSD/vif-bridge +1 -1
@@ -14,7 +14,7 @@ xpath=$1 xstatus=$2 case $xstatus in -6) +5|6) # device removed xenstore-rm $xpath exit 0
tools/hotplug/NetBSD/vif-ip +1 -1
@@ -14,7 +14,7 @@ xpath=$1 xstatus=$2 case $xstatus in -6) +5|6) # device removed xenstore-rm $xpath exit 0
PATCH 1/1 hotplug: remove debug messages from NetBSD hotplug scripts
In reply to Roger Pau Monne# HG changeset patch
# User Roger Pau Monne <[email protected]> # Date 1318595892 -7200
# Node ID 07502345baca44478e3086515a071b24c5aa9a33 # Parent 2a7a580b84556a11e26be0f15864704ae5a7f0c0
hotplug: remove debug messages from NetBSD hotplug scripts
Remove unecessary debug messages from NetBSD hotplug scripts, left error messages only.
tools/hotplug/NetBSD/block +0 -4
@@ -64,14 +64,12 @@ 2) if [ "$status" = "free" ] && \ vnconfig /dev/${disk}d $xparams >/dev/null; then device=/dev/${disk}d - echo vnconfig /dev/${disk}d $xparams break fi done if [ x$device = x ] ; then error "no available vnd device" fi - echo xenstore-write $xpath/vnd $device xenstore-write $xpath/vnd $device ;; phy)
@@ -79,9 +77,7 @@ 2) ;; esac physical_device=$(stat -f '%r' "$device") - echo xenstore-write $xpath/physical-device $physical_device xenstore-write $xpath/physical-device $physical_device - echo xenstore-write $xpath/hotplug-status connected xenstore-write $xpath/hotplug-status connected exit 0 ;;
tools/hotplug/NetBSD/vif-bridge +0 -3
@@ -24,12 +24,9 @@ 2) xfid=$(xenstore-read "$xpath/frontend-id") xhandle=$(xenstore-read "$xpath/handle") iface=$(xenstore-read "$xpath/vifname") - echo ifconfig $iface up ifconfig $iface up brconfig $xbridge add $iface - echo brconfig $xbridge add $iface xenstore-write $xpath/hotplug-status connected - echo xenstore-write $xpath/hotplug-status connected exit 0 ;; *)
tools/hotplug/NetBSD/vif-ip +0 -2
@@ -24,10 +24,8 @@ 2) xfid=$(xenstore-read "$xpath/frontend-id") xhandle=$(xenstore-read "$xpath/handle") iface=$(xenstore-read "$xpath/vifname") - echo ifconfig $iface $xip up ifconfig $iface $xip up xenstore-write $xpath/hotplug-status connected - echo xenstore-write $xpath/hotplug-status connected exit 0 ;; *)
PATCH 1/1 rc.d NetBSD: don't start xenbackendd by default, only when xend needs it
In reply to Roger Pau Monne# HG changeset patch
# User Roger Pau Monne <[email protected]>
# Date 1317386335 -7200
# Node ID 40f928cba711eed3823158bc6aa1c8f5ea54bfb1
# Parent 07502345baca44478e3086515a071b24c5aa9a33
rc.d NetBSD: don't start xenbackendd by default, only when xend needs it.
With the move of hotplug scripts from xenbackendd to libxl xenbackendd is no longer needed by libxl, only start it when xend is started.
tools/hotplug/NetBSD/rc.d/xenbackendd new file +27 -0
@@ -0,0 +1,27 @@ +#!/bin/sh +# +# PROVIDE: xenbackendd +# REQUIRE: xencommons + +. /etc/rc.subr + +DIR=$(dirname "$0") +. "${DIR}/xen-hotplugpath.sh" + +LD_LIBRARY_PATH="${LIBDIR}" +export LD_LIBRARY_PATH PYTHONPATH +PATH="${PATH}:${SBINDIR}" +export PATH + +name="xenbackendd" +rcvar=$name +command="${SBINDIR}/xenbackendd" +if [ -n "${XENBACKENDD_DEBUG}" ]; then + command_args="${XENBACKENDD_ARGS} -d" +else + command_args="${XENBACKENDD_ARGS}" +fi + +load_rc_config $name +run_rc_command "$1" +
tools/hotplug/NetBSD/rc.d/xencommons +4 -25
@@ -22,8 +22,6 @@ required_files="/kern/xen/privcmd" XENSTORED_PIDFILE="/var/run/xenstored.pid" XENCONSOLED_PIDFILE="/var/run/xenconsoled.pid" -XENBACKENDD_PIDFILE="/var/run/xenbackendd.pid" -#XENBACKENDD_DEBUG=1 #XENCONSOLED_TRACE="/var/log/xen/xenconsole-trace.log" #XENSTORED_TRACE="/var/log/xen/xenstore-trace.log"
@@ -46,7 +44,7 @@ xen_startcmd() XENSTORED_ROOTDIR="/var/lib/xenstored" fi rm -f ${XENSTORED_ROOTDIR}/tdb* >/dev/null 2>&1 - printf "Starting xenservices: xenstored, xenconsoled, xenbackendd." + printf "Starting xenservices: xenstored, xenconsoled." XENSTORED_ARGS=" --pid-file ${XENSTORED_PIDFILE}" if [ -n "${XENSTORED_TRACE}" ]; then XENSTORED_ARGS="${XENSTORED_ARGS} -T /var/log/xen/xenstored-trace.log"
@@ -58,7 +56,7 @@ xen_startcmd() sleep 1 done else - printf "Starting xenservices: xenconsoled, xenbackendd." + printf "Starting xenservices: xenconsoled." fi XENCONSOLED_ARGS=""
@@ -68,13 +66,6 @@ xen_startcmd() ${SBINDIR}/xenconsoled ${XENCONSOLED_ARGS} - XENBACKENDD_ARGS="" - if [ -n "${XENBACKENDD_DEBUG}" ]; then - XENBACKENDD_ARGS="${XENBACKENDD_ARGS} -d" - fi - - ${SBINDIR}/xenbackendd ${XENBACKENDD_ARGS} - printf "\n" printf "Setting domain 0 name.\n"
@@ -87,8 +78,6 @@ xen_stop() printf "Stopping xencommons.\n" printf "WARNING: Not stopping xenstored, as it cannot be restarted.\n" - rc_pid=$(check_pidfile ${XENBACKENDD_PIDFILE} ${SBINDIR}/xenbackendd) - pids="$pids $rc_pid" rc_pid=$(check_pidfile ${XENCONSOLED_PIDFILE} ${SBINDIR}/xenconsoled) pids="$pids $rc_pid"
@@ -108,17 +97,12 @@ xen_status() pids="$pids $xenconsoled_pid" fi - xenbackend_pid=$(check_pidfile ${XENBACKENDD_PIDFILE} ${SBINDIR}/xenbackendd) - if test -n ${xenbackend_pid}; then - pids="$pids $xenbackend_pid" - fi - - if test -n "$xenbackend_pid" -a -n "$xenconsoled_pid" -a -n "$xenstored_pid"; + if test -n "$xenconsoled_pid" -a -n "$xenstored_pid"; then echo "xencommons are running as pids $pids." return 0 fi - if test -z "$xenbackend_pid" -a -z "$xenconsoled_pid" -a -z "$xenstored_pid"; + if test -z "$xenconsoled_pid" -a -z "$xenstored_pid"; then echo "xencommons are not running." return 0
@@ -134,11 +118,6 @@ xen_status() else echo "xenconsoled is not running." fi - if test -n $xenbackend_pid; then - echo "xenbackendd is running as pid $xenbackend_pid." - else - echo "xenbackendd is not running." - fi } load_rc_config $name
tools/hotplug/NetBSD/rc.d/xend +1 -1
@@ -1,7 +1,7 @@ #!/bin/sh # # PROVIDE: xend -# REQUIRE: xencommons +# REQUIRE: xencommons xenbackendd . /etc/rc.subr