diff options
Diffstat (limited to 'src/irmd')
| -rw-r--r-- | src/irmd/ipcp.c | 13 | ||||
| -rw-r--r-- | src/irmd/ipcp.h | 2 | ||||
| -rw-r--r-- | src/irmd/irm_flow.c | 4 | ||||
| -rw-r--r-- | src/irmd/irm_flow.h | 5 | ||||
| -rw-r--r-- | src/irmd/main.c | 22 | 
5 files changed, 26 insertions, 20 deletions
diff --git a/src/irmd/ipcp.c b/src/irmd/ipcp.c index dc8f1c6e..0bdf674b 100644 --- a/src/irmd/ipcp.c +++ b/src/irmd/ipcp.c @@ -433,11 +433,12 @@ int ipcp_flow_alloc(pid_t           pid,                      pid_t           n_pid,                      const uint8_t * dst,                      size_t          len, -                    qoscube_t       cube) +                    qosspec_t       qs)  { -        ipcp_msg_t   msg      = IPCP_MSG__INIT; -        ipcp_msg_t * recv_msg = NULL; -        int          ret      = -1; +        ipcp_msg_t    msg      = IPCP_MSG__INIT; +        qosspec_msg_t qs_msg; +        ipcp_msg_t *  recv_msg = NULL; +        int           ret      = -1;          assert(dst); @@ -449,8 +450,8 @@ int ipcp_flow_alloc(pid_t           pid,          msg.has_hash     = true;          msg.hash.len     = len;          msg.hash.data    = (uint8_t *) dst; -        msg.has_qoscube  = true; -        msg.qoscube      = cube; +        qs_msg           = spec_to_msg(&qs); +        msg.qosspec      = &qs_msg;          recv_msg = send_recv_ipcp_msg(pid, &msg);          if (recv_msg == NULL) diff --git a/src/irmd/ipcp.h b/src/irmd/ipcp.h index 8ff062b2..28396333 100644 --- a/src/irmd/ipcp.h +++ b/src/irmd/ipcp.h @@ -67,7 +67,7 @@ int   ipcp_flow_alloc(pid_t           pid,                        pid_t           n_pid,                        const uint8_t * dst,                        size_t          len, -                      qoscube_t       qos); +                      qosspec_t       qs);  int   ipcp_flow_alloc_resp(pid_t pid,                             int   port_id, diff --git a/src/irmd/irm_flow.c b/src/irmd/irm_flow.c index dfbe5e95..a5a9f28c 100644 --- a/src/irmd/irm_flow.c +++ b/src/irmd/irm_flow.c @@ -39,7 +39,7 @@  struct irm_flow * irm_flow_create(pid_t     n_pid,                                    pid_t     n_1_pid,                                    int       port_id, -                                  qoscube_t qc) +                                  qosspec_t qs)  {          pthread_condattr_t cattr;          struct irm_flow *  f = malloc(sizeof(*f)); @@ -61,7 +61,7 @@ struct irm_flow * irm_flow_create(pid_t     n_pid,          f->n_pid   = n_pid;          f->n_1_pid = n_1_pid;          f->port_id = port_id; -        f->qc      = qc; +        f->qs      = qs;          f->n_rb = shm_rbuff_create(n_pid, port_id);          if (f->n_rb == NULL) { diff --git a/src/irmd/irm_flow.h b/src/irmd/irm_flow.h index d53984e8..f4de8187 100644 --- a/src/irmd/irm_flow.h +++ b/src/irmd/irm_flow.h @@ -43,11 +43,12 @@ struct irm_flow {          struct list_head   next;          int                port_id; -        qoscube_t          qc;          pid_t              n_pid;          pid_t              n_1_pid; +        qosspec_t          qs; +          struct shm_rbuff * n_rb;          struct shm_rbuff * n_1_rb; @@ -61,7 +62,7 @@ struct irm_flow {  struct irm_flow * irm_flow_create(pid_t     n_pid,                                    pid_t     n_1_pid,                                    int       port_id, -                                  qoscube_t qc); +                                  qosspec_t qs);  void              irm_flow_destroy(struct irm_flow * f); diff --git a/src/irmd/main.c b/src/irmd/main.c index 634bf4de..9504f3b5 100644 --- a/src/irmd/main.c +++ b/src/irmd/main.c @@ -1264,7 +1264,7 @@ static int flow_accept(pid_t              pid,  static int flow_alloc(pid_t              pid,                        const char *       dst, -                      qoscube_t          cube, +                      qosspec_t          qs,                        struct timespec *  timeo,                        struct irm_flow ** e)  { @@ -1288,7 +1288,7 @@ static int flow_alloc(pid_t              pid,                  return -EBADF;          } -        f = irm_flow_create(pid, ipcp->pid, port_id, cube); +        f = irm_flow_create(pid, ipcp->pid, port_id, qs);          if (f == NULL) {                  bmp_release(irmd.port_ids, port_id);                  pthread_rwlock_unlock(&irmd.flows_lock); @@ -1310,7 +1310,7 @@ static int flow_alloc(pid_t              pid,          str_hash(ipcp->dir_hash_algo, hash, dst);          if (ipcp_flow_alloc(ipcp->pid, port_id, pid, hash, -                            IPCP_HASH_LEN(ipcp), cube)) { +                            IPCP_HASH_LEN(ipcp), qs)) {                  /* sanitizer cleans this */                  log_info("Flow_allocation failed.");                  free(hash); @@ -1418,7 +1418,7 @@ static pid_t auto_execute(char ** argv)  static struct irm_flow * flow_req_arr(pid_t           pid,                                        const uint8_t * hash, -                                      qoscube_t       cube) +                                      qosspec_t       qs)  {          struct reg_entry *  re = NULL;          struct prog_entry * a  = NULL; @@ -1521,7 +1521,7 @@ static struct irm_flow * flow_req_arr(pid_t           pid,                  return NULL;          } -        f = irm_flow_create(h_pid, pid, port_id, cube); +        f = irm_flow_create(h_pid, pid, port_id, qs);          if (f == NULL) {                  bmp_release(irmd.port_ids, port_id);                  pthread_rwlock_unlock(&irmd.flows_lock); @@ -1993,17 +1993,19 @@ static void * mainloop(void * o)                  case IRM_MSG_CODE__IRM_FLOW_ACCEPT:                          result = flow_accept(msg->pid, timeo, &e);                          if (result == 0) { +                                qosspec_msg_t qs_msg;                                  ret_msg->has_port_id = true;                                  ret_msg->port_id     = e->port_id;                                  ret_msg->has_pid     = true;                                  ret_msg->pid         = e->n_1_pid; -                                ret_msg->has_qoscube = true; -                                ret_msg->qoscube     = e->qc; +                                qs_msg = spec_to_msg(&e->qs); +                                ret_msg->qosspec     = &qs_msg;                          }                          break;                  case IRM_MSG_CODE__IRM_FLOW_ALLOC:                          result = flow_alloc(msg->pid, msg->dst, -                                            msg->qoscube, timeo, &e); +                                            msg_to_spec(msg->qosspec), +                                            timeo, &e);                          if (result == 0) {                                  ret_msg->has_port_id = true;                                  ret_msg->port_id     = e->port_id; @@ -2017,7 +2019,7 @@ static void * mainloop(void * o)                  case IRM_MSG_CODE__IPCP_FLOW_REQ_ARR:                          e = flow_req_arr(msg->pid,                                           msg->hash.data, -                                         msg->qoscube); +                                         msg_to_spec(msg->qosspec));                          result = (e == NULL ? -1 : 0);                          if (result == 0) {                                  ret_msg->has_port_id = true; @@ -2061,6 +2063,8 @@ static void * mainloop(void * o)                  irm_msg__pack(ret_msg, buffer.data); +                /* Can't free the qosspec. */ +                ret_msg->qosspec = NULL;                  irm_msg__free_unpacked(ret_msg, NULL);                  pthread_cleanup_push(close_ptr, &sfd);  | 
