diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ipcpd/normal/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/ipcpd/normal/pci.c | 146 | ||||
| -rw-r--r-- | src/ipcpd/normal/pci.h | 42 | ||||
| -rw-r--r-- | src/lib/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/lib/du_buff.c | 380 | ||||
| -rw-r--r-- | src/lib/tests/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/lib/tests/du_buff_test.c | 70 | 
7 files changed, 0 insertions, 641 deletions
| diff --git a/src/ipcpd/normal/CMakeLists.txt b/src/ipcpd/normal/CMakeLists.txt index 74bd19ec..5aefeabb 100644 --- a/src/ipcpd/normal/CMakeLists.txt +++ b/src/ipcpd/normal/CMakeLists.txt @@ -17,7 +17,6 @@ SET(IPCP_NORMAL_TARGET ipcpd-normal CACHE STRING "IPCP_NORMAL_TARGET")  set(SOURCE_FILES          # Add source files here          main.c -        pci.c  )  add_executable (ipcpd-normal ${SOURCE_FILES} ${IPCP_SOURCES}) diff --git a/src/ipcpd/normal/pci.c b/src/ipcpd/normal/pci.c deleted file mode 100644 index d7df52b6..00000000 --- a/src/ipcpd/normal/pci.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Ouroboros - Copyright (C) 2016 - * - * Protocol Control Information - * - *    Dimitri Staessens <dimitri.staessens@intec.ugent.be> - *    Sander Vrijders   <sander.vrijders@intec.ugent.be> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "pci.h" -#include <stdlib.h> -#include <errno.h> - -#define OUROBOROS_PREFIX "ipcp/pci" - -#include <ouroboros/logs.h> - -#define PCI_HEAD_SIZE(a, b) a.addr_size * 2 +  \ -        a.cep_id_size * 2 +                    \ -        a.pdu_length_size +                    \ -        b.ttl_size +                           \ -        a.seqno_size +                         \ -        a.qos_id_size -#define PCI_TAIL_SIZE(b) b.chk_size - - -struct pci { -        /* head */ -        uint8_t * dst_addr; -        uint8_t * src_addr; -        uint8_t * dst_cep_id; -        uint8_t * src_cep_id; -        uint8_t * pdu_length; -        uint8_t * ttl; -        uint8_t * seqno; -        uint8_t * qos_id; - -        uint8_t * chk; - -        du_buff_t * dub; - -        struct ipcp_dtp_const dtpc; -        struct ipcp_dup_const dupc; - -}; - -pci_t * pci_create(du_buff_t                   * dub, -                   const struct ipcp_dtp_const * dtpc, -                   const struct ipcp_dup_const * dupc) -{ -        struct pci * p; - -        if (dub == NULL) { -                LOG_DBGF("Bogus input. Bugging out."); -                return NULL; -        } - -        p = malloc(sizeof *p); - -        if (p == NULL) -                return NULL; - -        p->dub = dub; - -        p->dtpc = *dtpc; -        p->dupc = *dupc; - -        p->dst_addr   = NULL; -        p->src_addr   = NULL; -        p->dst_cep_id = NULL; -        p->src_cep_id = NULL; -        p->pdu_length = NULL; -        p->ttl        = NULL; -        p->seqno      = NULL; -        p->qos_id     = NULL; -        p->chk        = NULL; - -        return p; -} - -void pci_destroy(pci_t * pci) -{ -        free(pci); -} - -int pci_init(pci_t                 * pci) -{ -        if (pci == NULL) { -                LOG_DBGF("Bogus input. Bugging out."); -                return -EINVAL; -        } - -        uint8_t * pci_head = du_buff_head_alloc(pci->dub, PCI_HEAD_SIZE( -                                                        pci->dtpc,pci->dupc)); -        uint8_t * pci_tail = du_buff_tail_alloc(pci->dub, PCI_TAIL_SIZE( -                                                        pci->dupc)); - -        if (pci_head == NULL) { -                LOG_DBG("Failed to allocate space for PCI at head."); -                return -ENOBUFS; -        } - -        if (pci_tail == NULL) { -                LOG_DBG("Failed to allocate space for PCI at tail."); -                return -ENOBUFS; -        } - -        pci->dst_addr   = pci_head; -        pci->src_addr   = (pci_head += pci->dtpc.addr_size); -        pci->dst_cep_id = (pci_head += pci->dtpc.addr_size); -        pci->src_cep_id = (pci_head += pci->dtpc.cep_id_size); -        pci->pdu_length = (pci_head += pci->dtpc.cep_id_size); -        pci->ttl        = (pci_head += pci->dtpc.pdu_length_size); -        pci->seqno      = (pci_head += pci->dupc.ttl_size); -        pci->qos_id     = (pci_head += pci->dtpc.seqno_size); - -        pci->chk        = (pci_tail); - -        return 0; -} - -void pci_release(pci_t * pci) -{ -        if (pci == NULL) -                return; - -        if (pci->dub == NULL) -                return; - -        du_buff_head_release(pci->dub, PCI_HEAD_SIZE(pci->dtpc, pci->dupc)); -        du_buff_tail_release(pci->dub, PCI_TAIL_SIZE(pci->dupc)); -} diff --git a/src/ipcpd/normal/pci.h b/src/ipcpd/normal/pci.h deleted file mode 100644 index 3c011723..00000000 --- a/src/ipcpd/normal/pci.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Ouroboros - Copyright (C) 2016 - * - * Protocol Control Information - * - *    Dimitri Staessens <dimitri.staessens@intec.ugent.be> - *    Sander Vrijders   <sander.vrijders@intec.ugent.be> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef OUROBOROS_IPCP_PCI_H -#define OUROBOROS_IPCP_PCI_H - -#include "ouroboros/du_buff.h" -#include "dt_const.h" - -struct pci; - -typedef struct pci pci_t; - -pci_t * pci_create(du_buff_t                   * dub, -                   const struct ipcp_dtp_const * dtpc, -                   const struct ipcp_dup_const * dupc); -void    pci_destroy(pci_t * pci); - -int     pci_init(pci_t * pci); -void    pci_release(pci_t * pci); - -#endif /* OUROBOROS_IPCP_PCI_H */ diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index 410be6fe..ae46f5bc 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -26,7 +26,6 @@ set(SOURCE_FILES    bitmap.c    cdap.c    dev.c -  du_buff.c    ipcp.c    irm.c    list.c diff --git a/src/lib/du_buff.c b/src/lib/du_buff.c deleted file mode 100644 index 5f9d6f28..00000000 --- a/src/lib/du_buff.c +++ /dev/null @@ -1,380 +0,0 @@ -/* - * Ouroboros - Copyright (C) 2016 - * - * Data Unit Buffer - * - *    Dimitri Staessens <dimitri.staessens@intec.ugent.be> - *    Sander Vrijders   <sander.vrijders@intec.ugent.be> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <stdlib.h> -#include <string.h> -#include <errno.h> - -#include <ouroboros/du_buff.h> -#include <ouroboros/list.h> - -#define OUROBOROS_PREFIX "du_buff" - -#include "ouroboros/logs.h" - -#define DU_BLOCK_DATA_SIZE (DU_BUFF_BLOCK_SIZE - sizeof (struct buffer)) - -struct buffer { -        uint8_t        * data; -        size_t           size; -        struct list_head list; -}; - -struct du_buff { -        struct buffer  * buffer; -        size_t           size; -        size_t           du_head; -        size_t           du_tail; -}; - -static void buffer_destroy(struct buffer * buf) -{ -        if (buf == NULL) { -                LOG_DBGF("Bogus input, bugging out."); -                return; -        } - -        free (buf->data); -        free (buf); -} - -static void buffer_destroy_list(struct buffer * head) -{ -        struct list_head * ptr; -        struct list_head * n; - -        if (head == NULL) { -                LOG_DBGF("Bogus input, bugging out."); -                return; -        } - -        list_for_each_safe(ptr, n, &(head->list)) { -                struct buffer * tmp = list_entry(ptr, struct buffer, list); -                list_del(ptr); -                buffer_destroy(tmp); -        } -        free(head); -} - -static struct buffer * buffer_create (size_t size, size_t headspace, size_t len) -{ -        struct buffer * head = NULL; -        size_t          remaining = size; -        size_t          ts = size - (headspace + len); - -        if (headspace > DU_BLOCK_DATA_SIZE || ts > DU_BLOCK_DATA_SIZE) { -                LOG_ERR("Illegal du_buff: Cannot fit PCI in DU_BUFF_BLOCK."); -                return NULL; -        } - -        head = malloc(sizeof *head); -        if (head == NULL) -                return NULL; - -        head->size = 0; -        head->data = NULL; - -        INIT_LIST_HEAD(&(head->list)); - -        while (remaining > 0) { -                struct buffer * buf; - -                size_t sz; - -                if (size > DU_BLOCK_DATA_SIZE -                           && remaining - ts <=  DU_BLOCK_DATA_SIZE -                           && remaining != ts) { -                        sz = remaining - ts; -                } else if (size > DU_BLOCK_DATA_SIZE && remaining == ts) { -                        sz = ts; -                } else { -                        sz = remaining < DU_BLOCK_DATA_SIZE ? -                                remaining : DU_BLOCK_DATA_SIZE; -                } - -                buf = malloc(sizeof *buf); -                if (buf == NULL) { -                        LOG_WARN("Could not allocate struct."); -                        free(head); -                        return NULL; -                } - -                if (sz > 0) { -                        buf->data = malloc(sz); -                        if (buf->data == NULL) { -                                LOG_WARN("Could not allocate memory block."); -                                buffer_destroy_list(head); -                                free(head); -                                free(buf); -                                return NULL; -                        } -                } else { -                        buf->data = NULL; -                } - -                buf->size = sz; - -                list_add_tail(&(buf->list), &(head->list)); - -                remaining -= buf->size; -        } - -        return head; -} - -static struct buffer * buffer_seek(const struct buffer * head, size_t pos) -{ -        struct list_head * ptr = NULL; -        size_t cur_buf_start   = 0; -        size_t cur_buf_end     = 0; - -        if (head == NULL) { -                LOG_DBGF("Bogus input, bugging out."); -                return NULL; -        } - -        list_for_each(ptr, &(head->list)) { -                struct buffer * tmp = list_entry(ptr, struct buffer, list); - -                cur_buf_end = cur_buf_start + tmp->size; -                if (cur_buf_end > pos) -                        return tmp; - -                cur_buf_start = cur_buf_end; -        } - -        return NULL; -} - -static uint8_t * buffer_seek_pos(const struct buffer * head, size_t pos) -{ -        struct list_head * ptr = NULL; -        size_t cur_buf_start   = 0; -        size_t cur_buf_end     = 0; - -        if (head == NULL) { -                LOG_DBGF("Bogus input, bugging out."); -                return NULL; -        } - -        list_for_each(ptr, &(head->list)) { -                struct buffer * tmp = list_entry(ptr, struct buffer, list); - -                cur_buf_end = cur_buf_start + tmp->size; - -                if (cur_buf_end > pos) -                        return tmp->data + (pos - cur_buf_start); - -                cur_buf_start = cur_buf_end; -        } - -        return NULL; -} - -static int buffer_copy_data(struct buffer * head, -                     size_t          pos, -                     const void    * src, -                     size_t          len) -{ -        struct list_head * ptr       = NULL; -        struct buffer    * buf_start = NULL; -        struct buffer    * buf_end   = NULL; -        uint8_t          * ptr_start = NULL; -        size_t             space_in_buf; -        size_t             bytes_remaining; -        uint8_t          * copy_pos  = NULL; - -        if (head == NULL || src == NULL) { -                LOG_DBGF("Bogus input, bugging out."); -                return -EINVAL; -        } - -        if (len == 0) { -                LOG_DBGF("Nothing to copy."); -                return 0; -        } - -        buf_start = buffer_seek(head, pos); -        buf_end   = buffer_seek(head, pos + len - 1); - -        if (buf_start == NULL || buf_end == NULL) { -                LOG_DBGF("Index out of bounds %lu, %lu", pos, pos + len); -                return -EINVAL; -        } - -        ptr_start = buffer_seek_pos(head, pos); - -        if (buf_start == buf_end) { -                memcpy(ptr_start, src, len); -                return 0; -        } - -        copy_pos = (uint8_t *)src; -        bytes_remaining = len; -        list_for_each(ptr, &(head->list)) { -                struct buffer * tmp = list_entry(ptr, struct buffer, list); -                if (tmp != buf_start) -                        continue; - -                space_in_buf = (tmp->data + tmp->size) - ptr_start; -                if (space_in_buf >= bytes_remaining) { -                        memcpy(ptr_start, copy_pos, bytes_remaining); -                        return 0; -                } -                else -                        memcpy(ptr_start, copy_pos, space_in_buf); -                bytes_remaining -= space_in_buf; -                copy_pos += space_in_buf; -        } - -        return 0; -} - -du_buff_t * du_buff_create(size_t size) -{ -        du_buff_t * dub = malloc(sizeof *dub); - -        if (dub == NULL) { -                LOG_DBGF("Bogus input, bugging out."); -                return NULL; -        } - -        dub->buffer  = NULL; -        dub->size    = size; -        dub->du_head = 0; -        dub->du_tail = 0; - -        return dub; -} - -void du_buff_destroy(du_buff_t * dub) -{ -        if (dub == NULL) { -                LOG_DBGF("Bogus input, bugging out."); -                return; -        } -        buffer_destroy_list(dub->buffer); -        free (dub); -} - -int du_buff_init(du_buff_t * dub, -                 size_t      start, -                 uint8_t   * data, -                 size_t      len) -{ -        if (dub == NULL || data == NULL) { -                LOG_DBGF("Bogus input, bugging out."); -                return -EINVAL; -        } - -        if (start >= dub->size) { -                LOG_DBGF("Index out of bounds %lu.", start); -                return -EINVAL; -        } - -        if (start + len > dub->size) { -                LOG_DBGF("Buffer too small for data."); -                return -EINVAL; -        } - -        dub->buffer = buffer_create(dub->size, start, len); -        if (dub->buffer == NULL) -                return -ENOMEM; - -        dub->du_head = start; -        dub->du_tail = start + len; - -        return buffer_copy_data(dub->buffer, start, data, len); -} - -uint8_t * du_buff_head_alloc(du_buff_t * dub, size_t size) -{ -        if (dub == NULL) { -                LOG_DBGF("Bogus input, bugging out."); -                return NULL; -        } - -        if ((long) (dub->du_head - size) < 0) { -                LOG_WARN("Failed to allocate PCI headspace."); -                return NULL; -        } - -        dub->du_head -= size; - -        return (buffer_seek_pos(dub->buffer, dub->du_head)); -} - -uint8_t * du_buff_tail_alloc(du_buff_t * dub, size_t size) -{ -        if (dub == NULL) { -                LOG_DBGF("Bogus input, bugging out."); -                return NULL; -        } - -        if (dub->du_tail + size >= dub->size) { -                LOG_WARN("Failed to allocate PCI tailspace."); -                return NULL; -        } - -        dub->du_tail += size; - -        return (buffer_seek_pos(dub->buffer, dub->du_tail)); -} - -int du_buff_head_release(du_buff_t * dub, size_t size) -{ -        if (dub == NULL) { -                LOG_DBGF("Bogus input, bugging out."); -                return -EINVAL; -        } - -        if (size > dub->du_tail - dub->du_head) { -                LOG_WARN("Tried to release beyond sdu boundary."); -                return -EOVERFLOW; -        } - -        dub->du_head += size; - -        /* FIXME: copy some random crap to the buffer for security */ - -        return 0; -} - -int du_buff_tail_release(du_buff_t * dub, size_t size) -{ -        if (dub == NULL) { -                LOG_DBGF("Bogus input, bugging out."); -                return -EINVAL; -        } - -        if (size > dub->du_tail - dub->du_head) { -                LOG_WARN("Tried to release beyond sdu boundary."); -                return -EOVERFLOW; -        } - -        dub->du_tail -= size; - -        /* FIXME: copy some random crap to the buffer for security */ - -        return 0; -} diff --git a/src/lib/tests/CMakeLists.txt b/src/lib/tests/CMakeLists.txt index e905c389..2135cb95 100644 --- a/src/lib/tests/CMakeLists.txt +++ b/src/lib/tests/CMakeLists.txt @@ -4,7 +4,6 @@ get_filename_component(PARENT_DIR ${PARENT_PATH} NAME)  create_test_sourcelist(${PARENT_DIR}_tests test_suite.c                         # Add new tests here                         bitmap_test.c -                       du_buff_test.c  )  add_executable(${PARENT_DIR}_test EXCLUDE_FROM_ALL ${${PARENT_DIR}_tests}) diff --git a/src/lib/tests/du_buff_test.c b/src/lib/tests/du_buff_test.c deleted file mode 100644 index bda1ca43..00000000 --- a/src/lib/tests/du_buff_test.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Ouroboros - Copyright (C) 2016 - * - * Test of the du_buff - * - *    Dimitri Staessens <dimitri.staessens@intec.ugent.be> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <ouroboros/du_buff.h> -#include "du_buff.c" - -#define TEST_BUFF_SIZE 16 * DU_BLOCK_DATA_SIZE -#define MAX(a,b) (a > b ? a : b) -#define MIN(a,b) (a < b ? a : b) - -int du_buff_test(int argc, char ** argv) -{ -        int i, j, k; -        int i_inc, j_inc, k_inc; - -        uint8_t bits[TEST_BUFF_SIZE]; - -        for (i = 0; i < TEST_BUFF_SIZE; i++) -                bits[i] = 170; - -        i_inc = MAX(1, DU_BLOCK_DATA_SIZE / 4); -        j_inc = MAX(1, DU_BLOCK_DATA_SIZE / 8); -        k_inc = MAX(1, DU_BLOCK_DATA_SIZE / 16); - -        for (i = DU_BUFF_BLOCK_SIZE / 4; i <= TEST_BUFF_SIZE; i += i_inc) { -                for (j = 0; j < i; j += j_inc) { -                        for (k = 0; k < i - j; k += k_inc) { -                                du_buff_t * dub = du_buff_create(i); -                                if (dub == NULL) -                                        return -1; - -                                if (k > DU_BLOCK_DATA_SIZE) { -                                        du_buff_destroy (dub); -                                        continue; -                                } - -                                if (i - (j + k) > DU_BLOCK_DATA_SIZE)  { -                                        du_buff_destroy (dub); -                                        continue; -                                } - -                                if (du_buff_init(dub, k, bits, j) < 0) { -                                        du_buff_destroy (dub); -                                        return -1; -                                } -                                du_buff_destroy (dub); -                        } -                } -        } -        return 0; /* tests succeeded */ -} | 
