@@ -29,11 +29,13 @@ import (
29
29
30
30
"github.com/uber/arachne/config"
31
31
"github.com/uber/arachne/defines"
32
+ "github.com/uber/arachne/internal/ip"
32
33
"github.com/uber/arachne/internal/log"
33
34
"github.com/uber/arachne/internal/tcp"
34
35
"github.com/uber/arachne/metrics"
35
36
36
37
"github.com/fatih/color"
38
+ "github.com/google/gopacket/layers"
37
39
"go.uber.org/zap"
38
40
"go.uber.org/zap/zapcore"
39
41
)
@@ -49,14 +51,14 @@ type report struct {
49
51
}
50
52
51
53
// map[target address string] => *[QOS_DCSP_VALUE] =>map[source port]
52
- type resultStore map [string ]* [defines .NumQOSDCSPValues ]map [uint16 ]report
54
+ type resultStore map [string ]* [defines .NumQOSDCSPValues ]map [layers. TCPPort ]report
53
55
type messageStore map [string ]* [defines .NumQOSDCSPValues ]srcPortScopedMessageStore
54
56
55
57
type srcPortScopedMessageStore struct {
56
58
sent srcPortScopedMessages
57
59
rcvd srcPortScopedMessages
58
60
}
59
- type srcPortScopedMessages map [uint16 ]tcp.Message
61
+ type srcPortScopedMessages map [layers. TCPPort ]tcp.Message
60
62
61
63
func (ms messageStore ) target (target string , QosDSCPIndex uint8 ) * srcPortScopedMessageStore {
62
64
// TODO: validate dscp is in range or create a dscp type alias
@@ -72,19 +74,19 @@ func (ms messageStore) target(target string, QosDSCPIndex uint8) *srcPortScopedM
72
74
return & ms [target ][QosDSCPIndex ]
73
75
}
74
76
75
- func (spsm srcPortScopedMessages ) add (srcPort uint16 , message tcp.Message ) {
77
+ func (spsm srcPortScopedMessages ) add (srcPort layers. TCPPort , message tcp.Message ) {
76
78
spsm [srcPort ] = message
77
79
}
78
80
79
- func (ms messageStore ) sentAdd (target string , QosDSCPIndex uint8 , srcPort uint16 , message tcp.Message ) {
81
+ func (ms messageStore ) sentAdd (target string , QosDSCPIndex uint8 , srcPort layers. TCPPort , message tcp.Message ) {
80
82
ms .target (target , QosDSCPIndex ).sent .add (srcPort , message )
81
83
}
82
84
83
- func (ms messageStore ) rcvdAdd (target string , QosDSCPIndex uint8 , srcPort uint16 , message tcp.Message ) {
85
+ func (ms messageStore ) rcvdAdd (target string , QosDSCPIndex uint8 , srcPort layers. TCPPort , message tcp.Message ) {
84
86
ms .target (target , QosDSCPIndex ).rcvd .add (srcPort , message )
85
87
}
86
88
87
- func (ms messageStore ) existsRcvd (target string , QosDSCPIndex uint8 , srcPort uint16 ) (tcp.Message , bool ) {
89
+ func (ms messageStore ) existsRcvd (target string , QosDSCPIndex uint8 , srcPort layers. TCPPort ) (tcp.Message , bool ) {
88
90
89
91
if _ , exists := ms [target ]; ! exists {
90
92
return tcp.Message {}, false
@@ -99,7 +101,7 @@ func (ms messageStore) existsRcvd(target string, QosDSCPIndex uint8, srcPort uin
99
101
return matchedMsg , true
100
102
}
101
103
102
- func (ms messageStore ) existsSent (target string , QosDSCPIndex uint8 , srcPort uint16 ) (tcp.Message , bool ) {
104
+ func (ms messageStore ) existsSent (target string , QosDSCPIndex uint8 , srcPort layers. TCPPort ) (tcp.Message , bool ) {
103
105
104
106
if _ , exists := ms [target ]; ! exists {
105
107
return tcp.Message {}, false
@@ -114,23 +116,23 @@ func (ms messageStore) existsSent(target string, QosDSCPIndex uint8, srcPort uin
114
116
return matchedMsg , true
115
117
}
116
118
117
- func (rs resultStore ) add (target string , QosDSCPIndex uint8 , srcPort uint16 , r report ) {
119
+ func (rs resultStore ) add (target string , QosDSCPIndex uint8 , srcPort layers. TCPPort , r report ) {
118
120
119
121
if rs [target ] == nil {
120
- var resDSCP [defines .NumQOSDCSPValues ]map [uint16 ]report
122
+ var resDSCP [defines .NumQOSDCSPValues ]map [layers. TCPPort ]report
121
123
rs [target ] = & resDSCP
122
124
}
123
125
if rs [target ][QosDSCPIndex ] == nil {
124
- rs [target ][QosDSCPIndex ] = make (map [uint16 ]report )
126
+ rs [target ][QosDSCPIndex ] = make (map [layers. TCPPort ]report )
125
127
}
126
128
rs [target ][QosDSCPIndex ][srcPort ] = r
127
129
}
128
130
129
- type resultWalker func (report , string , string , uint16 , bool , * log.Logger )
131
+ type resultWalker func (report , string , string , layers. TCPPort , bool , * log.Logger )
130
132
131
133
func (rs resultStore ) walkResults (
132
134
remotes config.RemoteStore ,
133
- currentDSCP * tcp .DSCPValue ,
135
+ currentDSCP * ip .DSCPValue ,
134
136
foreground bool ,
135
137
logger * log.Logger ,
136
138
walkerF ... resultWalker ) {
@@ -144,9 +146,10 @@ func (rs resultStore) walkResults(
144
146
145
147
qos := * currentDSCP
146
148
if remote .External {
147
- qos = tcp .DSCPBeLow
149
+ qos = ip .DSCPBeLow
148
150
}
149
- for srcPort , rep := range r [(tcp .GetDSCP ).Pos (qos , logger )] {
151
+
152
+ for srcPort , rep := range r [(ip .GetDSCP ).Pos (qos , logger )] {
150
153
walkerF [0 ](rep , remote .Hostname , remote .Location , srcPort , foreground , logger )
151
154
}
152
155
if len (walkerF ) > 1 {
@@ -184,7 +187,7 @@ func (rs resultStore) processResults(
184
187
185
188
// Store processed report to 'result' data structure for stdout, if needed
186
189
if ! * (gl .CLI .SenderOnlyMode ) {
187
- QosDSCPIndex := (tcp .GetDSCP ).Pos (req .QosDSCP , logger )
190
+ QosDSCPIndex := (ip .GetDSCP ).Pos (req .QosDSCP , logger )
188
191
rs .add (target , QosDSCPIndex , req .SrcPort , r )
189
192
}
190
193
@@ -194,7 +197,7 @@ func (rs resultStore) processResults(
194
197
func (rs resultStore ) printResults (
195
198
gl * config.Global ,
196
199
remotes config.RemoteStore ,
197
- currentDSCP * tcp .DSCPValue ,
200
+ currentDSCP * ip .DSCPValue ,
198
201
logger * log.Logger ,
199
202
) {
200
203
foreground := * gl .CLI .Foreground
@@ -210,7 +213,7 @@ func Run(
210
213
sentC chan tcp.Message ,
211
214
rcvdC chan tcp.Message ,
212
215
remotes config.RemoteStore ,
213
- currentDSCP * tcp .DSCPValue ,
216
+ currentDSCP * ip .DSCPValue ,
214
217
sr metrics.Reporter ,
215
218
completeCycleUpload chan bool ,
216
219
wg * sync.WaitGroup ,
@@ -246,7 +249,7 @@ func batchWorker(
246
249
remotes config.RemoteStore ,
247
250
ms messageStore ,
248
251
rs resultStore ,
249
- currentDSCP * tcp .DSCPValue ,
252
+ currentDSCP * ip .DSCPValue ,
250
253
sfn statsUploader ,
251
254
sr metrics.Reporter ,
252
255
completeCycleUpload chan bool ,
@@ -263,7 +266,7 @@ func batchWorker(
263
266
zap .Any ("type" , out .Type ))
264
267
continue
265
268
}
266
- QosDSCPIndex := (tcp .GetDSCP ).Pos (out .QosDSCP , logger )
269
+ QosDSCPIndex := (ip .GetDSCP ).Pos (out .QosDSCP , logger )
267
270
268
271
// SYN sent
269
272
targetKey := out .DstAddr .String ()
@@ -285,7 +288,7 @@ func batchWorker(
285
288
zap .Any ("type" , in .Type ))
286
289
continue
287
290
}
288
- QosDSCPIndex := (tcp .GetDSCP ).Pos (in .QosDSCP , logger )
291
+ QosDSCPIndex := (ip .GetDSCP ).Pos (in .QosDSCP , logger )
289
292
290
293
// SYN+ACK received
291
294
targetKey := in .SrcAddr .String ()
@@ -359,8 +362,8 @@ type statsUploader func(
359
362
sr metrics.Reporter ,
360
363
target string ,
361
364
remotes config.RemoteStore ,
362
- QOSDSCP tcp .DSCPValue ,
363
- srcPort uint16 ,
365
+ QOSDSCP ip .DSCPValue ,
366
+ srcPort layers. TCPPort ,
364
367
r * report ,
365
368
logger * log.Logger ,
366
369
)
@@ -370,8 +373,8 @@ func statsUpload(
370
373
sr metrics.Reporter ,
371
374
target string ,
372
375
remotes config.RemoteStore ,
373
- QOSDSCP tcp .DSCPValue ,
374
- srcPort uint16 ,
376
+ QOSDSCP ip .DSCPValue ,
377
+ srcPort layers. TCPPort ,
375
378
r * report ,
376
379
logger * log.Logger ,
377
380
) {
@@ -416,12 +419,12 @@ func zeroOutResults(
416
419
for targetKey := range ms {
417
420
_ , existsTarget := rs [targetKey ]
418
421
if ! existsTarget {
419
- var resDSCP [defines .NumQOSDCSPValues ]map [uint16 ]report
422
+ var resDSCP [defines .NumQOSDCSPValues ]map [layers. TCPPort ]report
420
423
rs [targetKey ] = & resDSCP
421
424
}
422
425
for qosDSCP := 0 ; qosDSCP < defines .NumQOSDCSPValues ; qosDSCP ++ {
423
426
if rs [targetKey ][qosDSCP ] == nil {
424
- rs [targetKey ][qosDSCP ] = make (map [uint16 ]report )
427
+ rs [targetKey ][qosDSCP ] = make (map [layers. TCPPort ]report )
425
428
}
426
429
for srcPort := range ms [targetKey ][qosDSCP ].sent {
427
430
if _ , existsSrc := rs [targetKey ][qosDSCP ][srcPort ]; existsSrc {
@@ -430,7 +433,7 @@ func zeroOutResults(
430
433
rs [targetKey ][qosDSCP ][srcPort ] = timedOutReport
431
434
432
435
// Upload timed out results
433
- sfn (glr , sr , targetKey , remotes , tcp .GetDSCP [qosDSCP ], srcPort , & timedOutReport , logger )
436
+ sfn (glr , sr , targetKey , remotes , ip .GetDSCP [qosDSCP ], srcPort , & timedOutReport , logger )
434
437
time .Sleep (1 * time .Millisecond )
435
438
}
436
439
}
@@ -465,7 +468,7 @@ func printTableHeader(gl *config.Global, currentDSCP string, logger *log.Logger)
465
468
zap .String ("version" , defines .ArachneVersion ),
466
469
zap .String ("host" , gl .RemoteConfig .HostName ),
467
470
zap .String ("host_location" , gl .RemoteConfig .Location ),
468
- zap .Uint16 ("target_TCP_port" , gl .RemoteConfig .TargetTCPPort ),
471
+ zap .Any ("target_TCP_port" , gl .RemoteConfig .TargetTCPPort ),
469
472
zap .String ("QoS_DSCP" , currentDSCP ),
470
473
)
471
474
}
@@ -486,7 +489,7 @@ func printTableEntry(
486
489
r report ,
487
490
targetHost string ,
488
491
targetLocation string ,
489
- srcPort uint16 ,
492
+ srcPort layers. TCPPort ,
490
493
foreground bool ,
491
494
logger * log.Logger ,
492
495
) {
@@ -532,7 +535,7 @@ func printTableEntry(
532
535
logger .Info ("Result" ,
533
536
zap .String ("target" , targetHost ),
534
537
zap .String ("target_location" , targetLocation ),
535
- zap .Uint16 ("source_port" , srcPort ),
538
+ zap .Any ("source_port" , srcPort ),
536
539
twoWay ,
537
540
oneWay ,
538
541
zap .String ("timed_out" , timedOut ))
0 commit comments