summaryrefslogtreecommitdiff
path: root/src/ipcpd
diff options
context:
space:
mode:
Diffstat (limited to 'src/ipcpd')
-rw-r--r--src/ipcpd/ipcp-data.c11
-rw-r--r--src/ipcpd/ipcp.c40
-rw-r--r--src/ipcpd/shim-udp/main.c53
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;