From: Martin Willi Date: Fri, 20 Sep 2013 11:18:29 +0000 (+0200) Subject: libipsec: Use CoDel queues in processor for inbound/outbound queues X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=refs%2Fheads%2Flibipsec-queue;p=thirdparty%2Fstrongswan.git libipsec: Use CoDel queues in processor for inbound/outbound queues --- diff --git a/src/libipsec/ipsec_processor.c b/src/libipsec/ipsec_processor.c index eae2ed2f15..b58e1372ac 100644 --- a/src/libipsec/ipsec_processor.c +++ b/src/libipsec/ipsec_processor.c @@ -15,11 +15,11 @@ #include "ipsec.h" #include "ipsec_processor.h" +#include "codel_queue.h" #include #include #include -#include #include typedef struct private_ipsec_processor_t private_ipsec_processor_t; @@ -37,12 +37,12 @@ struct private_ipsec_processor_t { /** * Queue for inbound packets (esp_packet_t*) */ - blocking_queue_t *inbound_queue; + codel_queue_t *inbound_queue; /** * Queue for outbound packets (ip_packet_t*) */ - blocking_queue_t *outbound_queue; + codel_queue_t *outbound_queue; /** * Registered inbound callback @@ -235,13 +235,15 @@ static job_requeue_t process_outbound(private_ipsec_processor_t *this) METHOD(ipsec_processor_t, queue_inbound, void, private_ipsec_processor_t *this, esp_packet_t *packet) { - this->inbound_queue->enqueue(this->inbound_queue, packet); + this->inbound_queue->enqueue(this->inbound_queue, packet, + packet->packet.get_data(&packet->packet).len); } METHOD(ipsec_processor_t, queue_outbound, void, private_ipsec_processor_t *this, ip_packet_t *packet) { - this->outbound_queue->enqueue(this->outbound_queue, packet); + this->outbound_queue->enqueue(this->outbound_queue, packet, + packet->get_encoding(packet).len); } METHOD(ipsec_processor_t, register_inbound, void, @@ -287,10 +289,8 @@ METHOD(ipsec_processor_t, unregister_outbound, void, METHOD(ipsec_processor_t, destroy, void, private_ipsec_processor_t *this) { - this->inbound_queue->destroy_offset(this->inbound_queue, - offsetof(esp_packet_t, destroy)); - this->outbound_queue->destroy_offset(this->outbound_queue, - offsetof(ip_packet_t, destroy)); + this->inbound_queue->destroy(this->inbound_queue); + this->outbound_queue->destroy(this->outbound_queue); this->lock->destroy(this->lock); free(this); } @@ -312,8 +312,10 @@ ipsec_processor_t *ipsec_processor_create() .unregister_outbound = _unregister_outbound, .destroy = _destroy, }, - .inbound_queue = blocking_queue_create(), - .outbound_queue = blocking_queue_create(), + .inbound_queue = codel_queue_create( + offsetof(esp_packet_t, destroy), 1500), + .outbound_queue = codel_queue_create( + offsetof(ip_packet_t, destroy), 1500), .lock = rwlock_create(RWLOCK_TYPE_DEFAULT), );