git://git.onelab.eu
/
vsys-scripts.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
56c8ae0
)
Debugged version of reserve_tcp_port
author
Sapan Bhatia
<sapanb@cs.princeton.edu>
Tue, 4 Aug 2009 03:12:30 +0000
(
03:12
+0000)
committer
Sapan Bhatia
<sapanb@cs.princeton.edu>
Tue, 4 Aug 2009 03:12:30 +0000
(
03:12
+0000)
exec/reserve_tcp_port
patch
|
blob
|
history
diff --git
a/exec/reserve_tcp_port
b/exec/reserve_tcp_port
index
30ca1e2
..
a9043ea
100755
(executable)
--- a/
exec/reserve_tcp_port
+++ b/
exec/reserve_tcp_port
@@
-12,7
+12,6
@@
my $pid;
my @vinfo;
my $foo;
my $real_xid;
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");
$slicename = $ARGV[0];
$xid = int(`id -u $slicename`) || die("Could not determine xid of $slicename\n");
@@
-23,10
+22,17
@@
if ($portnumber!~/^\d+$/) {
die("$portnumber is not a port number");
}
die("$portnumber is not a port number");
}
-$fuser_cmd = "ncontext --nid $xid --migrate -- vcontext --xid $xid --migrate fuser -n tcp $portnumber";
+if ($portnumber<61001 || $portnumber>65535) {
+ die("$portnumber lies in the local port-rover range\n");
+}
+
+$fuser_cmd = "ncontext --nid $xid --migrate -- vcontext --xid $xid --migrate fuser -n tcp $portnumber 2>/dev/null";
$pid = `$fuser_cmd` || die("Please bind to port $portnumber, e.g. run nc -l $portnumber.");
$pid = `$fuser_cmd` || die("Please bind to port $portnumber, e.g. run nc -l $portnumber.");
+$pid=~s/\s+//g;
+
+my $cat_cmd;
-$cat_cmd = "cat /proc/$pid/vinfo";
+$cat_cmd = "c
hcontext --ctx 1 c
at /proc/$pid/vinfo";
$_ = `$cat_cmd`;
@vinfo = split /\n/;
($#vinfo>0) || die("Port reservation failed. Please try again.\n");
$_ = `$cat_cmd`;
@vinfo = split /\n/;
($#vinfo>0) || die("Port reservation failed. Please try again.\n");
@@
-39,4
+45,17
@@
if (int($real_xid)!=$xid) {
die("Port $portnumber belongs to user $real_xid, not to you.\n");
}
die("Port $portnumber belongs to user $real_xid, not to you.\n");
}
-close CMD;
+# OK. We're good
+# Only, slices are allowed only 1 port reservation/session
+
+if ( -f "/dev/shm/$slicename-port" ) {
+ print "You have already reserved the following port:\n";
+ system("cat /dev/shm/$slicename-port");
+ exit(1);
+}
+
+open FIL,">/dev/shm/$slicename-port";
+print FIL "$portnumber";
+close FIL;
+
+system("iptables -t mangle -A INPUT -m tcp -p tcp --dport $portnumber -j MARK --set-mark $xid");