From 0a065d8b2e8f84306c2300d109562374b1eb9744 Mon Sep 17 00:00:00 2001
From: juanmont <juanmont@ucm.es>
Date: Fri, 19 Oct 2018 16:53:04 +0200
Subject: [PATCH] F #2427: Added option to pick differents networks for a VM

---
 src/scheduler/include/Scheduler.h            |  8 ++++++-
 src/scheduler/src/sched/Scheduler.cc         | 22 ++++++++++++++++++++
 src/scheduler/src/sched/SchedulerTemplate.cc |  6 ++++++
 3 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/src/scheduler/include/Scheduler.h b/src/scheduler/include/Scheduler.h
index f40b27c589..c95dbf57a5 100644
--- a/src/scheduler/include/Scheduler.h
+++ b/src/scheduler/include/Scheduler.h
@@ -83,7 +83,8 @@ protected:
         machines_limit(0),
         dispatch_limit(0),
         host_dispatch_limit(0),
-        mem_ds_scale(0)
+        mem_ds_scale(0),
+        diff_vnets(false)
     {
         am.addListener(this);
     };
@@ -227,6 +228,11 @@ private:
      */
     float mem_ds_scale;
 
+    /**
+     *  Boolean to dispatch the VM inside different vnets
+     */
+    bool diff_vnets;
+
     /**
      * oned runtime configuration values
      */
diff --git a/src/scheduler/src/sched/Scheduler.cc b/src/scheduler/src/sched/Scheduler.cc
index d67ad94e2c..31b4bccbe2 100644
--- a/src/scheduler/src/sched/Scheduler.cc
+++ b/src/scheduler/src/sched/Scheduler.cc
@@ -108,6 +108,7 @@ void Scheduler::start()
     ostringstream oss;
 
     string etc_path;
+    string diff_vnets_str;
 
     unsigned int live_rescheds;
 
@@ -157,6 +158,22 @@ void Scheduler::start()
 
     conf.get("MEMORY_SYSTEM_DS_SCALE", mem_ds_scale);
 
+    conf.get("DIFFERENT_VNETS", diff_vnets_str);
+
+    one_util::toupper(diff_vnets_str);
+
+    if (diff_vnets_str != "" )
+    {
+        if ( diff_vnets_str == "NO" )
+        {
+            diff_vnets = false;
+        }
+        else if ( diff_vnets_str == "YES" )
+        {
+            diff_vnets = true;
+        }
+    }
+
     // -----------------------------------------------------------
     // Log system & Configuration File
     // -----------------------------------------------------------
@@ -1537,6 +1554,11 @@ void Scheduler::dispatch()
 
                 for (n = net_resources.rbegin() ; n != net_resources.rend(); n++)
                 {
+                    if ( diff_vnets && matched_networks.find((*n)->oid) != matched_networks.end() )
+                    {
+                        continue;
+                    }
+
                     net = vnetpool->get((*n)->oid);
 
                     if ( net == 0 )
diff --git a/src/scheduler/src/sched/SchedulerTemplate.cc b/src/scheduler/src/sched/SchedulerTemplate.cc
index b2c5f350a6..eca98cb8b5 100644
--- a/src/scheduler/src/sched/SchedulerTemplate.cc
+++ b/src/scheduler/src/sched/SchedulerTemplate.cc
@@ -122,6 +122,12 @@ void SchedulerTemplate::set_conf_default()
     attribute = new SingleAttribute("MEMORY_SYSTEM_DS_SCALE",value);
     conf_default.insert(make_pair(attribute->name(),attribute));
 
+    //DIFFERENT_VNETS
+    value = "NO";
+
+    attribute = new SingleAttribute("DIFFERENT_VNETS",value);
+    conf_default.insert(make_pair(attribute->name(),attribute));
+
     //LOG CONFIGURATION
     vvalue.clear();
     vvalue.insert(make_pair("SYSTEM","file"));