diff options
Diffstat (limited to 'src/ipcpd/shim-eth-llc')
-rw-r--r-- | src/ipcpd/shim-eth-llc/main.c | 127 |
1 files changed, 58 insertions, 69 deletions
diff --git a/src/ipcpd/shim-eth-llc/main.c b/src/ipcpd/shim-eth-llc/main.c index fba4f5f3..35ec0297 100644 --- a/src/ipcpd/shim-eth-llc/main.c +++ b/src/ipcpd/shim-eth-llc/main.c @@ -207,7 +207,7 @@ static int eth_llc_ipcp_send_frame(uint8_t * dst_addr, struct eth_llc_frame * llc_frame; if (payload == NULL) { - LOG_ERR("Payload was NULL."); + log_err("Payload was NULL."); return -1; } @@ -224,7 +224,7 @@ static int eth_llc_ipcp_send_frame(uint8_t * dst_addr, pfd.events = POLLIN | POLLRDNORM | POLLERR; if (poll(&pfd, 1, -1) <= 0) { - LOG_ERR("Failed to poll."); + log_err("Failed to poll."); continue; } @@ -261,7 +261,7 @@ static int eth_llc_ipcp_send_frame(uint8_t * dst_addr, header->tp_status = TP_STATUS_SEND_REQUEST; if (send(eth_llc_data.s_fd, NULL, 0, MSG_DONTWAIT) < 0) { - LOG_ERR("Failed to write frame into TX_RING."); + log_err("Failed to write frame into TX_RING."); return -1; } @@ -274,7 +274,7 @@ static int eth_llc_ipcp_send_frame(uint8_t * dst_addr, 0, (struct sockaddr *) ð_llc_data.device, sizeof(eth_llc_data.device)) <= 0) { - LOG_ERR("Failed to send message."); + log_err("Failed to send message."); return -1; } #endif @@ -299,7 +299,7 @@ static int eth_llc_ipcp_send_mgmt_frame(shim_eth_llc_msg_t * msg, if (eth_llc_ipcp_send_frame(dst_addr, reverse_bits(MGMT_SAP), reverse_bits(MGMT_SAP), buf, len)) { - LOG_ERR("Failed to send management frame."); + log_err("Failed to send management frame."); free(buf); return -1; } @@ -362,7 +362,7 @@ static int eth_llc_ipcp_sap_req(uint8_t r_sap, if (fd < 0) { pthread_rwlock_unlock(ð_llc_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."); return -1; } @@ -372,7 +372,7 @@ static int eth_llc_ipcp_sap_req(uint8_t r_sap, pthread_rwlock_unlock(ð_llc_data.flows_lock); pthread_rwlock_unlock(&ipcpi.state_lock); - LOG_DBG("New flow request, fd %d, remote SAP %d.", fd, r_sap); + log_dbg("New flow request, fd %d, remote SAP %d.", fd, r_sap); return 0; } @@ -392,7 +392,7 @@ static int eth_llc_ipcp_sap_alloc_reply(uint8_t ssap, if (fd < 0) { pthread_rwlock_unlock(& eth_llc_data.flows_lock); pthread_rwlock_unlock(&ipcpi.state_lock); - LOG_ERR("No flow found with that SAP."); + log_err("No flow found with that SAP."); return -1; /* -EFLOWNOTFOUND */ } @@ -406,7 +406,7 @@ static int eth_llc_ipcp_sap_alloc_reply(uint8_t ssap, pthread_rwlock_unlock(ð_llc_data.flows_lock); pthread_rwlock_unlock(&ipcpi.state_lock); - LOG_DBG("Flow reply, fd %d, SSAP %d, DSAP %d.", fd, ssap, dsap); + log_dbg("Flow reply, fd %d, SSAP %d, DSAP %d.", fd, ssap, dsap); if ((ret = ipcp_flow_alloc_reply(fd, response)) < 0) return -1; @@ -459,7 +459,7 @@ static int eth_llc_ipcp_mgmt_frame(uint8_t * buf, { shim_eth_llc_msg_t * msg = shim_eth_llc_msg__unpack(NULL, len, buf); if (msg == NULL) { - LOG_ERR("Failed to unpack."); + log_err("Failed to unpack."); return -1; } @@ -486,7 +486,7 @@ static int eth_llc_ipcp_mgmt_frame(uint8_t * buf, eth_llc_ipcp_name_query_reply(msg->dst_name, r_addr); break; default: - LOG_ERR("Unknown message received %d.", msg->code); + log_err("Unknown message received %d.", msg->code); shim_eth_llc_msg__free_unpacked(msg, NULL); return -1; } @@ -527,7 +527,7 @@ static void * eth_llc_ipcp_sdu_reader(void * o) pfd.events = POLLIN | POLLRDNORM | POLLERR; if (poll(&pfd, 1, -1) <= 0) { - LOG_ERR("Failed to poll."); + log_err("Failed to poll."); continue; } @@ -540,7 +540,7 @@ static void * eth_llc_ipcp_sdu_reader(void * o) frame_len = recv(eth_llc_data.s_fd, buf, SHIM_ETH_LLC_MAX_SDU_SIZE, 0); if (frame_len < 0) { - LOG_ERR("Failed to receive frame."); + log_err("Failed to receive frame."); continue; } #endif @@ -641,7 +641,7 @@ static void * eth_llc_ipcp_sdu_writer(void * o) while ((fd = fqueue_next(eth_llc_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; } @@ -715,7 +715,7 @@ static int eth_llc_ipcp_bootstrap(struct dif_config * conf) assert(conf->type == THIS_TYPE); if (conf->if_name == NULL) { - LOG_ERR("Interface name is NULL."); + log_err("Interface name is NULL."); return -1; } @@ -725,20 +725,20 @@ static int eth_llc_ipcp_bootstrap(struct dif_config * conf) #ifdef __FreeBSD__ if (getifaddrs(&ifaddr) < 0) { - LOG_ERR("Could not get interfaces."); + log_err("Could not get interfaces."); return -1; } for (ifa = ifaddr, idx = 0; ifa != NULL; ifa = ifa->ifa_next, ++idx) { if (strcmp(ifa->ifa_name, conf->if_name)) continue; - LOG_DBG("Interface %s found.", conf->if_name); + log_dbg("Interface %s found.", conf->if_name); memcpy(&ifr.ifr_addr, ifa->ifa_addr, sizeof(*ifa->ifa_addr)); break; } if (ifa == NULL) { - LOG_ERR("Interface not found."); + log_err("Interface not found."); freeifaddrs(ifaddr); return -1; } @@ -747,12 +747,12 @@ static int eth_llc_ipcp_bootstrap(struct dif_config * conf) #else skfd = socket(AF_UNIX, SOCK_STREAM, 0); if (skfd < 0) { - LOG_ERR("Failed to open socket."); + log_err("Failed to open socket."); return -1; } if (ioctl(skfd, SIOCGIFHWADDR, &ifr)) { - LOG_ERR("Failed to ioctl."); + log_err("Failed to ioctl."); close(skfd); return -1; } @@ -761,7 +761,7 @@ static int eth_llc_ipcp_bootstrap(struct dif_config * conf) idx = if_nametoindex(conf->if_name); if (idx == 0) { - LOG_ERR("Failed to retrieve interface index."); + log_err("Failed to retrieve interface index."); close(skfd); return -1; } @@ -785,13 +785,13 @@ static int eth_llc_ipcp_bootstrap(struct dif_config * conf) skfd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_802_2)); #endif if (skfd < 0) { - LOG_ERR("Failed to create socket."); + log_err("Failed to create socket."); return -1; } #if defined(PACKET_RX_RING) && defined(PACKET_TX_RING) if (SHIM_ETH_LLC_MAX_SDU_SIZE > SHM_RDRB_BLOCK_SIZE) { - LOG_ERR("Max SDU size is bigger than DU map block size."); + log_err("Max SDU size is bigger than DU map block size."); close(skfd); return -1; } @@ -803,20 +803,20 @@ static int eth_llc_ipcp_bootstrap(struct dif_config * conf) if (setsockopt(skfd, SOL_PACKET, PACKET_RX_RING, (void *) &req, sizeof(req))) { - LOG_ERR("Failed to set sockopt PACKET_RX_RING"); + log_err("Failed to set sockopt PACKET_RX_RING"); close(skfd); return -1; } if (setsockopt(skfd, SOL_PACKET, PACKET_TX_RING, (void *) &req, sizeof(req))) { - LOG_ERR("Failed to set sockopt PACKET_TX_RING"); + log_err("Failed to set sockopt PACKET_TX_RING"); close(skfd); return -1; } #endif if (bind(skfd, (struct sockaddr *) &device, sizeof(device))) { - LOG_ERR("Failed to bind socket to interface"); + log_err("Failed to bind socket to interface"); close(skfd); return -1; } @@ -827,7 +827,7 @@ static int eth_llc_ipcp_bootstrap(struct dif_config * conf) PROT_READ | PROT_WRITE, MAP_SHARED, skfd, 0); if (eth_llc_data.rx_ring == NULL) { - LOG_ERR("Failed to mmap"); + log_err("Failed to mmap"); close(skfd); return -1; } @@ -839,7 +839,7 @@ static int eth_llc_ipcp_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."); return -1; } @@ -863,7 +863,7 @@ static int eth_llc_ipcp_bootstrap(struct dif_config * conf) pthread_rwlock_unlock(&ipcpi.state_lock); - LOG_DBG("Bootstrapped shim IPCP over Ethernet with LLC with api %d.", + log_dbg("Bootstrapped shim IPCP over Ethernet with LLC with api %d.", getpid()); return 0; @@ -873,7 +873,7 @@ static int eth_llc_ipcp_name_reg(char * name) { char * name_dup = strdup(name); if (name_dup == NULL) { - LOG_ERR("Failed to duplicate name."); + log_err("Failed to duplicate name."); return -ENOMEM; } @@ -881,14 +881,14 @@ static int eth_llc_ipcp_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; } pthread_rwlock_unlock(&ipcpi.state_lock); - LOG_DBG("Registered %s.", name); + log_dbg("Registered %s.", name); return 0; } @@ -949,13 +949,13 @@ static int eth_llc_ipcp_flow_alloc(int fd, uint8_t r_addr[MAC_SIZE]; uint64_t addr = 0; - LOG_DBG("Allocating flow to %s.", dst_name); + log_dbg("Allocating flow to %s.", dst_name); if (dst_name == NULL || src_ae_name == NULL) return -1; if (cube != QOS_CUBE_BE && cube != QOS_CUBE_FRC) { - LOG_DBG("Unsupported QoS requested."); + log_dbg("Unsupported QoS requested."); return -1; } @@ -963,13 +963,13 @@ static int eth_llc_ipcp_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."); return -1; /* -ENOTENROLLED */ } if (!shim_data_dir_has(ipcpi.shim_data, dst_name)) { pthread_rwlock_unlock(&ipcpi.state_lock); - LOG_ERR("Destination unreachable."); + log_err("Destination unreachable."); return -1; } addr = shim_data_dir_get_addr(ipcpi.shim_data, dst_name); @@ -1008,7 +1008,7 @@ static int eth_llc_ipcp_flow_alloc(int fd, flow_set_add(eth_llc_data.np1_flows, fd); - LOG_DBG("Pending flow with fd %d on SAP %d.", fd, ssap); + log_dbg("Pending flow with fd %d on SAP %d.", fd, ssap); return 0; } @@ -1049,7 +1049,7 @@ static int eth_llc_ipcp_flow_alloc_resp(int fd, flow_set_add(eth_llc_data.np1_flows, fd); - LOG_DBG("Accepted flow, fd %d, SAP %d.", fd, (uint8_t)ssap); + log_dbg("Accepted flow, fd %d, SAP %d.", fd, (uint8_t)ssap); return 0; } @@ -1065,7 +1065,7 @@ static int eth_llc_ipcp_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 */ } @@ -1087,7 +1087,7 @@ static int eth_llc_ipcp_flow_dealloc(int fd) pthread_rwlock_unlock(ð_llc_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; } @@ -1115,23 +1115,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 (eth_llc_data_init() < 0) { - LOG_ERR("Failed to init shim-eth-llc data."); - close_logfile(); - exit(EXIT_FAILURE); - } - /* init sig_act */ memset(&sig_act, 0, sizeof(sig_act)); @@ -1144,25 +1127,35 @@ int main(int argc, sigaction(SIGHUP, &sig_act, NULL); sigaction(SIGPIPE, &sig_act, NULL); - if (ipcp_init(THIS_TYPE, ð_llc_ops) < 0) { - LOG_ERR("Failed to init IPCP."); - close_logfile(); + if (ipcp_init(argc, argv, THIS_TYPE, ð_llc_ops) < 0) { + log_err("Failed to init IPCP."); exit(EXIT_FAILURE); } + if (eth_llc_data_init() < 0) { + log_err("Failed to init shim-eth-llc 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."); + eth_llc_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(); + eth_llc_data_fini(); + ipcp_fini(); exit(EXIT_FAILURE); } @@ -1175,13 +1168,9 @@ int main(int argc, pthread_join(eth_llc_data.sdu_reader, NULL); } - ipcp_fini(); - eth_llc_data_fini(); - ap_fini(); - - close_logfile(); + ipcp_fini(); exit(EXIT_SUCCESS); } |