Put in the skeleton around the auto wiring functionality
This commit is contained in:
parent
ca91245d3f
commit
8ed35f841f
@ -1,3 +1,11 @@
|
||||
2017-01-07 Johnathan Sharratt <johnathan.sharratt@gmail.com>
|
||||
|
||||
* Version 0.2.6
|
||||
|
||||
* Added a feature that will automatically create route entries
|
||||
in the routing tables, thus providing an alternative to this
|
||||
https://github.com/google/ndprbrd projects use-case.
|
||||
|
||||
2016-04-18 Daniel Adolfsson <daniel@priv.nu>
|
||||
|
||||
* Version 0.2.5
|
||||
|
@ -23,6 +23,13 @@ proxy eth0 {
|
||||
|
||||
timeout 500
|
||||
|
||||
# auto-wire <yes|no|true|false>
|
||||
# Controls whether whether ndppd will automatically create host entries
|
||||
# in the routing tables when it receives Neighbor Advertisements on a
|
||||
# listening interface. The the default value is no.
|
||||
|
||||
auto-wire no
|
||||
|
||||
# ttl <integer>
|
||||
# Controls how long a valid or invalid entry remains in the cache, in
|
||||
# milliseconds. Default value is '30000' (30 seconds).
|
||||
|
@ -48,6 +48,12 @@ Controls how long
|
||||
.B ndppd
|
||||
will cache an entry. This is in milliseconds, and the default value
|
||||
is 30000 (30 seconds).
|
||||
.IP "auto-wire <yes|no>"
|
||||
Controls whether
|
||||
.B ndppd
|
||||
will automatically create host entries in the routing tables when
|
||||
.B ndppd receives Neighbor Advertisements on a listening interface.
|
||||
The default value is no.
|
||||
.IP "timeout <value>"
|
||||
Controls how long
|
||||
.B ndppd
|
||||
|
@ -589,7 +589,7 @@ int iface::poll_all()
|
||||
const ptr<session> sess = *s_it;
|
||||
|
||||
if ((sess->taddr() == taddr) && (sess->status() == session::WAITING)) {
|
||||
sess->handle_advert();
|
||||
sess->handle_advert(ifa);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -160,6 +160,11 @@ static bool configure(ptr<conf>& cf)
|
||||
else
|
||||
pr->router(*x_cf);
|
||||
|
||||
if (!(x_cf = pr_cf->find("autowire")))
|
||||
pr->autowire(false);
|
||||
else
|
||||
pr->autowire(*x_cf);
|
||||
|
||||
if (!(x_cf = pr_cf->find("ttl")))
|
||||
pr->ttl(30000);
|
||||
else
|
||||
|
16
src/proxy.cc
16
src/proxy.cc
@ -30,7 +30,7 @@ NDPPD_NS_BEGIN
|
||||
std::list<ptr<proxy> > proxy::_list;
|
||||
|
||||
proxy::proxy() :
|
||||
_router(true), _ttl(30000), _timeout(500)
|
||||
_router(true), _ttl(30000), _timeout(500), _autowire(false)
|
||||
{
|
||||
}
|
||||
|
||||
@ -104,7 +104,7 @@ void proxy::handle_solicit(const address& saddr, const address& daddr,
|
||||
|
||||
if (ru->addr() == taddr) {
|
||||
if (!se) {
|
||||
se = session::create(_ptr, saddr, daddr, taddr);
|
||||
se = session::create(_ptr, saddr, daddr, taddr, _autowire);
|
||||
}
|
||||
|
||||
if (ru->is_auto()) {
|
||||
@ -130,7 +130,7 @@ void proxy::handle_solicit(const address& saddr, const address& daddr,
|
||||
if (if_addr_find((*it)->ifa()->name(), &taddr.const_addr())) {
|
||||
logger::debug() << "Sending NA out " << (*it)->ifa()->name();
|
||||
se->add_iface(_ifa);
|
||||
se->handle_advert();
|
||||
se->handle_advert(_ifa);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -177,6 +177,16 @@ void proxy::router(bool val)
|
||||
_router = val;
|
||||
}
|
||||
|
||||
bool proxy::autowire() const
|
||||
{
|
||||
return _autowire;
|
||||
}
|
||||
|
||||
void proxy::autowire(bool val)
|
||||
{
|
||||
_autowire = val;
|
||||
}
|
||||
|
||||
int proxy::ttl() const
|
||||
{
|
||||
return _ttl;
|
||||
|
@ -49,6 +49,10 @@ public:
|
||||
|
||||
void router(bool val);
|
||||
|
||||
bool autowire() const;
|
||||
|
||||
void autowire(bool val);
|
||||
|
||||
int timeout() const;
|
||||
|
||||
void timeout(int val);
|
||||
@ -70,6 +74,8 @@ private:
|
||||
|
||||
bool _router;
|
||||
|
||||
bool _autowire;
|
||||
|
||||
int _ttl, _timeout;
|
||||
|
||||
proxy();
|
||||
|
@ -65,7 +65,7 @@ session::~session()
|
||||
}
|
||||
|
||||
ptr<session> session::create(const ptr<proxy>& pr, const address& saddr,
|
||||
const address& daddr, const address& taddr)
|
||||
const address& daddr, const address& taddr, bool auto_wire)
|
||||
{
|
||||
ptr<session> se(new session());
|
||||
|
||||
@ -74,6 +74,7 @@ ptr<session> session::create(const ptr<proxy>& pr, const address& saddr,
|
||||
se->_saddr = address("::") == saddr ? all_nodes : saddr;
|
||||
se->_taddr = taddr;
|
||||
se->_daddr = daddr;
|
||||
se->_autowire = auto_wire;
|
||||
se->_ttl = pr->timeout();
|
||||
|
||||
_sessions.push_back(se);
|
||||
@ -110,6 +111,23 @@ void session::send_advert()
|
||||
_pr->ifa()->write_advert(_saddr, _taddr, _pr->router());
|
||||
}
|
||||
|
||||
void session::handle_auto_wire(const ptr<iface>& ifa)
|
||||
{
|
||||
logger::debug()
|
||||
<< "session::handle_auto_wire() taddr=" << _taddr << ", ifa=" << ifa->name();
|
||||
|
||||
logger::debug() << "session::handle_auto_wire()";
|
||||
}
|
||||
|
||||
void session::handle_advert(const ptr<iface>& ifa)
|
||||
{
|
||||
if (_autowire == true) {
|
||||
handle_auto_wire(ifa);
|
||||
}
|
||||
|
||||
handle_advert();
|
||||
}
|
||||
|
||||
void session::handle_advert()
|
||||
{
|
||||
_status = VALID;
|
||||
@ -133,6 +151,11 @@ const address& session::daddr() const
|
||||
return _daddr;
|
||||
}
|
||||
|
||||
bool session::autowire() const
|
||||
{
|
||||
return _autowire;
|
||||
}
|
||||
|
||||
int session::status() const
|
||||
{
|
||||
return _status;
|
||||
|
@ -32,6 +32,8 @@ private:
|
||||
|
||||
address _saddr, _daddr, _taddr;
|
||||
|
||||
bool _autowire;
|
||||
|
||||
// An array of interfaces this session is monitoring for
|
||||
// ND_NEIGHBOR_ADVERT on.
|
||||
std::list<ptr<iface> > _ifaces;
|
||||
@ -58,7 +60,7 @@ public:
|
||||
~session();
|
||||
|
||||
static ptr<session> create(const ptr<proxy>& pr, const address& saddr,
|
||||
const address& daddr, const address& taddr);
|
||||
const address& daddr, const address& taddr, bool autowire);
|
||||
|
||||
void add_iface(const ptr<iface>& ifa);
|
||||
|
||||
@ -68,12 +70,18 @@ public:
|
||||
|
||||
const address& saddr() const;
|
||||
|
||||
bool autowire() const;
|
||||
|
||||
int status() const;
|
||||
|
||||
void status(int val);
|
||||
|
||||
void handle_advert();
|
||||
|
||||
void handle_advert(const ptr<iface>& ifa);
|
||||
|
||||
void handle_auto_wire(const ptr<iface>& ifa);
|
||||
|
||||
void send_advert();
|
||||
|
||||
void send_solicit();
|
||||
|
Loading…
x
Reference in New Issue
Block a user