Added framework for advertising node reachability.

This commit is contained in:
gardners 2011-09-13 03:33:45 +09:30
parent f301929026
commit 26f0b36fa1
3 changed files with 25 additions and 1 deletions

View File

@ -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);

View File

@ -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 */

View File

@ -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");
}