X-Git-Url: http://sjero.net/git/?p=iperf;a=blobdiff_plain;f=include%2FSettings.hpp;fp=include%2FSettings.hpp;h=bf125cbeadbc886b829c82a85a59a0584e207f13;hp=4c3aede9b0f6e3c9e97593336098de8926a6638a;hb=90fc1e2c0c74319759b21d4a177c32691b88fdf3;hpb=fad82d47d76abc8f4ac6767e58b89859ad35a2ca diff --git a/include/Settings.hpp b/include/Settings.hpp index 4c3aede..bf125cb 100644 --- a/include/Settings.hpp +++ b/include/Settings.hpp @@ -69,6 +69,37 @@ extern "C" { #endif +// Convention: odd=connection-oriented, even=connection-less +typedef enum Protocol { + kProto_TCP = IPPROTO_TCP, + kProto_DCCP = IPPROTO_DCCP, + kProto_UDP = IPPROTO_UDP, +} Protocol; + +static inline const char *protoName(const unsigned proto) +{ + switch(proto) { + case kProto_TCP: return "TCP"; + case kProto_DCCP: return "DCCP"; + case kProto_UDP: return "UDP"; + default: return "(unknown)"; + } +} + +static inline unsigned sockType(const Protocol p) +{ + switch (p) { + case kProto_TCP: return SOCK_STREAM; + case kProto_UDP: return SOCK_DGRAM; + case kProto_DCCP: return SOCK_DCCP; + } +} + +static inline bool is_connectionless(const Protocol p) +{ + return p == kProto_UDP; +} + // server/client mode typedef enum ThreadMode { kMode_Unknown = 0, @@ -124,7 +155,7 @@ typedef struct thread_Settings { int Extractor_size; int mBufLen; // -l int mMSS; // -M - int mTCPWin; // -w + int mWinSize; // -w /* flags is a BitMask of old bools bool mBufLenSet; // -l bool mCompat; // -C @@ -147,13 +178,15 @@ typedef struct thread_Settings { bool mNoServerReport; // -x bool mNoMultReport; // -x m bool mSinlgeClient; // -1 */ - int flags; + int flags; + Protocol mProtocol; + // enums (which should be special int's) ThreadMode mThreadMode; // -s or -c ReportMode mReportMode; - TestMode mMode; // -r or -d + TestMode mMode; // -r or -d // Hopefully int64_t's - max_size_t mUDPRate; // -b or -u + max_size_t mDgramRate; // -b max_size_t mAmount; // -n or -t // doubles double mInterval; // -i @@ -194,7 +227,6 @@ typedef struct thread_Settings { #define FLAG_STDIN 0x00000100 #define FLAG_STDOUT 0x00000200 #define FLAG_SUGGESTWIN 0x00000400 -#define FLAG_UDP 0x00000800 #define FLAG_MODETIME 0x00001000 #define FLAG_REPORTSETTINGS 0x00002000 #define FLAG_MULTICAST 0x00004000 @@ -205,6 +237,8 @@ typedef struct thread_Settings { #define FLAG_NOMULTREPORT 0x00080000 #define FLAG_SINGLECLIENT 0x00100000 #define FLAG_SINGLEUDP 0x00200000 +#define FLAG_PACKETORIENTED 0x01000000 + #define isBuflenSet(settings) ((settings->flags & FLAG_BUFLENSET) != 0) #define isCompat(settings) ((settings->flags & FLAG_COMPAT) != 0) @@ -217,7 +251,6 @@ typedef struct thread_Settings { #define isSTDIN(settings) ((settings->flags & FLAG_STDIN) != 0) #define isSTDOUT(settings) ((settings->flags & FLAG_STDOUT) != 0) #define isSuggestWin(settings) ((settings->flags & FLAG_SUGGESTWIN) != 0) -#define isUDP(settings) ((settings->flags & FLAG_UDP) != 0) #define isModeTime(settings) ((settings->flags & FLAG_MODETIME) != 0) #define isReport(settings) ((settings->flags & FLAG_REPORTSETTINGS) != 0) #define isMulticast(settings) ((settings->flags & FLAG_MULTICAST) != 0) @@ -230,6 +263,8 @@ typedef struct thread_Settings { // end Active Low #define isSingleClient(settings) ((settings->flags & FLAG_SINGLECLIENT) != 0) #define isSingleUDP(settings) ((settings->flags & FLAG_SINGLEUDP) != 0) +#define isConnectionLess(settings) is_connectionless((settings)->mProtocol) +#define isPacketOriented(settings) (((settings)->flags & FLAG_PACKETORIENTED) != 0) #define setBuflenSet(settings) settings->flags |= FLAG_BUFLENSET #define setCompat(settings) settings->flags |= FLAG_COMPAT @@ -242,7 +277,6 @@ typedef struct thread_Settings { #define setSTDIN(settings) settings->flags |= FLAG_STDIN #define setSTDOUT(settings) settings->flags |= FLAG_STDOUT #define setSuggestWin(settings) settings->flags |= FLAG_SUGGESTWIN -#define setUDP(settings) settings->flags |= FLAG_UDP #define setModeTime(settings) settings->flags |= FLAG_MODETIME #define setReport(settings) settings->flags |= FLAG_REPORTSETTINGS #define setMulticast(settings) settings->flags |= FLAG_MULTICAST @@ -253,6 +287,7 @@ typedef struct thread_Settings { #define setNoMultReport(settings) settings->flags |= FLAG_NOMULTREPORT #define setSingleClient(settings) settings->flags |= FLAG_SINGLECLIENT #define setSingleUDP(settings) settings->flags |= FLAG_SINGLEUDP +#define setPacketOriented(settings) settings->flags |= FLAG_PACKETORIENTED #define unsetBuflenSet(settings) settings->flags &= ~FLAG_BUFLENSET #define unsetCompat(settings) settings->flags &= ~FLAG_COMPAT @@ -265,7 +300,6 @@ typedef struct thread_Settings { #define unsetSTDIN(settings) settings->flags &= ~FLAG_STDIN #define unsetSTDOUT(settings) settings->flags &= ~FLAG_STDOUT #define unsetSuggestWin(settings) settings->flags &= ~FLAG_SUGGESTWIN -#define unsetUDP(settings) settings->flags &= ~FLAG_UDP #define unsetModeTime(settings) settings->flags &= ~FLAG_MODETIME #define unsetReport(settings) settings->flags &= ~FLAG_REPORTSETTINGS #define unsetMulticast(settings) settings->flags &= ~FLAG_MULTICAST @@ -276,14 +310,18 @@ typedef struct thread_Settings { #define unsetNoMultReport(settings) settings->flags &= ~FLAG_NOMULTREPORT #define unsetSingleClient(settings) settings->flags &= ~FLAG_SINGLECLIENT #define unsetSingleUDP(settings) settings->flags &= ~FLAG_SINGLEUDP +#define unsetPacketOriented(settings) settings->flags &= ~FLAG_PACKETORIENTED #define HEADER_VERSION1 0x80000000 #define RUN_NOW 0x00000001 -// used to reference the 4 byte ID number we place in UDP datagrams -// use int32_t if possible, otherwise a 32 bit bitfield (e.g. on J90) -typedef struct UDP_datagram { +/* + * Datagram record for record-oriented applications + * used to reference the 4 byte ID number we place in UDP datagrams + * use int32_t if possible, otherwise a 32 bit bitfield (e.g. on J90) + */ +typedef struct dgram_record { #ifdef HAVE_INT32_T int32_t id; u_int32_t tv_sec; @@ -293,7 +331,7 @@ typedef struct UDP_datagram { unsigned int tv_sec : 32; unsigned int tv_usec : 32; #endif -} UDP_datagram; +} dgram_record; /* * The client_hdr structure is sent from clients