diff --git a/topologie/SYSTEM.drawio b/topologie/SYSTEM.drawio
index dc63189..c2503ad 100644
--- a/topologie/SYSTEM.drawio
+++ b/topologie/SYSTEM.drawio
@@ -1 +1 @@
-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
\ No newline at end of file
+7V1be5u6Ev01fqw/JCEuj7k0PT295TTdX7v3GzHEodsxLpBbf/0BG9lmRraxLUBQ96VB2NheszTSrJFGA3bx8PIu9mb3nyI/mAyo4b8M2OWAUsI4z/7LW14XLQ4tGsZx6C+ajFXDTfg7KN4pWh9DP0iKtkVTGkWTNJyVG0fRdBqM0lKbF8fRc/lld9HELzXMvHGAGm5G3gS3fg/99L5oJZa7uvGfIBzfp+L32YsbD554cfFLknvPj57XmtjbAbuIoyhd/PXwchFMcvDKuFxtuLv8YnEwTau84cl5+ecju7WT0L/8NXVvYvd7+KZ4ypM3eSx+8E0QPwVx8ZXTV4HD832YBjczb5RfP2e2HrDz+/Rhkl2R7E8vmS3QvwtfguwDz+/CyeQimkTx/O3MdwzDZll7ksbRv8HanTNuGKaRvyOapmvtd/N/WTv+neJLB3EavKw1Fb/7XRA9BGn8mr2kuCtM8Coui+vnlUV50XS/ZkvR5hUcGi8fvII5+6NAeg/UKUL93fN7ohrzO2cUjEYyzG8dbnJDDbbMKoNLSMvgmhJwrzoKrg3A5RhbU4KtWRe2XIYt6yi2nJaxlRC3UXAtBO7lBYI2G0Vm+Z/BS/Z1zv3o8XZ+J4f1WBftBc6dFHVr5AS3ilwxM8uMNk2Mui1B3a4LdRuh/mb+b0At7yGHcJzOf7k1yf+/zUZGS7Qs7s/bxXuAteLocernYFcxELCH5RnGfABE9mC2YVxc1DtkEgeMmRXdOqvLTu7JTjI7Lb3WK+hfbdlJfJ+TobYbqvUORfDc/2SoAZ7Qtm8oHC7cZlFjBk6Go+KpF7n1SEBl0BuG9fbsqmboiVl2ZrTlWIIwBL0fPCkPJnweOL4pQ92ht8yyFHkgl5fQ5VbLE16CQ7X+oCuhbrPg4lgtA5d2E1yL60ZdHKz1B93WqYtjsgxc5TJDM+DaYvjWhrpOr9DVjLqnMFVuJ6NsJ9J2mCqIcjIUNFTZXcn0uWYNhcNUBHcw9c/yXF92NY2mQRneDIv49Ud2YQy5uPx7/d5l/tON5dWruHoJ07W3ZVd/r91ZvSm/EO/ZaIAkeoxHxbf99ePV9S+SK+vn9a+P/OuP56v3P4WynnrxOEi3OZjigYFfyltie1YMmeJg4qXhUznbKTNi8QnXUZj9tFVmzQIRGwE8WPzw4l0rKqAHwdCPWuBBC2TQg+acWv7sI2iGI71maUbWSbak3BE025Zj2EkzVyuWwaQBcw9lmQseBCcCG1iWmd17XXvZLH9BsvkLc1Ye7kybA9IunqiWwjicbthTakVhvRxl5ygMPqYZBmPNYk8GH+BMV6xf5/xaF9jA+sMZLNYx7WKwfWJwLUM91m4O9JNkP8Y06yfFTKxrU8r+8AzLWL3k2cmdtUszrOepoRnVjGduVX9m6EU0yI9DiWZCxtY087NY+XMIb2Lqh4XTPVl8ABkPdbCHk5hWHZQ1C8A7x2G4zJCVFsfXw2HRb9ob8FVLldsWAe+kMNXMD1t2mRIHc5iAB9XEYdum5c9xmuCwMrldCYdJTRw2q84lNPPDNnCf9FAOwy0xcH21Kg6DZcSENsFhqorDQAg1tOIwrcrhU3xfS+DF2k4ZNTPcdzXs6g3NWk/rFEpAzTyrHt+behGta2OyBQjtNjEkH53ZOXpIpo2MyZVFd6YXibsWHFl2+XN4IxNLZZkjrSeWpHKK/RQdHRcdgc9pJMBXlpUyhrbOJHZOJD6IxMqIpiwvpbWzrD7ic7141rUR3zbaGPGPTksdTWJbLxZrlsXvHIuBLMF5Ayy2sFJ16aVe1nI1yXgLCZ0uiousb/aZhONp9vcoI1YQZw35hoJw5E3OihsPoe/nbz+PgyT87S2KkuSULPDInsvPB/wyf9ZjGiWLOl+S3Q9XV1d0vsdhI5f32E5sW0NaXohrGcXcdke5ETjoqivyIt3z+gPZoBO7rzjYOGiZBKErIv/SZhFeF7rSAkXK0W2mQJGZ0RfiSzG+dChDeNmqHmMcBHe4epmrI8I4RLuJn5S7iFZL8jECgTeHQhNbx54sPXgJ/FWzevRx3PJXEqtG3zI8N5tySNCnl7Zl1Iw+ZRUcNxnacujt2qCvMNsWBdDuJsFLMe0+X5uBjyZekoSjsjEWGIv6nXTxDnG5mJaL0qOmxBPdBZbcE/m2e2ts9US6TJMNa2k1YXLuDsVK+H0ny9Su9LiaBQYxbzuxRTVbHGhb5zCeMDg/hA+qmyH0xJBaGJJNwNQwhMNpQNMMqbCG48SQAxhiWuqGGxPOVmodaz68+fzd+fJw9vnTz4tvH16ejdHVd0md7CyuxFTpRMxjg9Rpk1WFpeBiL93dMmAWqB7IWMvgSivYKWduO9V+WgdXKuZ1tZQSTDy2DS7W8k4Vega4lNIylm+gQo98bKxr24vd2gbEbXzs3ELYXetXD927RWGurab9h1RxikxO4rrKTLW3QLEqibfNyTThMFyyiqh38P5DWK+q7jiigiJRbZvrHmv/D10AfjjLWEWWabYkBnpKWIOsMyw7emfKcSyzG6KZZBdfB2gGF+YxE+RTKtPMhl4RPKhumh29M0W3PfvbtJ+usQzttD+UZWjsbZhlOA5MsDjU6JqljVza43wdiKqkziqTsEPFwiQ5zHhZR4K7c9dgZvAYo9Zhxms7EiwYdQ1mDoa0Jbtbgxkv4kh452GG+iex24YZL9hIrN7BTAlW2BqFWVKsPLF7ADMtwbycF7cGM9aAErPzMJvOholgAzC/v3rgzwmJ79n3z18+XL1++Yv/lORS3z944yBpF2mFKfg9ZoEGOBVueezijiChNuNgfWoUTe/C8YCdpdEswtmWZHFe9KbbYy8NnnOxdsN9P3gK8+iruA0YsMrSGLuzNIrsAbcMyE6LFmVsSjaBatEhNvl2To3/fbv+6+JdGn7wjX+e3F9T+XHReG7eicUHsM6/Ka4bOOJNevAC9kYbTkBH+K1hK/Eu0FOFD/OT5ueZwWLlD6Gr9svwYZx9/0l4m/+KZOQF2f+X0ejfIB4mT2M14KNz0N1K2JtbxIejsMfEli786AHyHIT7slOgGoW+4sGGPYDe4taQlmea0qUNztB2JAaoy+9g7fTdc4ideg8MgF2+M6y2ZKE29su2MIW9ZD88zZYQs23wsZ67+TjbPlgAHWrbugUUlgDRuHCdkBfWEzfbCKlJ4oaJmgPHFgCB2zjQWKYucSOFFWuD4+c7rHX3oIvbJihNUfHI8No6uGRJnnTVbw+wt7hmM2vJSjLpouAeYI9KsrSOvTSi7CXvoXquQ0wjWXfUW+pbfGgR/SyAw8ps0O1lZGNz4Hw0QB+HNhn6/XQ/NoX818ICOLLvrQciBrKABgbAsWVfR+Bs5qmjAfDKl74qu1BU1wF9HPSeNq3ld5eF14StKoYKKnatyXNPOETubhkrYnFWgpcYuJZSo2lVyVqavkrsEvDtthVeigPh7q4ZIC7Vjd040O1r9k4CfvvsliVPr7rru8tDo+ngJTF1bbyXwysNY/8M3y0Fv+FJpOSA8ozeystKNERvWNC+fXrjELWviSnCQBkmGfjNum4cnna3khLhhAyZ467+acZ0aQq2n9MUDnJROjjyPQ9TlVaSU7DWwi2tthgadMcO2+ziOojDDIPcvPO2cj07ts1m6+sytk4vdq7L0OwAYUJdkPCxwTOqrswgzARPgt9GUSkVYoFCjbQoiamqloqc9jj43Jv2SgnnViUcORHuWMKJY38aJdx+9S52+Vla8rNDg9m7fG1+VavLtE8MbozBFCjVttkAg2WlNBY5gnxWVaKy9esxEjfeLHawnWUvoObsZXVT5BXepl7+7nAapqE3Ec/MvuPisSL5ADpLqzvvGpq6GyDwx9NFIlZTlHbe0c2d4LjJ4qneoXzTEhFyny6pI8kxoN1NHVFilx1r6+K65ITKvqaOJOC3Lq5Lzm3srrieAQw2H7WtyUhOFOyruI7YrYMmIx7cD3HdcZzdCDdJb+GW/gRx3XF2544add3i8LJeiOtZROPqLK6bWHToq7hODbo7jdS4I9+v+uQfIq6zqlqnCGJ0UYoco9y/D1eKHA43UNajFOViZ+mDGtE6TSwT7E17TLhaq6pudZ+7JU16IuqxROVQ0myCqFglUUDUIwhHqhKOnQh3LOFMINk1oaGbsrIGCjV0bxYPLtjgzElOMvpqZkjAtFwmo7u4cwhnoH5aiOWrk4w+74LwWJW2ZXQTK2EdltHhqXqty+hcJnT1VEbH4Lcuo3PZBpjOyug2KCLbuvrCsdTVWxkdslsH9YXLdsB0VUanpqtZlohL6zj0UkbPwN6t7DbrurHE0mEZ3WJ8yHYj3Cy9sTbQW+3cEqvAdfLe+1UA/EO0czGn2KkQichFE4Uo84TgXORDFSJ0bHttCpFtlV1SI5Ikx9rA3rTfop0bQ2rZg5J+bhC2qzvI1g4fwWGrIodF5ZITh4/gMN3GYfwGC3wzUvjhekmPZZZjfL3NGKA4cw6huFLHLTkI8kT6mkgP6m0CaV9G+nIvIcWWgFpJb2Hxq7ZcgDGKwzT8lX3OKS0gjM7h0ig856VCIG0kLSB6/hohLr9+uUa2Se69Wf7n6HUSTv0gZrtl/ttFTuDj7bLBG/07nmcKvjym2WOEKYRVeHtmAbXIqdhYtGYXS+LvHAWBSPJoW+fk7ubzf6fnXynjH37/w9/gM/ly13xTXEZxeh+No6k3ebtqPS8fCrR6zccomhVI/wzS9LWI+PL+sGk0G6hf7CD9mZLAQvo6s+LwVHncOco4FHWZdxffvn7c2GdmcTQKkqRCj9nQQdAZXKOR60oTZhZzma+mU4C0GOfYVYk15KXY3K4JdSys3lx+vkjjydn1ewT9XvlIBWARsMueORSjJVEyxKYC5WhhnfTT2ecvOkBFOSQW9rWOJSFWXd350OA3ydxWuj08OOq4+LITtnd5YeAkfMcwbCZzEmfcMMzj/LZkjZr0qAm7ot9u6OhvWFAK+qqqUQUHRRuZCx6k7gQJKfyHRq77MNb+QylL9AqFe8NZydEbqklL1hk73KGZr4mTe8n0OnJWL9md2HwIRBcXhK+Vj+oBNdKoScWjFes3jJcjQNNQq8bI+wQOvmvtE1t7hI7EFk5DF2a7YLsPAY+o7IwZhV0ESgmqeG2AU9aKU3vr5TWOkKvxWtnceb/U6+FEripg6LV0vj+TikMLHNU0E27Sh0pyO1Ifqtl+tvZdqDLy7bfRsjgu0veS+6Xassa3vP3aS9Mgns5b8jQAzAbSwcZga1eqUTIdIFuprHRwP0rUPfnEyfIyjvKs2+rlsTe7/xT5Qf6K/wM=
\ No newline at end of file
diff --git a/topology.py b/topology.py
deleted file mode 100644
index 144afc2..0000000
--- a/topology.py
+++ /dev/null
@@ -1,152 +0,0 @@
-# Copyright (c) 2015 SONATA-NFV and Paderborn University
-# ALL RIGHTS RESERVED.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Neither the name of the SONATA-NFV, Paderborn University
-# nor the names of its contributors may be used to endorse or promote
-# products derived from this software without specific prior written
-# permission.
-#
-# This work has been performed in the framework of the SONATA project,
-# funded by the European Commission under Grant number 671517 through
-# the Horizon 2020 and 5G-PPP programmes. The authors would like to
-# acknowledge the contributions of their colleagues of the SONATA
-# partner consortium (www.sonata-nfv.eu).
-import logging
-from mininet.log import setLogLevel
-from emuvim.dcemulator.net import DCNetwork
-from emuvim.api.rest.rest_api_endpoint import RestApiEndpoint
-from emuvim.api.openstack.openstack_api_endpoint import OpenstackApiEndpoint
-import time
-
-TOPOS = {'mytopo':(lambda:create_topology())}
-
-logging.basicConfig(level=logging.INFO)
-setLogLevel('info') # set Mininet loglevel
-logging.getLogger('werkzeug').setLevel(logging.DEBUG)
-logging.getLogger('api.openstack.base').setLevel(logging.DEBUG)
-logging.getLogger('api.openstack.compute').setLevel(logging.DEBUG)
-logging.getLogger('api.openstack.keystone').setLevel(logging.DEBUG)
-logging.getLogger('api.openstack.nova').setLevel(logging.DEBUG)
-logging.getLogger('api.openstack.neutron').setLevel(logging.DEBUG)
-logging.getLogger('api.openstack.heat').setLevel(logging.DEBUG)
-logging.getLogger('api.openstack.heat.parser').setLevel(logging.DEBUG)
-logging.getLogger('api.openstack.glance').setLevel(logging.DEBUG)
-logging.getLogger('api.openstack.helper').setLevel(logging.DEBUG)
-
-
-def create_topology():
- net = DCNetwork(monitor=False, enable_learning=True,autoSetMacs=True)
-
- dc1 = net.addDatacenter("dc1")
- # add OpenStack-like APIs to the emulated DC
- api1 = OpenstackApiEndpoint("0.0.0.0", 6001)
- api1.connect_datacenter(dc1)
- api1.start()
- api1.connect_dc_network(net)
- # add the command line interface endpoint to the emulated DC (REST API)
- rapi1 = RestApiEndpoint("0.0.0.0", 5001)
- rapi1.connectDCNetwork(net)
- rapi1.connectDatacenter(dc1)
- rapi1.start()
-
- s1 = net.addSwitch('s1')
- s2 = net.addSwitch('s2')
- s3 = net.addSwitch('s3')
- s4 = net.addSwitch('s4')
-
- srv = net.addDocker('srv', ip='192.168.0.1', dimage="server:latest")
- gwi = net.addDocker('gwi', ip='192.168.0.254', dimage="gateway:latest")
-
- #First cluster
- gwf1 = net.addDocker('gwf1', ip='192.168.0.252', dimage="gwf1:latest")
- device11 = net.addDocker('device11', ip='127.0.0.1', dimage="device1:latest")
- device12 = net.addDocker('device12', ip='127.0.0.1', dimage="device1:latest")
- device13 = net.addDocker('device13', ip='127.0.0.1', dimage="device1:latest")
-
- #Second cluster
- gwf2 = net.addDocker('gwf2', ip='192.168.0.251', dimage="gwf2:latest")
- device21 = net.addDocker('device21', ip='127.0.0.1', dimage="device2:latest")
- device22 = net.addDocker('device22', ip='127.0.0.1', dimage="device2:latest")
- device23 = net.addDocker('device23', ip='127.0.0.1', dimage="device2:latest")
-
- #Third cluster
- gwf3 = net.addDocker('gwf3', ip='192.168.0.250', dimage="gwf3:latest")
- device31 = net.addDocker('device31', ip='127.0.0.1', dimage="device3:latest")
- device32 = net.addDocker('device32', ip='127.0.0.1', dimage="device3:latest")
- device33 = net.addDocker('device33', ip='127.0.0.1', dimage="device3:latest")
-
- #Switch links
- net.addLink(s1, s2)
- net.addLink(s2, s3)
- net.addLink(s2, s4)
- net.addLink(s4,dc1)
- net.addLink(s1, srv)
- net.addLink(s2, gwi)
-
- #First cluster link
- net.addLink(s3, gwf1)
- net.addLink(gwf1,device11)
- net.addLink(gwf1,device12)
- net.addLink(gwf1,device13)
-
- #Second cluster link
- net.addLink(s3, gwf2)
- net.addLink(gwf2,device21)
- net.addLink(gwf2,device22)
- net.addLink(gwf2,device23)
-
- #Third cluster link
- net.addLink(s4, gwf3)
- net.addLink(gwf3,device31)
- net.addLink(gwf3,device32)
- net.addLink(gwf3,device33)
-
-
- net.start()
- srv.cmd("node srv/server.js --local_ip '192.168.0.1' --local_port 8080 --local_name 'srv'")
- time.sleep(2)
-
- gwi.cmd("node ***/gateway.js --local_ip '192.168.0.254' --local_port 8181 --local_name 'gwi1' --remote_ip '192.168.0.1' --remote_port 8080 --remote_name 'srv'")
- time.sleep(2)
-
- gwf1.cmd("node ***/gateway.js --local_ip '192.168.0.252' --local_port 8282 --local_name 'gwf1' --remote_ip '192.168.0.254' --remote_port 8181 --remote_name 'gwi1'")
- time.sleep(2)
- device11.cmd("node ***/device.js --local_ip '*******' --local_port 9001 --local_name 'device11' --remote_ip '192.168.0.252' --remote_port 8282 --remote_name 'gwf1' --send_period 3000")
- device12.cmd("node ***/device.js --local_ip '*******' --local_port 9001 --local_name 'device12' --remote_ip '192.168.0.252' --remote_port 8282 --remote_name 'gwf1' --send_period 3000")
- device13.cmd("node ***/device.js --local_ip '*******' --local_port 9001 --local_name 'device13' --remote_ip '192.168.0.252' --remote_port 8282 --remote_name 'gwf1' --send_period 3000")
-
- gwf2.cmd("node ***/gateway.js --local_ip '192.168.0.251' --local_port 8282 --local_name 'gwf2' --remote_ip '192.168.0.254' --remote_port 8181 --remote_name 'gwi1'")
- time.sleep(2)
- device21.cmd("node ***/device.js --local_ip '*******' --local_port 9001 --local_name 'device21' --remote_ip '192.168.0.251' --remote_port 8282 --remote_name 'gwf2' --send_period 3000")
- device22.cmd("node ***/device.js --local_ip '*******' --local_port 9001 --local_name 'device22' --remote_ip '192.168.0.251' --remote_port 8282 --remote_name 'gwf2' --send_period 3000")
- device23.cmd("node ***/device.js --local_ip '*******' --local_port 9001 --local_name 'device23' --remote_ip '192.168.0.251' --remote_port 8282 --remote_name 'gwf2' --send_period 3000")
-
- gwf3.cmd("node ***/gateway.js --local_ip '192.168.0.250' --local_port 8282 --local_name 'gwf3' --remote_ip '192.168.0.254' --remote_port 8181 --remote_name 'gwi1'")
- time.sleep(2)
- device31.cmd("node ***/device.js --local_ip '*******' --local_port 9001 --local_name 'device31' --remote_ip '192.168.0.250' --remote_port 8282 --remote_name 'gwf3' --send_period 3000")
- device32.cmd("node ***/device.js --local_ip '*******' --local_port 9001 --local_name 'device32' --remote_ip '192.168.0.250' --remote_port 8282 --remote_name 'gwf3' --send_period 3000")
- device33.cmd("node ***/device.js --local_ip '*******' --local_port 9001 --local_name 'device33' --remote_ip '192.168.0.250' --remote_port 8282 --remote_name 'gwf3' --send_period 3000")
-
- net.CLI()
- # when the user types exit in the CLI, we stop the emulator
- net.stop()
-
-
-def main():
- create_topology()
-
-
-if __name__ == '__main__':
- main()