diff options
Diffstat (limited to 'src/openvpn/mbuf.c')
-rw-r--r-- | src/openvpn/mbuf.c | 180 |
1 files changed, 92 insertions, 88 deletions
diff --git a/src/openvpn/mbuf.c b/src/openvpn/mbuf.c index 82f2388..7a23e59 100644 --- a/src/openvpn/mbuf.c +++ b/src/openvpn/mbuf.c @@ -5,7 +5,7 @@ * packet encryption, packet authentication, and * packet compression. * - * Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net> + * Copyright (C) 2002-2017 OpenVPN Technologies, Inc. <sales@openvpn.net> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 @@ -40,136 +40,140 @@ #include "memdbg.h" struct mbuf_set * -mbuf_init (unsigned int size) +mbuf_init(unsigned int size) { - struct mbuf_set *ret; - ALLOC_OBJ_CLEAR (ret, struct mbuf_set); - ret->capacity = adjust_power_of_2 (size); - ALLOC_ARRAY (ret->array, struct mbuf_item, ret->capacity); - return ret; + struct mbuf_set *ret; + ALLOC_OBJ_CLEAR(ret, struct mbuf_set); + ret->capacity = adjust_power_of_2(size); + ALLOC_ARRAY(ret->array, struct mbuf_item, ret->capacity); + return ret; } void -mbuf_free (struct mbuf_set *ms) +mbuf_free(struct mbuf_set *ms) { - if (ms) + if (ms) { - int i; - for (i = 0; i < (int) ms->len; ++i) - { - struct mbuf_item *item = &ms->array[MBUF_INDEX(ms->head, i, ms->capacity)]; - mbuf_free_buf (item->buffer); - } - free (ms->array); - free (ms); + int i; + for (i = 0; i < (int) ms->len; ++i) + { + struct mbuf_item *item = &ms->array[MBUF_INDEX(ms->head, i, ms->capacity)]; + mbuf_free_buf(item->buffer); + } + free(ms->array); + free(ms); } } struct mbuf_buffer * -mbuf_alloc_buf (const struct buffer *buf) +mbuf_alloc_buf(const struct buffer *buf) { - struct mbuf_buffer *ret; - ALLOC_OBJ (ret, struct mbuf_buffer); - ret->buf = clone_buf (buf); - ret->refcount = 1; - ret->flags = 0; - return ret; + struct mbuf_buffer *ret; + ALLOC_OBJ(ret, struct mbuf_buffer); + ret->buf = clone_buf(buf); + ret->refcount = 1; + ret->flags = 0; + return ret; } void -mbuf_free_buf (struct mbuf_buffer *mb) +mbuf_free_buf(struct mbuf_buffer *mb) { - if (mb) + if (mb) { - if (--mb->refcount <= 0) - { - free_buf (&mb->buf); - free (mb); - } + if (--mb->refcount <= 0) + { + free_buf(&mb->buf); + free(mb); + } } } void -mbuf_add_item (struct mbuf_set *ms, const struct mbuf_item *item) +mbuf_add_item(struct mbuf_set *ms, const struct mbuf_item *item) { - ASSERT (ms); - if (ms->len == ms->capacity) + ASSERT(ms); + if (ms->len == ms->capacity) { - struct mbuf_item rm; - ASSERT (mbuf_extract_item (ms, &rm)); - mbuf_free_buf (rm.buffer); - msg (D_MULTI_DROPPED, "MBUF: mbuf packet dropped"); + struct mbuf_item rm; + ASSERT(mbuf_extract_item(ms, &rm)); + mbuf_free_buf(rm.buffer); + msg(D_MULTI_DROPPED, "MBUF: mbuf packet dropped"); } - ASSERT (ms->len < ms->capacity); + ASSERT(ms->len < ms->capacity); - ms->array[MBUF_INDEX(ms->head, ms->len, ms->capacity)] = *item; - if (++ms->len > ms->max_queued) - ms->max_queued = ms->len; - ++item->buffer->refcount; + ms->array[MBUF_INDEX(ms->head, ms->len, ms->capacity)] = *item; + if (++ms->len > ms->max_queued) + { + ms->max_queued = ms->len; + } + ++item->buffer->refcount; } bool -mbuf_extract_item (struct mbuf_set *ms, struct mbuf_item *item) +mbuf_extract_item(struct mbuf_set *ms, struct mbuf_item *item) { - bool ret = false; - if (ms) + bool ret = false; + if (ms) { - while (ms->len) - { - *item = ms->array[ms->head]; - ms->head = MBUF_INDEX(ms->head, 1, ms->capacity); - --ms->len; - if (item->instance) /* ignore dereferenced instances */ - { - ret = true; - break; - } - } + while (ms->len) + { + *item = ms->array[ms->head]; + ms->head = MBUF_INDEX(ms->head, 1, ms->capacity); + --ms->len; + if (item->instance) /* ignore dereferenced instances */ + { + ret = true; + break; + } + } } - return ret; + return ret; } struct multi_instance * -mbuf_peek_dowork (struct mbuf_set *ms) +mbuf_peek_dowork(struct mbuf_set *ms) { - struct multi_instance *ret = NULL; - if (ms) + struct multi_instance *ret = NULL; + if (ms) { - int i; - for (i = 0; i < (int) ms->len; ++i) - { - struct mbuf_item *item = &ms->array[MBUF_INDEX(ms->head, i, ms->capacity)]; - if (item->instance) - { - ret = item->instance; - break; - } - } + int i; + for (i = 0; i < (int) ms->len; ++i) + { + struct mbuf_item *item = &ms->array[MBUF_INDEX(ms->head, i, ms->capacity)]; + if (item->instance) + { + ret = item->instance; + break; + } + } } - return ret; + return ret; } void -mbuf_dereference_instance (struct mbuf_set *ms, struct multi_instance *mi) +mbuf_dereference_instance(struct mbuf_set *ms, struct multi_instance *mi) { - if (ms) + if (ms) { - int i; - for (i = 0; i < (int) ms->len; ++i) - { - struct mbuf_item *item = &ms->array[MBUF_INDEX(ms->head, i, ms->capacity)]; - if (item->instance == mi) - { - mbuf_free_buf (item->buffer); - item->buffer = NULL; - item->instance = NULL; - msg (D_MBUF, "MBUF: dereferenced queued packet"); - } - } + int i; + for (i = 0; i < (int) ms->len; ++i) + { + struct mbuf_item *item = &ms->array[MBUF_INDEX(ms->head, i, ms->capacity)]; + if (item->instance == mi) + { + mbuf_free_buf(item->buffer); + item->buffer = NULL; + item->instance = NULL; + msg(D_MBUF, "MBUF: dereferenced queued packet"); + } + } } } -#else -static void dummy(void) {} +#else /* if P2MP */ +static void +dummy(void) { +} #endif /* P2MP */ |