Adding ONOS Segment Routing CLI files to new repo
diff --git a/cli/desc/version200/address_space_run_config.py b/cli/desc/version200/address_space_run_config.py
new file mode 100755
index 0000000..c68bc1b
--- /dev/null
+++ b/cli/desc/version200/address_space_run_config.py
@@ -0,0 +1,293 @@
+#
+# Copyright (c) 2012,2013 Big Switch Networks, Inc.
+#
+# Licensed under the Eclipse Public License, Version 1.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.eclipse.org/legal/epl-v10.html
+#
+# 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.
+#
+
+#  address_space_run_config.py
+#
+# show running address-space [as]
+#
+
+import run_config
+import command
+import fmtcnv
+import utif
+import sys
+from midw import *
+
+def address_space_running_config_include_field(context, config,
+        address_space, obj_type, field, value, indent, prefix = ""):
+    """
+    Identify fields of obj_types who's values differ from the default
+    values, since these need to be included into the running-config
+    """
+    if context.mi.not_default_value(obj_type, field, value):
+        if context.mi.is_field_string(obj_type, field):
+            config.append(' ' * (indent + indent) + prefix + field +
+                          " %s\n" % utif.quote_string(value))
+        else:
+            config.append(' ' * (indent + indent) + prefix + field +
+                          ' %s\n' % value)
+
+#
+# address_space_running_config_details
+#
+# Show an address-space configuration in detail
+#
+def address_space_running_config_details (context, config, address_space):
+    """
+    Display the details for the fields of a address_space which may have
+    non-default values.
+    """
+
+    #
+    # 'active' is True by default. Prepend 'no' into the generated config
+    # if this item is not active.
+    #
+    if address_space['active'] != \
+        context.mi.field_default_value('address-space', 'active'):
+        config.append('  no active\n')
+
+    #
+    # Show the rest of the fields
+    #
+    address_space_fields = ['description', 'origin', 'priority',
+                            'vlan-tag-on-egress']
+
+    for field in sorted(address_space_fields):
+        address_space_running_config_include_field(context, config,
+            address_space, 'address-space', field,
+            address_space.get(field,''), 1)
+
+#
+# address_space_running_config_id_rule
+#
+# Generate indentifier-rule under address-space configuration
+# 
+def address_space_running_config_id_rule (context, config, address_space,
+                                          address_space_id_rule_entries):
+
+    #
+    # Iterate through each identifier-rule and show its contents
+    #
+    for rule in address_space_id_rule_entries:
+
+        #
+        # Show the rule header line
+        #
+        config.append('  identifier-rule %s\n' % rule['rule'])
+
+        #
+        # Iterate through each field configurable and generate the config
+        # if present.
+        #
+        for field in ['description', 'active', 'priority']:
+            address_space_running_config_include_field(context, config,
+                address_space, 'address-space-identifier-rule', field,
+                rule.get(field, ''), 2)
+
+        for field in ['vlans', 'tag']:
+            address_space_running_config_include_field(context, config,
+                address_space, 'address-space-identifier-rule', field,
+                rule.get(field, ''), 2, "match ")
+
+        #
+        # Manage switch and ports differently, placing both on the
+        # same line when ports exist, and replacing the switch alias
+        # when its available.
+        if 'switch' in rule:
+            dpid_or_alias = alias_lookup_with_foreign_key('switch-alias',
+                                                          rule['switch'])
+            if dpid_or_alias == None:
+                dpid_or_alias = rule['switch'] # dpid
+            if 'ports' in rule:
+                config.append('    match switch %s %s\n' % \
+                              (dpid_or_alias, rule['ports']))
+            else:
+                config.append('    match switch %s\n' % dpid_or_alias)
+
+        #
+        # This configuration section complete, print the trailer.
+        #
+
+
+#
+# running_config_specific_address_space
+#
+# Show running configuration of one particular address-space
+#
+def running_config_specific_address_space (context, config, address_space_name):
+    
+    #
+    # Have a temporary holder to store generated configuration.
+    #
+    tmp_config = [ ]
+
+    #
+    # Retrieve the configuration from the data store. Catch all possible
+    # exceptions and report back as appropriate.
+    #
+    try:
+        address_space = context.get_object_from_store(
+                            'address-space', address_space_name)
+    except:
+
+        #
+        # This particular address-space is not available in the
+        # data base. Report error back.
+        #
+        return ('Error: no address-space name %s, Error %s' %  \
+               (address_space_name, sys.exc_info()[0]))
+
+    #
+    # Show the configured sub items under this address-space.
+    #
+    address_space_running_config_details(context, tmp_config, address_space)
+
+    #
+    # Retrieve all the identifier rules configured. There may not be any
+    # rule present. Handle it gracefully.
+    #
+    address_space_rules = None
+    try:
+        address_space_rules = context.get_table_from_store(
+                                  'address-space-identifier-rule',
+                                  'address-space',
+                                  address_space_name, "exact")
+    except Exception:
+        pass
+
+    #
+    # Show each rule configured in detail
+    #
+    if address_space_rules:
+        address_space_running_config_id_rule(context, tmp_config, address_space,
+                                             address_space_rules)
+
+    #
+    # Don't shown empty configuration for default address-space.
+    #
+    if len(tmp_config) > 0 or address_space['name'] != 'default':
+        config.append("address-space %s\n" % address_space_name)
+        config += tmp_config
+
+#
+# running_config_address_space
+#
+# Show running configuration for 'all' address-space configured
+#
+def running_config_address_space (context, config, words):
+    """
+    Add the Address Space configuration detils
+    """
+
+    #
+    # Check if this is request for a specific address-space
+    #
+    if len(words) > 0:
+        return running_config_specific_address_space(context, config, words[0])
+
+    #
+    # Retrieve all address-space configurations
+    #
+    address_space_list = None
+    try:
+        address_space_list = \
+            context.get_table_from_store('address-space')
+    except Exception:
+        pass
+
+    #
+    # Retrieve all address-spaces' identifier rules
+    #
+    address_space_rules = None
+    try:
+        address_space_rules = \
+            context.get_table_from_store('address-space-identifier-rule')
+    except Exception:
+        pass
+
+    #
+    # Walk each address-space found and print its contents
+    #
+    if address_space_list:
+        for address_space in address_space_list:
+            tmp_config = [ ]
+
+            #
+            # Now print its contents in details
+            # 
+            address_space_running_config_details(context, tmp_config,
+                                                 address_space)
+
+            #
+            # If there is any identifier-rule configured, show each of them.
+            #
+            if address_space_rules:
+                address_space_running_config_id_rule(context, tmp_config,
+                    address_space,
+                    [rule for rule in address_space_rules \
+                    if rule['address-space'] == address_space['name']])
+
+
+            #
+            # Don't shown empty configuration for default address-space.
+            #
+            if len(tmp_config) > 0 or address_space['name'] != 'default':
+                config.append("!\naddress-space %s\n" % address_space['name'])
+                config += tmp_config
+
+#
+# address_space_running_config_tuple
+#
+# address-space configuration tuple that we intend to process wrt
+# generating their running configuration
+#
+address_space_running_config_tuple = (
+    (
+        #
+        # show running-configuration address-space
+        #
+        {
+            'optional'   : False,
+            'field'      : 'running-config',
+            'type'       : 'enum',
+            'values'     : 'address-space',
+            'short-help' : 'Configuration for address spaces',
+            'doc'        : 'running-config|show-address-space',
+        },
+
+        #
+        # show running-configuration address-space <address-space>
+        #
+        {
+            'field'        : 'word',
+            'type'         : 'identifier',
+            'completion'   : 'complete-from-another',
+            'other'        : 'address-space|name',
+            'parent-field' : None,
+            'action'       : 'legacy-cli',
+            'optional'     : True,
+        }
+    ),
+)
+
+#
+# Register with run_config module, our callback to process running configs for
+# address-space configuration items
+#
+run_config.register_running_config('address-space', 4000, None,
+                                   running_config_address_space,
+                                   address_space_running_config_tuple)
+