summaryrefslogtreecommitdiffstats
path: root/src/common/Network/Packet/TCPOptions.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/Network/Packet/TCPOptions.h')
-rwxr-xr-xsrc/common/Network/Packet/TCPOptions.h163
1 files changed, 163 insertions, 0 deletions
diff --git a/src/common/Network/Packet/TCPOptions.h b/src/common/Network/Packet/TCPOptions.h
new file mode 100755
index 00000000..2133db5a
--- /dev/null
+++ b/src/common/Network/Packet/TCPOptions.h
@@ -0,0 +1,163 @@
+/*
+Copyright (c) 2015-2015 Cisco Systems, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+#ifndef _TCP_OPTIONS_H_
+#define _TCP_OPTIONS_H_
+
+#include "PacketHeaderBase.h"
+
+
+class TCPOptions
+{
+
+public:
+
+//--------------------------------------------------------------------------------------------------
+// Typedef & Enum
+//--------------------------------------------------------------------------------------------------
+
+ struct Kind
+ {
+ enum Val
+ {
+ EOL = 0,
+ NO_OP = 1,
+ MSS = 2,
+ WIN_SCL = 3,
+ SACK_PER = 4,
+ SACK = 5,
+ TIME_STAMP = 8
+ };
+ };
+
+ enum
+ {
+ TimeStampSize = 12
+ };
+
+ enum
+ {
+ MaxOptionsInPacket = 64
+ };
+
+ struct Option
+ {
+ uint8_t theKind;
+ uint8_t theLength; //Not always valid, depends on theKind
+ uint8_t theData[1];//variable. [1] only for compilation
+ };
+
+ struct Counters
+ {
+ uint32_t itsOptionsSizeMismatch;
+ uint32_t itsZeroLengthOptions;
+ uint32_t itsPossibleEndlessLoop;
+ };
+
+
+//--------------------------------------------------------------------------------------------------
+// Constructor & Destructor
+//--------------------------------------------------------------------------------------------------
+
+ TCPOptions(uint8_t* argOptionsP, uint16_t argOptionsSize);
+
+//--------------------------------------------------------------------------------------------------
+// Utility methods
+//--------------------------------------------------------------------------------------------------
+
+ /**
+ * This method allows the user of this class to query whether
+ * the options in hand contains a specific type of its
+ * interest.
+ *
+ * @return true if the specified option exist.
+ */
+ bool doesContain(Kind::Val);
+
+//--------------------------------------------------------------------------------------------------
+// Get methods
+//--------------------------------------------------------------------------------------------------
+
+
+ /**
+ * Returns a pointer to the current option.
+ * With the kind and length of it.
+ *
+ * @param argKind
+ * @param argLength
+ * @return
+ */
+ uint8_t* getCurrentOption (Kind::Val& argKind, uint8_t& argLength);
+
+ /**
+ * This method gives the length of the current option.
+ * Can vary since there are two options that are exception to
+ * the usual TLV definition.
+ *
+ * @return
+ */
+ uint8_t getCurrentOptionLength();
+
+ /**
+ * This is an internal method that verifies based on the current
+ * pointer, the total options length and the current options length,
+ * whether this is the last option.
+ *
+ * @return
+ */
+ bool isLastOption ();
+
+//--------------------------------------------------------------------------------------------------
+// Set methods
+//--------------------------------------------------------------------------------------------------
+
+ /**
+ * This method tells the object to advance one option ahead.
+ * i.e. to the next option.
+ *
+ * @return True if next option exist.
+ * False if we are at the last option.
+ */
+ bool nextOption ();
+
+
+//--------------------------------------------------------------------------------------------------
+// Miscellaneous Operations
+//--------------------------------------------------------------------------------------------------
+
+ static void get (Counters&);
+
+ void dump(FILE* argOutputFile);
+
+
+private:
+
+//--------------------------------------------------------------------------------------------------
+// Data members
+//--------------------------------------------------------------------------------------------------
+
+ uint8_t* myOptionsP;
+ uint16_t myOptionsSize;
+
+ Option* myCurrentOptionP;
+
+ static Counters ourCounters;
+
+ static bool ourOneShotDump;
+};
+
+
+#endif // _TCP_OPTIONS_H_
+