From e87f2b683446fe424dc5e8fed60456240e080562 Mon Sep 17 00:00:00 2001 From: Dimitri Staessens Date: Sun, 3 Mar 2019 19:08:48 +0100 Subject: ipcpd: Refactor create_r and flow_req_arr The API calls for the IPCP to inform the IRMd of IPCP creation and incoming flow request had the pid_t in the call. This pid_t is removed and the getpid() call is now placed inside the function. Also refactors the cleanup for the main() functions of some of the lower IPCPs. Signed-off-by: Dimitri Staessens Signed-off-by: Sander Vrijders --- include/ouroboros/ipcp-dev.h | 6 ++---- src/ipcpd/broadcast/main.c | 4 ++-- src/ipcpd/eth/eth.c | 6 +++--- src/ipcpd/local/main.c | 35 +++++++++++++++++------------------ src/ipcpd/normal/fa.c | 3 +-- src/ipcpd/normal/main.c | 4 ++-- src/ipcpd/udp/main.c | 35 +++++++++++++++++------------------ src/lib/dev.c | 10 ++++------ 8 files changed, 48 insertions(+), 55 deletions(-) diff --git a/include/ouroboros/ipcp-dev.h b/include/ouroboros/ipcp-dev.h index 923794d0..bdeb75d6 100644 --- a/include/ouroboros/ipcp-dev.h +++ b/include/ouroboros/ipcp-dev.h @@ -26,11 +26,9 @@ #ifndef OUROBOROS_IPCP_DEV_H #define OUROBOROS_IPCP_DEV_H -int ipcp_create_r(pid_t pid, - int result); +int ipcp_create_r(int result); -int ipcp_flow_req_arr(pid_t pid, - const uint8_t * dst, +int ipcp_flow_req_arr(const uint8_t * dst, size_t len, qosspec_t qs); diff --git a/src/ipcpd/broadcast/main.c b/src/ipcpd/broadcast/main.c index c1e5d4ab..71d1ddaa 100644 --- a/src/ipcpd/broadcast/main.c +++ b/src/ipcpd/broadcast/main.c @@ -304,7 +304,7 @@ int main(int argc, goto fail_boot; } - if (ipcp_create_r(getpid(), 0)) { + if (ipcp_create_r(0)) { log_err("Failed to notify IRMd we are initialized."); ipcp_set_state(IPCP_NULL); goto fail_create_r; @@ -342,6 +342,6 @@ int main(int argc, fail_rib_init: ipcp_fini(); fail_init: - ipcp_create_r(getpid(), -1); + ipcp_create_r(-1); exit(EXIT_FAILURE); } diff --git a/src/ipcpd/eth/eth.c b/src/ipcpd/eth/eth.c index cceca42c..04130d6f 100644 --- a/src/ipcpd/eth/eth.c +++ b/src/ipcpd/eth/eth.c @@ -578,7 +578,7 @@ static int eth_ipcp_req(uint8_t * r_addr, } /* reply to IRM, called under lock to prevent race */ - fd = ipcp_flow_req_arr(getpid(), dst, ipcp_dir_hash_len(), qs); + fd = ipcp_flow_req_arr(dst, ipcp_dir_hash_len(), qs); if (fd < 0) { pthread_mutex_unlock(&ipcpi.alloc_lock); log_err("Could not get new flow from IRMd."); @@ -1804,7 +1804,7 @@ int main(int argc, goto fail_boot; } - if (ipcp_create_r(getpid(), 0)) { + if (ipcp_create_r(0)) { log_err("Failed to notify IRMd we are initialized."); ipcp_set_state(IPCP_NULL); goto fail_create_r; @@ -1846,6 +1846,6 @@ int main(int argc, fail_data_init: ipcp_fini(); fail_init: - ipcp_create_r(getpid(), -1); + ipcp_create_r(-1); exit(EXIT_FAILURE); } diff --git a/src/ipcpd/local/main.c b/src/ipcpd/local/main.c index cd90ab77..f40d0d26 100644 --- a/src/ipcpd/local/main.c +++ b/src/ipcpd/local/main.c @@ -212,7 +212,7 @@ static int ipcp_local_flow_alloc(int fd, assert(ipcpi.alloc_id == -1); - out_fd = ipcp_flow_req_arr(getpid(), dst, ipcp_dir_hash_len(), qs); + out_fd = ipcp_flow_req_arr(dst, ipcp_dir_hash_len(), qs); if (out_fd < 0) { pthread_mutex_unlock(&ipcpi.alloc_lock); log_dbg("Flow allocation failed: %d", out_fd); @@ -333,33 +333,22 @@ static struct ipcp_ops local_ops = { int main(int argc, char * argv[]) { - if (ipcp_init(argc, argv, &local_ops) < 0) { - ipcp_create_r(getpid(), -1); - exit(EXIT_FAILURE); - } + if (ipcp_init(argc, argv, &local_ops) < 0) + goto fail_init; if (local_data_init() < 0) { log_err("Failed to init local data."); - ipcp_create_r(getpid(), -1); - ipcp_fini(); - exit(EXIT_FAILURE); + goto fail_data_init; } if (ipcp_boot() < 0) { log_err("Failed to boot IPCP."); - ipcp_create_r(getpid(), -1); - local_data_fini(); - ipcp_fini(); - exit(EXIT_FAILURE); + goto fail_boot; } - if (ipcp_create_r(getpid(), 0)) { + if (ipcp_create_r(0)) { log_err("Failed to notify IRMd we are initialized."); - ipcp_set_state(IPCP_NULL); - ipcp_shutdown(); - local_data_fini(); - ipcp_fini(); - exit(EXIT_FAILURE); + goto fail_create_r; } ipcp_shutdown(); @@ -374,4 +363,14 @@ int main(int argc, ipcp_fini(); exit(EXIT_SUCCESS); + fail_create_r: + ipcp_set_state(IPCP_NULL); + ipcp_shutdown(); + fail_boot: + local_data_fini(); + fail_data_init: + ipcp_fini(); + fail_init: + ipcp_create_r(-1); + exit(EXIT_FAILURE); } diff --git a/src/ipcpd/normal/fa.c b/src/ipcpd/normal/fa.c index 30d87df5..e03467c2 100644 --- a/src/ipcpd/normal/fa.c +++ b/src/ipcpd/normal/fa.c @@ -218,8 +218,7 @@ static void * fa_handle_packet(void * o) qs.in_order = msg->in_order; qs.max_gap = ntoh32(msg->max_gap); - fd = ipcp_flow_req_arr(getpid(), - (uint8_t *) (msg + 1), + fd = ipcp_flow_req_arr((uint8_t *) (msg + 1), ipcp_dir_hash_len(), qs); if (fd < 0) { diff --git a/src/ipcpd/normal/main.c b/src/ipcpd/normal/main.c index 7a453a9e..28fc8c5a 100644 --- a/src/ipcpd/normal/main.c +++ b/src/ipcpd/normal/main.c @@ -334,7 +334,7 @@ int main(int argc, goto fail_boot; } - if (ipcp_create_r(getpid(), 0)) { + if (ipcp_create_r(0)) { log_err("Failed to notify IRMd we are initialized."); ipcp_set_state(IPCP_NULL); goto fail_create_r; @@ -373,6 +373,6 @@ int main(int argc, fail_rib_init: ipcp_fini(); fail_init: - ipcp_create_r(getpid(), -1); + ipcp_create_r(-1); exit(EXIT_FAILURE); } diff --git a/src/ipcpd/udp/main.c b/src/ipcpd/udp/main.c index 457dc789..f45a18cb 100644 --- a/src/ipcpd/udp/main.c +++ b/src/ipcpd/udp/main.c @@ -344,7 +344,7 @@ static int ipcp_udp_port_req(struct sockaddr_in * c_saddr, } /* reply to IRM */ - fd = ipcp_flow_req_arr(getpid(), dst, ipcp_dir_hash_len(), qs); + fd = ipcp_flow_req_arr(dst, ipcp_dir_hash_len(), qs); if (fd < 0) { pthread_mutex_unlock(&ipcpi.alloc_lock); log_err("Could not get new flow from IRMd."); @@ -1191,33 +1191,22 @@ static struct ipcp_ops udp_ops = { int main(int argc, char * argv[]) { - if (ipcp_init(argc, argv, &udp_ops) < 0) { - ipcp_create_r(getpid(), -1); - exit(EXIT_FAILURE); - } + if (ipcp_init(argc, argv, &udp_ops) < 0) + goto fail_init; if (udp_data_init() < 0) { log_err("Failed to init udp data."); - ipcp_create_r(getpid(), -1); - ipcp_fini(); - exit(EXIT_FAILURE); + goto fail_data_init; } if (ipcp_boot() < 0) { log_err("Failed to boot IPCP."); - ipcp_create_r(getpid(), -1); - udp_data_fini(); - ipcp_fini(); - exit(EXIT_FAILURE); + goto fail_boot; } - if (ipcp_create_r(getpid(), 0)) { + if (ipcp_create_r(0)) { log_err("Failed to notify IRMd we are initialized."); - ipcp_set_state(IPCP_NULL); - ipcp_shutdown(); - udp_data_fini(); - ipcp_fini(); - exit(EXIT_FAILURE); + goto fail_create_r; } ipcp_shutdown(); @@ -1237,4 +1226,14 @@ int main(int argc, ipcp_fini(); exit(EXIT_SUCCESS); + fail_create_r: + ipcp_set_state(IPCP_NULL); + ipcp_shutdown(); + fail_boot: + udp_data_fini(); + fail_data_init: + ipcp_fini(); + fail_init: + ipcp_create_r(-1); + exit(EXIT_FAILURE); } diff --git a/src/lib/dev.c b/src/lib/dev.c index 297c85f7..10b34e4e 100644 --- a/src/lib/dev.c +++ b/src/lib/dev.c @@ -1262,8 +1262,7 @@ int np1_flow_resp(int flow_id) return fd; } -int ipcp_create_r(pid_t pid, - int result) +int ipcp_create_r(int result) { irm_msg_t msg = IRM_MSG__INIT; irm_msg_t * recv_msg; @@ -1271,7 +1270,7 @@ int ipcp_create_r(pid_t pid, msg.code = IRM_MSG_CODE__IPCP_CREATE_R; msg.has_pid = true; - msg.pid = pid; + msg.pid = getpid(); msg.has_result = true; msg.result = result; @@ -1290,8 +1289,7 @@ int ipcp_create_r(pid_t pid, return ret; } -int ipcp_flow_req_arr(pid_t pid, - const uint8_t * dst, +int ipcp_flow_req_arr(const uint8_t * dst, size_t len, qosspec_t qs) { @@ -1304,7 +1302,7 @@ int ipcp_flow_req_arr(pid_t pid, msg.code = IRM_MSG_CODE__IPCP_FLOW_REQ_ARR; msg.has_pid = true; - msg.pid = pid; + msg.pid = getpid(); msg.has_hash = true; msg.hash.len = len; msg.hash.data = (uint8_t *) dst; -- cgit v1.2.3