monitor.socket config option added to allow multiple servald

instances on the same machine without conflicting abstract namespace
unix domain sockets for monitor interface.
This commit is contained in:
gardners 2012-06-21 14:35:05 +09:30
parent 22ebdbc1ae
commit 01712ab67e
4 changed files with 21 additions and 5 deletions

View File

@ -77,7 +77,8 @@ int app_monitor_cli(int argc, const char *const *argv, struct command_line_optio
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX;
addr.sun_path[0]=0;
snprintf(&addr.sun_path[1],100,"org.servalproject.servald.monitor.socket");
snprintf(&addr.sun_path[1],100,
confValueGet("monitor.socket",DEFAULT_MONITOR_SOCKET_NAME));
int len = 1+strlen(&addr.sun_path[1]) + sizeof(addr.sun_family);
char *p=(char *)&addr;
printf("last char='%c' %02x\n",p[len-1],p[len-1]);

View File

@ -84,14 +84,19 @@ int monitor_setup_sockets()
}
#ifdef linux
/* Use abstract namespace as Android has no writable FS which supports sockets */
/* Use abstract namespace as Android has no writable FS which supports sockets.
Abstract namespace is just plain better, anyway, as no dead files end up
hanging around. */
name.sun_path[0]=0;
/* XXX: 104 comes from OSX sys/un.h - no #define (note Linux has UNIX_PATH_MAX and it's 108(!)) */
snprintf(&name.sun_path[1],104-2,"org.servalproject.servald.monitor.socket");
snprintf(&name.sun_path[1],104-2,
confValueGet("monitor.socket",DEFAULT_MONITOR_SOCKET_NAME));
/* Doesn't include trailing nul */
len = 1+strlen(&name.sun_path[1]) + sizeof(name.sun_family);
#else
snprintf(name.sun_path,104-1,"%s/org.servalproject.servald.monitor.socket",serval_instancepath());
snprintf(name.sun_path,104-1,"%s/",
serval_instancepath(),
confValueGet("monitor.socket",DEFAULT_MONITOR_SOCKET_NAME));
unlink(name.sun_path);
/* Includes trailing nul */
len = 1+strlen(name.sun_path) + sizeof(name.sun_family);
@ -723,7 +728,8 @@ int server_probe(int *pid)
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX;
addr.sun_path[0]=0;
snprintf(&addr.sun_path[1],100,"org.servalproject.servald.monitor.socket");
snprintf(&addr.sun_path[1],100,
confValueGet("monitor.socket",DEFAULT_MONITOR_SOCKET_NAME));
int len = 1+strlen(&addr.sun_path[1]) + sizeof(addr.sun_family);
char *p=(char *)&addr;
if (0) DEBUGF("last char='%c' %02x\n",p[len-1],p[len-1]);

View File

@ -1530,3 +1530,5 @@ extern int sigPipeFlag;
extern int sigIoFlag;
void sigPipeHandler(int signal);
void sigIoHandler(int signal);
#define DEFAULT_MONITOR_SOCKET_NAME "org.servalproject.servald.monitor.socket"

View File

@ -38,6 +38,7 @@ setup_servald_instance() {
set_instance A
touch "$SERVALINSTANCE_PATH/dummynet"
executeOk_servald config set interfaces "+>dummynet"
executeOk_servald config set monitor.socket "org.servalproject.servald.monitor.socket.A"
executeOk_servald keyring add
assert [ -e "$SERVALINSTANCE_PATH/serval.keyring" ]
executeOk_servald keyring list
@ -46,10 +47,13 @@ setup_servald_instance() {
assert --message='main identity known' [ -n "$sid" ]
executeOk_servald set did $sid 5550001 "Agent Smith"
start_servald_server A
executeOk_servald status
tfw_cat --stdout
INSTANCEPATH_A=$SERVALINSTANCE_PATH
set_instance B
executeOk_servald config set interfaces "+>$INSTANCEPATH_A/dummynet"
executeOk_servald config set monitor.socket "org.servalproject.servald.monitor.socket.B"
executeOk_servald keyring add
assert [ -e "$SERVALINSTANCE_PATH/serval.keyring" ]
executeOk_servald keyring list
@ -57,7 +61,10 @@ setup_servald_instance() {
sid=$(replayStdout | sed -ne "1s/^\($rexp_sid\):.*\$/\1/p")
assert --message='main identity known' [ -n "$sid" ]
executeOk_servald set did $sid 5552662 "Neo"
echo "# A/B Instance Paths: $SERVALINSTANCE_PATH $INSTANCEPATH_A"
tfw_cat --stdout
start_servald_server B
executeOk_servald status
}
doc_DNAWildcardSearchFindsSelf="DNA lookup of wildcard finds self (star method)"