diff options
Diffstat (limited to 'src/ipcpd/normal')
| -rw-r--r-- | src/ipcpd/normal/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/ipcpd/normal/dt.c | 100 | ||||
| -rw-r--r-- | src/ipcpd/normal/dt.h | 2 | ||||
| -rw-r--r-- | src/ipcpd/normal/dt_pci.c | 112 | ||||
| -rw-r--r-- | src/ipcpd/normal/dt_pci.h | 67 | ||||
| -rw-r--r-- | src/ipcpd/normal/fa.c | 1 | 
6 files changed, 91 insertions, 192 deletions
| diff --git a/src/ipcpd/normal/CMakeLists.txt b/src/ipcpd/normal/CMakeLists.txt index 6dd68385..1cba7630 100644 --- a/src/ipcpd/normal/CMakeLists.txt +++ b/src/ipcpd/normal/CMakeLists.txt @@ -37,7 +37,6 @@ set(SOURCE_FILES    dht.c    dir.c    dt.c -  dt_pci.c    enroll.c    fa.c    main.c diff --git a/src/ipcpd/normal/dt.c b/src/ipcpd/normal/dt.c index c0414007..c3f8f198 100644 --- a/src/ipcpd/normal/dt.c +++ b/src/ipcpd/normal/dt.c @@ -46,7 +46,6 @@  #include "connmgr.h"  #include "ipcp.h"  #include "dt.h" -#include "dt_pci.h"  #include "pff.h"  #include "routing.h"  #include "sdu_sched.h" @@ -73,6 +72,89 @@ struct comp_info {          char * name;  }; +/* Abstract syntax */ +enum dtp_fields { +        DTP_DST = 0,   /* DST ADDRESS      */ +        DTP_QOS,       /* QOS ID           */ +        DTP_DEID,      /* DST Endpoint ID  */ +        DTP_TTL,       /* TTL FIELD        */ +        DTP_NUM_FIELDS /* Number of fields */ +}; + +/* Fixed field lengths */ +#define TTL_LEN 1 +#define QOS_LEN 1 + +struct dt_pci { +        uint64_t  dst_addr; +        qoscube_t qc; +        uint8_t   ttl; +        uint32_t  eid; +}; + +struct { +        uint8_t         addr_size; +        uint8_t         eid_size; +        size_t          head_size; + +        /* Offsets */ +        size_t          qc_o; +        size_t          ttl_o; +        size_t          eid_o; + +        /* Initial TTL value */ +        uint8_t         max_ttl; +} dt_pci_info; + +static int dt_pci_ser(struct shm_du_buff * sdb, +                      struct dt_pci *      dt_pci) +{ +        uint8_t * head; +        uint8_t   ttl = dt_pci_info.max_ttl; + +        assert(sdb); +        assert(dt_pci); + +        head = shm_du_buff_head_alloc(sdb, dt_pci_info.head_size); +        if (head == NULL) +                return -EPERM; + +        /* FIXME: Add check and operations for Big Endian machines. */ +        memcpy(head, &dt_pci->dst_addr, dt_pci_info.addr_size); +        memcpy(head + dt_pci_info.qc_o, &dt_pci->qc, QOS_LEN); +        memcpy(head + dt_pci_info.ttl_o, &ttl, TTL_LEN); +        memcpy(head + dt_pci_info.eid_o, &dt_pci->eid, dt_pci_info.eid_size); + +        return 0; +} + +static void dt_pci_des(struct shm_du_buff * sdb, +                       struct dt_pci *      dt_pci) +{ +        uint8_t * head; + +        assert(sdb); +        assert(dt_pci); + +        head = shm_du_buff_head(sdb); + +        /* Decrease TTL */ +        --*(head + dt_pci_info.ttl_o); + +        /* FIXME: Add check and operations for Big Endian machines. */ +        memcpy(&dt_pci->dst_addr, head, dt_pci_info.addr_size); +        memcpy(&dt_pci->qc, head + dt_pci_info.qc_o, QOS_LEN); +        memcpy(&dt_pci->ttl, head + dt_pci_info.ttl_o, TTL_LEN); +        memcpy(&dt_pci->eid, head + dt_pci_info.eid_o, dt_pci_info.eid_size); +} + +static void dt_pci_shrink(struct shm_du_buff * sdb) +{ +        assert(sdb); + +        shm_du_buff_head_release(sdb, dt_pci_info.head_size); +} +  struct {          struct sdu_sched * sdu_sched; @@ -559,10 +641,14 @@ int dt_init(enum pol_routing pr,          info.pref_syntax  = PROTO_FIXED;          info.addr         = ipcpi.dt_addr; -        if (dt_pci_init(addr_size, eid_size, max_ttl)) { -                log_err("Failed to init shm dt_pci."); -                goto fail_pci_init; -        } +        dt_pci_info.addr_size = addr_size; +        dt_pci_info.eid_size  = eid_size; +        dt_pci_info.max_ttl   = max_ttl; + +        dt_pci_info.qc_o      = dt_pci_info.addr_size; +        dt_pci_info.ttl_o     = dt_pci_info.qc_o + QOS_LEN; +        dt_pci_info.eid_o     = dt_pci_info.ttl_o + TTL_LEN; +        dt_pci_info.head_size = dt_pci_info.eid_o + dt_pci_info.eid_size;          if (notifier_reg(handle_event, NULL)) {                  log_err("Failed to register with notifier."); @@ -646,8 +732,6 @@ int dt_init(enum pol_routing pr,   fail_connmgr_comp_init:          notifier_unreg(&handle_event);   fail_notifier_reg: -        dt_pci_fini(); - fail_pci_init:          return -1;  } @@ -675,8 +759,6 @@ void dt_fini(void)          connmgr_comp_fini(COMPID_DT);          notifier_unreg(&handle_event); - -        dt_pci_fini();  }  int dt_start(void) diff --git a/src/ipcpd/normal/dt.h b/src/ipcpd/normal/dt.h index e0bbe3f3..a17098b7 100644 --- a/src/ipcpd/normal/dt.h +++ b/src/ipcpd/normal/dt.h @@ -26,8 +26,6 @@  #include <ouroboros/ipcp.h>  #include <ouroboros/shm_rdrbuff.h> -#include "dt_pci.h" -  #define DT_COMP      "Data Transfer"  #define DT_PROTO     "dtp"  #define INVALID_ADDR 0 diff --git a/src/ipcpd/normal/dt_pci.c b/src/ipcpd/normal/dt_pci.c deleted file mode 100644 index 76304668..00000000 --- a/src/ipcpd/normal/dt_pci.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Ouroboros - Copyright (C) 2016 - 2018 - * - * Protocol Control Information of Data Transfer Component - * - *    Dimitri Staessens <dimitri.staessens@ugent.be> - *    Sander Vrijders   <sander.vrijders@ugent.be> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * 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., http://www.fsf.org/about/contact/. - */ - -#include <ouroboros/errno.h> - -#include "dt_pci.h" - -#include <stdlib.h> -#include <string.h> -#include <assert.h> - -struct { -        uint8_t         addr_size; -        uint8_t         eid_size; -        size_t          head_size; - -        /* Offsets */ -        size_t          qc_o; -        size_t          ttl_o; -        size_t          eid_o; - -        /* Initial TTL value */ -        uint8_t         max_ttl; -} dt_pci_info; - -int dt_pci_init(uint8_t addr_size, -                uint8_t eid_size, -                uint8_t max_ttl) -{ -        dt_pci_info.addr_size = addr_size; -        dt_pci_info.eid_size  = eid_size; -        dt_pci_info.max_ttl   = max_ttl; - -        dt_pci_info.qc_o      = dt_pci_info.addr_size; -        dt_pci_info.ttl_o     = dt_pci_info.qc_o + QOS_LEN; -        dt_pci_info.eid_o     = dt_pci_info.ttl_o + TTL_LEN; -        dt_pci_info.head_size = dt_pci_info.eid_o + dt_pci_info.eid_size; - -        return 0; -} - -void dt_pci_fini(void) { -        return; -} - -int dt_pci_ser(struct shm_du_buff * sdb, -               struct dt_pci *      dt_pci) -{ -        uint8_t * head; -        uint8_t   ttl = dt_pci_info.max_ttl; - -        assert(sdb); -        assert(dt_pci); - -        head = shm_du_buff_head_alloc(sdb, dt_pci_info.head_size); -        if (head == NULL) -                return -EPERM; - -        /* FIXME: Add check and operations for Big Endian machines. */ -        memcpy(head, &dt_pci->dst_addr, dt_pci_info.addr_size); -        memcpy(head + dt_pci_info.qc_o, &dt_pci->qc, QOS_LEN); -        memcpy(head + dt_pci_info.ttl_o, &ttl, TTL_LEN); -        memcpy(head + dt_pci_info.eid_o, &dt_pci->eid, dt_pci_info.eid_size); - -        return 0; -} - -void dt_pci_des(struct shm_du_buff * sdb, -                struct dt_pci *      dt_pci) -{ -        uint8_t * head; - -        assert(sdb); -        assert(dt_pci); - -        head = shm_du_buff_head(sdb); - -        /* Decrease TTL */ -        --*(head + dt_pci_info.ttl_o); - -        /* FIXME: Add check and operations for Big Endian machines. */ -        memcpy(&dt_pci->dst_addr, head, dt_pci_info.addr_size); -        memcpy(&dt_pci->qc, head + dt_pci_info.qc_o, QOS_LEN); -        memcpy(&dt_pci->ttl, head + dt_pci_info.ttl_o, TTL_LEN); -        memcpy(&dt_pci->eid, head + dt_pci_info.eid_o, dt_pci_info.eid_size); -} - -void dt_pci_shrink(struct shm_du_buff * sdb) -{ -        assert(sdb); - -        shm_du_buff_head_release(sdb, dt_pci_info.head_size); -} diff --git a/src/ipcpd/normal/dt_pci.h b/src/ipcpd/normal/dt_pci.h deleted file mode 100644 index 8022f84a..00000000 --- a/src/ipcpd/normal/dt_pci.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Ouroboros - Copyright (C) 2016 - 2018 - * - * Protocol Control Information of Data Transfer Component - * - *    Dimitri Staessens <dimitri.staessens@ugent.be> - *    Sander Vrijders   <sander.vrijders@ugent.be> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * 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., http://www.fsf.org/about/contact/. - */ - -#ifndef OUROBOROS_IPCPD_NORMAL_DT_PCI_H -#define OUROBOROS_IPCPD_NORMAL_DT_PCI_H - -#include <ouroboros/shm_du_buff.h> -#include <ouroboros/proto.h> -#include <ouroboros/qoscube.h> - -#include <stdint.h> -#include <stdbool.h> - -/* Abstract syntax */ -enum dtp_fields { -        DTP_DST = 0,   /* DST ADDRESS      */ -        DTP_QOS,       /* QOS ID           */ -        DTP_DEID,      /* DST Endpoint ID  */ -        DTP_TTL,       /* TTL FIELD        */ -        DTP_NUM_FIELDS /* Number of fields */ -}; - -/* Fixed field lengths */ -#define TTL_LEN 1 -#define QOS_LEN 1 - -struct dt_pci { -        uint64_t  dst_addr; -        qoscube_t qc; -        uint8_t   ttl; -        uint32_t  eid; -}; - -int   dt_pci_init(uint8_t addr_size, -                  uint8_t eid_size, -                  uint8_t max_ttl); - -void  dt_pci_fini(void); - -int   dt_pci_ser(struct shm_du_buff * sdb, -                 struct dt_pci *      dt_pci); - -void  dt_pci_des(struct shm_du_buff * sdb, -                 struct dt_pci *      dt_pci); - -void  dt_pci_shrink(struct shm_du_buff * sdb); - -#endif /* OUROBOROS_IPCPD_NORMAL_DT_PCI_H */ diff --git a/src/ipcpd/normal/fa.c b/src/ipcpd/normal/fa.c index 87167131..10f0a863 100644 --- a/src/ipcpd/normal/fa.c +++ b/src/ipcpd/normal/fa.c @@ -38,7 +38,6 @@  #include <ouroboros/ipcp-dev.h>  #include "dir.h" -#include "dt_pci.h"  #include "fa.h"  #include "sdu_sched.h"  #include "ipcp.h" | 
