-
Notifications
You must be signed in to change notification settings - Fork 15
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ndt7: remove dependency from m-lab/ndt7-client-go
Necessary because the upstream dependency doesn't build on Windows anymore. See https://github.com/ooni/probe-engine/pull/597/checks?check_run_id=674322840. Closes #515.
- Loading branch information
1 parent
c7d27fc
commit beca685
Showing
3 changed files
with
180 additions
and
148 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,177 @@ | ||
package ndt7 | ||
|
||
// This file vendors data structures from the following repositories: | ||
// | ||
// - github.com/m-lab/ndt7-client-go | ||
// - github.com/m-lab/ndt-server | ||
// - github.com/m-lab/tcp-info | ||
// | ||
// It is available under the Apache License v2.0. | ||
// | ||
// Because m-lab uses mainly Linux as a development platform, they may | ||
// unwillingly break our Windows builds. Also, they use lots of depdencies | ||
// that we don't actually need. Hence, vendoring FTW. | ||
// | ||
// The data structures are supposed to stay constant in time or to not | ||
// change dramatically, hence this vendoring shouldn't be too bad. | ||
|
||
type ( | ||
// OriginKind indicates the origin of a measurement. | ||
OriginKind string | ||
|
||
// TestKind indicates the direction of a measurement. | ||
TestKind string | ||
) | ||
|
||
const ( | ||
// OriginClient indicates that the measurement origin is the client. | ||
OriginClient = OriginKind("client") | ||
|
||
// OriginServer indicates that the measurement origin is the server. | ||
OriginServer = OriginKind("server") | ||
|
||
// TestDownload indicates that this is a download. | ||
TestDownload = TestKind("download") | ||
|
||
// TestUpload indicates that this is an upload. | ||
TestUpload = TestKind("upload") | ||
) | ||
|
||
// LinuxTCPInfo is the linux defined structure returned in RouteAttr DIAG_INFO messages. | ||
// It corresponds to the struct tcp_info in include/uapi/linux/tcp.h | ||
type LinuxTCPInfo struct { | ||
State uint8 `csv:"TCP.State"` | ||
CAState uint8 `csv:"TCP.CAState"` | ||
Retransmits uint8 `csv:"TCP.Retransmits"` | ||
Probes uint8 `csv:"TCP.Probes"` | ||
Backoff uint8 `csv:"TCP.Backoff"` | ||
Options uint8 `csv:"TCP.Options"` | ||
WScale uint8 `csv:"TCP.WScale"` //snd_wscale : 4, tcpi_rcv_wscale : 4; | ||
AppLimited uint8 `csv:"TCP.AppLimited"` //delivery_rate_app_limited:1; | ||
|
||
RTO uint32 `csv:"TCP.RTO"` // offset 8 | ||
ATO uint32 `csv:"TCP.ATO"` | ||
SndMSS uint32 `csv:"TCP.SndMSS"` | ||
RcvMSS uint32 `csv:"TCP.RcvMSS"` | ||
|
||
Unacked uint32 `csv:"TCP.Unacked"` // offset 24 | ||
Sacked uint32 `csv:"TCP.Sacked"` | ||
Lost uint32 `csv:"TCP.Lost"` | ||
Retrans uint32 `csv:"TCP.Retrans"` | ||
Fackets uint32 `csv:"TCP.Fackets"` | ||
|
||
/* Times. */ | ||
// These seem to be elapsed time, so they increase on almost every sample. | ||
// We can probably use them to get more info about intervals between samples. | ||
LastDataSent uint32 `csv:"TCP.LastDataSent"` // offset 44 | ||
LastAckSent uint32 `csv:"TCP.LastAckSent"` /* Not remembered, sorry. */ // offset 48 | ||
LastDataRecv uint32 `csv:"TCP.LastDataRecv"` // offset 52 | ||
LastAckRecv uint32 `csv:"TCP.LastDataRecv"` // offset 56 | ||
|
||
/* Metrics. */ | ||
PMTU uint32 `csv:"TCP.PMTU"` | ||
RcvSsThresh uint32 `csv:"TCP.RcvSsThresh"` | ||
RTT uint32 `csv:"TCP.RTT"` | ||
RTTVar uint32 `csv:"TCP.RTTVar"` | ||
SndSsThresh uint32 `csv:"TCP.SndSsThresh"` | ||
SndCwnd uint32 `csv:"TCP.SndCwnd"` | ||
AdvMSS uint32 `csv:"TCP.AdvMSS"` | ||
Reordering uint32 `csv:"TCP.Reordering"` | ||
|
||
RcvRTT uint32 `csv:"TCP.RcvRTT"` | ||
RcvSpace uint32 `csv:"TCP.RcvSpace"` | ||
|
||
TotalRetrans uint32 `csv:"TCP.TotalRetrans"` | ||
|
||
PacingRate int64 `csv:"TCP.PacingRate"` // This is often -1, so better for it to be signed | ||
MaxPacingRate int64 `csv:"TCP.MaxPacingRate"` // This is often -1, so better to be signed. | ||
|
||
// NOTE: In linux, these are uint64, but we make them int64 here for compatibility with BigQuery | ||
BytesAcked int64 `csv:"TCP.BytesAcked"` /* RFC4898 tcpEStatsAppHCThruOctetsAcked */ | ||
BytesReceived int64 `csv:"TCP.BytesReceived"` /* RFC4898 tcpEStatsAppHCThruOctetsReceived */ | ||
SegsOut int32 `csv:"TCP.SegsOut"` /* RFC4898 tcpEStatsPerfSegsOut */ | ||
SegsIn int32 `csv:"TCP.SegsIn"` /* RFC4898 tcpEStatsPerfSegsIn */ | ||
|
||
NotsentBytes uint32 `csv:"TCP.NotsentBytes"` | ||
MinRTT uint32 `csv:"TCP.MinRTT"` | ||
DataSegsIn uint32 `csv:"TCP.DataSegsIn"` /* RFC4898 tcpEStatsDataSegsIn */ | ||
DataSegsOut uint32 `csv:"TCP.DataSegsOut"` /* RFC4898 tcpEStatsDataSegsOut */ | ||
|
||
// NOTE: In linux, this is uint64, but we make it int64 here for compatibility with BigQuery | ||
DeliveryRate int64 `csv:"TCP.DeliveryRate"` | ||
|
||
BusyTime int64 `csv:"TCP.BusyTime"` /* Time (usec) busy sending data */ | ||
RWndLimited int64 `csv:"TCP.RWndLimited"` /* Time (usec) limited by receive window */ | ||
SndBufLimited int64 `csv:"TCP.SndBufLimited"` /* Time (usec) limited by send buffer */ | ||
|
||
Delivered uint32 `csv:"TCP.Delivered"` | ||
DeliveredCE uint32 `csv:"TCP.DeliveredCE"` | ||
|
||
// NOTE: In linux, these are uint64, but we make them int64 here for compatibility with BigQuery | ||
BytesSent int64 `csv:"TCP.BytesSent"` /* RFC4898 tcpEStatsPerfHCDataOctetsOut */ | ||
BytesRetrans int64 `csv:"TCP.BytesRetrans"` /* RFC4898 tcpEStatsPerfOctetsRetrans */ | ||
|
||
DSackDups uint32 `csv:"TCP.DSackDups"` /* RFC4898 tcpEStatsStackDSACKDups */ | ||
ReordSeen uint32 `csv:"TCP.ReordSeen"` /* reordering events seen */ | ||
} | ||
|
||
// AppInfo contains an application level measurement. This structure is | ||
// described in the ndt7 specification. | ||
type AppInfo struct { | ||
NumBytes int64 | ||
ElapsedTime int64 | ||
} | ||
|
||
// ConnectionInfo contains connection info. This structure is described | ||
// in the ndt7 specification. | ||
type ConnectionInfo struct { | ||
Client string | ||
Server string | ||
UUID string `json:",omitempty"` | ||
} | ||
|
||
// InetDiagBBRInfo implements the struct associated with INET_DIAG_BBRINFO attribute, corresponding with | ||
// linux struct tcp_bbr_info in uapi/linux/inet_diag.h. | ||
type InetDiagBBRInfo struct { | ||
BW int64 `csv:"BBR.BW"` // Max-filtered BW (app throughput) estimate in bytes/second | ||
MinRTT uint32 `csv:"BBR.MinRTT"` // Min-filtered RTT in uSec | ||
PacingGain uint32 `csv:"BBR.PacingGain"` // Pacing gain shifted left 8 bits | ||
CwndGain uint32 `csv:"BBR.CwndGain"` // Cwnd gain shifted left 8 bits | ||
} | ||
|
||
// The BBRInfo struct contains information measured using BBR. This structure is | ||
// an extension to the ndt7 specification. Variables here have the same | ||
// measurement unit that is used by the Linux kernel. | ||
type BBRInfo struct { | ||
InetDiagBBRInfo | ||
ElapsedTime int64 | ||
} | ||
|
||
// The TCPInfo struct contains information measured using TCP_INFO. This | ||
// structure is described in the ndt7 specification. | ||
type TCPInfo struct { | ||
LinuxTCPInfo | ||
ElapsedTime int64 | ||
} | ||
|
||
// The Measurement struct contains measurement results. This message is | ||
// an extension of the one inside of v0.9.0 of the ndt7 spec. | ||
type Measurement struct { | ||
// AppInfo contains application level measurements. | ||
AppInfo *AppInfo `json:",omitempty"` | ||
|
||
// BBRInfo is the data measured using TCP BBR instrumentation. | ||
BBRInfo *BBRInfo `json:",omitempty"` | ||
|
||
// ConnectionInfo contains info on the connection. | ||
ConnectionInfo *ConnectionInfo `json:",omitempty"` | ||
|
||
// Origin indicates who performed this measurement. | ||
Origin OriginKind `json:",omitempty"` | ||
|
||
// Test contains the test name. | ||
Test TestKind `json:",omitempty"` | ||
|
||
// TCPInfo contains metrics measured using TCP_INFO instrumentation. | ||
TCPInfo *TCPInfo `json:",omitempty"` | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.