diff options
Diffstat (limited to 'src/ipcpd/shim-udp')
| -rw-r--r-- | src/ipcpd/shim-udp/main.c | 53 | 
1 files changed, 14 insertions, 39 deletions
| 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; | 
