From b20db09e9ea98f63604aa14048a7fb663fb3f804 Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Wed, 6 Aug 2008 21:02:20 -0400 Subject: client-server: improve random port selection and mdns txt use --- ChangeLog | 8 ++++++++ stap-find-servers | 4 ++-- stap-serverd | 10 +++++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 88497aef..88de8c62 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-08-06 Frank Ch. Eigler + + * stap-find-servers (match_server, client_sysinfo): + Use "sysinfo=...." keyword in mdns TXT record. + * stap-serverd (advertise_presence): Ditto. + (initialization): Locate random usable server port if needed. + (listen): Complain if port turns out to be unusable after all. + 2008-08-06 Josh Stone PR 6820 diff --git a/stap-find-servers b/stap-find-servers index 9e7b633d..fea645bd 100755 --- a/stap-find-servers +++ b/stap-find-servers @@ -87,7 +87,7 @@ function match_server { server_port=`expr "$service_data" : '\[\([^]]*\)\]'` ;; txt ) - server_sysinfo=`expr "$service_data" : '\[\"\([^]]*\)\"\]'` + server_sysinfo=`expr "$service_data" : '\[.*\"\(sysinfo=[^]]*\)\"\]'` ;; * ) break ;; @@ -115,7 +115,7 @@ function client_sysinfo { # Add some info from uname sysinfo_client="`uname -rvm`" fi - echo $sysinfo_client + echo sysinfo=$sysinfo_client } #----------------------------------------------------------------------------- diff --git a/stap-serverd b/stap-serverd index af4b2717..6170eb8f 100755 --- a/stap-serverd +++ b/stap-serverd @@ -26,6 +26,11 @@ function initialization { avahi_type=_stap._tcp port=$1 test "X$port" = "X" && port=65000 + port2=$(($port + 1)) + if netstat -atn | awk '{print $4}' | cut -f2 -d: | egrep -q "^($port|$port2)\$"; then + # Whoops, the port is busy; try another one. + initialization $((1024+($port + $RANDOM)%64000)) + fi } # function: advertise_presence @@ -35,7 +40,7 @@ function advertise_presence { # Build up a string representing our server's properties. # TODO: this needs fleshing out. local sysinfo=`uname -rvm` - local txt="$sysinfo" + local txt="sysinfo=$sysinfo" # Call avahi-publish-service to advertise our presence. avahi-publish-service "Systemtap Compile Server on `uname -n`" \ @@ -65,6 +70,9 @@ function listen { # received (i.e. SIGTERM) will be processed. nc -l $port < $fifo_name | stap-server $((port + 1)) > $fifo_name 2>&1 & wait %nc + if [ $? -ne 0 ]; then + fatal "ERROR: cannot listen on port $port" + fi done } -- cgit