diff options
| author | dimitri staessens <dimitri.staessens@intec.ugent.be> | 2016-04-27 18:36:31 +0200 | 
|---|---|---|
| committer | dimitri staessens <dimitri.staessens@intec.ugent.be> | 2016-04-27 18:36:31 +0200 | 
| commit | 1a02682d0695509bb8255b2d10dee48c61d83c34 (patch) | |
| tree | 02f9df75cdb4142a843d04c8727e917c77c20f7d /src/irmd | |
| parent | 711789580dc6ee3a1a22b8fee63f5eff7e7dbb5e (diff) | |
| download | ouroboros-1a02682d0695509bb8255b2d10dee48c61d83c34.tar.gz ouroboros-1a02682d0695509bb8255b2d10dee48c61d83c34.zip | |
lib: client-side flow allocation
flow allocation now propagates on the client side up to the IPCP.
added UNKNOWN_AP and UNKNOWN_AE definitions to dev.h
Diffstat (limited to 'src/irmd')
| -rw-r--r-- | src/irmd/main.c | 40 | 
1 files changed, 33 insertions, 7 deletions
| diff --git a/src/irmd/main.c b/src/irmd/main.c index 31dabebb..67254feb 100644 --- a/src/irmd/main.c +++ b/src/irmd/main.c @@ -123,6 +123,20 @@ static instance_name_t * get_ipcp_by_dif_name(char * dif_name)          return NULL;  } +/* FIXME: this just returns the first IPCP for now */ +static instance_name_t * get_ipcp_by_dst_name(char * dst_name) +{ +        struct list_head * pos = NULL; + +        list_for_each(pos, &instance->ipcps) { +                struct ipcp_entry * e = +                        list_entry(pos, struct ipcp_entry, next); +                return e->api; +        } + +        return NULL; +} +  static struct reg_name_entry * reg_name_entry_create()  {          struct reg_name_entry * e = malloc(sizeof(*e)); @@ -549,6 +563,7 @@ static int ap_unreg(char *  ap_name,  static int flow_accept(int fd, +                       pid_t pid,                         char * ap_name,                         char * ae_name)  { @@ -558,17 +573,27 @@ static int flow_accept(int fd,  static int flow_alloc_resp(int fd,                             int result)  { -          return -1;  } -static int flow_alloc(char * dst_ap_name, +static int flow_alloc(char * dst_name,                        char * src_ap_name,                        char * src_ae_name,                        struct qos_spec * qos,                        int oflags)  { -        return -1; +        int   port_id = 0; +        pid_t pid     = get_ipcp_by_dst_name(dst_name)->id; + +        LOG_DBG("flow alloc received from %s-%s to %s.", +                 src_ap_name, src_ae_name, dst_name); + +        return ipcp_flow_alloc(pid, +                               port_id, +                               dst_name, +                               src_ap_name, +                               src_ae_name, +                               qos);  }  static int flow_alloc_res(int fd) @@ -588,9 +613,9 @@ static int flow_cntl(int fd,          return -1;  } -static int flow_req_arr(uint32_t reg_api_id, -                        char *   ap_name, -                        char *   ae_name) +static int flow_req_arr(char * dst_name, +                        char * ap_name, +                        char * ae_name)  {          return -1;  } @@ -741,6 +766,7 @@ int main()                  case IRM_MSG_CODE__IRM_FLOW_ACCEPT:                          ret_msg.has_fd = true;                          ret_msg.fd = flow_accept(msg->fd, +                                                 msg->pid,                                                   ret_msg.ap_name,                                                   ret_msg.ae_name);                          break; @@ -772,7 +798,7 @@ int main()                          break;                  case IRM_MSG_CODE__IPCP_FLOW_REQ_ARR:                          ret_msg.has_port_id = true; -                        ret_msg.port_id = flow_req_arr(msg->port_id, +                        ret_msg.port_id = flow_req_arr(msg->dst_name,                                                         msg->ap_name,                                                         msg->ae_name);                          break; | 
