17
17
#ifndef __NATMGR__
18
18
#define __NATMGR__
19
19
20
+ #include " selectabletimer.h"
20
21
#include " dbconnector.h"
21
22
#include " producerstatetable.h"
22
23
#include " orch.h"
23
24
#include " notificationproducer.h"
25
+ #include " timer.h"
24
26
#include < unistd.h>
25
27
#include < set>
26
28
#include < map>
@@ -60,6 +62,7 @@ namespace swss {
60
62
#define NAT_TIMEOUT_MIN 300
61
63
#define NAT_TIMEOUT_MAX 432000
62
64
#define NAT_TIMEOUT_DEFAULT 600
65
+ #define NAT_TIMEOUT_LOW 0
63
66
#define NAT_TCP_TIMEOUT " nat_tcp_timeout"
64
67
#define NAT_TCP_TIMEOUT_MIN 300
65
68
#define NAT_TCP_TIMEOUT_MAX 432000
@@ -119,6 +122,9 @@ namespace swss {
119
122
#define IS_RESERVED_ADDR (ipaddr ) (ipaddr >= 0xF0000000 )
120
123
#define IS_ZERO_ADDR (ipaddr ) (ipaddr == 0 )
121
124
#define IS_BROADCAST_ADDR (ipaddr ) (ipaddr == 0xFFFFFFFF )
125
+ #define NAT_ENTRY_REFRESH_PERIOD 86400 // 1 day
126
+ #define REDIRECT_TO_DEV_NULL " &> /dev/null"
127
+ #define FLUSH " -F"
122
128
123
129
const char ip_address_delimiter = ' /' ;
124
130
@@ -234,13 +240,15 @@ class NatMgr : public Orch
234
240
void cleanupPoolIpTable ();
235
241
void cleanupMangleIpTables ();
236
242
bool isPortInitDone (DBConnector *app_db);
237
-
243
+ void timeoutNotifications (std::string op, std::string data);
244
+ void flushNotifications (std::string op, std::string data);
245
+
238
246
private:
239
247
/* Declare APPL_DB, CFG_DB and STATE_DB tables */
240
248
ProducerStateTable m_appNatTableProducer, m_appNaptTableProducer, m_appNatGlobalTableProducer;
241
249
ProducerStateTable m_appTwiceNatTableProducer, m_appTwiceNaptTableProducer;
242
250
Table m_statePortTable, m_stateLagTable, m_stateVlanTable, m_stateInterfaceTable, m_appNaptPoolIpTable;
243
- std::shared_ptr<swss::NotificationProducer> flushNotifier ;
251
+ Table m_stateWarmRestartEnableTable, m_stateWarmRestartTable ;
244
252
245
253
/* Declare containers to store NAT Info */
246
254
int m_natTimeout;
@@ -256,9 +264,12 @@ class NatMgr : public Orch
256
264
natZoneInterface_map_t m_natZoneInterfaceInfo;
257
265
natAclTable_map_t m_natAclTableInfo;
258
266
natAclRule_map_t m_natAclRuleInfo;
267
+ SelectableTimer *m_natRefreshTimer;
259
268
260
269
/* Declare doTask related fucntions */
261
270
void doTask (Consumer &consumer);
271
+ void doTask (SelectableTimer &timer);
272
+ void doNatRefreshTimerTask ();
262
273
void doStaticNatTask (Consumer &consumer);
263
274
void doStaticNaptTask (Consumer &consumer);
264
275
void doNatPoolTask (Consumer &consumer);
@@ -271,15 +282,26 @@ class NatMgr : public Orch
271
282
/* Declare all NAT functionality member functions*/
272
283
void enableNatFeature (void );
273
284
void disableNatFeature (void );
274
- void addConntrackSingleNatEntry (const std::string &key);
275
- void addConntrackSingleNaptEntry (const std::string &key);
276
- void deleteConntrackSingleNatEntry (const std::string &key);
277
- void deleteConntrackSingleNaptEntry (const std::string &key);
278
- void addConntrackTwiceNatEntry (const std::string &snatKey, const std::string &dnatKey);
279
- void addConntrackTwiceNaptEntry (const std::string &snatKey, const std::string &dnatKey);
280
- void deleteConntrackTwiceNatEntry (const std::string &snatKey, const std::string &dnatKey);
281
- void deleteConntrackTwiceNaptEntry (const std::string &snatKey, const std::string &dnatKey);
285
+ bool warmBootingInProgress (void );
286
+ void flushAllNatEntries (void );
287
+ void addAllStaticConntrackEntries (void );
288
+ void addConntrackStaticSingleNatEntry (const std::string &key);
289
+ void addConntrackStaticSingleNaptEntry (const std::string &key);
290
+ void updateConntrackStaticSingleNatEntry (const std::string &key);
291
+ void updateConntrackStaticSingleNaptEntry (const std::string &key);
292
+ void deleteConntrackStaticSingleNatEntry (const std::string &key);
293
+ void deleteConntrackStaticSingleNaptEntry (const std::string &key);
294
+ void addConntrackStaticTwiceNatEntry (const std::string &snatKey, const std::string &dnatKey);
295
+ void addConntrackStaticTwiceNaptEntry (const std::string &snatKey, const std::string &dnatKey);
296
+ void updateConntrackStaticTwiceNatEntry (const std::string &snatKey, const std::string &dnatKey);
297
+ void updateConntrackStaticTwiceNaptEntry (const std::string &snatKey, const std::string &dnatKey);
298
+ void deleteConntrackStaticTwiceNatEntry (const std::string &snatKey, const std::string &dnatKey);
299
+ void deleteConntrackStaticTwiceNaptEntry (const std::string &snatKey, const std::string &dnatKey);
282
300
void deleteConntrackDynamicEntries (const std::string &ip_range);
301
+ void updateDynamicSingleNatConnTrackTimeout (std::string key, int timeout);
302
+ void updateDynamicSingleNaptConnTrackTimeout (std::string key, int timeout);
303
+ void updateDynamicTwiceNatConnTrackTimeout (std::string key, int timeout);
304
+ void updateDynamicTwiceNaptConnTrackTimeout (std::string key, int timeout);
283
305
void addStaticNatEntry (const std::string &key);
284
306
void addStaticNaptEntry (const std::string &key);
285
307
void addStaticSingleNatEntry (const std::string &key);
@@ -308,6 +330,12 @@ class NatMgr : public Orch
308
330
void addStaticNaptIptables (const std::string port);
309
331
void removeStaticNatIptables (const std::string port);
310
332
void removeStaticNaptIptables (const std::string port);
333
+ void setStaticNatConntrackEntries (std::string mode);
334
+ void setStaticSingleNatConntrackEntry (const std::string &key, std::string &mode);
335
+ void setStaticTwiceNatConntrackEntry (const std::string &key, std::string &mode);
336
+ void setStaticNaptConntrackEntries (std::string mode);
337
+ void setStaticSingleNaptConntrackEntry (const std::string &key, std::string &mode);
338
+ void setStaticTwiceNaptConntrackEntry (const std::string &key, std::string &mode);
311
339
void addDynamicNatRule (const std::string &key);
312
340
void removeDynamicNatRule (const std::string &key);
313
341
void addDynamicNatRuleByAcl (const std::string &key, bool isRuleId = false );
0 commit comments