diff options
Diffstat (limited to 'src/ipcpd/shim-udp')
-rw-r--r-- | src/ipcpd/shim-udp/main.c | 165 | ||||
-rw-r--r-- | src/ipcpd/shim-udp/tests/shim_udp_test.c | 14 |
2 files changed, 84 insertions, 95 deletions
diff --git a/src/ipcpd/shim-udp/main.c b/src/ipcpd/shim-udp/main.c index a7c4254a..2a73077c 100644 --- a/src/ipcpd/shim-udp/main.c +++ b/src/ipcpd/shim-udp/main.c @@ -184,7 +184,7 @@ static int send_shim_udp_msg(shim_udp_msg_t * msg, 0, (struct sockaddr *) &r_saddr, sizeof(r_saddr)) == -1) { - LOG_ERR("Failed to send message."); + log_err("Failed to send message."); free(buf.data); return -1; } @@ -240,11 +240,11 @@ static int ipcp_udp_port_req(struct sockaddr_in * c_saddr, struct sockaddr_in f_saddr; socklen_t f_saddr_len = sizeof(f_saddr); - LOG_DBG("Port request arrived from UDP port %d", + log_dbg("Port request arrived from UDP port %d", ntohs(c_saddr->sin_port)); if ((skfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) { - LOG_ERR("Could not create UDP socket."); + log_err("Could not create UDP socket."); return -1; } @@ -254,19 +254,19 @@ static int ipcp_udp_port_req(struct sockaddr_in * c_saddr, f_saddr.sin_port = 0; if (bind(skfd, (struct sockaddr *) &f_saddr, sizeof(f_saddr)) < 0) { - LOG_ERR("Could not bind to socket."); + log_err("Could not bind to socket."); close(skfd); return -1; } if (getsockname(skfd, (struct sockaddr *) &f_saddr, &f_saddr_len) < 0) { - LOG_ERR("Could not get address from fd."); + log_err("Could not get address from fd."); return -1; } /* connect stores the remote address in the file descriptor */ if (connect(skfd, (struct sockaddr *) c_saddr, sizeof(*c_saddr)) < 0) { - LOG_ERR("Could not connect to remote UDP client."); + log_err("Could not connect to remote UDP client."); close(skfd); return -1; } @@ -279,7 +279,7 @@ static int ipcp_udp_port_req(struct sockaddr_in * c_saddr, if (fd < 0) { pthread_rwlock_unlock(&udp_data.flows_lock); pthread_rwlock_unlock(&ipcpi.state_lock); - LOG_ERR("Could not get new flow from IRMd."); + log_err("Could not get new flow from IRMd."); close(skfd); return -1; } @@ -291,7 +291,7 @@ static int ipcp_udp_port_req(struct sockaddr_in * c_saddr, pthread_rwlock_unlock(&udp_data.flows_lock); pthread_rwlock_unlock(&ipcpi.state_lock); - LOG_DBG("Pending allocation request, fd %d, UDP port (%d, %d).", + log_dbg("Pending allocation request, fd %d, UDP port (%d, %d).", fd, ntohs(f_saddr.sin_port), ntohs(c_saddr->sin_port)); return 0; @@ -320,7 +320,7 @@ static int ipcp_udp_port_alloc_reply(uint16_t src_udp_port, struct sockaddr_in t_saddr; socklen_t t_saddr_len = sizeof(t_saddr); - LOG_DBG("Received reply for flow on udp port %d.", + log_dbg("Received reply for flow on udp port %d.", ntohs(dst_udp_port)); pthread_rwlock_rdlock(&ipcpi.state_lock); @@ -334,7 +334,7 @@ static int ipcp_udp_port_alloc_reply(uint16_t src_udp_port, /* get the original address with the LISTEN PORT */ if (getpeername(skfd, (struct sockaddr *) &t_saddr, &t_saddr_len) < 0) { - LOG_DBG("Flow with fd %d has no peer.", fd); + log_dbg("Flow with fd %d has no peer.", fd); return -1; } @@ -357,7 +357,7 @@ static int ipcp_udp_port_alloc_reply(uint16_t src_udp_port, if (ipcp_flow_alloc_reply(fd, response) < 0) return -1; - LOG_DBG("Flow allocation completed, UDP ports: (%d, %d).", + log_dbg("Flow allocation completed, UDP ports: (%d, %d).", ntohs(dst_udp_port), ntohs(src_udp_port)); return ret; @@ -406,7 +406,7 @@ static void * ipcp_udp_listener(void * o) msg->response); break; default: - LOG_ERR("Unknown message received %d.", msg->code); + log_err("Unknown message received %d.", msg->code); shim_udp_msg__free_unpacked(msg, NULL); continue; } @@ -498,7 +498,7 @@ static void * ipcp_udp_sdu_loop(void * o) while ((fd = fqueue_next(udp_data.fq)) >= 0) { if (ipcp_flow_read(fd, &sdb)) { - LOG_ERR("Bad read from fd %d.", fd); + log_err("Bad read from fd %d.", fd); continue; } @@ -506,7 +506,7 @@ static void * ipcp_udp_sdu_loop(void * o) shm_du_buff_head(sdb), shm_du_buff_tail(sdb) - shm_du_buff_head(sdb), 0) < 0) - LOG_ERR("Failed to send SDU."); + log_err("Failed to send SDU."); ipcp_flow_del(sdb); } @@ -560,7 +560,7 @@ static int ipcp_udp_bootstrap(struct dif_config * conf) &conf->ip_addr, ipstr, INET_ADDRSTRLEN) == NULL) { - LOG_ERR("Failed to convert IP address"); + log_err("Failed to convert IP address"); return -1; } @@ -569,11 +569,11 @@ static int ipcp_udp_bootstrap(struct dif_config * conf) &conf->dns_addr, dnsstr, INET_ADDRSTRLEN) == NULL) { - LOG_ERR("Failed to convert DNS address"); + log_err("Failed to convert DNS address"); return -1; } #ifndef CONFIG_OUROBOROS_ENABLE_DNS - LOG_WARN("DNS disabled at compile time, address ignored"); + log_warn("DNS disabled at compile time, address ignored"); #endif } else { strcpy(dnsstr, "not set"); @@ -581,7 +581,7 @@ static int ipcp_udp_bootstrap(struct dif_config * conf) /* UDP listen server */ if ((fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) { - LOG_ERR("Can't create socket."); + log_err("Can't create socket."); return -1; } @@ -590,7 +590,7 @@ static int ipcp_udp_bootstrap(struct dif_config * conf) SO_REUSEADDR, &enable, sizeof(int)) < 0) - LOG_WARN("Failed to set SO_REUSEADDR."); + log_warn("Failed to set SO_REUSEADDR."); memset((char *) &s_saddr, 0, sizeof(s_saddr)); udp_data.s_saddr.sin_family = AF_INET; @@ -600,7 +600,7 @@ static int ipcp_udp_bootstrap(struct dif_config * conf) if (bind(fd, (struct sockaddr *) &udp_data.s_saddr, sizeof(udp_data.s_saddr)) < 0) { - LOG_ERR("Couldn't bind to %s.", ipstr); + log_err("Couldn't bind to %s.", ipstr); close(fd); return -1; } @@ -609,7 +609,7 @@ static int ipcp_udp_bootstrap(struct dif_config * conf) if (ipcp_get_state() != IPCP_INIT) { pthread_rwlock_unlock(&ipcpi.state_lock); - LOG_ERR("IPCP in wrong state."); + log_err("IPCP in wrong state."); close(fd); return -1; } @@ -638,9 +638,9 @@ static int ipcp_udp_bootstrap(struct dif_config * conf) pthread_rwlock_unlock(&ipcpi.state_lock); - LOG_DBG("Bootstrapped shim IPCP over UDP with api %d.", getpid()); - LOG_DBG("Bound to IP address %s.", ipstr); - LOG_DBG("DNS server address is %s.", dnsstr); + log_dbg("Bootstrapped shim IPCP over UDP with api %d.", getpid()); + log_dbg("Bound to IP address %s.", ipstr); + log_dbg("DNS server address is %s.", dnsstr); return 0; } @@ -657,13 +657,13 @@ static int ddns_send(char * cmd) char * envp[] = {0}; if (pipe(pipe_fd)) { - LOG_ERR("Failed to create pipe."); + log_err("Failed to create pipe."); return -1; } api = fork(); if (api == -1) { - LOG_ERR("Failed to fork."); + log_err("Failed to fork."); return -1; } @@ -676,7 +676,7 @@ static int ddns_send(char * cmd) close(pipe_fd[0]); if (write(pipe_fd[1], cmd, strlen(cmd)) == -1) { - LOG_ERR("Failed to communicate with nsupdate."); + log_err("Failed to communicate with nsupdate."); close(pipe_fd[1]); return -1; } @@ -684,9 +684,9 @@ static int ddns_send(char * cmd) waitpid(api, &wstatus, 0); if (WIFEXITED(wstatus) == true && WEXITSTATUS(wstatus) == 0) - LOG_DBG("Succesfully communicated with DNS server."); + log_dbg("Succesfully communicated with DNS server."); else - LOG_ERR("Failed to register with DNS server."); + log_err("Failed to register with DNS server."); close(pipe_fd[1]); return 0; @@ -712,13 +712,13 @@ static uint32_t ddns_resolve(char * name, if (pipe(pipe_fd)) { - LOG_ERR("Failed to create pipe."); + log_err("Failed to create pipe."); return 0; } api = fork(); if (api == -1) { - LOG_ERR("Failed to fork."); + log_err("Failed to fork."); return 0; } @@ -735,7 +735,7 @@ static uint32_t ddns_resolve(char * name, count = read(pipe_fd[0], buf, SHIM_UDP_BUF_SIZE); if (count <= 0) { - LOG_ERR("Failed to communicate with nslookup."); + log_err("Failed to communicate with nslookup."); close(pipe_fd[0]); return 0; } @@ -745,9 +745,9 @@ static uint32_t ddns_resolve(char * name, waitpid(api, &wstatus, 0); if (WIFEXITED(wstatus) == true && WEXITSTATUS(wstatus) == 0) - LOG_DBG("Succesfully communicated with nslookup."); + log_dbg("Succesfully communicated with nslookup."); else - LOG_ERR("Failed to resolve DNS address."); + log_err("Failed to resolve DNS address."); buf[count] = '\0'; substr = strtok(buf, "\n"); @@ -757,12 +757,12 @@ static uint32_t ddns_resolve(char * name, } if (strstr(substr2, addr_str) == NULL) { - LOG_ERR("Failed to resolve DNS address."); + log_err("Failed to resolve DNS address."); return 0; } if (inet_pton(AF_INET, substr2 + strlen(addr_str) + 1, &ip_addr) != 1) { - LOG_ERR("Failed to resolve DNS address."); + log_err("Failed to resolve DNS address."); return 0; } @@ -783,13 +783,13 @@ static int ipcp_udp_name_reg(char * name) char * name_dup; if (strlen(name) > 24) { - LOG_ERR("DNS names cannot be longer than 24 chars."); + log_err("DNS names cannot be longer than 24 chars."); return -1; } name_dup = strdup(name); if (name_dup == NULL) { - LOG_ERR("Failed to duplicate name."); + log_err("Failed to duplicate name."); return -ENOMEM; } @@ -797,7 +797,7 @@ static int ipcp_udp_name_reg(char * name) if (shim_data_reg_add_entry(ipcpi.shim_data, name_dup)) { pthread_rwlock_unlock(&ipcpi.state_lock); - LOG_ERR("Failed to add %s to local registry.", name); + log_err("Failed to add %s to local registry.", name); free(name_dup); return -1; } @@ -835,7 +835,7 @@ static int ipcp_udp_name_reg(char * name) #else pthread_rwlock_unlock(&ipcpi.state_lock); #endif - LOG_DBG("Registered %s.", name); + log_dbg("Registered %s.", name); return 0; } @@ -849,7 +849,7 @@ static int ipcp_udp_name_unreg(char * name) uint32_t dns_addr; #endif if (strlen(name) > 24) { - LOG_ERR("DNS names cannot be longer than 24 chars."); + log_err("DNS names cannot be longer than 24 chars."); return -1; } @@ -894,7 +894,7 @@ static int ipcp_udp_name_query(char * name) assert(name); if (strlen(name) > 24) { - LOG_ERR("DNS names cannot be longer than 24 chars."); + log_err("DNS names cannot be longer than 24 chars."); return -1; } @@ -902,7 +902,7 @@ static int ipcp_udp_name_query(char * name) if (ipcp_get_state() != IPCP_OPERATIONAL) { pthread_rwlock_unlock(&ipcpi.state_lock); - LOG_DBG("Won't query a name on a non-enrolled IPCP."); + log_dbg("Won't query a name on a non-enrolled IPCP."); return -1; /* -ENOTENROLLED */ } @@ -919,7 +919,7 @@ static int ipcp_udp_name_query(char * name) ip_addr = ddns_resolve(name, dns_addr); if (ip_addr == 0) { - LOG_DBG("Could not resolve %s.", name); + log_dbg("Could not resolve %s.", name); return -1; } @@ -927,7 +927,7 @@ static int ipcp_udp_name_query(char * name) if (ipcp_get_state() != IPCP_OPERATIONAL) { pthread_rwlock_unlock(&ipcpi.state_lock); - LOG_DBG("Won't add name to the directory."); + log_dbg("Won't add name to the directory."); return -1; /* -ENOTENROLLED */ } } else { @@ -935,7 +935,7 @@ static int ipcp_udp_name_query(char * name) h = gethostbyname(name); if (h == NULL) { pthread_rwlock_unlock(&ipcpi.state_lock); - LOG_DBG("Could not resolve %s.", name); + log_dbg("Could not resolve %s.", name); return -1; } @@ -946,7 +946,7 @@ static int ipcp_udp_name_query(char * name) if (shim_data_dir_add_entry(ipcpi.shim_data, name, ip_addr)) { pthread_rwlock_unlock(&ipcpi.state_lock); - LOG_ERR("Failed to add directory entry."); + log_err("Failed to add directory entry."); return -1; } @@ -966,19 +966,19 @@ static int ipcp_udp_flow_alloc(int fd, int skfd; uint32_t ip_addr = 0; - LOG_DBG("Allocating flow to %s.", dst_name); + log_dbg("Allocating flow to %s.", dst_name); assert(dst_name); assert(src_ae_name); if (strlen(dst_name) > 255 || strlen(src_ae_name) > 255) { - LOG_ERR("Name too long for this shim."); + log_err("Name too long for this shim."); return -1; } if (cube != QOS_CUBE_BE && cube != QOS_CUBE_FRC) { - LOG_DBG("Unsupported QoS requested."); + log_dbg("Unsupported QoS requested."); return -1; } @@ -996,7 +996,7 @@ static int ipcp_udp_flow_alloc(int fd, } if (getsockname(skfd, (struct sockaddr *) &f_saddr, &f_saddr_len) < 0) { - LOG_ERR("Could not get address from fd."); + log_err("Could not get address from fd."); close(skfd); return -1; } @@ -1005,14 +1005,14 @@ static int ipcp_udp_flow_alloc(int fd, if (ipcp_get_state() != IPCP_OPERATIONAL) { pthread_rwlock_unlock(&ipcpi.state_lock); - LOG_DBG("Won't allocate flow with non-enrolled IPCP."); + log_dbg("Won't allocate flow with non-enrolled IPCP."); close(skfd); return -1; /* -ENOTENROLLED */ } if (!shim_data_dir_has(ipcpi.shim_data, dst_name)) { pthread_rwlock_unlock(&ipcpi.state_lock); - LOG_DBG("Could not resolve destination."); + log_dbg("Could not resolve destination."); close(skfd); return -1; } @@ -1058,7 +1058,7 @@ static int ipcp_udp_flow_alloc(int fd, return -1; } - LOG_DBG("Flow pending on fd %d, UDP port %d.", + log_dbg("Flow pending on fd %d, UDP port %d.", fd, ntohs(f_saddr.sin_port)); return fd; @@ -1081,12 +1081,12 @@ static int ipcp_udp_flow_alloc_resp(int fd, skfd = udp_data.fd_to_uf[fd].skfd; if (getsockname(skfd, (struct sockaddr *) &f_saddr, &len) < 0) { - LOG_DBG("Socket with fd %d has no address.", skfd); + log_dbg("Socket with fd %d has no address.", skfd); return -1; } if (getpeername(skfd, (struct sockaddr *) &r_saddr, &len) < 0) { - LOG_DBG("Socket with fd %d has no peer.", skfd); + log_dbg("Socket with fd %d has no peer.", skfd); return -1; } @@ -1113,7 +1113,7 @@ static int ipcp_udp_flow_alloc_resp(int fd, return -1; } - LOG_DBG("Accepted flow, fd %d on UDP port %d.", + log_dbg("Accepted flow, fd %d on UDP port %d.", fd, ntohs(f_saddr.sin_port)); return 0; @@ -1129,7 +1129,7 @@ static int ipcp_udp_flow_dealloc(int fd) if (ipcp_get_state() != IPCP_OPERATIONAL) { pthread_rwlock_unlock(&ipcpi.state_lock); - LOG_DBG("Won't register with non-enrolled IPCP."); + log_dbg("Won't register with non-enrolled IPCP."); return -1; /* -ENOTENROLLED */ } @@ -1155,7 +1155,7 @@ static int ipcp_udp_flow_dealloc(int fd) pthread_rwlock_unlock(&udp_data.flows_lock); pthread_rwlock_unlock(&ipcpi.state_lock); - LOG_DBG("Flow with fd %d deallocated.", fd); + log_dbg("Flow with fd %d deallocated.", fd); return 0; } @@ -1182,23 +1182,6 @@ int main(int argc, sigaddset(&sigset, SIGHUP); sigaddset(&sigset, SIGPIPE); - if (ipcp_parse_arg(argc, argv)) { - LOG_ERR("Failed to parse arguments."); - exit(EXIT_FAILURE); - } - - if (ap_init(NULL) < 0) { - LOG_ERR("Failed to init application."); - close_logfile(); - exit(EXIT_FAILURE); - } - - if (udp_data_init() < 0) { - LOG_ERR("Failed to init shim-udp data."); - close_logfile(); - exit(EXIT_FAILURE); - } - /* init sig_act */ memset(&sig_act, 0, sizeof(sig_act)); @@ -1211,25 +1194,35 @@ int main(int argc, sigaction(SIGHUP, &sig_act, NULL); sigaction(SIGPIPE, &sig_act, NULL); - if (ipcp_init(THIS_TYPE, &udp_ops) < 0) { - LOG_ERR("Failed to init IPCP."); - close_logfile(); + if (ipcp_init(argc, argv, THIS_TYPE, &udp_ops) < 0) { + log_err("Failed to init IPCP."); exit(EXIT_FAILURE); } + if (udp_data_init() < 0) { + log_err("Failed to init shim-udp data."); + ipcp_fini(); + exit(EXIT_FAILURE); + } + + pthread_sigmask(SIG_BLOCK, &sigset, NULL); if (ipcp_boot() < 0) { - LOG_ERR("Failed to boot IPCP."); - close_logfile(); + log_err("Failed to boot IPCP."); + udp_data_fini(); + ipcp_fini(); exit(EXIT_FAILURE); } pthread_sigmask(SIG_UNBLOCK, &sigset, NULL); if (ipcp_create_r(getpid())) { - LOG_ERR("Failed to notify IRMd we are initialized."); - close_logfile(); + log_err("Failed to notify IRMd we are initialized."); + ipcp_set_state(IPCP_NULL); + ipcp_shutdown(); + udp_data_fini(); + ipcp_fini(); exit(EXIT_FAILURE); } @@ -1244,13 +1237,9 @@ int main(int argc, pthread_join(udp_data.sdu_reader, NULL); } - ipcp_fini(); - udp_data_fini(); - ap_fini(); - - close_logfile(); + ipcp_fini(); exit(EXIT_SUCCESS); } diff --git a/src/ipcpd/shim-udp/tests/shim_udp_test.c b/src/ipcpd/shim-udp/tests/shim_udp_test.c index a342712e..d4a5d8ed 100644 --- a/src/ipcpd/shim-udp/tests/shim_udp_test.c +++ b/src/ipcpd/shim-udp/tests/shim_udp_test.c @@ -48,29 +48,29 @@ int shim_udp_test(int argc, char ** argv) dum = shm_du_map_create(); if (dum == NULL) { - LOG_ERR("Failed to create shared memory."); + log_err("Failed to create shared memory."); exit(1); } _ipcp = ipcp_udp_create(ipcp_name); if (_ipcp == NULL) { - LOG_ERR("Could not instantiate shim IPCP."); + log_err("Could not instantiate shim IPCP."); shm_du_map_destroy(dum); exit(1); } if (ipcp_udp_bootstrap(&conf)) { - LOG_ERR("Could not bootstrap."); + log_err("Could not bootstrap."); } if (ipcp_udp_name_reg("bogus name")) { - LOG_ERR("Failed to register application."); + log_err("Failed to register application."); shm_du_map_destroy(dum); exit(1); } if (ipcp_udp_name_unreg("bogus name")) { - LOG_ERR("Failed to unregister application."); + log_err("Failed to unregister application."); shm_du_map_destroy(dum); exit(1); } @@ -78,7 +78,7 @@ int shim_udp_test(int argc, char ** argv) for (i = 0; i < 1000; ++i) { sprintf(bogus, "bogus name %4d", i); if (ipcp_udp_name_reg(bogus)) { - LOG_ERR("Failed to register application %s.", bogus); + log_err("Failed to register application %s.", bogus); shm_du_map_destroy(dum); exit(1); } @@ -87,7 +87,7 @@ int shim_udp_test(int argc, char ** argv) for (i = 0; i < 1000; ++i) { sprintf(bogus, "bogus name %4d", i); if(ipcp_udp_name_unreg(bogus)) { - LOG_ERR("Failed to unregister application %s.", bogus); + log_err("Failed to unregister application %s.", bogus); shm_du_map_destroy(dum); exit(1); } |