Skip to content

Commit

Permalink
feat: add routes via prefix_nodes, not via rpl_nodes
Browse files Browse the repository at this point in the history
  • Loading branch information
mcr committed Jul 16, 2023
1 parent 6da235a commit 10eb4b7
Show file tree
Hide file tree
Showing 8 changed files with 36 additions and 26 deletions.
3 changes: 0 additions & 3 deletions include/node.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,6 @@ class rpl_node {
void reply_neighbour_advert(network_interface *iface,
unsigned int success);

void add_route_via_node(ip_subnet &prefix, network_interface *iface);

bool join_declined(void) { return !joinQueryStarted && alreadyDeclined; };
bool join_accepted(void) { return !joinQueryStarted && alreadyAccepted; };
void set_accepted(bool accepted) {
Expand Down Expand Up @@ -132,7 +130,6 @@ class rpl_node {
bool alreadyDeclined;
bool alreadyAccepted;
bool joinQueryStarted;
bool installed;

private:
bool valid;
Expand Down
1 change: 1 addition & 0 deletions include/prefix.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ class prefix_node {
void set_installed(bool installed) {
installed = true;
};
void add_route_via_node(network_interface *iface);

protected:
ip_subnet mPrefix;
Expand Down
15 changes: 8 additions & 7 deletions lib/libndmgmt/dag.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -443,15 +443,16 @@ void dag_network::add_childnode(rpl_node *announcing_peer,
dao_needed = true;
pre.set_prefix(prefix);
pre.set_announcer(announcing_peer);
pre.set_dn(this);

announcing_peer->add_route_via_node(prefix, iface);
//debug->info("installing prefix\n");
pre.add_route_via_node(iface);
set_dao_needed();
pre.set_installed(true);
}
#if 0
debug->verbose("added child node %s/%s from %s\n",
b1, pre.node_name(),
announcing_peer->node_name());
debug->info("added child node %s/%s from %s\n",
b1, pre.node_name(),
announcing_peer->node_name());
#endif
}

Expand Down Expand Up @@ -1053,7 +1054,7 @@ void dag_network::receive_dao(network_interface *iface,
/* need to look at dag_members, and see if the child node already
* exists, and add if not
*/
debug->verbose(" recv DAO rpltarget re: network %s, target %s (added)\n",
debug->info(" recv DAO rpltarget re: network %s, target %s (added)\n",
addrfound, peer->node_name());

add_childnode(peer, iface, prefix);
Expand All @@ -1062,7 +1063,7 @@ void dag_network::receive_dao(network_interface *iface,

/* now send a DAO-ACK back this the node, using the interface it arrived on, if asked to. */
if(RPL_DAO_K(dao->rpl_flags)) {
debug->verbose("sending DAOACK about %u networks, to %s\n",
debug->info("sending DAOACK about %u networks, to %s\n",
addrcount, peer->node_name());
iface->send_daoack(*peer, *this, dao->rpl_daoseq);
}
Expand Down
13 changes: 0 additions & 13 deletions lib/libndmgmt/node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ extern "C" {

void rpl_node::zero_node(void) {
valid = false;
installed = false;
name[0]='\0'; self = false;
alreadyDeclined = false;
alreadyAccepted = false;
Expand Down Expand Up @@ -133,18 +132,6 @@ void rpl_node::update_nce_stamp(void)
time(&this->lastseen);
}

void rpl_node::add_route_via_node(ip_subnet &prefix, network_interface *iface)
{
// dao_needed = true;

assert(mDN->dag_me != NULL);
if(!this->installed) {
iface->add_route_to_node(prefix, this,
mDN->dag_me->prefix_number().addr);
this->installed = true;
}
}

rpl_node *network_interface::find_neighbour_by_grasp_sessionid(grasp_session_id gsi)
{
node_map_iterator nmi = this->neighbours.begin();
Expand Down
12 changes: 12 additions & 0 deletions lib/libndmgmt/prefix.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,18 @@ void prefix_node::markself(dag_network *dn, ip_subnet prefix)
set_prefix(prefix);
}

void prefix_node::add_route_via_node(network_interface *iface)
{
//debug->info(" prefix %p installed: %u from: %p\n", this, this->installed, this->announced_from);
if(!this->installed) {
iface->add_route_to_node(this->mPrefix, this->announced_from,
mDN->dag_me->prefix_number().addr);
this->installed = true;
}
}



/*
* Local Variables:
* c-basic-offset:4
Expand Down
5 changes: 2 additions & 3 deletions testing/unit/30-ackdao/.gdbinit
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
file 30-daoack


file ./30-ackdao
set args ../INPUTS/29-dao-nopio.pcap ../INPUTS/31-dao-extra.pcap ../INPUTS/32-dao-onlyif.pcap
6 changes: 6 additions & 0 deletions testing/unit/30-ackdao/30-ackdao-output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,17 @@ packet 2 is being processed
would invoke cmd: ip -6 route add 2001:db8:1:0:216:3eff:fe11:3424/128 via fe80::216:3eff:fe11:3424 dev wlan0 src 2001:db8:1:0:216:3eff:fe11:3424
would invoke cmd: ip -6 route show
recv DAO rpltarget re: network fd01:203:405:607::1111/128, target fe80::216:3eff:fe11:3424 (added)
invoking ip -6 route add fd01:203:405:607::1111/128 via fe80::216:3eff:fe11:3424 dev wlan0 src 2001:db8:1:0:216:3eff:fe11:3424
would invoke cmd: ip -6 route add fd01:203:405:607::1111/128 via fe80::216:3eff:fe11:3424 dev wlan0 src 2001:db8:1:0:216:3eff:fe11:3424
would invoke cmd: ip -6 route show
sending DAOACK about 2 networks, to fe80::216:3eff:fe11:3424
sending DAOACK on if: wlan0(faked)
Processing input file3
packet 3 is being processed
processing dao(44) [42/[2001:db8:661e::1]: daoseq:2,dao-ack]
recv DAO rpltarget re: network fd01:203:405:607::1111/128, target fe80::216:3eff:fe11:3424 (added)
invoking ip -6 route add fd01:203:405:607::1111/128 via fe80::216:3eff:fe11:3424 dev wlan0 src 2001:db8:1:0:216:3eff:fe11:3424
would invoke cmd: ip -6 route add fd01:203:405:607::1111/128 via fe80::216:3eff:fe11:3424 dev wlan0 src 2001:db8:1:0:216:3eff:fe11:3424
would invoke cmd: ip -6 route show
sending DAOACK about 1 networks, to fe80::216:3eff:fe11:3424
sending DAOACK on if: wlan0(faked)
7 changes: 7 additions & 0 deletions testing/unit/30-ackdao/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,22 @@ UNSTRUNG_SRCDIR?=$(shell cd ../../..; pwd)
include ${UNSTRUNG_SRCDIR}/Makefile.inc
include ${srcdir}../Makefile.testing

all: 30-ackdao .gdbinit

30-ackdao: 30-ackdao.cpp ${INC}/iface.h ${LIBS}
${CXX} ${CXXFLAGS} -o 30-ackdao 30-ackdao.cpp ${LDFLAGS} ${LIBS}

checkprograms:: 30-ackdao
programs::

.gdbinit: Makefile
@echo file ./30-ackdao >.gdbinit
@echo set args "../INPUTS/29-dao-nopio.pcap ../INPUTS/31-dao-extra.pcap ../INPUTS/32-dao-onlyif.pcap" >>.gdbinit

check:: 30-ackdao
@mkdir -p ../OUTPUTS
@echo SELFPREFIX13:

./30-ackdao ../INPUTS/29-dao-nopio.pcap ../INPUTS/31-dao-extra.pcap ../INPUTS/32-dao-onlyif.pcap 2>&1 | tee ../OUTPUTS/30-ackdao-output.raw | diff -B - 30-ackdao-output.txt
@${TCPDUMP} -t -v -n -r ../OUTPUTS/30-node-A-out.pcap | tee ../OUTPUTS/30-node-A-capture.txt | diff -B - 30-node-A-capture.txt

Expand Down

0 comments on commit 10eb4b7

Please sign in to comment.