Adding ONOS Segment Routing CLI files to new repo
diff --git a/cli/desc/version200/controller_node.py b/cli/desc/version200/controller_node.py
new file mode 100755
index 0000000..4c71c5b
--- /dev/null
+++ b/cli/desc/version200/controller_node.py
@@ -0,0 +1,1078 @@
+#
+# Copyright (c) 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.
+#
+
+import command
+import fmtcnv
+"""
+CONTROLLER_NODE_FORMAT = {
+    'controller-node' : {
+        'field-orderings' : {
+            'default'       : [
+                             'Idx',
+                             'alias',
+                             'me',
+                             'ha-role',
+                             'change-date-time',
+                             'change-description',
+                             'status',
+                             'uptime',
+                             'errors'
+                             #'domain-lookups-enabled',
+                             #'logging-enabled',
+                            ],
+            'brief'   :      [
+                             'Idx',
+                             'alias',
+                             'me',
+                             'ha-role',
+                             'change-date-time',
+                             'change-description',
+                             'status',
+                             'uptime',
+                             'errors',
+                            ],
+            'details' :    [
+                             'Idx',
+                             'alias',
+                             'id',
+                             'me',
+                             'ha-role',
+                             'change-date-time',
+                             'change-description',
+                             'status',
+                             'uptime',
+                             'errors',
+                             'domain-lookups-enabled', 'domain-name-servers',
+                             'domain-name', 'default-gateway',
+                             'ntp-server', 'time-zone',
+                             'logging-enabled', 'logging-server',
+                            ],
+            'without-vns' : [
+                             'Idx',
+                             'id',
+                             'me',
+                             'alias',
+                             'ha-role',
+                             'change-date-time',
+                             'change-description',
+                             'uptime',
+                             'domain-lookups-enabled', 'domain-name-servers',
+                             'domain-name', 'default-gateway',
+                             'ntp-server', 'time-zone',
+                             'logging-enabled', 'logging-server', 'logging-level',
+                            ]
+            },
+        'fields': {
+            'id'                     : {
+                                          'verbose-name' : 'Controller ID',
+                                       },
+            'me'                     : {
+                                          'verbose-name' : '@',
+                                          'formatter' : fmtcnv.controller_node_me,
+                                          'entry-formatter' : fmtcnv.controller_node_me_entry
+                                       },
+            'domain-lookups-enabled' : {
+                                          'verbose-name' : 'DNS',
+                                          'formatter' : fmtcnv.replace_boolean_with_enable_disable,
+                                       },
+            'domain-name-servers'    : {
+                                          'verbose-name' : 'DNS Servers',
+                                         'formatter' : fmtcnv.print_domain_name_servers,
+                                         'entry-formatter' : fmtcnv.print_all_domain_name_servers,
+                                       },
+            'domain-name'            : {
+                                       },
+            'default-gateway'        : {
+                                       },
+            'ntp-server'             : {
+                                       },
+            'time-zone'              : {
+                                       },
+            'logging-enabled'        : { 'verbose-name' : 'Logging',
+                                         'formatter' : fmtcnv.replace_boolean_with_enable_disable,
+                                       },
+            'logging-server'         : {
+                                       },
+            'logging-level'          : {
+                                       },
+            'ha-role'                : {
+                                         'verbose-name' : 'HA Role',
+                                       },
+            'change-date-time'       : {
+                                         'verbose-name' : 'HA Last Change Time',
+                                         'formatter' : fmtcnv.print_time_since_utc_timestr,
+                                       },
+            'change-description'     : {
+                                         'verbose-name' : 'HA Change Reason',
+                                       },
+            'uptime'                 : {
+                                         'verbose-name' : 'Uptime',
+                                         'formatter'    : fmtcnv.print_timesince_msec_since
+                                       },
+            },
+        },
+}
+
+controller_node_show_actions = (
+    {
+        'proc'     : 'query-table',
+    },
+    {
+        'proc'         : 'join-table',
+        'obj-type'     : 'controller-alias',
+        'key'          : 'controller',
+        'join-field'   : 'id', # field in queried items
+    },
+    {
+        'proc'       : 'join-rest',
+        'url'        : 'system/controller',
+        'rest-type'  : 'dict-with-id',
+        'key'        : 'id',
+        'join-field' : 'id',
+        'add-field'  : 'me',
+    },
+    # need a description mechanism to join ha-role, which
+    # needs to send urls to controller-node interfaces 
+    # ie: the rest actions alwaus use the local controller
+    # (uptime has the same issue)
+    {
+        'proc'       : 'display',
+        'format'     : 'controller-node',
+    },
+),
+
+
+CONTROLLER_NODE_SHOW_COMMAND_DESCRIPTION = {
+    'name'         : 'show',
+    'obj-type'     : 'controller-node',
+    'mode'         : 'login',
+    'command-type' : 'display-table',
+    'all-help'     : 'Show controller node information',
+    'short-help'   : 'Show controller nodes summaries',
+    'doc'          : 'controller|show',
+    'args'         : (
+         {
+            'token'  : 'controller-node',
+            'action' : controller_node_show_actions,
+         }
+    ),
+}
+CONTROLLER_NODE_INTERFACE_FORMAT = {
+    'controller-interface' : {
+        'field-orderings': {
+            'default' : ['Idx',
+                         'controller',
+                         'type',
+                         'number',
+                         'mode',
+                         'ip',
+                         'discovered-ip',
+                         'netmask',
+                         'mac',
+                         'firewall']
+            },
+        'fields' : {
+            'controller'    : {
+                                'formatter' : fmtcnv.replace_controller_node_with_alias,
+                              },
+            'number'        : {
+                              },
+            'ifname'        : {
+                                'formatter' : lambda i, data: '%s%s' % (data['type'],
+                                                                        data['number'])
+                              },
+            'ip'            : {
+                              },
+            'discovered-ip' : { 'verbose-name' : 'Found IP',
+                              },
+            'mode'          : {
+                              },
+            'netmask'       : {
+                              },
+            'type'          : {
+                              },
+            'firewall'      : {
+                                'verbose-name' : 'Firewall',
+                              },
+            }
+        },
+}
+
+
+CONTROLLER_NODE_SUMMARY_FORMAT = {
+        'controller-summary' : {
+            'field-orderings' : {
+                'default' : [
+                              '# inter-switch links',
+                              '# hosts',
+                              '# attachment points',
+                              '# IP Addresses',
+                              '# VNSes',
+                              '# Access Control Lists',
+                              '# VNS Interfaces with ACL applied',
+                              '# VNS Interfaces',
+                ]
+            },
+
+            'fields' : {
+                '# Access Control Lists'            : { 'verbose-name' : 'Access Control Lists'
+                                                      },
+                '# VNS Interfaces'                  : { 'verbose-name' : 'VNS Interfaces'
+                                                      },
+                '# hosts'                           : { 'verbose-name' : 'Hosts'
+                                                      },
+                '# VNSes'                           : { 'verbose-name' : 'VNSesx'
+                                                      },
+                '# attachment points'               : { 'verbose-name' : 'Attachment Points'
+                                                      },
+                '# inter-switch links'              : { 'verbose-name' : 'Links'
+                                                      },
+                '# IP Addresses'                    : { 'verbose-name' : 'Ip Addresses'
+                                                      },
+                '# VNS Interfaces with ACL applied' : { 'verbose-name' : 'VNS If with Acl Applied'
+                                                      },
+            },
+        },
+}
+
+
+COTROLLER_NODE_SWITCHES_FORMAT = {
+    'controller-switches' : {
+        'field-orderings' : {
+            'default'     : [
+                'Idx', 'dpid',
+            ],
+        },
+        'fields' : {
+            'dpid' : { 'primary_key' : True,
+                       'verbose-name': 'Connected Switches',
+                       'formatter' : fmtcnv.print_switch_and_alias }
+            }
+        },
+
+}
+
+
+CONTROLLER_NODE_FIREWALL_RULE_FORMAT = {
+    'firewall-rule' : {
+
+       'field-orderings': {
+         'default' : ['Idx',
+                      'controller',
+                      'type',
+                      'number',
+                      'src-ip',
+                      'vrrp-ip',
+                      'port',
+                      'proto',
+                      'rule']
+        },
+        'fields' : {
+
+            'controller' : {
+                            'formatter' : fmtcnv.replace_controller_node_with_alias,
+                           },
+            'interface'  : {
+                           },
+            'port'       : {
+                           },
+            'proto'      : {
+                           },
+            'rule'       : {
+                             'verbose-name' : 'Firewall Rule'
+                           },
+            }
+       },
+}
+
+
+def controller_completion_add_localhost(completions, prefix):
+    if completions == None:
+        completions = {}
+    if not 'localhost ' in completions and 'localhost'.startswith(prefix) :
+        completions['localhost '] = 'Select currently logged in controller'
+
+
+command.add_completion('controller-add-localhost', controller_completion_add_localhost,
+                      {'kwargs': { 'completions' : '$completions',
+                                   'prefix'      : '$text',
+                      }})
+
+CONTROLLER_NODE_SHOW_ID_COMMAND_DESCRIPTION = {
+    'name'         : 'show',
+    'obj-type'     : 'controller-node',
+    'mode'         : 'login',
+    'short-help'   : 'Show controller-node associated details by name',
+    'no-supported' : False,
+    'action'       : controller_node_show_actions,
+    'doc'          : 'controller|show-details',
+    'args'         : (
+        'controller-node',
+        {
+            'choices' : (
+                {
+                    'field'        : 'id',
+                    'type'         : 'identifier',
+                    'completion'   : [
+                                      'complete-object-field',
+                                      'controller-add-localhost',
+                                     ],
+                    'data-handler' : 'alias-to-value',
+                    'action'       : controller_node_show_actions,
+                    'doc'          : 'controller|show-id',
+                },
+                {
+                    'token'        : 'all',
+                    'doc'          : 'reserved|all',
+                }
+            ),
+
+        },
+        {
+            'optional' : True,
+            'choices' : (
+                {
+                   'token'      : 'interfaces',
+                   'obj-type'   : 'controller-interface',
+                   'action'     : 'display-table',
+                   'short-help' : 'Show network interface information for controller node',
+                   'doc'        : 'controller|show-interfaces',
+                },
+                {
+                   'token'      : 'firewall',
+                   'obj-type'   : 'firewall-rule',
+                   'action'     : 'display-table',
+                   'short-help' : 'Show firewall rules for controller node',
+                   'doc'        : 'controller|show-firewall',
+                },
+                {
+                   'token'      : 'summary',
+                   'action'     : 'display-rest',
+                   'url'        : 'controller/summary',
+                   'rest-type'  : 'dict',
+                   'format'     : 'controller-summary',
+                   'short-help' : 'Show a summary of configuration for controller node',
+                   'doc'        : 'controller|show-summary',
+                },
+                {
+                   'token'      : 'switches',
+                   'action'     : 'display-rest',
+                   'url'        : 'controller/stats/switches',
+                   'format'     : 'controller-switches',
+                   'short-help' : 'Show switches connected to controller node',
+                   'doc'        : 'controller|show-switches',
+                },
+                {
+                   'token'      : 'alias',
+                   'action'     : 'display-table',
+                   'obj-type'   : 'controller-alias',
+                   'short-help' : 'Show the alias for controller node',
+                   'doc'        : 'controller|show-alias',
+                },
+            )
+        },
+        {
+            'optional' : True,
+            'field'    : 'detail',
+            'type'     : 'enum',
+            'values'   : ('details','brief'),
+            'doc'      : 'controller|show-detail',
+        }
+    ),
+}
+
+CONTROLLER_NODE_SHOW_STATS_COMMAND_DESCRIPTION = {
+    'name'         : 'show',
+    'obj-type'     : 'controller-node',
+    'mode'         : 'login',
+    'short-help'   : 'Show statistics for a given controller node',
+    'command-type' : 'display-table',
+    'doc'          : 'show-stats',
+    'args'         : (
+        'controller-node',
+        {
+            'choices' : (
+                {
+                    'field'        : 'id',
+                    'type'         : 'identifier',
+                    'completion'   : [
+                                       'complete-object-field',
+                                       'controller-add-localhost',
+                                     ],
+                    'action'       : 'display-table',
+                    'data-handler' : 'alias-to-value',
+                    'doc'          : 'controller|id',
+                },
+                {
+                    'field'        : 'id',
+                    'type'         : 'enum',
+                    'values'       : 'all',
+                    'doc'          : 'reserved|all',
+                }
+            ),
+       },
+       {
+          'field'     : 'stats',
+          'type'      : 'enum',
+          'values'    : 'stats',
+          'obj-type'  : 'controller-stats',
+          'action'    : 'legacy-cli',
+       },
+    ),
+}
+
+CONTROLLER_NODE_SHOW_OBJECT_STATS_COMMAND_DESCRIPTION = {
+    'name'         : 'show',
+    'obj-type'     : 'controller-node',
+    'mode'         : 'login',
+    'short-help'   : 'Show detailed controller-node related statistics',
+    'command-type' : 'display-table',
+    'args'         : (
+        'controller-node',
+        {
+            'choices' : (
+                {
+                    'field'        : 'id',
+                    'type'         : 'identifier',
+                    'completion'   : [
+                                       'complete-object-field',
+                                       'controller-add-localhost',
+                                     ],
+                    'action'       : 'display-table',
+                    'data-handler' : 'alias-to-value',
+                },
+                {
+                    'field'        : 'id',
+                    'type'         : 'enum',
+                    'values'       : 'all',
+                    'doc'          : 'reserved|all',
+                }
+            ),
+       },
+       {
+          'field'     : 'stats',
+          'type'      : 'enum',
+          'values'    : 'stats',
+          'obj-type'  : 'controller-stats',
+          'action'    : 'legacy-cli',
+       },
+       {
+          'field'     : 'stats-type',
+          'type'      : 'enum',
+          'values'    : (
+                            'cpu-user',
+                            'disk-root',
+                            'mem-used',
+                            'mem-free',
+                            'cli-cpu',
+                            'database-cpu',
+                            'swap-used', 
+                            'disk-boot', 
+                            'statd-cpu', 
+                            'cpu-system', 
+                            'cpu-idle', 
+                            'apache-cpu', 
+                            'cpu-nice', 
+                            'disk-log', 
+                            'sdnplatform-cpu'
+                        ),
+          'doc'       : 'controller|show-stats-type',
+       },
+       {
+          'field'     : 'start-time',
+          'tag'       : 'start-time',
+          'type'      : 'string',
+          'short-help'   : 'Start time for displaying the stats',
+          'optional'  : True,
+          'doc'       : 'controller|show-stats-start-time',
+       },
+       {
+          'field'     : 'end-time',
+          'tag'       : 'end-time',
+          'type'      : 'string',
+          'short-help'   : 'End time for displaying the stats',
+          'optional'  : True,
+          'doc'       : 'controller|show-stats-end-time',
+       },
+       {
+          'field'     : 'duration',
+          'tag'       : 'duration',
+          'type'      : 'string',
+          'short-help'   : 'Duration from the start or end for displaying the stats',
+          'optional'  : True,
+          'doc'       : 'controller|show-stats-duration',
+       },
+       {
+          'field'     : 'sample-interval',
+          'tag'       : 'sample-interval',
+          'type'      : 'integer',
+          'short-help'   : 'Spacing between sampling windows',
+          'optional'  : True,
+          'doc'       : 'controller|show-stats-sample-interval',
+       },
+       {
+          'field'     : 'sample-count',
+          'tag'       : 'sample-count',
+          'type'      : 'integer',
+          'short-help'   : 'Number of samples to show',
+          'optional'  : True,
+          'doc'       : 'controller|show-stats-sample-count',
+       },
+       {
+          'field'     : 'sample-window',
+          'tag'       : 'sample-window',
+          'type'      : 'integer',
+          'optional'  : True,
+          'short-help'   : 'Number of raw sample values to average around each down-sampled data point',
+          'doc'       : 'controller|show-stats-sample-window',
+       },
+       {
+          'field'     : 'data-format',
+          'tag'       : 'data-format',
+          'type'      : 'enum',
+          'values'    : ('value', 'rate'),
+          'short-help'   : 'Whether to display as a raw value or rate',
+          'optional'  : True,
+          'doc'       : 'controller|show-stats-data-format',
+       },
+       {
+          'field'     : 'display',
+          'tag'       : 'display',
+          'type'      : 'enum',
+          'values'    : ('latest-value',
+                         'graph',
+                         'table',
+                        ),
+          'short-help'   : 'Display the latest value, a graph, or a table',
+          'optional'  : True,
+          'doc'       : 'controller|show-stats-display',
+       },
+   ),
+}
+
+CONTROLLER_INTERFACES_SHOW_COMMAND_DESCRIPTION = {
+    'name'         : 'show',
+    'obj-type'     : 'controller-interface',
+    'short-help'   : 'Show controller-node associated interfaces',
+    'mode'         : 'config-controller',
+    'command-type' : 'display-table',
+    'scoped'       : True, # entries displayed filtered by pushed obj id
+    'doc'          : 'controller|show-interfaces',
+    'args'         : (
+        'interfaces',
+        {
+           'field'     : 'type',
+           'tag'       : 'type',
+           'type'      : 'string',
+           'optional'  : True,
+           'doc'       : 'controller|show-interfaces-type',
+        },
+        {
+           'field'    : 'number',
+           'tag'      : 'number',
+           'type'     : 'integer',
+           'optional' : True,
+           'doc'       : 'controller|show-interfaces-number',
+        },
+    )
+}
+
+
+CONTROLLER_NODE_SUBMODE_COMMAND_DESCRIPTION = {
+    'name'                : 'controller-node',
+    'obj-type'            : 'controller-node',
+    'mode'                : 'config*',
+    'short-help'          : 'Enter configuration submode for controller-nodes',
+    'no-supported'        : False,          # don't allow removal of controller-nodes
+    # 'create'            : False,         # don't allow creation of new controller-nodes
+    'command-type'        : 'config-submode',
+    'parent-field'        : None,
+    'current-mode-obj-id' : None,
+    'submode-name'        : 'config-controller',
+    'doc'                 : 'controller|controller-node',
+    'doc-example'         : 'controller|controller-node-example',
+    'args'                : (
+         {
+             'field'           : 'id',
+             'type'            : 'identifier',
+             'completion'      : [
+                                    'complete-alias-choice',
+                                    'controller-add-localhost',
+                                 ],
+             'data-handler'    : 'alias-to-value',
+             'optional-for-no' : False,
+             'doc'             : 'controller|controller-node-name',
+         }
+    )
+}
+
+
+CONTROLLER_NODE_ALIAS_COMMAND_DESCRIPTION = {
+    'name'         : 'controller-alias',
+    'mode'         : 'config-controller',
+    'short-help'   : 'Attach alias to controller',
+    'command-type' : 'manage-alias',
+    'obj-type'     : 'controller-alias',
+    'scoped'       : True,
+    'reserved'     : 'localhost',
+    'doc'          : 'controller|alias',
+    'args'         : (
+        {
+            'field'           : 'alias',
+            'optional-for-no' : True,
+            'completion'      : 'complete-object-field',
+            'doc'             : 'controller|alias-name',
+            'action'          : (
+                {
+                    'proc'    : 'create-alias',
+                },
+                {
+                    'proc'    : 'prompt-update',
+                },
+            ),
+            'no-action'       : (
+                {
+                    'proc'    : 'delete-alias',
+                },
+                {
+                    'proc'    : 'prompt-update',
+                },
+            )
+        }
+    )
+}
+
+
+CONTROLLER_NODE_INTERFACE_COMMAND_DESCRIPTION = {
+    'name'        : 'interface',
+    'new-style'   : True,
+    'mode'        : 'config-controller*',
+    'short-help'  : 'Enter interface submode, configure controller interface',
+    'command-type': 'config-submode',
+    'submode-name': 'config-controller-if',
+    'obj-type': 'controller-interface',
+    'parent-field': 'controller',
+    'doc'         : 'controller|interface',
+    'args': (
+        {
+            'field'       : 'type',
+            'help-name'   : 'interface-type',
+            'type'        : 'enum',
+            'values'      : ('Ethernet',),
+            'syntax-help' : 'Enter the interface type (e.g. Ethernet)',
+            'doc'         : 'controller|interface-type',
+        },
+        {
+            'field'       : 'number',
+            'help-name'   : 'interface-number',
+            'base-type'   : 'integer',
+            'range'       : (0,1000000),
+            #'completion' : 'complete-object-field',
+            'syntax-help' : 'Enter the interface number, a small non-negative number (e.g. 0 or 1)',
+            'doc'         : 'controller|interface-number',
+        }
+    ),
+    'no-action': ('begin-default-gateway-check', 'delete-objects', 'end-default-gateway-check'),
+}
+
+CONTROLLER_NODE_DOMAIN_NAME_SERVER_FORMAT = {
+    'controller-domain-name-server' : {
+        'field-orderings': {
+            'default' : ['Idx', 'id', 'controller', 'priority', 'ip']
+            },
+        'fields' : {
+            'ip'                : {
+                                  },
+            'controller'        : {
+                                   'formatter' : fmtcnv.replace_controller_node_with_alias,
+                                  },
+            }
+        },
+}
+
+CONTROLLER_IP_COMMAND_DESCRIPTION = {
+    'name'       : 'ip',
+    'mode'       : 'config-controller',
+    'short-help' : 'Associate dns, default gateway with the controller node',
+    'doc'        : 'controller|ip',
+    'args'       : {
+        'choices': (
+            {
+                'command-type': 'config',
+                'obj-type': 'controller-node',
+                'doc': 'controller|ip-domain',
+                'args': (
+                    'domain',
+                    {
+                        'choices': (
+                            {
+                                'field'     : 'domain-lookups-enabled',
+                                'token'     : 'lookup',
+                                'type'      : 'boolean',
+                                'doc'       : 'controller|ip-domain-lookups',
+                                'no-action' : {
+                                    'proc'  : 'write-fields',
+                                    'data'  : { 
+                                                 'domain-lookups-enabled' : False,
+                                              },
+                                },
+                            },
+                            {
+                                'field': 'domain-name',
+                                'tag': 'name',
+                                'type': 'domain-name',
+                                'syntax-help': "Enter the network's domain name",
+                                'default-for-no': 'xyz.com',
+                                'doc': 'controller|ip-domain-name',
+                            },
+                        ),
+                     },
+                 ),
+            },
+            (
+            {
+                'command-type': 'config-object',
+                'obj-type': 'controller-domain-name-server',
+                'parent-field': 'controller',
+                'doc': 'controller|ip-name-server',
+                'args': (
+                    {
+                        'tag'             : 'name-server',
+                        'field'           : 'ip',
+                        'type'            : 'ip-address-not-mask',
+                        'syntax-help'     : 'Enter the IP address of the domain name server',
+                        'doc'             : 'controller|ip-name-server-value',
+                    },
+                ),
+            },
+            ),
+            {
+                'field': 'default-gateway',
+                'command-type': 'config-with-default-gateway-check',
+                'obj-type': 'controller-node',
+                'doc': 'controller|ip-default-gateway',
+                'args': {
+                    'tag': 'default-gateway',
+                    'field': 'default-gateway',
+                    'type': 'ip-address-not-mask',
+                    'syntax-help': 'Enter the IP address of the default gateway',
+                    'default-for-no': '10.10.10.10',
+                    'doc': 'controller|ip-default-gateway-value',
+                },
+            },
+        ),
+    },
+}
+
+INTERFACE_IP_COMMAND_DESCRIPTION = {
+    'name'         : 'ip',
+    'mode'         : 'config-controller-if',
+    'command-type' : 'config-with-default-gateway-check',
+    'obj-type'     : 'controller-interface',
+    'short-help'   : 'Associate ip address with interface',
+    'doc'          : 'controller|ip',
+    'args'         : {
+        'choices'  : (
+            {
+                'fields': ('ip', 'netmask'),
+                'doc': 'controller|ip-address',
+                'args': (
+                    'address',
+                    {
+                        'choices': (
+                            (
+                                {
+                                    'field': 'ip',
+                                    'help-name': 'ip-address',
+                                    'type': 'ip-address-not-mask',
+                                    'syntax-help': 'Enter an IP or CIDR address',
+                                    'default-for-no' : '10.10.10.10',
+                                    'doc': 'controller|ip-address-value',
+                                },
+                                {
+                                    'field': 'netmask',
+                                    'type': 'netmask',
+                                    'syntax-help': 'Enter a netmask',
+                                    'default-for-no' : '0.0.0.0',
+                                    'doc': 'controller|ip-address-netmask',
+                                }
+                            ),
+                            {
+                                'field': 'cidr',
+                                'help-name': 'cidr-address',
+                                'type': 'cidr-range',
+                                'data-handler': 'split-cidr-data',
+                                'completion-text': None,
+                                'dest-ip': 'ip',
+                                'dest-mask': 'mask',
+                                'doc': 'controller|ip-address-cidr',
+                            }
+                        )
+                    },
+                ),
+            },
+            {
+                'args': {
+                    'tag': 'mode',
+                    'field': 'mode',
+                    'type': 'enum',
+                    'values': ('dhcp', 'static'),
+                    'syntax-help': 'Enter the IP address configuration mode, either "dhcp" or "static"',
+                    'default-for-no': 'static',
+                    'doc': 'controller|ip-mode',
+                },
+            },
+        ),
+     }
+}
+
+NTP_COMMAND_DESCRIPTION = {
+    'name'        : 'ntp',
+    'mode'        : 'config-controller',
+    'short-help'  : 'Configure ntp for controller-node',
+    'command-type': 'config',
+    'obj-type'    : 'controller-node',
+    'doc'         : 'controller|ntp',
+    'doc-example' : 'controller|ntp-example',
+    'args': {
+        'tag'         : 'server',
+        'field'       : 'ntp-server',
+        'type'        : 'ip-address-or-domain-name',
+        'syntax-help' : 'Enter the IP address or domain name of the NTP server',
+        'short-help'  : 'Configure the NTP server name',
+        'default-for-no': 'xyz.com',
+        'completion' : 'complete-object-field',
+        'doc'        : 'controller|ntp-server',
+    }
+}
+
+LOGGING_COMMAND_DESCRIPTION = {
+    'name'        : 'logging',
+    'short-help'  : 'Configure logging (syslog) for controller-node',
+    'mode'        : 'config-controller',
+    'command-type': 'config',
+    'obj-type'    : 'controller-node',
+    'doc'         : 'controller|logging',
+    'doc-example' : 'controller|logging-example',
+    'args': {
+        'choices': (
+            {
+                'field'      : 'logging-enabled',
+                'token'      : 'on',
+                'type'       : 'boolean',
+                'short-help' : 'Enable remote logging',
+                'doc'        : 'controller|logging-enable',
+            },
+            (
+                {
+                    'token'           : 'server',
+                    'short-help'      : 'Set the remote syslog server name',
+                    'doc'             : 'controller|logging-server',
+                },
+                {
+                    'field'           : 'logging-server',
+                    'help-name'       : 'server-ip-or-domain',
+                    'type'            : 'ip-address-or-domain-name',
+                    'syntax-help'     : 'Enter the IP address or domain name of the syslog server',
+                    'completion'      : 'complete-object-field',
+                    'match-for-no'    : 'logging-server',
+                    'no-action'       : 'reset-fields',
+                },
+                {
+                    'field'      : 'logging-level',
+                    'tag'        : 'level',
+                    'short-help' : 'Set the logging level for remote syslog',
+                    'type'       : 'enum',
+                    'optional'   : True,
+                    'values'     : ('emerg', 'alert', 'crit', 'err',
+                                    'warning', 'notice', 'info', 'debug',
+                                    '0', '1', '2', '3', '4', '5', '6', '7'
+                                   ),
+                    'doc'        : 'controller|logging-level',
+                 }
+            ),
+        )
+    }
+}
+
+FIREWALL_COMMAND_DESCRIPTION = {
+    'name'         : 'firewall',
+    'short-help'   : 'Configure firewall rule for controller-node',
+    'command-type' : 'config-object',
+    'mode'         : 'config-controller-if',
+    'obj-type'     : 'firewall-rule',
+    'doc'          : 'controller|firewall',
+    'parent-field' : 'interface',
+    'args': (
+        # This arg/token is really just syntactic sugar for the command.
+        # There's no 'deny' value, because things are denied by default.
+        # Instead you just use a 'no' command to delete the firewall rule.
+        {
+            'token'      : 'allow',
+            'short-help' : 'Allow a given set of traffic',
+            'doc'        : 'controller|firewall-allow',
+        },
+        {
+            'field'           : 'src-ip',
+            'tag'             : 'from',
+            'type'            : 'ip-address',
+            'optional'        : True,
+            'optional-for-no' : True,
+            'match-for-no'    : True,
+            'doc'             : 'controller|firewall-src-ip',
+        },
+        {
+            'field'           : 'vrrp-ip',
+            'tag'             : 'local-ip',
+            'type'            : 'ip-address',
+            'optional'        : True,
+            'optional-for-no' : True,
+            'match-for-no'    : True,
+            'doc'             : 'controller|firewall-local-ip',
+        },
+        {
+            'choices'         : (
+                {
+                    'field'      : 'port',
+                    'type'       : 'enum',
+                    'short-help' : 'Configure rule for a specific service port',
+                    'doc'        : 'controller|firewall-port',
+                    'data'       : { 'proto' : 'tcp' },
+                    'values': {
+                        'openflow' : 6633,
+                        'web'      : 80,
+                        'ssl'      : 443,
+                        'ssh'      : 22
+                    },
+                    'match-for-no'    : True,
+                    'doc'             : 'controller|firewall-+',
+                },
+                (
+                    {
+                        'field'        : 'proto',
+                        'type'         : 'enum',
+                        'short-help'   : 'Configure rule for protocol (TCP, UDP)',
+                        'values'       : ('udp', 'tcp'),
+                        'doc'          : 'controller|firewall-+',
+                        'match-for-no' : True,
+                    },
+                    {
+                        'optional-for-no' : False,
+                        'choices': (
+                            {
+                                'field'      : 'port',
+                                'type'       : 'enum',
+                                'short-help' : 'Configure rule for a specific service port',
+                                'doc': 'controller|firewall-port',
+                                'values': {
+                                    'openflow' : 6633,
+                                    'web'      : 80,
+                                    'ssl'      : 443,
+                                    'ssh'      : 22
+                                },
+                                'match-for-no'    : True,
+                                'doc'             : 'controller|firewall-+',
+                            },
+                            {
+                                'field'           : 'port',
+                                'base-type'       : 'integer',
+                                'range'           : (0, 65535),
+                                'completion-text' : '0-65535',
+                                'doc'             : 'controller|firewall-port',
+                                'match-for-no'    : True,
+                            },
+                        )
+                    },
+                ),
+                {
+                    'field'        : 'proto',
+                    'type'         : 'enum',
+                    'short-help'   : 'Configure rule for protocol (TCP, UDP)',
+                    'values'       : 'vrrp',
+                    'doc'          : 'controller|firewall-+',
+                    'match-for-no' : True,
+                },
+            ),
+        },
+    )
+}
+
+MONTH_NAMES =  ('January', 'February', 'March', 'April', 'May', 'June',
+                'July', 'August', 'September', 'October', 'November', 'December')
+                           
+
+
+CLOCK_TIMEZONE_COMMAND_DESCRIPTION = {
+    'name'         : 'clock',
+    'mode'         : 'config-controller',
+    'short-help'   : 'Configure time zone',
+    'doc'          : 'controller|clock-timezone',
+    'doc-example'  : 'controller|clock-timezone-example',
+    'command-type' : 'config',
+    'obj-type'     : 'controller-node',
+    'args'         : {
+        'tag'            : 'timezone',
+        'field'          : 'time-zone',
+        'type'           : 'string',
+        'default-for-no' : 'UTC',
+        'completion'     : 'time-zone-completion',
+        'validation'     : 'time-zone-validation',
+        'syntax-help'    : 'Enter the time zone',
+        'short-help'     :  'Configure the time zone',
+    }
+}
+
+CLOCK_SET_COMMAND_DESCRIPTION = {
+    'name'         : 'clock',
+    'mode'         : 'config-controller',
+    'no-supported' : False,
+    'short-help'   : 'Set clock',
+    'doc'          : 'controller|clock-set',
+    'doc-example'  : 'controller|clock-set-example',
+    'command-type' : 'realtime',
+    'action'       : 'set-clock',
+    'args'         : (
+        {
+            'token'       : 'set',
+            'short-help'  : 'Set the current time and date'
+        },
+        {
+            'field'       : 'time',
+            'base-type'   : 'string',
+            'pattern'     : '^[0-9]{1,2}:[0-9]{1,2}:[0-9]{2}$',
+            'syntax-help' : 'Enter the time (HH:MM:SS)'
+        },
+        {
+            'field'       : 'day-of-month',
+            'base-type'   : 'integer',
+            'range'       : (1,31),
+            'syntax-help' : 'Enter the day of the month (1-31)'
+        },
+        {
+            'field'       : 'month',
+            'type'        : 'enum',
+            'values'      : MONTH_NAMES,
+            'syntax-help' : 'Enter the month (e.g. January, March)'
+        },
+        {
+            'field'       : 'year',
+            'base-type'   : 'integer',
+            'range'       : (0,10000),
+            'syntax-help' : 'Enter the year'
+        },
+    )
+}
+"""