diff options
Diffstat (limited to 'src/irmd')
-rw-r--r-- | src/irmd/ipcp.c | 6 | ||||
-rw-r--r-- | src/irmd/main.c | 33 | ||||
-rw-r--r-- | src/irmd/registry.h | 2 |
3 files changed, 25 insertions, 16 deletions
diff --git a/src/irmd/ipcp.c b/src/irmd/ipcp.c index a3e6eff8..07ae0dc2 100644 --- a/src/irmd/ipcp.c +++ b/src/irmd/ipcp.c @@ -330,7 +330,7 @@ int ipcp_flow_alloc(pid_t api, pid_t n_api, char * dst_name, char * src_ae_name, - qoscube_t qos) + qoscube_t cube) { ipcp_msg_t msg = IPCP_MSG__INIT; ipcp_msg_t * recv_msg = NULL; @@ -346,8 +346,8 @@ int ipcp_flow_alloc(pid_t api, msg.api = n_api; msg.src_ae_name = src_ae_name; msg.dst_name = dst_name; - msg.has_qos_cube = true; - msg.qos_cube = qos; + msg.has_qoscube = true; + msg.qoscube = cube; recv_msg = send_recv_ipcp_msg(api, &msg); if (recv_msg == NULL) diff --git a/src/irmd/main.c b/src/irmd/main.c index c42f2d3c..30602123 100644 --- a/src/irmd/main.c +++ b/src/irmd/main.c @@ -944,7 +944,9 @@ static int api_announce(pid_t api, char * apn) return 0; } -static struct irm_flow * flow_accept(pid_t api, char ** dst_ae_name) +static struct irm_flow * flow_accept(pid_t api, + char ** dst_ae_name, + qoscube_t * cube) { struct irm_flow * f = NULL; struct api_entry * e = NULL; @@ -1028,6 +1030,8 @@ static struct irm_flow * flow_accept(pid_t api, char ** dst_ae_name) return NULL; } + *cube = re->qos; + if (dst_ae_name != NULL) *dst_ae_name = re->req_ae_name; @@ -1110,18 +1114,15 @@ static int flow_alloc_resp(pid_t n_api, return ret; } -static struct irm_flow * flow_alloc(pid_t api, - char * dst_name, - char * src_ae_name, - qosspec_t * qos) +static struct irm_flow * flow_alloc(pid_t api, + char * dst_name, + char * src_ae_name, + qoscube_t cube) { struct irm_flow * f; pid_t ipcp; int port_id; - /* FIXME: Map qosspec to qos_cube */ - (void) qos; - pthread_rwlock_rdlock(&irmd->state_lock); if (irmd->state != IRMD_RUNNING) { @@ -1164,7 +1165,7 @@ static struct irm_flow * flow_alloc(pid_t api, pthread_rwlock_unlock(&irmd->state_lock); if (ipcp_flow_alloc(ipcp, port_id, api, - dst_name, src_ae_name, QOS_CUBE_BE) < 0) { + dst_name, src_ae_name, cube) < 0) { pthread_rwlock_rdlock(&irmd->state_lock); pthread_rwlock_wrlock(&irmd->flows_lock); list_del(&f->next); @@ -1314,7 +1315,8 @@ static pid_t auto_execute(char ** argv) static struct irm_flow * flow_req_arr(pid_t api, char * dst_name, - char * ae_name) + char * ae_name, + qoscube_t cube) { struct reg_entry * re = NULL; struct apn_entry * a = NULL; @@ -1425,6 +1427,7 @@ static struct irm_flow * flow_req_arr(pid_t api, pthread_rwlock_rdlock(&irmd->reg_lock); re->req_ae_name = ae_name; + re->qos = cube; reg_entry_set_state(re, REG_NAME_FLOW_ARRIVED); e = api_table_get(&irmd->api_table, h_api); @@ -1872,7 +1875,10 @@ void * mainloop(void * o) msg->n_dif_name); break; case IRM_MSG_CODE__IRM_FLOW_ACCEPT: - e = flow_accept(msg->api, &ret_msg.ae_name); + ret_msg.has_qoscube = true; + e = flow_accept(msg->api, + &ret_msg.ae_name, + (qoscube_t *) &ret_msg.qoscube); if (e == NULL) { ret_msg.has_result = true; ret_msg.result = -1; @@ -1893,7 +1899,7 @@ void * mainloop(void * o) e = flow_alloc(msg->api, msg->dst_name, msg->ae_name, - NULL); + msg->qoscube); if (e == NULL) { ret_msg.has_result = true; ret_msg.result = -1; @@ -1915,7 +1921,8 @@ void * mainloop(void * o) case IRM_MSG_CODE__IPCP_FLOW_REQ_ARR: e = flow_req_arr(msg->api, msg->dst_name, - msg->ae_name); + msg->ae_name, + msg->qoscube); if (e == NULL) { ret_msg.has_result = true; ret_msg.result = -1; diff --git a/src/irmd/registry.h b/src/irmd/registry.h index 1cb1d921..20c06a51 100644 --- a/src/irmd/registry.h +++ b/src/irmd/registry.h @@ -25,6 +25,7 @@ #include <ouroboros/config.h> #include <ouroboros/list.h> #include <ouroboros/irm_config.h> +#include <ouroboros/shared.h> #include "api_table.h" #include "apn_table.h" @@ -62,6 +63,7 @@ struct reg_entry { enum reg_name_state state; char * req_ae_name; + qoscube_t qos; int response; pthread_cond_t state_cond; pthread_mutex_t state_lock; |