1 /*--------------------------------------------------------------- 2 * Copyright (c) 1999,2000,2001,2002,2003 3 * The Board of Trustees of the University of Illinois 4 * All Rights Reserved. 5 *--------------------------------------------------------------- 6 * Permission is hereby granted, free of charge, to any person 7 * obtaining a copy of this software (Iperf) and associated 8 * documentation files (the "Software"), to deal in the Software 9 * without restriction, including without limitation the 10 * rights to use, copy, modify, merge, publish, distribute, 11 * sublicense, and/or sell copies of the Software, and to permit 12 * persons to whom the Software is furnished to do 13 * so, subject to the following conditions: 14 * 15 * 16 * Redistributions of source code must retain the above 17 * copyright notice, this list of conditions and 18 * the following disclaimers. 19 * 20 * 21 * Redistributions in binary form must reproduce the above 22 * copyright notice, this list of conditions and the following 23 * disclaimers in the documentation and/or other materials 24 * provided with the distribution. 25 * 26 * 27 * Neither the names of the University of Illinois, NCSA, 28 * nor the names of its contributors may be used to endorse 29 * or promote products derived from this Software without 30 * specific prior written permission. 31 * 32 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 33 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 34 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 35 * NONINFRINGEMENT. IN NO EVENT SHALL THE CONTIBUTORS OR COPYRIGHT 36 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 37 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 38 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE 39 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 40 * ________________________________________________________________ 41 * National Laboratory for Applied Network Research 42 * National Center for Supercomputing Applications 43 * University of Illinois at Urbana-Champaign 44 * http://www.ncsa.uiuc.edu 45 * ________________________________________________________________ 46 * 47 * Settings.hpp 48 * by Mark Gates <mgates@nlanr.net> 49 * & Ajay Tirumala <tirumala@ncsa.uiuc.edu> 50 * ------------------------------------------------------------------- 51 * Stores and parses the initial values for all the global variables. 52 * ------------------------------------------------------------------- 53 * headers 54 * uses 55 * <stdlib.h> 56 * <assert.h> 57 * ------------------------------------------------------------------- */ 58 59 #ifndef SETTINGS_H 60 #define SETTINGS_H 61 62 #include "headers.h" 63 #include "Thread.h" 64 #include "Condition.h" 65 #include "packet_ring.h" 66 67 /* ------------------------------------------------------------------- 68 * constants 69 * ------------------------------------------------------------------- */ 70 #ifdef __cplusplus 71 extern "C" { 72 #endif 73 74 /* Smallest report interval supported. Units is microseconds */ 75 #ifndef HAVE_FASTSAMPLING 76 #define SMALLEST_INTERVAL 5000 // 5ms 77 #define SMALLEST_INTERVAL_SEC 0.005 // 5ms 78 #else 79 #define SMALLEST_INTERVAL 100 // 100 usec 80 #define SMALLEST_INTERVAL_SEC 0.0001 // 5ms 81 #endif 82 83 #define SLOPSECS 2 84 // maximum difference allowed between the tx (client) start time and the 85 // the first receive time (units seconds, requires --trip-times on client) 86 #define MAXDIFFTIMESTAMPSECS 600 87 // maximum difference in seconds to bound --txstart-time 88 #define MAXDIFFTXSTART 3600 89 // maximum difference in seconds to bound --txdelay-time, 90 // if this is too large and w/o keep-alives the connect may drop 91 #define MAXDIFFTXDELAY 3600 92 // maximum inter packet gap (or write delay) for UDP packets 93 #define MAXIPGSECS 60 94 #define CSVPEERLIMIT ((REPORT_ADDRLEN * 2) + 40) 95 #define NEARCONGEST_DEFAULT 0.5 96 #define DEFAULT_PERMITKEY_LIFE 20.0 // units is seconds 97 #define TESTEXCHANGETIMEOUT (4 * 1000000) // 4 secs, units is microseconds 98 #ifndef MAXTTL 99 #define MAXTTL 255 100 #endif 101 102 // server/client mode 103 enum ThreadMode { 104 kMode_Unknown = 0, 105 kMode_Server, 106 kMode_Client, 107 kMode_Reporter, 108 kMode_ReporterClient, 109 kMode_WriteAckServer, 110 kMode_WriteAckClient, 111 kMode_Listener 112 }; 113 114 // report mode 115 enum ReportMode { 116 kReport_Default = 0, 117 kReport_CSV 118 }; 119 120 // test mode 121 enum TestMode { 122 kTest_Normal = 0, 123 kTest_DualTest, 124 kTest_TradeOff, 125 kTest_Unknown 126 }; 127 128 // interval reporting mode 129 enum IntervalMode { 130 kInterval_None = 0, 131 kInterval_Time, 132 kInterval_Frames 133 }; 134 135 // rate request units 136 enum RateUnits { 137 kRate_BW = 0, 138 kRate_PPS 139 }; 140 141 #include "Reporter.h" 142 #include "payloads.h" 143 144 /* 145 * The thread_Settings is a structure that holds all 146 * options for a given execution of either a client 147 * or server. By using this structure rather than 148 * a global structure or class we can have multiple 149 * clients or servers running with different settings. 150 * In version 2.0 and above this structure contains 151 * all the information needed for a thread to execute 152 * and contains only C elements so it can be manipulated 153 * by either C or C++. 154 */ 155 struct thread_Settings { 156 // Pointers 157 char* mFileName; // -F 158 char* mHost; // -c 159 char* mHideHost; 160 char* mLocalhost; // -B 161 char* mOutputFileName; // -o 162 char* mIfrname; // %<device> name (for rx) 163 char* mIfrnametx; // %<device> name (for tx) 164 char* mSSMMulticastStr; // --ssm-host 165 char* mIsochronousStr; // --isochronous 166 char* mHistogramStr; // --histograms (packets) 167 char* mTransferIDStr; // 168 char* mBuf; 169 FILE* Extractor_file; 170 171 struct ReportHeader* reporthdr; 172 struct SumReport* mSumReport; 173 struct SumReport* mFullDuplexReport; 174 struct thread_Settings *runNow; 175 struct thread_Settings *runNext; 176 // int's 177 int mThreads; // -P 178 int mTOS; // -S 179 int mTransferID; 180 int mConnectRetries; 181 #if WIN32 182 SOCKET mSock; 183 #else 184 int mSock; 185 #endif 186 #if defined(HAVE_LINUX_FILTER_H) && defined(HAVE_AF_PACKET) 187 int mSockDrop; 188 #endif 189 int Extractor_size; 190 int mBufLen; // -l 191 int mWriteAckLen; // --write-ack 192 int mMSS; // -M 193 int mTCPWin; // -w 194 /* flags is a BitMask of old bools 195 bool mBufLenSet; // -l 196 bool mCompat; // -C 197 bool mDaemon; // -D 198 bool mDomain; // -V 199 bool mFileInput; // -F or -I 200 bool mNodelay; // -N 201 bool mPrintMSS; // -m 202 bool mRemoveService; // -R 203 bool mStdin; // -I 204 bool mStdout; // -o 205 bool mSuggestWin; // -W 206 bool mUDP; // -u 207 bool mMode_time; 208 bool mReportSettings; 209 bool mMulticast; 210 bool mNoSettingsReport; // -x s 211 bool mNoConnectionReport; // -x c 212 bool mNoDataReport; // -x d 213 bool mNoServerReport; // -x 214 bool mNoMultReport; // -x m 215 bool mSinlgeClient; // -1 */ 216 int flags; 217 int flags_extend; 218 int flags_extend2; 219 // enums (which should be special int's) 220 enum ThreadMode mThreadMode; // -s or -c 221 enum ReportMode mReportMode; 222 enum TestMode mMode; // -r or -d 223 bool clientListener; // set to True if client mode listener per -r or -d 224 // Hopefully int64_t's 225 uintmax_t mAppRate; // -b or -u 226 char mAppRateUnits; // -b is either bw or pps 227 uintmax_t mAmount; // -n or -t time unit is 10 ms 228 unsigned int mInterval; // -i integer time units is usec 229 enum IntervalMode mIntervalMode; 230 // shorts 231 unsigned short mListenPort; // -L 232 unsigned short mPort; // -p 233 unsigned short mPortLast; // -p last port, e.g. when -p 6001-6010 234 unsigned short mBindPort; // -B 235 // chars 236 char mFormat; // -f 237 int mTTL; // -T 238 char pad1[2]; 239 // structs or miscellaneous 240 iperf_sockaddr peer; 241 Socklen_t size_peer; 242 iperf_sockaddr local; 243 Socklen_t size_local; 244 nthread_t mTID; 245 int incrdstip; 246 int incrsrcip; 247 int incrsrcport; 248 int connectonly_count; 249 char* mCongestion; 250 int mHistBins; 251 int mHistBinsize; 252 int mHistUnits; 253 double mHistci_lower; 254 double mHistci_upper; 255 #if defined(HAVE_WIN32_THREAD) 256 HANDLE mHandle; 257 #endif 258 double mFPS; //frames per second 259 double mMean; //variable bit rate mean 260 uint32_t mBurstSize; //number of bytes in a burst 261 int mJitterBufSize; //Server jitter buffer size, units is frames 262 double mBurstIPG; //Interpacket gap 263 int l4offset; // used in l2 mode to offset the raw packet 264 int l4payloadoffset; 265 int recvflags; // used to set recv flags,e.g. MSG_TRUNC with L 266 double mVariance; //vbr variance 267 uintmax_t mFQPacingRate; 268 struct timeval txholdback_timer; 269 struct timeval txstart_epoch; 270 struct timeval accept_time; 271 struct timeval sent_time; 272 struct Condition awake_me; 273 struct PacketRing *ackring; 274 struct BarrierMutex *connects_done; 275 int numreportstructs; 276 int32_t peer_version_u; 277 int32_t peer_version_l; 278 double connecttime; 279 double rtt_nearcongest_divider; 280 char mPermitKey[MAX_PERMITKEY_LEN + 1]; //add some space for timestamp 281 struct timeval mPermitKeyTime; 282 bool mKeyCheck; 283 double mListenerTimeout; 284 int tuntapdev; 285 int firstreadbytes; 286 #if HAVE_DECL_TCP_WINDOW_CLAMP 287 int mClampSize; 288 #endif 289 #if HAVE_DECL_TCP_NOTSENT_LOWAT 290 int mWritePrefetch; 291 #endif 292 }; 293 294 /* 295 * Thread based flags 296 * 297 * Due to the use of thread_Settings in C and C++ 298 * we are unable to use bool values. To provide 299 * the functionality of bools we use the following 300 * bitmask over an assumed 32 bit int. This will 301 * work fine on 64bit machines we will just be ignoring 302 * the upper 32bits. 303 * 304 * To add a flag simply define it as the next bit then 305 * add the 3 support functions below. 306 */ 307 #define FLAG_BUFLENSET 0x00000001 308 #define FLAG_COMPAT 0x00000002 309 #define FLAG_DAEMON 0x00000004 310 #define FLAG_DOMAIN 0x00000008 311 #define FLAG_FILEINPUT 0x00000010 312 #define FLAG_NODELAY 0x00000020 313 #define FLAG_PRINTMSS 0x00000040 314 #define FLAG_REMOVESERVICE 0x00000080 315 #define FLAG_STDIN 0x00000100 316 #define FLAG_STDOUT 0x00000200 317 #define FLAG_SUGGESTWIN 0x00000400 318 #define FLAG_UDP 0x00000800 319 #define FLAG_MODETIME 0x00001000 320 #define FLAG_REPORTSETTINGS 0x00002000 321 #define FLAG_MULTICAST 0x00004000 322 #define FLAG_NOSETTREPORT 0x00008000 323 #define FLAG_NOCONNREPORT 0x00010000 324 #define FLAG_NODATAREPORT 0x00020000 325 #define FLAG_NOSERVREPORT 0x00040000 326 #define FLAG_NOMULTREPORT 0x00080000 327 #define FLAG_SINGLECLIENT 0x00100000 328 #define FLAG_SINGLEUDP 0x00200000 329 #define FLAG_CONGESTION 0x00400000 330 #define FLAG_REALTIME 0x00800000 331 #define FLAG_BWSET 0x01000000 332 #define FLAG_ENHANCEDREPORT 0x02000000 333 #define FLAG_SERVERMODETIME 0x04000000 334 #define FLAG_SSM_MULTICAST 0x08000000 335 /* 336 * Extended flags 337 */ 338 #define FLAG_PEERVER 0x00000001 339 #define FLAG_SEQNO64 0x00000002 340 #define FLAG_REVERSE 0x00000004 341 #define FLAG_ISOCHRONOUS 0x00000008 342 #define FLAG_UDPUNUSED 0x00000010 343 #define FLAG_HISTOGRAM 0x00000020 344 #define FLAG_L2LENGTHCHECK 0x00000100 345 #define FLAG_TXSTARTTIME 0x00000200 346 #define FLAG_INCRDSTIP 0x00000400 347 #define FLAG_VARYLOAD 0x00000800 348 #define FLAG_FQPACING 0x00001000 349 #define FLAG_TRIPTIME 0x00002000 350 #define FLAG_TXHOLDBACK 0x00004000 351 #define FLAG_TCPWRITETIME 0x00008000 352 #define FLAG_MODEINFINITE 0x00010000 353 #define FLAG_CONNECTONLY 0x00020000 354 #define FLAG_SERVERREVERSE 0x00040000 355 #define FLAG_FULLDUPLEX 0x00080000 356 #define FLAG_WRITEACK 0x00100000 357 #define FLAG_NOUDPFIN 0x00200000 358 #define FLAG_NOCONNECTSYNC 0x00400000 359 #define FLAG_SUMONLY 0x00800000 360 #define FLAG_FRAMEINTERVAL 0x01000000 361 #define FLAG_IPG 0x02000000 362 #define FLAG_DONTROUTE 0x04000000 363 #define FLAG_NEARCONGEST 0x08000000 364 #define FLAG_PERMITKEY 0x10000000 365 #define FLAG_SETTCPMSS 0x20000000 366 #define FLAG_INCRDSTPORT 0x40000000 367 #define FLAG_INCRSRCIP 0x80000000 368 369 /* 370 * More extended flags 371 */ 372 #define FLAG_PERIODICBURST 0x00000001 373 #define FLAG_SUMDSTIP 0x00000002 374 #define FLAG_SMALLTRIPTIME 0x00000004 375 #define FLAG_RXCLAMP 0x00000008 376 #define FLAG_WRITEPREFETCH 0x00000010 377 #define FLAG_TUNDEV 0x00000020 378 #define FLAG_TAPDEV 0x00000040 379 #define FLAG_HIDEIPS 0x00000080 380 381 #define isBuflenSet(settings) ((settings->flags & FLAG_BUFLENSET) != 0) 382 #define isCompat(settings) ((settings->flags & FLAG_COMPAT) != 0) 383 #define isDaemon(settings) ((settings->flags & FLAG_DAEMON) != 0) 384 #define isIPV6(settings) ((settings->flags & FLAG_DOMAIN) != 0) 385 #define isFileInput(settings) ((settings->flags & FLAG_FILEINPUT) != 0) 386 #define isNoDelay(settings) ((settings->flags & FLAG_NODELAY) != 0) 387 #define isPrintMSS(settings) ((settings->flags & FLAG_PRINTMSS) != 0) 388 #define isRemoveService(settings) ((settings->flags & FLAG_REMOVESERVICE) != 0) 389 #define isSTDIN(settings) ((settings->flags & FLAG_STDIN) != 0) 390 #define isSTDOUT(settings) ((settings->flags & FLAG_STDOUT) != 0) 391 #define isSuggestWin(settings) ((settings->flags & FLAG_SUGGESTWIN) != 0) 392 #define isUDP(settings) ((settings->flags & FLAG_UDP) != 0) 393 #define isModeTime(settings) ((settings->flags & FLAG_MODETIME) != 0) 394 #define isReport(settings) ((settings->flags & FLAG_REPORTSETTINGS) != 0) 395 #define isMulticast(settings) ((settings->flags & FLAG_MULTICAST) != 0) 396 #define isSSMMulticast(settings) ((settings->flags & FLAG_SSM_MULTICAST) != 0) 397 // Active Low for Reports 398 #define isSettingsReport(settings) ((settings->flags & FLAG_NOSETTREPORT) == 0) 399 #define isConnectionReport(settings) ((settings->flags & FLAG_NOCONNREPORT) == 0) 400 #define isDataReport(settings) ((settings->flags & FLAG_NODATAREPORT) == 0) 401 #define isServerReport(settings) ((settings->flags & FLAG_NOSERVREPORT) == 0) 402 #define isMultipleReport(settings) ((settings->flags & FLAG_NOMULTREPORT) == 0) 403 // end Active Low 404 #define isSingleClient(settings) ((settings->flags & FLAG_SINGLECLIENT) != 0) 405 #define isSingleUDP(settings) ((settings->flags & FLAG_SINGLEUDP) != 0) 406 #define isCongestionControl(settings) ((settings->flags & FLAG_CONGESTION) != 0) 407 #define isRealtime(settings) ((settings->flags & FLAG_REALTIME) != 0) 408 #define isBWSet(settings) ((settings->flags & FLAG_BWSET) != 0) 409 #define isEnhanced(settings) ((settings->flags & FLAG_ENHANCEDREPORT) != 0) 410 #define isServerModeTime(settings) ((settings->flags & FLAG_SERVERMODETIME) != 0) 411 #define isPeerVerDetect(settings) ((settings->flags_extend & FLAG_PEERVER) != 0) 412 #define isSeqNo64b(settings) ((settings->flags_extend & FLAG_SEQNO64) != 0) 413 #define isReverse(settings) ((settings->flags_extend & FLAG_REVERSE) != 0) 414 #define isFullDuplex(settings) ((settings->flags_extend & FLAG_FULLDUPLEX) != 0) 415 #define isServerReverse(settings) ((settings->flags_extend & FLAG_SERVERREVERSE) != 0) 416 #define isIsochronous(settings) ((settings->flags_extend & FLAG_ISOCHRONOUS) != 0) 417 #define isHistogram(settings) ((settings->flags_extend & FLAG_HISTOGRAM) != 0) 418 #define isL2LengthCheck(settings) ((settings->flags_extend & FLAG_L2LENGTHCHECK) != 0) 419 #define isIncrDstIP(settings) ((settings->flags_extend & FLAG_INCRDSTIP) != 0) 420 #define isIncrSrcIP(settings) ((settings->flags_extend & FLAG_INCRSRCIP) != 0) 421 #define isIncrDstPort(settings) ((settings->flags_extend & FLAG_INCRDSTPORT) != 0) 422 #define isTxStartTime(settings) ((settings->flags_extend & FLAG_TXSTARTTIME) != 0) 423 #define isTxHoldback(settings) ((settings->flags_extend & FLAG_TXHOLDBACK) != 0) 424 #define isVaryLoad(settings) ((settings->flags_extend & FLAG_VARYLOAD) != 0) 425 #define isFQPacing(settings) ((settings->flags_extend & FLAG_FQPACING) != 0) 426 #define isTripTime(settings) ((settings->flags_extend & FLAG_TRIPTIME) != 0) 427 #define isSmallTripTime(settings) ((settings->flags_extend2 & FLAG_SMALLTRIPTIME) != 0) 428 #define isModeInfinite(settings) ((settings->flags_extend & FLAG_MODEINFINITE) != 0) 429 #define isModeAmount(settings) (!isModeTime(settings) && !isModeInfinite(settings)) 430 #define isConnectOnly(settings) ((settings->flags_extend & FLAG_CONNECTONLY) != 0) 431 #define isWriteAck(settings) ((settings->flags_extend & FLAG_WRITEACK) != 0) 432 #define isNoUDPfin(settings) ((settings->flags_extend & FLAG_NOUDPFIN) != 0) 433 #define isNoConnectSync(settings) ((settings->flags_extend & FLAG_NOCONNECTSYNC) != 0) 434 #define isSumOnly(settings) ((settings->flags_extend & FLAG_SUMONLY) != 0) 435 #define isFrameInterval(settings) ((settings->flags_extend & FLAG_FRAMEINTERVAL) != 0) 436 #define isIPG(settings) ((settings->flags_extend & FLAG_IPG) != 0) 437 #define isDontRoute(settings) ((settings->flags_extend & FLAG_DONTROUTE) != 0) 438 #define isNearCongest(settings) ((settings->flags_extend & FLAG_NEARCONGEST) != 0) 439 #define isPermitKey(settings) ((settings->flags_extend & FLAG_PERMITKEY) != 0) 440 #define isTCPMSS(settings) ((settings->flags_extend & FLAG_SETTCPMSS) != 0) 441 #define isPeriodicBurst(settings) ((settings->flags_extend2 & FLAG_PERIODICBURST) != 0) 442 #define isSumServerDstIP(settings) ((settings->flags_extend2 & FLAG_SUMDSTIP) != 0) 443 #define isRxClamp(settings) ((settings->flags_extend2 & FLAG_RXCLAMP) != 0) 444 #define isWritePrefetch(settings) ((settings->flags_extend2 & FLAG_WRITEPREFETCH) != 0) 445 #define isTapDev(settings) ((settings->flags_extend2 & FLAG_TAPDEV) != 0) 446 #define isTunDev(settings) ((settings->flags_extend2 & FLAG_TUNDEV) != 0) 447 #define isHideIPs(settings) ((settings->flags_extend2 & FLAG_HIDEIPS) != 0) 448 449 #define setBuflenSet(settings) settings->flags |= FLAG_BUFLENSET 450 #define setCompat(settings) settings->flags |= FLAG_COMPAT 451 #define setDaemon(settings) settings->flags |= FLAG_DAEMON 452 #define setIPV6(settings) settings->flags |= FLAG_DOMAIN 453 #define setFileInput(settings) settings->flags |= FLAG_FILEINPUT 454 #define setNoDelay(settings) settings->flags |= FLAG_NODELAY 455 #define setPrintMSS(settings) settings->flags |= FLAG_PRINTMSS 456 #define setRemoveService(settings) settings->flags |= FLAG_REMOVESERVICE 457 #define setSTDIN(settings) settings->flags |= FLAG_STDIN 458 #define setSTDOUT(settings) settings->flags |= FLAG_STDOUT 459 #define setSuggestWin(settings) settings->flags |= FLAG_SUGGESTWIN 460 #define setUDP(settings) settings->flags |= FLAG_UDP 461 #define setModeTime(settings) settings->flags |= FLAG_MODETIME 462 #define setReport(settings) settings->flags |= FLAG_REPORTSETTINGS 463 #define setMulticast(settings) settings->flags |= FLAG_MULTICAST 464 #define setSSMMulticast(settings) settings->flags |= FLAG_SSM_MULTICAST 465 #define setNoSettReport(settings) settings->flags |= FLAG_NOSETTREPORT 466 #define setNoConnReport(settings) settings->flags |= FLAG_NOCONNREPORT 467 #define setNoDataReport(settings) settings->flags |= FLAG_NODATAREPORT 468 #define setNoServReport(settings) settings->flags |= FLAG_NOSERVREPORT 469 #define setNoMultReport(settings) settings->flags |= FLAG_NOMULTREPORT 470 #define setSingleClient(settings) settings->flags |= FLAG_SINGLECLIENT 471 #define setSingleUDP(settings) settings->flags |= FLAG_SINGLEUDP 472 #define setCongestionControl(settings) settings->flags |= FLAG_CONGESTION 473 #define setRealtime(settings) settings->flags |= FLAG_REALTIME 474 #define setBWSet(settings) settings->flags |= FLAG_BWSET 475 #define setEnhanced(settings) settings->flags |= FLAG_ENHANCEDREPORT 476 #define setServerModeTime(settings) settings->flags |= FLAG_SERVERMODETIME 477 #define setPeerVerDetect(settings) settings->flags_extend |= FLAG_PEERVER 478 #define setSeqNo64b(settings) settings->flags_extend |= FLAG_SEQNO64 479 #define setReverse(settings) settings->flags_extend |= FLAG_REVERSE 480 #define setFullDuplex(settings) settings->flags_extend |= FLAG_FULLDUPLEX 481 #define setServerReverse(settings) settings->flags_extend |= FLAG_SERVERREVERSE 482 #define setIsochronous(settings) settings->flags_extend |= FLAG_ISOCHRONOUS 483 #define setHistogram(settings) settings->flags_extend |= FLAG_HISTOGRAM 484 #define setL2LengthCheck(settings) settings->flags_extend |= FLAG_L2LENGTHCHECK 485 #define setIncrDstIP(settings) settings->flags_extend |= FLAG_INCRDSTIP 486 #define setIncrSrcIP(settings) settings->flags_extend |= FLAG_INCRSRCIP 487 #define setIncrDstPort(settings) settings->flags_extend |= FLAG_INCRDSTPORT 488 #define setTxStartTime(settings) settings->flags_extend |= FLAG_TXSTARTTIME 489 #define setTxHoldback(settings) settings->flags_extend |= FLAG_TXHOLDBACK 490 #define setVaryLoad(settings) settings->flags_extend |= FLAG_VARYLOAD 491 #define setFQPacing(settings) settings->flags_extend |= FLAG_FQPACING 492 #define setTripTime(settings) settings->flags_extend |= FLAG_TRIPTIME 493 #define setSmallTripTime(settings) settings->flags_extend2 |= FLAG_SMALLTRIPTIME 494 #define setModeInfinite(settings) settings->flags_extend |= FLAG_MODEINFINITE 495 #define setConnectOnly(settings) settings->flags_extend |= FLAG_CONNECTONLY 496 #define setWriteAck(settings) settings->flags_extend |= FLAG_WRITEACK 497 #define setNoUDPfin(settings) settings->flags_extend |= FLAG_NOUDPFIN 498 #define setNoConnectSync(settings) settings->flags_extend |= FLAG_NOCONNECTSYNC 499 #define setSumOnly(settings) settings->flags_extend |= FLAG_SUMONLY 500 #define setFrameInterval(settings) settings->flags_extend |= FLAG_FRAMEINTERVAL 501 #define setIPG(settings) settings->flags_extend |= FLAG_IPG 502 #define setDontRoute(settings) settings->flags_extend |= FLAG_DONTROUTE 503 #define setNearCongest(settings) settings->flags_extend |= FLAG_NEARCONGEST 504 #define setPermitKey(settings) settings->flags_extend |= FLAG_PERMITKEY 505 #define setTCPMSS(settings) settings->flags_extend |= FLAG_SETTCPMSS 506 #define setPeriodicBurst(settings) settings->flags_extend2 |= FLAG_PERIODICBURST 507 #define setSumServerDstIP(settings) settings->flags_extend2 |= FLAG_SUMDSTIP 508 #define setRxClamp(settings) settings->flags_extend2 |= FLAG_RXCLAMP 509 #define setWritePrefetch(settings) settings->flags_extend2 |= FLAG_WRITEPREFETCH 510 #define setTapDev(settings) settings->flags_extend2 |= FLAG_TAPDEV 511 #define setTunDev(settings) settings->flags_extend2 |= FLAG_TUNDEV 512 #define setHideIPs(settings) settings->flags_extend2 |= FLAG_HIDEIPS 513 514 #define unsetBuflenSet(settings) settings->flags &= ~FLAG_BUFLENSET 515 #define unsetCompat(settings) settings->flags &= ~FLAG_COMPAT 516 #define unsetDaemon(settings) settings->flags &= ~FLAG_DAEMON 517 #define unsetIPV6(settings) settings->flags &= ~FLAG_DOMAIN 518 #define unsetFileInput(settings) settings->flags &= ~FLAG_FILEINPUT 519 #define unsetNoDelay(settings) settings->flags &= ~FLAG_NODELAY 520 #define unsetPrintMSS(settings) settings->flags &= ~FLAG_PRINTMSS 521 #define unsetRemoveService(settings) settings->flags &= ~FLAG_REMOVESERVICE 522 #define unsetSTDIN(settings) settings->flags &= ~FLAG_STDIN 523 #define unsetSTDOUT(settings) settings->flags &= ~FLAG_STDOUT 524 #define unsetSuggestWin(settings) settings->flags &= ~FLAG_SUGGESTWIN 525 #define unsetUDP(settings) settings->flags &= ~FLAG_UDP 526 #define unsetModeTime(settings) settings->flags &= ~FLAG_MODETIME 527 #define unsetReport(settings) settings->flags &= ~FLAG_REPORTSETTINGS 528 #define unsetMulticast(settings) settings->flags &= ~FLAG_MULTICAST 529 #define unsetSSMMulticast(settings) settings->flags &= ~FLAG_SSM_MULTICAST 530 #define unsetNoSettReport(settings) settings->flags &= ~FLAG_NOSETTREPORT 531 #define unsetNoConnReport(settings) settings->flags &= ~FLAG_NOCONNREPORT 532 #define unsetNoDataReport(settings) settings->flags &= ~FLAG_NODATAREPORT 533 #define unsetNoServReport(settings) settings->flags &= ~FLAG_NOSERVREPORT 534 #define unsetNoMultReport(settings) settings->flags &= ~FLAG_NOMULTREPORT 535 #define unsetSingleClient(settings) settings->flags &= ~FLAG_SINGLECLIENT 536 #define unsetSingleUDP(settings) settings->flags &= ~FLAG_SINGLEUDP 537 #define unsetCongestionControl(settings) settings->flags &= ~FLAG_CONGESTION 538 #define unsetRealtime(settings) settings->flags &= ~FLAG_REALTIME 539 #define unsetBWSet(settings) settings->flags &= ~FLAG_BWSET 540 #define unsetEnhanced(settings) settings->flags &= ~FLAG_ENHANCEDREPORT 541 #define unsetServerModeTime(settings) settings->flags &= ~FLAG_SERVERMODETIME 542 #define unsetPeerVerDetect(settings) settings->flags_extend &= ~FLAG_PEERVER 543 #define unsetSeqNo64b(settings) settings->flags_extend &= ~FLAG_SEQNO64 544 #define unsetReverse(settings) settings->flags_extend &= ~FLAG_REVERSE 545 #define unsetFullDuplex(settings) settings->flags_extend &= ~FLAG_FULLDUPLEX 546 #define unsetServerReverse(settings) settings->flags_extend &= ~FLAG_SERVERREVERSE 547 #define unsetIsochronous(settings) settings->flags_extend &= ~FLAG_ISOCHRONOUS 548 #define unsetHistogram(settings) settings->flags_extend &= ~FLAG_HISTOGRAM 549 #define unsetL2LengthCheck(settings) settings->flags_extend &= ~FLAG_L2LENGTHCHECK 550 #define unsetIncrDstIP(settings) settings->flags_extend &= ~FLAG_INCRDSTIP 551 #define unsetIncrSrcIP(settings) settings->flags_extend &= ~FLAG_INCRSRCIP 552 #define unsetIncrDstPort(settings) settings->flags_extend &= ~FLAG_INCRDSTPORT 553 #define unsetTxStartTime(settings) settings->flags_extend &= ~FLAG_TXSTARTTIME 554 #define unsetTxHoldback(settings) settings->flags_extend &= ~FLAG_TXHOLDBACK 555 #define unsetVaryLoad(settings) settings->flags_extend &= ~FLAG_VARYLOAD 556 #define unsetFQPacing(settings) settings->flags_extend &= ~FLAG_FQPACING 557 #define unsetTripTime(settings) settings->flags_extend &= ~FLAG_TRIPTIME 558 #define unsetSmallTripTime(settings) settings->flags_extend2 &= ~FLAG_SMALLTRIPTIME 559 #define unsetModeInfinite(settings) settings->flags_extend &= ~FLAG_MODEINFINITE 560 #define unsetConnectOnly(settings) settings->flags_extend &= ~FLAG_CONNECTONLY 561 #define unsetWriteAck(settings) settings->flags_extend &= ~FLAG_WRITEACK 562 #define unsetNoUDPfin(settings) settings->flags_extend &= ~FLAG_NOUDPFIN 563 #define unsetNoConnectSync(settings) settings->flags_extend &= ~FLAG_NOCONNECTSYNC 564 #define unsetSumOnly(settings) settings->flags_extend &= ~FLAG_SUMONLY 565 #define unsetFrameInterval(settings) settings->flags_extend &= ~FLAG_FRAMEINTERVAL 566 #define unsetIPG(settings) settings->flags_extend &= ~FLAG_IPG 567 #define unsetDontRoute(settings) settings->flags_extend &= ~FLAG_DONTROUTE 568 #define unsetPermitKey(settings) settings->flags_extend &= ~FLAG_PERMITKEY 569 #define unsetTCPMSS(settings) settings->flags_extend &= ~FLAG_SETTCPMSS 570 #define unsetPeriodicBurst(settings) settings->flags_extend2 &= ~FLAG_PERIODICBURST 571 #define unsetSumServerDstIP(settings) settings->flags_extend2 &= ~FLAG_SUMDSTIP 572 #define unsetRxClamp(settings) settings->flags_extend2 &= ~FLAG_RXCLAMP 573 #define unsetWritePrefetch(settings) settings->flags_extend2 &= ~FLAG_WRITEPREFETCH 574 #define unsetTapDev(settings) settings->flags_extend2 &= ~FLAG_TAPDEV 575 #define unsetTunDev(settings) settings->flags_extend2 &= ~FLAG_TUNDEV 576 #define unsetHideIPs(settings) settings->flags_extend2 &= ~FLAG_HIDEIPS 577 578 // set to defaults 579 void Settings_Initialize(struct thread_Settings* main); 580 581 // copy structure 582 void Settings_Copy(struct thread_Settings* from, struct thread_Settings** into, int copyall); 583 584 // free associated memory 585 void Settings_Destroy(struct thread_Settings *mSettings); 586 587 // parse settings from user's environment variables 588 void Settings_ParseEnvironment(struct thread_Settings *mSettings); 589 590 // parse settings from app's command line 591 void Settings_ParseCommandLine(int argc, char **argv, struct thread_Settings *mSettings); 592 593 // convert to lower case for [KMG]bits/sec 594 void Settings_GetLowerCaseArg(const char *,char *); 595 596 // convert to upper case for [KMG]bytes/sec 597 void Settings_GetUpperCaseArg(const char *,char *); 598 599 // generate settings for listener instance 600 void Settings_GenerateListenerSettings(struct thread_Settings *client, struct thread_Settings **listener); 601 602 // generate settings for speaker instance 603 void Settings_GenerateClientSettings(struct thread_Settings *server, struct thread_Settings **client, void * mBuf); 604 605 // generate client header for server 606 int Settings_GenerateClientHdr(struct thread_Settings *client, void * hdr, struct timeval startTime); 607 608 int Settings_ClientTestHdrLen(uint32_t flags, struct thread_Settings *inSettings); 609 610 #ifdef __cplusplus 611 } /* end extern "C" */ 612 #endif 613 614 #endif // SETTINGS_H 615