From 91c89c49257b4b9c698e5b7e90418915423ba1a2 Mon Sep 17 00:00:00 2001 From: Sander Vrijders Date: Wed, 27 Apr 2016 17:38:49 +0200 Subject: 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. --- src/ipcpd/ipcp-data.c | 11 +++++----- src/ipcpd/ipcp.c | 40 +++++++++++++++++------------------ 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; -- cgit v1.2.3