Enhancement to CLI/sdncon framework to connect to a remote SDN controller platform
diff --git a/cli/cli.py b/cli/cli.py
index e6987af..a2dd0d8 100755
--- a/cli/cli.py
+++ b/cli/cli.py
@@ -297,6 +297,9 @@
     #       talk to eth0 addr instead of 127.0.0.1
     controller_for_prompt = "127.0.0.1:8000"
     cluster = "default"
+    
+    known_sdn_platforms = ["127.0.0.1:8080"]
+    sdn_controller_paltform = None
 
     run = True
 
@@ -780,7 +783,7 @@
         parser = OptionParser()
         parser.add_option("-c", "--controller", dest="controller",
                           help="set default controller to CONTROLLER", 
-                          metavar="CONTROLLER", default=self.controller)
+                          metavar="CONTROLLER", default=self.sdn_controller_paltform)
         parser.add_option("-S", "--syntax", dest='dump_syntax',
                           help="display syntax of loaded commands",
                           action='store_true', default=False)
@@ -799,9 +802,11 @@
                           help='suppress warning messages',
                           action='store_true', default=False)
         (self.options, self.args) = parser.parse_args()
-        self.controller = self.options.controller
-        if not self.controller:
+        if self.controller is None:
             self.controller = "127.0.0.1:8000"
+        self.sdn_controller_paltform = self.options.controller
+        if not self.sdn_controller_paltform:
+            self.sdn_controller_paltform = "127.0.0.1:8080"
         self.dump_syntax = self.options.dump_syntax
         if not self.dump_syntax:
             self.dump_syntax = False
@@ -826,6 +831,7 @@
 
         self.store = StoreClient()
         self.store.set_controller(self.controller)
+        self.store.set_sdn_controller_platform_rest_if(self.sdn_controller_paltform)
 
         mi = Modi(self, CliModelInfo())
         self.mi = mi
diff --git a/cli/storeclient.py b/cli/storeclient.py
index e7fb50c..fb56372 100755
--- a/cli/storeclient.py
+++ b/cli/storeclient.py
@@ -80,6 +80,7 @@
     table_read_url = "http://%s/rest/v1/model/%s/"
     entry_post_url = "http://%s/rest/v1/model/%s/"
     user_data_url = "http://%s/rest/v1/data/"
+    sdn_platform_data_url = "http://%s/rest/v1/system/"
 
     def set_controller(self,controller):
         self.controller = controller
@@ -89,6 +90,11 @@
 
     def display_reply_mode(self, mode):
         self.display_rest_reply = mode
+        
+    def set_sdn_controller_platform_rest_if(self, sdn_controller_rest_if):
+        url = self.sdn_platform_data_url % (self.controller)
+        url = url + "restifaddr/"
+        data = self.rest_post_request(url, sdn_controller_rest_if)
 
     def rest_simple_request(self,url, use_cache = None, timeout = None):
         # include a trivial retry mechanism ... other specific
diff --git a/sdncon/rest/views.py b/sdncon/rest/views.py
index 66dc75a..e6f691a 100755
--- a/sdncon/rest/views.py
+++ b/sdncon/rest/views.py
@@ -49,15 +49,14 @@
 JSON_CONTENT_TYPE = 'application/json'
 BINARY_DATA_CONTENT_TYPE = 'application/octet-stream'
 
+controller_rest_ip = "127.0.0.1"
+controller_rest_port = "8080"
+
 onos = 1
 
-if onos == 1:
-    #CONTROLLER_URL_PREFIX = 'http://localhost:9000/wm/'
-    CONTROLLER_URL_PREFIX = 'http://localhost:8080/wm/'
-else:
-    CONTROLLER_URL_PREFIX = 'http://localhost:8080/wm/'
 
 def controller_url(*elements):
+    CONTROLLER_URL_PREFIX = "http://%s:%s/wm/" % (controller_rest_ip, controller_rest_port)
     return CONTROLLER_URL_PREFIX + '/'.join(elements)
 
 class RestException(Exception):
@@ -2205,4 +2204,23 @@
     url = controller_url('onos', 'segmentrouting','policy')
     if request.META['QUERY_STRING']:
         url += '?' + request.META['QUERY_STRING']
-    return get_sdnplatform_response(url)
\ No newline at end of file
+    return get_sdnplatform_response(url)
+
+@safe_rest_view
+def do_controller_restifaddr(request):
+    global controller_rest_ip, controller_rest_port
+    if request.method != 'PUT':
+        raise RestInvalidMethodException()
+    controller_rest_if = request.raw_post_data
+    if controller_rest_if.startswith('"') and controller_rest_if.endswith('"'):
+        controller_rest_if = controller_rest_if[1:-1]
+    #controller_rest_if.replace('\"','')
+    controller_rest_if_addr = controller_rest_if.split(':')
+    controller_rest_ip = controller_rest_if_addr[0]
+    if (len(controller_rest_if_addr) < 2):
+        controller_rest_port = "8080"
+    else:
+        controller_rest_port = controller_rest_if_addr[1] 
+    response_text = "http://%s:%s" % (controller_rest_ip,controller_rest_port)
+    response = HttpResponse(response_text, JSON_CONTENT_TYPE)
+    return response
diff --git a/sdncon/urls.py b/sdncon/urls.py
index 8478eab..c00805d 100755
--- a/sdncon/urls.py
+++ b/sdncon/urls.py
@@ -90,6 +90,7 @@
     (r'^rest/v1/realtimetest/network/(?P<subcategory>[A-Za-z0-9_:.\-]+)/?$', 'sdncon.rest.views.do_sdnplatform_realtimetest', {'category': 'network'}),
     
     # REST API for accessing controller system information
+    (r'^rest/v1/system/restifaddr/', 'sdncon.rest.views.do_controller_restifaddr'),
     (r'^rest/v1/system/version/?$', 'sdncon.rest.views.do_system_version', {}),
     (r'^rest/v1/system/interfaces/?$', 'sdncon.rest.views.do_system_inet4_interfaces', {}),
     (r'^rest/v1/system/uptime/?$', 'sdncon.rest.views.do_system_uptime', {}),