@@ -18,6 +18,7 @@ import (
18
18
19
19
. "github.com/netsec-ethz/scion-apps/bwtester/bwtestlib"
20
20
"github.com/netsec-ethz/scion-apps/lib/scionutil"
21
+ "github.com/scionproto/scion/go/lib/addr"
21
22
"github.com/scionproto/scion/go/lib/sciond"
22
23
"github.com/scionproto/scion/go/lib/snet"
23
24
"github.com/scionproto/scion/go/lib/spath"
@@ -54,6 +55,7 @@ func printUsage() {
54
55
fmt .Println ("bwtestclient -c ClientSCIONAddress -s ServerSCIONAddress -cs t,size,num,bw -sc t,size,num,bw -i" )
55
56
fmt .Println ("A SCION address is specified as ISD-AS,[IP Address]:Port" )
56
57
fmt .Println ("Example SCION address 1-1011,[192.33.93.166]:42002" )
58
+ fmt .Println ("ClientSCIONAddress can be omitted, the application then binds to localhost" )
57
59
fmt .Println ("-cs specifies time duration (seconds), packet size (bytes), number of packets, target bandwidth " +
58
60
"of client->server test" )
59
61
fmt .Println ("\t The question mark character ? can be used as wildcard when setting the test parameters " +
@@ -247,9 +249,7 @@ func main() {
247
249
dispatcherPath string
248
250
clientCCAddrStr string
249
251
serverCCAddrStr string
250
- clientISDASIP string
251
- serverISDASIP string
252
- clientPort uint16
252
+ clientPort uint
253
253
serverPort uint16
254
254
// Address of client control channel (CC)
255
255
clientCCAddr * snet.Addr
@@ -284,6 +284,7 @@ func main() {
284
284
flag .StringVar (& dispatcherPath , "dispatcher" , "/run/shm/dispatcher/default.sock" ,
285
285
"Path to dispatcher socket" )
286
286
flag .StringVar (& clientCCAddrStr , "c" , "" , "Client SCION Address" )
287
+ flag .UintVar (& clientPort , "p" , 0 , "Client Port (only used when Client Address not set)" )
287
288
flag .StringVar (& serverCCAddrStr , "s" , "" , "Server SCION Address" )
288
289
flag .StringVar (& serverBwpStr , "sc" , DefaultBwtestParameters , "Server->Client test parameter" )
289
290
flag .StringVar (& clientBwpStr , "cs" , DefaultBwtestParameters , "Client->Server test parameter" )
@@ -308,13 +309,15 @@ func main() {
308
309
overlayType = "udp4"
309
310
}
310
311
// Create SCION UDP socket
311
- if len (clientCCAddrStr ) > 0 {
312
- clientCCAddr , err = snet .AddrFromString (clientCCAddrStr )
313
- Check (err )
314
- } else {
315
- printUsage ()
316
- Check (fmt .Errorf ("Error, client address needs to be specified with -c" ))
312
+ if len (clientCCAddrStr ) == 0 {
313
+ clientCCAddrStr , err = scionutil .GetLocalhostString ()
314
+ clientCCAddrStr = fmt .Sprintf ("%s:%d" , clientCCAddrStr , clientPort )
317
315
}
316
+ Check (err )
317
+
318
+ clientCCAddr , err = snet .AddrFromString (clientCCAddrStr )
319
+ Check (err )
320
+
318
321
if len (serverCCAddrStr ) > 0 {
319
322
serverCCAddr , err = snet .AddrFromString (serverCCAddrStr )
320
323
Check (err )
@@ -351,42 +354,24 @@ func main() {
351
354
serverCCAddr .Path = spath .New (pathEntry .Path .FwdPath )
352
355
serverCCAddr .Path .InitOffsets ()
353
356
serverCCAddr .NextHop , _ = pathEntry .HostInfo .Overlay ()
357
+ } else {
358
+ scionutil .InitSCION (clientCCAddr )
354
359
}
355
360
356
361
CCConn , err = snet .DialSCION (overlayType , clientCCAddr , serverCCAddr )
357
362
Check (err )
358
- // fmt.Println("clientCCAddr -> serverCCAddr", clientCCAddr, "->", serverCCAddr)
359
363
360
- ci := strings .LastIndex (serverCCAddrStr , ":" )
361
- if ci < 0 {
362
- // This should never happen, an error would have been much earlier detected
363
- Check (fmt .Errorf ("Malformed server address" ))
364
- }
365
- serverISDASIP = serverCCAddrStr [:ci ]
366
- auxUint64 , err := strconv .ParseUint (serverCCAddrStr [ci + 1 :], 10 , 16 )
367
- Check (err )
368
- serverPort = uint16 (auxUint64 )
369
- // fmt.Println("serverISDASIP:", serverISDASIP)
370
- // fmt.Println("serverPort:", serverPort)
371
-
372
- ci = strings .LastIndex (clientCCAddrStr , ":" )
373
- if ci < 0 {
374
- // This should never happen, an error would have been much earlier detected
375
- Check (fmt .Errorf ("Malformed client address" ))
376
- }
377
- clientISDASIP = clientCCAddrStr [:ci ]
378
- auxUint64 , err = strconv .ParseUint (clientCCAddrStr [ci + 1 :], 10 , 16 )
379
- clientPort = uint16 (auxUint64 )
380
- Check (err )
381
- // fmt.Println("clientISDASIP:", clientISDASIP)
382
- // fmt.Println("clientPort:", clientPort)
364
+ // get the port used by clientCC after it bound to the dispatcher (because it might be 0)
365
+ clientPort = uint ((CCConn .LocalAddr ()).(* snet.Addr ).Host .L4 .Port ())
366
+ serverPort = serverCCAddr .Host .L4 .Port ()
383
367
384
368
// Address of client data channel (DC)
385
- clientDCAddr , err = snet .AddrFromString ( clientISDASIP + ":" + strconv . Itoa ( int ( clientPort ) + 1 ))
386
- Check ( err )
369
+ clientDCAddr = & snet.Addr { IA : clientCCAddr . IA , Host : & addr. AppAddr {
370
+ L3 : clientCCAddr . Host . L3 , L4 : addr . NewL4UDPInfo ( uint16 ( clientPort ) + 1 )}}
387
371
// Address of server data channel (DC)
388
- serverDCAddr , err = snet .AddrFromString (serverISDASIP + ":" + strconv .Itoa (int (serverPort )+ 1 ))
389
- Check (err )
372
+ serverDCAddr = & snet.Addr {IA : serverCCAddr .IA , Host : & addr.AppAddr {
373
+ L3 : serverCCAddr .Host .L3 , L4 : addr .NewL4UDPInfo (uint16 (serverPort ) + 1 )}}
374
+
390
375
// Set path on data connection
391
376
if ! serverDCAddr .IA .Eq (clientDCAddr .IA ) {
392
377
serverDCAddr .Path = spath .New (pathEntry .Path .FwdPath )
0 commit comments