summaryrefslogtreecommitdiff
path: root/src/irmd
diff options
context:
space:
mode:
authordimitri staessens <dimitri.staessens@intec.ugent.be>2016-04-27 18:36:31 +0200
committerdimitri staessens <dimitri.staessens@intec.ugent.be>2016-04-27 18:36:31 +0200
commit1a02682d0695509bb8255b2d10dee48c61d83c34 (patch)
tree02f9df75cdb4142a843d04c8727e917c77c20f7d /src/irmd
parent711789580dc6ee3a1a22b8fee63f5eff7e7dbb5e (diff)
downloadouroboros-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.c40
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;