From 55be5208a9263399b05f0c6d53b317f98408f4bb Mon Sep 17 00:00:00 2001 From: Jeremy Lakeman Date: Fri, 14 Dec 2012 12:14:55 +1030 Subject: [PATCH] Remove packet queue delays, rely on network limits --- overlay_link.c | 2 +- overlay_queue.c | 48 ++++++------------------------------------------ tests/routing | 1 + 3 files changed, 8 insertions(+), 43 deletions(-) diff --git a/overlay_link.c b/overlay_link.c index fd283234..3877dc0a 100644 --- a/overlay_link.c +++ b/overlay_link.c @@ -258,7 +258,7 @@ int overlay_send_probe(struct subscriber *peer, struct sockaddr_in addr, overlay frame->source = my_subscriber; frame->next_hop = frame->destination = peer; frame->ttl=1; - frame->queue=OQ_MESH_MANAGEMENT; + frame->queue=OQ_ORDINARY; frame->destination_resolved=1; frame->recvaddr=addr; frame->unicast=1; diff --git a/overlay_queue.c b/overlay_queue.c index 9a493645..effa9a08 100644 --- a/overlay_queue.c +++ b/overlay_queue.c @@ -30,24 +30,9 @@ typedef struct overlay_txqueue { int length; /* # frames in queue */ int maxLength; /* max # frames in queue before we consider ourselves congested */ - /* wait until first->enqueued_at+transmit_delay before trying to force the transmission of a packet */ - int transmit_delay; - - /* if servald is busy, wait this long before trying to force the transmission of a packet */ - int grace_period; - /* Latency target in ms for this traffic class. Frames older than the latency target will get dropped. */ int latencyTarget; - - /* XXX Need to initialise these: - Real-time queue for voice (<200ms ?) - Real-time queue for video (<200ms ?) (lower priority than voice) - Ordinary service queue (<3 sec ?) - Rhizome opportunistic queue (infinity) - - (Mesh management doesn't need a queue, as each overlay packet is tagged with some mesh management information) - */ } overlay_txqueue; overlay_txqueue overlay_tx[OQ_MAX]; @@ -75,23 +60,10 @@ int overlay_queue_init(){ for(i=0;itype, alloca_tohex_sid(p->destination->sid), r==REACHABLE_SELF?"myself":"unreachable"); + return WHYF("Cannot send %x packet, destination %s is %s", p->type, + alloca_tohex_sid(p->destination->sid), r==REACHABLE_SELF?"myself":"unreachable"); } while(0); if (p->queue>=OQ_MAX) @@ -277,7 +250,6 @@ overlay_init_packet(struct outgoing_packet *packet, struct subscriber *destinati static int overlay_calc_queue_time(overlay_txqueue *queue, struct overlay_frame *frame){ int ret=0; - time_ms_t send_time; do{ if (frame->destination_resolved) @@ -294,8 +266,6 @@ overlay_calc_queue_time(overlay_txqueue *queue, struct overlay_frame *frame){ return 0; }while(0); - // when is the next packet from this queue due? - send_time=queue->first->enqueued_at + queue->transmit_delay; time_ms_t next_allowed_packet=0; if (frame->interface){ next_allowed_packet = limit_next_allowed(&frame->interface->transfer_limit); @@ -311,20 +281,14 @@ overlay_calc_queue_time(overlay_txqueue *queue, struct overlay_frame *frame){ next_allowed_packet = next_packet; } } - if (next_allowed_packet > send_time) - send_time = next_allowed_packet; - if (next_packet.alarm==0 || send_time < next_packet.alarm){ - next_packet.alarm=send_time; + if (next_packet.alarm==0 || next_allowed_packet < next_packet.alarm){ + next_packet.alarm=next_allowed_packet; + // no grace period, send IO ASAP + next_packet.deadline=next_allowed_packet; ret = 1; } - // how long can we wait if the server is busy? - send_time += queue->grace_period; - if (next_packet.deadline==0 || send_time < next_packet.deadline){ - next_packet.deadline=send_time; - ret = 1; - } if (!next_packet.function){ next_packet.function=overlay_send_packet; send_packet.name="overlay_send_packet"; diff --git a/tests/routing b/tests/routing index 0a866f56..657540d2 100755 --- a/tests/routing +++ b/tests/routing @@ -129,6 +129,7 @@ test_scan() { wait_until scan_completed wait_until has_seen_instances +B executeOk_servald mdp ping $SIDB 1 + tfw_cat --stdout --stderr executeOk_servald route print assertStdoutGrep --matches=1 "^$SIDB:UNICAST :" }