From: Sapan Bhatia Date: Tue, 4 Aug 2009 03:02:37 +0000 (+0000) Subject: Reserve a tcp port on a node. X-Git-Tag: vsys-scripts-0.95-6~3 X-Git-Url: http://git.onelab.eu/?p=vsys-scripts.git;a=commitdiff_plain;h=56c8ae032874d17c08333c7d3f5c1e5429f84bea Reserve a tcp port on a node. --- diff --git a/exec/reserve_tcp_port b/exec/reserve_tcp_port new file mode 100755 index 0000000..30ca1e2 --- /dev/null +++ b/exec/reserve_tcp_port @@ -0,0 +1,42 @@ +#!/usr/bin/perl + +use strict; + +$|=1; + +my $slicename; +my $xid; +my $portnumber; +my $fuser_cmd; +my $pid; +my @vinfo; +my $foo; +my $real_xid; +my $cat_cmd; + +$slicename = $ARGV[0]; +$xid = int(`id -u $slicename`) || die("Could not determine xid of $slicename\n"); +$portnumber = ; +chop($portnumber); + +if ($portnumber!~/^\d+$/) { + die("$portnumber is not a port number"); +} + +$fuser_cmd = "ncontext --nid $xid --migrate -- vcontext --xid $xid --migrate fuser -n tcp $portnumber"; +$pid = `$fuser_cmd` || die("Please bind to port $portnumber, e.g. run nc -l $portnumber."); + +$cat_cmd = "cat /proc/$pid/vinfo"; +$_ = `$cat_cmd`; +@vinfo = split /\n/; +($#vinfo>0) || die("Port reservation failed. Please try again.\n"); + +$_=@vinfo[0]; + +($foo,$real_xid) = split; + +if (int($real_xid)!=$xid) { + die("Port $portnumber belongs to user $real_xid, not to you.\n"); +} + +close CMD;