Add two more configuration options

- 'ttl' to control how long a session will stay in the cache once the
  session becomes valid or invalid. Default is 30 seconds.

- 'timeout' to control how long a session will wait for a Neighbor
  Advertisement before being invalidated. Default is 500 ms.
This commit is contained in:
Daniel Adolfsson 2011-09-18 03:33:18 +02:00
parent 869fdbca2a
commit 17bdd6ebac
4 changed files with 41 additions and 4 deletions

View File

@ -66,6 +66,10 @@ bool conf::setup(cfg_t *cfg)
pr->router(cfg_getbool(proxy_cfg, "router")); pr->router(cfg_getbool(proxy_cfg, "router"));
pr->ttl(cfg_getint(proxy_cfg, "ttl"));
pr->timeout(cfg_getint(proxy_cfg, "timeout"));
for(i2 = 0; i2 < cfg_size(proxy_cfg, "rule"); i2++) for(i2 = 0; i2 < cfg_size(proxy_cfg, "rule"); i2++)
{ {
cfg_t *rule_cfg; cfg_t *rule_cfg;
@ -112,6 +116,8 @@ bool conf::load(const std::string& path)
{ {
CFG_SEC (_S "rule", rule_opts, CFGF_MULTI | CFGF_TITLE), CFG_SEC (_S "rule", rule_opts, CFGF_MULTI | CFGF_TITLE),
CFG_BOOL (_S "router", cfg_true, CFGF_NONE), CFG_BOOL (_S "router", cfg_true, CFGF_NONE),
CFG_INT (_S "ttl", 30000, CFGF_NONE),
CFG_INT (_S "timeout", 500, CFGF_NONE),
CFG_END () CFG_END ()
}; };

View File

@ -26,7 +26,8 @@
__NDPPD_NS_BEGIN __NDPPD_NS_BEGIN
proxy::proxy() proxy::proxy() :
_router(true), _ttl(30000), _timeout(500)
{ {
} }
@ -153,5 +154,25 @@ void proxy::router(bool val)
_router = val; _router = val;
} }
int proxy::ttl() const
{
return _ttl;
}
void proxy::ttl(int val)
{
_ttl = (val >= 0) ? val : 30000;
}
int proxy::timeout() const
{
return _timeout;
}
void proxy::timeout(int val)
{
_timeout = (val >= 0) ? val : 500;
}
__NDPPD_NS_END __NDPPD_NS_END

View File

@ -42,6 +42,8 @@ private:
bool _router; bool _router;
int _ttl, _timeout;
proxy(); proxy();
public: public:
@ -63,6 +65,14 @@ public:
bool router() const; bool router() const;
void router(bool val); void router(bool val);
int timeout() const;
void timeout(int val);
int ttl() const;
void ttl(int val);
}; };
__NDPPD_NS_END __NDPPD_NS_END

View File

@ -39,7 +39,7 @@ void session::update_all(int elapsed_time)
case session::WAITING: case session::WAITING:
DBG("session is now invalid"); DBG("session is now invalid");
se->_status = session::INVALID; se->_status = session::INVALID;
se->_ttl = 30 * 1000; se->_ttl = se->_pr->ttl();
break; break;
default: default:
@ -71,7 +71,7 @@ strong_ptr<session> session::create(const strong_ptr<proxy>& pr, const address&
se->_saddr = saddr; se->_saddr = saddr;
se->_taddr = taddr; se->_taddr = taddr;
se->_daddr = daddr; se->_daddr = daddr;
se->_ttl = 500; se->_ttl = pr->timeout();
_sessions.push_back(se); _sessions.push_back(se);
@ -111,7 +111,7 @@ void session::send_advert()
void session::handle_advert() void session::handle_advert()
{ {
_status = VALID; _status = VALID;
_ttl = 30 * 1000; _ttl = _pr->ttl();
send_advert(); send_advert();
} }