From 26f0b36fa103c84cb3f3d9eb631b57b31d053292 Mon Sep 17 00:00:00 2001 From: gardners Date: Tue, 13 Sep 2011 03:33:45 +0930 Subject: [PATCH] Added framework for advertising node reachability. --- mphlr.h | 1 + overlay_interface.c | 2 ++ overlay_route.c | 23 ++++++++++++++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/mphlr.h b/mphlr.h index 2b20566a..a337c266 100644 --- a/mphlr.h +++ b/mphlr.h @@ -804,3 +804,4 @@ int overlay_route_dump(); int overlay_route_tick(); int overlay_route_tick_neighbour(int neighbour_id,long long now); int overlay_route_tick_node(int bin,int slot,long long now); +int overlay_route_add_advertisements(int interface,overlay_buffer *e); diff --git a/overlay_interface.c b/overlay_interface.c index f750eaee..9706424a 100644 --- a/overlay_interface.c +++ b/overlay_interface.c @@ -563,6 +563,8 @@ int overlay_tick_interface(int i, long long now) */ overlay_stuff_packet_from_queue(i,e,OQ_MESH_MANAGEMENT,now,pax,&frame_pax,MAX_FRAME_PAX); + overlay_route_add_advertisements(i,e); + /* 4. XXX Add lower-priority queued data */ /* 5. XXX Fill the packet up to a suitable size with anything that seems a good idea */ diff --git a/overlay_route.c b/overlay_route.c index a7c5d92a..5d033b75 100644 --- a/overlay_route.c +++ b/overlay_route.c @@ -421,6 +421,9 @@ overlay_node *overlay_route_find_node(unsigned char *sid,int createP) } } + /* Ask for newly discovered node to be advertised */ + overlay_route_please_advertise(&overlay_nodes[bin_number][slot]); + bcopy(sid,overlay_nodes[bin_number][free_slot].sid,SID_SIZE); return &overlay_nodes[bin_number][free_slot]; } @@ -522,7 +525,7 @@ int overlay_route_ack_selfannounce(overlay_frame *f,overlay_neighbour *n) /* Terminate list */ ob_append_byte(out->payload,0); - /* XXX Add to queue */ + /* Add to queue */ if (overlay_payload_enqueue(OQ_MESH_MANAGEMENT,out)) { op_free(out); @@ -677,6 +680,14 @@ int overlay_route_recalc_node_metrics(overlay_node *n,long long now) } } + /* Think about scheduling this node's score for readvertising if its score + has changed a lot? + Really what we probably want is to advertise when the score goes up, since + if it goes down, we probably don't need to say anything at all. + */ + int diff=best_score-n->best_link_score; + if (diff>0) overlay_route_please_advertise(n); + /* Remember new reachability information */ n->best_link_score=best_score; n->best_observation=best_observation; @@ -1042,3 +1053,13 @@ int overlay_route_tick_node(int bin,int slot,long long now) return overlay_route_recalc_node_metrics(&overlay_nodes[bin][slot],now); } +/* Request that this node be advertised as a matter of priority */ +int overlay_route_please_advertise(overlay_node *n) +{ + return WHY("Not implemented"); +} + +int overlay_route_add_advertisements(int interface,overlay_buffer *e) +{ + return WHY("Not implemented"); +}