diff options
author | Sander Vrijders <sander.vrijders@intec.ugent.be> | 2016-04-27 17:38:49 +0200 |
---|---|---|
committer | Sander Vrijders <sander.vrijders@intec.ugent.be> | 2016-04-27 18:08:20 +0200 |
commit | 91c89c49257b4b9c698e5b7e90418915423ba1a2 (patch) | |
tree | 47fc194fe6eb671dd87fc2cbbfe3e3866a7dab50 /src | |
parent | aed2c2e59190b0d0fb5e89d992063fcc538784fc (diff) | |
download | ouroboros-91c89c49257b4b9c698e5b7e90418915423ba1a2.tar.gz ouroboros-91c89c49257b4b9c698e5b7e90418915423ba1a2.zip |
ipcpd: Hide IRMd messages and fix formatting
This abstracts away the IRMd messages by calling the functions from
ipcp.h in the ouroboros library. It also fixes some formatting issues.
Diffstat (limited to 'src')
-rw-r--r-- | src/ipcpd/ipcp-data.c | 11 | ||||
-rw-r--r-- | src/ipcpd/ipcp.c | 40 | ||||
-rw-r--r-- | src/ipcpd/shim-udp/main.c | 53 |
3 files changed, 40 insertions, 64 deletions
diff --git a/src/ipcpd/ipcp-data.c b/src/ipcpd/ipcp-data.c index 106226de..72407a53 100644 --- a/src/ipcpd/ipcp-data.c +++ b/src/ipcpd/ipcp-data.c @@ -189,11 +189,12 @@ void ipcp_data_destroy(struct ipcp_data * data) clear_directory(data); clear_flows(data); - /* no need to unlock, just free the entire thing - pthread_mutex_unlock(&data->flow_lock); - pthread_mutex_unlock(&data->dir_lock); - pthread_mutex_unlock(&data->reg_lock); - */ + /* + * no need to unlock, just free the entire thing + * pthread_mutex_unlock(&data->flow_lock); + * pthread_mutex_unlock(&data->dir_lock); + * pthread_mutex_unlock(&data->reg_lock); + */ free(data); } diff --git a/src/ipcpd/ipcp.c b/src/ipcpd/ipcp.c index 23c432f1..d6f373cd 100644 --- a/src/ipcpd/ipcp.c +++ b/src/ipcpd/ipcp.c @@ -126,8 +126,9 @@ int ipcp_main_loop(struct ipcp * _ipcp) break; } ret_msg.has_result = true; - ret_msg.result = _ipcp->ops->ipcp_enroll( - msg->member_name, msg->n_1_dif); + ret_msg.result = + _ipcp->ops->ipcp_enroll(msg->member_name, + msg->n_1_dif); break; @@ -138,8 +139,8 @@ int ipcp_main_loop(struct ipcp * _ipcp) } ret_msg.has_result = true; - ret_msg.result = _ipcp->ops->ipcp_reg( - msg->dif_names, msg->len); + ret_msg.result = + _ipcp->ops->ipcp_reg(msg->dif_names, msg->len); break; case IPCP_MSG_CODE__IPCP_UNREG: if (_ipcp->ops->ipcp_unreg == NULL) { @@ -147,8 +148,8 @@ int ipcp_main_loop(struct ipcp * _ipcp) break; } ret_msg.has_result = true; - ret_msg.result = _ipcp->ops->ipcp_unreg( - msg->dif_names, msg->len); + ret_msg.result = + _ipcp->ops->ipcp_unreg(msg->dif_names, msg->len); break; case IPCP_MSG_CODE__IPCP_NAME_REG: if (_ipcp->ops->ipcp_name_reg == NULL) { @@ -156,8 +157,7 @@ int ipcp_main_loop(struct ipcp * _ipcp) break; } ret_msg.has_result = true; - ret_msg.result = _ipcp->ops->ipcp_name_reg( - msg->name); + ret_msg.result = _ipcp->ops->ipcp_name_reg(msg->name); break; case IPCP_MSG_CODE__IPCP_NAME_UNREG: if (_ipcp->ops->ipcp_name_unreg == NULL) { @@ -165,8 +165,7 @@ int ipcp_main_loop(struct ipcp * _ipcp) break; } ret_msg.has_result = true; - ret_msg.result = _ipcp->ops->ipcp_name_unreg( - msg->name); + ret_msg.result = _ipcp->ops->ipcp_name_unreg(msg->name); break; case IPCP_MSG_CODE__IPCP_FLOW_ALLOC: if (_ipcp->ops->ipcp_flow_alloc == NULL) { @@ -174,12 +173,12 @@ int ipcp_main_loop(struct ipcp * _ipcp) break; } ret_msg.has_fd = true; - ret_msg.fd = _ipcp->ops->ipcp_flow_alloc( - msg->port_id, - msg->dst_name, - msg->src_ap_name, - msg->src_ae_name, - NULL); + ret_msg.fd = + _ipcp->ops->ipcp_flow_alloc(msg->port_id, + msg->dst_name, + msg->src_ap_name, + msg->src_ae_name, + NULL); break; case IPCP_MSG_CODE__IPCP_FLOW_ALLOC_RESP: if (_ipcp->ops->ipcp_flow_alloc_resp == NULL) { @@ -187,8 +186,9 @@ int ipcp_main_loop(struct ipcp * _ipcp) break; } ret_msg.has_result = true; - ret_msg.result = _ipcp->ops->ipcp_flow_alloc_resp( - msg->port_id, msg->result); + ret_msg.result = + _ipcp->ops->ipcp_flow_alloc_resp(msg->port_id, + msg->result); break; case IPCP_MSG_CODE__IPCP_FLOW_DEALLOC: if (_ipcp->ops->ipcp_flow_dealloc == NULL) { @@ -196,8 +196,8 @@ int ipcp_main_loop(struct ipcp * _ipcp) break; } ret_msg.has_result = true; - ret_msg.result = _ipcp->ops->ipcp_flow_dealloc( - msg->port_id); + ret_msg.result = + _ipcp->ops->ipcp_flow_dealloc(msg->port_id); break; default: LOG_ERR("Don't know that message code"); diff --git a/src/ipcpd/shim-udp/main.c b/src/ipcpd/shim-udp/main.c index 029df111..c07d77c2 100644 --- a/src/ipcpd/shim-udp/main.c +++ b/src/ipcpd/shim-udp/main.c @@ -51,8 +51,8 @@ #define shim_data(type) ((struct ipcp_udp_data *) type->data) -#define local_ip (((struct ipcp_udp_data *) \ - _ipcp->data)->s_saddr.sin_addr.s_addr) +#define local_ip (((struct ipcp_udp_data *) \ + _ipcp->data)->s_saddr.sin_addr.s_addr) /* global for trapping signal */ int irmd_pid; @@ -133,7 +133,7 @@ struct ipcp_udp_data * ipcp_udp_data_create(char * ap_name) static void * ipcp_udp_listener() { char buf[SHIM_UDP_BUF_SIZE]; - int n = 0; + int n = 0; struct sockaddr_in f_saddr; struct sockaddr_in c_saddr; @@ -141,9 +141,6 @@ static void * ipcp_udp_listener() struct udp_flow * flow; int sfd = shim_data(_ipcp)->s_fd; - irm_msg_t msg = IRM_MSG__INIT; - irm_msg_t * ret_msg ; - while (true) { n = sizeof c_saddr; n = recvfrom(sfd, buf, SHIM_UDP_BUF_SIZE, 0, @@ -194,34 +191,20 @@ static void * ipcp_udp_listener() /* reply to IRM */ - msg.code = IRM_MSG_CODE__IPCP_FLOW_REQ_ARR; - msg.ap_name = ANONYMOUS_AP; - msg.ae_name = ""; /* no AE */ - msg.dst_name = buf; - - ret_msg = send_recv_irm_msg(&msg); - if (ret_msg == NULL) { - LOG_ERR("Could not send message to IRM."); - close(flow->fd); - free(flow); - continue; - } - - if (!ret_msg->has_port_id) { - LOG_ERR("Didn't get port_id."); - free(ret_msg); + flow->flow.port_id = ipcp_flow_req_arr(getpid(), buf, + ANONYMOUS_AP, ""); + if (flow->flow.port_id < 0) { + LOG_ERR("Could not get port id from IRMd"); close(flow->fd); free(flow); continue; } - flow->flow.port_id = ret_msg->port_id; - flow->flow.oflags = FLOW_O_DEFAULT; - flow->flow.state = FLOW_PENDING; + flow->flow.oflags = FLOW_O_DEFAULT; + flow->flow.state = FLOW_PENDING; if(ipcp_data_add_flow(_ipcp->data, (flow_t *) flow)) { LOG_DBGF("Could not add flow."); - free(ret_msg); close(flow->fd); free(flow); continue; @@ -269,7 +252,7 @@ static void * ipcp_udp_sdu_reader() (struct sockaddr *) &r_saddr, sizeof r_saddr) < 0) - continue; + continue; flow->state = FLOW_ALLOCATED; } @@ -391,9 +374,6 @@ int ipcp_udp_flow_alloc(uint32_t port_id, struct hostent * h; - irm_msg_t msg = IRM_MSG__INIT; - irm_msg_t * ret_msg = NULL; - if (dst_name == NULL || src_ap_name == NULL || src_ae_name == NULL) return -1; @@ -452,7 +432,8 @@ int ipcp_udp_flow_alloc(uint32_t port_id, /* at least try to get the packet on the wire */ while (sendto(flow->fd, dst_name, strlen(dst_name), 0, - (struct sockaddr *) &r_saddr, sizeof r_saddr) < 0) + (struct sockaddr *) &r_saddr, sizeof r_saddr) < 0) { + } flow->flow.port_id = port_id; flow->flow.oflags = FLOW_O_DEFAULT; @@ -474,14 +455,8 @@ int ipcp_udp_flow_alloc(uint32_t port_id, /* tell IRMd that flow allocation "worked" */ - msg.code = IRM_MSG_CODE__IPCP_FLOW_ALLOC_REPLY; - msg.has_port_id = true; - msg.port_id = flow->flow.port_id; - msg.has_response = true; - msg.response = 0; - - ret_msg = send_recv_irm_msg(&msg); - if (ret_msg == NULL) { + if (ipcp_flow_alloc_reply(getpid(), flow->flow.port_id, 0)) { + LOG_ERR("Failed to notify IRMd about flow allocation reply"); close(flow->fd); ipcp_data_del_flow(_ipcp->data, flow->flow.port_id); return -1; |