@@ -33,49 +33,57 @@ pub struct Args {
33
33
34
34
/// enable IPv6 on the server (on most hosts, this will allow both IPv4 and IPv6,
35
35
/// but it might limit to just IPv6 on some)
36
- #[ arg( short = '6' , long) ]
36
+ #[ arg( short = '6' , long, conflicts_with = "client" ) ]
37
37
pub version6 : bool ,
38
38
39
39
/// limit the number of concurrent clients that can be processed by a server;
40
40
/// any over this count will be immediately disconnected
41
- #[ arg( long, value_name = "number" , default_value = "0" ) ]
41
+ #[ arg( long, value_name = "number" , default_value = "0" , conflicts_with = "client" ) ]
42
42
pub client_limit : usize ,
43
43
44
44
/// run in client mode; value is the server's address
45
45
#[ arg( short, long, value_name = "host" , conflicts_with = "server" ) ]
46
46
pub client : Option < std:: net:: IpAddr > ,
47
47
48
48
/// run in reverse-mode (server sends, client receives)
49
- #[ arg( short = 'R' , long) ]
49
+ #[ arg( short = 'R' , long, conflicts_with = "server" ) ]
50
50
pub reverse : bool ,
51
51
52
52
/// the format in which to deplay information (json, megabit/sec, megabyte/sec)
53
- #[ arg( short, long, value_enum, value_name = "format" , default_value = "megabit" ) ]
53
+ #[ arg(
54
+ short,
55
+ long,
56
+ value_enum,
57
+ value_name = "format" ,
58
+ default_value = "megabit" ,
59
+ conflicts_with = "server"
60
+ ) ]
54
61
pub format : Format ,
55
62
56
63
/// use UDP rather than TCP
57
- #[ arg( short, long) ]
64
+ #[ arg( short, long, conflicts_with = "server" ) ]
58
65
pub udp : bool ,
59
66
60
67
/// target bandwidth in bytes/sec; this value is applied to each stream,
61
68
/// with a default target of 1 megabit/second for all protocols (note: megabit, not mebibit);
62
69
/// the suffixes kKmMgG can also be used for xbit and xbyte, respectively
63
- #[ arg( short, long, default_value = "125000" , value_name = "bytes/sec" ) ]
70
+ #[ arg( short, long, default_value = "125000" , value_name = "bytes/sec" , conflicts_with = "server" ) ]
64
71
pub bandwidth : String ,
65
72
66
73
/// the time in seconds for which to transmit
67
- #[ arg( short, long, default_value = "10.0" , value_name = "seconds" ) ]
74
+ #[ arg( short, long, default_value = "10.0" , value_name = "seconds" , conflicts_with = "server" ) ]
68
75
pub time : f64 ,
69
76
70
77
/// the interval at which to send batches of data, in seconds, between [0.0 and 1.0);
71
78
/// this is used to evenly spread packets out over time
72
- #[ arg( long, default_value = "0.05" , value_name = "seconds" ) ]
79
+ #[ arg( long, default_value = "0.05" , value_name = "seconds" , conflicts_with = "server" ) ]
73
80
pub send_interval : f64 ,
74
81
75
82
/// length of the buffer to exchange; for TCP, this defaults to 32 kibibytes; for UDP, it's 1024 bytes
76
83
#[ arg(
77
84
short,
78
85
long,
86
+ conflicts_with = "server" ,
79
87
default_value = "32768" ,
80
88
default_value_if( "udp" , "true" , Some ( "1024" ) ) ,
81
89
value_name = "bytes"
@@ -85,27 +93,27 @@ pub struct Args {
85
93
/// send buffer, in bytes (only supported on some platforms;
86
94
/// if set too small, a 'resource unavailable' error may occur;
87
95
/// affects TCP window-size)
88
- #[ arg( long, default_value = "0" , value_name = "bytes" ) ]
96
+ #[ arg( long, default_value = "0" , value_name = "bytes" , conflicts_with = "server" ) ]
89
97
pub send_buffer : usize ,
90
98
91
99
/// receive buffer, in bytes (only supported on some platforms;
92
100
/// if set too small, a 'resource unavailable' error may occur; affects TCP window-size)
93
- #[ arg( long, default_value = "0" , value_name = "bytes" ) ]
101
+ #[ arg( long, default_value = "0" , value_name = "bytes" , conflicts_with = "server" ) ]
94
102
pub receive_buffer : usize ,
95
103
96
104
/// the number of parallel data-streams to use
97
- #[ arg( short = 'P' , long, value_name = "number" , default_value = "1" ) ]
105
+ #[ arg( short = 'P' , long, value_name = "number" , default_value = "1" , conflicts_with = "server" ) ]
98
106
pub parallel : usize ,
99
107
100
108
/// omit a number of seconds from the start of calculations,
101
109
/// primarily to avoid including TCP ramp-up in averages;
102
110
/// using this option may result in disagreement between bytes sent and received,
103
111
/// since data can be in-flight across time-boundaries
104
- #[ arg( short, long, default_value = "0" , value_name = "seconds" ) ]
112
+ #[ arg( short, long, default_value = "0" , value_name = "seconds" , conflicts_with = "server" ) ]
105
113
pub omit : usize ,
106
114
107
115
/// use no-delay mode for TCP tests, disabling Nagle's Algorithm
108
- #[ arg( short = 'N' , long) ]
116
+ #[ arg( short = 'N' , long, conflicts_with = "server" ) ]
109
117
pub no_delay : bool ,
110
118
111
119
/// an optional pool of IPv4 TCP ports over which data will be accepted;
@@ -127,6 +135,10 @@ pub struct Args {
127
135
/// if omitted, any OS-assignable port is used; format: 1-10,19,21
128
136
#[ arg( long, value_name = "ports" , default_value = "" ) ]
129
137
pub udp6_port_pool : String ,
138
+
139
+ /// Verbosity level
140
+ #[ arg( short, long, value_name = "level" , value_enum, default_value = "info" ) ]
141
+ pub verbosity : ArgVerbosity ,
130
142
}
131
143
132
144
#[ derive( Debug , Copy , Clone , PartialEq , Eq , PartialOrd , Ord , clap:: ValueEnum , Default ) ]
@@ -146,3 +158,27 @@ impl std::fmt::Display for Format {
146
158
}
147
159
}
148
160
}
161
+
162
+ #[ derive( Debug , Copy , Clone , Default , PartialEq , Eq , PartialOrd , Ord , clap:: ValueEnum ) ]
163
+ pub enum ArgVerbosity {
164
+ Off ,
165
+ Error ,
166
+ Warn ,
167
+ #[ default]
168
+ Info ,
169
+ Debug ,
170
+ Trace ,
171
+ }
172
+
173
+ impl std:: fmt:: Display for ArgVerbosity {
174
+ fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
175
+ match self {
176
+ ArgVerbosity :: Off => write ! ( f, "off" ) ,
177
+ ArgVerbosity :: Error => write ! ( f, "error" ) ,
178
+ ArgVerbosity :: Warn => write ! ( f, "warn" ) ,
179
+ ArgVerbosity :: Info => write ! ( f, "info" ) ,
180
+ ArgVerbosity :: Debug => write ! ( f, "debug" ) ,
181
+ ArgVerbosity :: Trace => write ! ( f, "trace" ) ,
182
+ }
183
+ }
184
+ }
0 commit comments