summaryrefslogtreecommitdiffstats
path: root/src/nat_check.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/nat_check.h')
-rwxr-xr-xsrc/nat_check.h13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/nat_check.h b/src/nat_check.h
index 538cf888..2af0a936 100755
--- a/src/nat_check.h
+++ b/src/nat_check.h
@@ -33,7 +33,8 @@ limitations under the License.
// 2msec timeout
#define MAX_TIME_MSG_IN_QUEUE_SEC ( 0.002 )
-#define NAT_FLOW_ID_MASK 0x00ffffff
+#define NAT_FLOW_ID_MASK_TCP_ACK 0x00ffffff
+#define NAT_FLOW_ID_MASK_IP_ID 0x000001ff
class CNatOption {
public:
@@ -78,8 +79,9 @@ public:
return (u.m_data[2]);
}
+ // Used when doing NAT using IP option
void set_fid(uint32_t fid) {
- u.m_data_uint32[1] = fid & NAT_FLOW_ID_MASK;
+ u.m_data_uint32[1] = fid & NAT_FLOW_ID_MASK_TCP_ACK;
}
uint32_t get_fid() {
@@ -225,9 +227,14 @@ public:
void Dump(FILE *fd);
void DumpShort(FILE *fd);
static inline uint32_t calc_tcp_ack_val(uint32_t fid, uint8_t thread_id) {
- return ((fid & NAT_FLOW_ID_MASK) << 8) | thread_id;
+ return ((fid & NAT_FLOW_ID_MASK_TCP_ACK) << 8) | thread_id;
+ }
+ static inline uint16_t calc_ip_id_val(uint32_t fid, uint8_t thread_id) {
+ // MSB bit == 1 signals this is latency packet
+ return ((fid & NAT_FLOW_ID_MASK_IP_ID) << 6) | (thread_id & 0x3f) | 0x8000;
}
void get_info_from_tcp_ack(uint32_t tcp_ack, uint32_t &fid, uint8_t &thread_id);
+ void get_info_from_ip_id(uint16_t ip_id, uint32_t &fid, uint8_t &thread_id);
private:
CNatPerThreadInfo * get_thread_info(uint8_t thread_id);
void flush_node(CNatPerThreadInfo * thread_info);