From 619502f7178fef30e726ba57b5a49b61c1c1a276 Mon Sep 17 00:00:00 2001
From: Dimitri Staessens <dimitri.staessens@ugent.be>
Date: Fri, 19 Oct 2018 11:38:54 +0200
Subject: tools: Specify QoS cube for data transfer flows

The ipcp connect command can now set a specific qos cube for data
transfer flows. For management flows, the tool ignores this and
defaults to raw until data flows are stable enough.

Signed-off-by: Dimitri Staessens <dimitri.staessens@ugent.be>
Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
---
 src/ipcpd/ipcp.c           | 4 +++-
 src/ipcpd/ipcp.h           | 3 ++-
 src/ipcpd/normal/connmgr.c | 6 +++---
 src/ipcpd/normal/connmgr.h | 3 ++-
 4 files changed, 10 insertions(+), 6 deletions(-)

(limited to 'src/ipcpd')

diff --git a/src/ipcpd/ipcp.c b/src/ipcpd/ipcp.c
index 8640bf6e..862b3463 100644
--- a/src/ipcpd/ipcp.c
+++ b/src/ipcpd/ipcp.c
@@ -324,8 +324,10 @@ static void * mainloop(void * o)
                                 break;
                         }
 
+                        qs = msg_to_spec(msg->qosspec);
                         ret_msg.result = ipcpi.ops->ipcp_connect(msg->dst,
-                                                                 msg->comp);
+                                                                 msg->comp,
+                                                                 qs);
                         break;
                 case IPCP_MSG_CODE__IPCP_DISCONNECT:
                         ret_msg.has_result = true;
diff --git a/src/ipcpd/ipcp.h b/src/ipcpd/ipcp.h
index 1d25fb3f..fabd35fe 100644
--- a/src/ipcpd/ipcp.h
+++ b/src/ipcpd/ipcp.h
@@ -46,7 +46,8 @@ struct ipcp_ops {
                               struct layer_info * info);
 
         int   (* ipcp_connect)(const char * dst,
-                               const char * component);
+                               const char * component,
+                               qosspec_t    qs);
 
         int   (* ipcp_disconnect)(const char * dst,
                                   const char * component);
diff --git a/src/ipcpd/normal/connmgr.c b/src/ipcpd/normal/connmgr.c
index 7b71761f..5aee7b7a 100644
--- a/src/ipcpd/normal/connmgr.c
+++ b/src/ipcpd/normal/connmgr.c
@@ -320,7 +320,8 @@ void connmgr_comp_fini(enum comp_id id)
 }
 
 int connmgr_ipcp_connect(const char * dst,
-                         const char * component)
+                         const char * component,
+                         qosspec_t    qs)
 {
         struct conn_el * ce;
         int              id;
@@ -341,8 +342,7 @@ int connmgr_ipcp_connect(const char * dst,
                 return -1;
         }
 
-        /* FIXME: get the correct qos for the component. */
-        if (connmgr_alloc(id, dst, NULL, &ce->conn)) {
+        if (connmgr_alloc(id, dst, &qs, &ce->conn)) {
                 free(ce);
                 return -1;
         }
diff --git a/src/ipcpd/normal/connmgr.h b/src/ipcpd/normal/connmgr.h
index a7e8a6e0..f767e72c 100644
--- a/src/ipcpd/normal/connmgr.h
+++ b/src/ipcpd/normal/connmgr.h
@@ -54,7 +54,8 @@ int         connmgr_comp_init(enum comp_id             id,
 void        connmgr_comp_fini(enum comp_id id);
 
 int         connmgr_ipcp_connect(const char * dst,
-                                 const char * component);
+                                 const char * component,
+                                 qosspec_t    qs);
 
 int         connmgr_ipcp_disconnect(const char * dst,
                                     const char * component);
-- 
cgit v1.2.3