Adding ONOS Segment Routing CLI files to new repo
diff --git a/cli/desc/version200/core.py b/cli/desc/version200/core.py
new file mode 100755
index 0000000..0e0f3c1
--- /dev/null
+++ b/cli/desc/version200/core.py
@@ -0,0 +1,2674 @@
+#
+# 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 run_config
+
+"""
+SHOW_RUNNING_CONFIG_COMMAND_DESCRIPTION = {
+ 'name' : 'show',
+ 'mode' : 'login',
+ 'short-help' : 'Show the current active configuration',
+ 'action' : 'legacy-cli',
+ 'no-supported' : False,
+ 'obj-type' : 'running-config',
+ 'doc' : 'running-config|show',
+ 'doc-example' : 'running-config|show-example',
+ 'args' : (
+ 'running-config',
+ run_config.running_config_command_choices,
+ )
+}
+
+SHOW_CLOCK_COMMAND_DESCRIPTION = {
+ 'name' : 'show',
+ 'mode' : 'login',
+ 'short-help' : 'Show the current date and time',
+ 'action' : 'display-rest',
+ 'no-supported' : False,
+ 'url' : 'system/clock/local',
+ 'rest-type' : 'dict-with-time|tz|year|month|day|hour|minute|second',
+ 'format' : 'system-clock',
+ 'doc' : 'clock|show',
+ 'doc-example' : 'clock|show-example',
+ 'args' : (
+ 'clock',
+ {
+ 'optional' : True,
+ 'field' : 'detail',
+ 'type' : 'enum',
+ 'values' : ('details'),
+ 'short-help' : 'Show more date/time information',
+ 'doc' : 'clock|show-format-details',
+ },
+ )
+}
+
+SHOW_CONFIG_COMMAND_DESCRIPTION = {
+ 'name' : 'show',
+ 'mode' : 'login',
+ 'short-help' : 'Show saved configs (ex: startup-config, etc)',
+ 'action' : 'legacy-cli',
+ 'obj-type' : 'config',
+ 'no-supported' : False,
+ 'doc' : 'config|show',
+ 'doc-example' : 'config|show-example',
+ 'args' : (
+ 'config',
+ {
+ 'optional' : True,
+ 'choices' : (
+ # <first> [ <version> ]
+ # <first> diff <second> [ version ]
+ ( # 1nd choice 'diff' <config> <config> [ version ]
+ {
+ 'optional' : False,
+ 'field' : 'first',
+ 'type' : 'config',
+ 'completion' : 'complete-config',
+ 'doc' : 'config|show-first',
+ },
+ {
+ 'optional' : False,
+ 'token' : 'diff',
+ # XXX implies config's aren't called 'diff'
+ },
+ {
+ 'optional' : False,
+ 'field' : 'second',
+ 'type' : 'config',
+ 'completion' : 'complete-config',
+ 'doc' : 'config|show-second',
+ },
+ {
+ 'optional' : True,
+ 'field' : 'version',
+ 'type' : 'string',
+ 'doc' : 'config|show-version',
+ },
+
+ ),
+ ( # 2st choice <name> [ version ]
+ {
+ 'optional' : False,
+ 'field' : 'config',
+ 'type' : 'config',
+ 'completion' : 'complete-config',
+ 'syntax-help' : 'Config file name',
+ 'doc' : 'config|show-single',
+ },
+ {
+ 'optional' : True,
+ 'field' : 'version',
+ 'type' : 'string',
+ 'doc' : 'config|show-version',
+ },
+ ),
+ )
+ }
+ )
+}
+
+SHOW_CONFIG_FILE_COMMAND_DESCRIPTION = {
+ 'name' : 'show',
+ 'mode' : 'login',
+ 'short-help' : 'Show a specific saved config file',
+ 'doc' : 'config-file|show',
+ 'doc-example' : 'config-file|show-example',
+ 'obj-type' : 'config-file',
+ 'action' : 'legacy-cli',
+ 'no-supported' : False,
+ 'args' : (
+ 'config-file',
+ {
+ 'optional' : True,
+ 'field' : 'config',
+ 'type' : 'config',
+ 'completion' : 'complete-config',
+ 'syntax-help' : 'Config file name',
+ }
+ ),
+}
+
+SHOW_TECH_SUPPORT_COMMAND_DESCRIPTION = {
+ 'name' : 'show',
+ 'mode' : 'login',
+ 'short-help' : 'Show tech-support, collect output of various commands',
+ 'doc' : 'tech-support|show',
+ 'doc-example' : 'tech-support|show-example',
+ 'obj-type' : 'tech-support',
+ 'action' : 'legacy-cli',
+ 'no-supported' : False,
+ 'args' : (
+ 'tech-support',
+ ),
+}
+
+SHOW_FLOW_ENTRY_COMMAND_DESCRIPTION = {
+ 'name' : 'show',
+ 'obj-type' : 'flow-entry',
+ 'short-help' : 'Show configured static flow-entries',
+ 'doc' : 'flow-entry|show',
+ 'doc-example' : 'flow-entry|show-example',
+ 'mode' : 'login',
+ 'command-type' : 'display-table',
+ 'args' : (
+ 'flow-entry',
+ {
+ 'field' : 'name',
+ 'optional' : True,
+ 'base-type' : 'identifier',
+ 'reserved' : [ 'switch' ],
+ 'completion' : 'complete-object-field',
+ },
+ {
+ 'field' : 'switch',
+ 'tag' : 'switch',
+ 'optional' : True,
+ 'type' : 'dpid',
+ 'completion' : 'complete-from-another',
+ 'other' : 'switches',
+ 'syntax-help' : 'switch dpid or alias',
+ 'short-help' : 'Show flow entries for a specific switch'
+ }
+
+ )
+}
+
+SHOW_FIREWALL_COMMAND_DESCRIPTION = {
+ 'name' : 'show',
+ 'obj-type' : 'firewall-rule',
+ 'short-help' : 'Show firewall rules for controller interfaces',
+ 'doc' : 'firewall-rule|show',
+ 'doc-example' : 'firewall-rule|show-example',
+ 'mode' : 'login',
+ 'command-type' : 'display-table',
+ 'args' : (
+ 'firewall-rule',
+ {
+ 'optional' : True,
+ 'tag' : 'controller',
+ 'field' : 'controller',
+ 'type' : 'string',
+ 'short-help': 'Show rules from a specific controller',
+ 'doc' : 'firewall-rule|show-controller',
+ },
+ {
+ 'optional' : True,
+ 'tag' : 'type',
+ 'field' : 'type',
+ 'type' : 'string',
+ 'short-help': 'Show rules with a specific rule type',
+ 'doc' : 'firewall-rule|show-type',
+ },
+ {
+ 'optional' : True,
+ 'tag' : 'number',
+ 'field' : 'number',
+ 'type' : 'integer',
+ 'short-help': 'Show rules with a specific rule number',
+ 'doc' : 'firewall-rule|show-number',
+ },
+ {
+ 'optional' : True,
+ 'tag' : 'port',
+ 'field' : 'port',
+ 'type' : 'integer',
+ 'short-help': 'Show rules with a specific port number',
+ 'doc' : 'firewall-rule|show-port',
+ },
+ {
+ 'optional' : True,
+ 'tag' : 'proto',
+ 'field' : 'proto',
+ 'type' : 'enum',
+ 'values' : ('tcp', 'udp', 'vrrp'),
+ 'short-help': 'Show rules with a specific IP protocol',
+ 'doc' : 'firewall-rule|show-proto',
+ },
+ {
+ 'optional' : True,
+ 'field' : 'src-ip',
+ 'tag' : 'src-ip',
+ 'type' : 'ip-address',
+ 'short-help' : 'Show rules with this src-ip configured',
+ 'doc' : 'firewall-rule|show-src-ip',
+ },
+ {
+ 'optional' : True,
+ 'field' : 'vrrp-ip',
+ 'tag' : 'local-ip',
+ 'type' : 'ip-address',
+ 'short-help' : 'Show rules with this src-ip configured',
+ 'doc' : 'firewall-rule|show-src-ip',
+ },
+ )
+}
+
+SHOW_THIS_COMMAND_DESCRIPTION = {
+ 'name' : 'show',
+ 'obj-type' : 'this',
+ 'mode' : 'config-*',
+ 'short-help' : 'Show the object associated with the current submode',
+ 'doc' : 'show-this',
+ 'doc-example' : 'show-this-example',
+ 'action' : 'legacy-cli',
+ 'no-supported' : False,
+ 'args' : (
+ 'this',
+ )
+}
+
+SHOW_SWITCH_CLUSTER_COMMAND_DESCRIPTION = {
+ 'name' : 'show',
+ 'mode' : 'login',
+ 'obj-type' : 'switch-cluster',
+ 'short-help' : 'Show groups of interconnected openflow switches',
+ 'doc' : 'switch-cluster|show',
+ 'doc-example' : 'switch-cluster|show-example',
+ 'command-type' : 'display-rest',
+ 'url' : 'realtimestatus/network/cluster/',
+ 'rest-type' : 'dict-of-list-of-cluster-id|[switches]',
+ 'format' : 'switch-cluster',
+ 'args' : (
+ {
+ 'token' : 'switch-cluster',
+ }
+ )
+}
+
+SHOW_EXTERNAL_PORTS_COMMAND_DESCRIPTION = {
+ 'name' : 'show',
+ 'mode' : 'login',
+ 'obj-type' : 'external-ports',
+ 'short-help' : 'Show switch ports connected to external L2 networks',
+ 'doc' : 'external-ports|show',
+ 'doc-example' : 'external-ports|show-example',
+ 'command-type' : 'display-rest',
+ 'url' : 'realtimestatus/network/externalports/',
+ 'rest-type' : 'dict-of-list-of-id|[ports]',
+ 'format' : 'external-ports',
+ 'args' : (
+ {
+ 'token' : 'external-ports',
+ }
+ )
+}
+
+
+SHOW_VERSION_COMMAND_DESCRIPTION = {
+ 'name' : 'show',
+ 'mode' : 'login',
+ 'short-help' : 'Show current build version number',
+ 'doc' : 'core|version',
+ 'doc-example' : 'core|version-example',
+ 'action' : 'display-rest',
+ 'no-supported' : False,
+ 'url' : 'system/version',
+ 'format' : 'version',
+ 'detail' : 'details',
+ 'args' : (
+ 'version',
+ )
+}
+
+
+SHOW_LOGGING_COMMAND_DESCRIPTION = {
+ 'name' : 'show',
+ 'mode' : 'login',
+ 'short-help' : 'Show various controller logs',
+ 'doc' : 'show-logging',
+ 'doc-example' : 'show-logging-example',
+ 'no-supported' : False,
+ 'obj-type' : 'logging',
+ 'args' : (
+ 'logging',
+ {
+ 'optional' : 'true',
+ 'args' : (
+ {
+ 'token' : 'controller',
+ },
+ {
+ 'choices' : (
+ {
+ 'field' : 'controller-node',
+ 'type' : 'enum',
+ 'values' : 'all',
+ },
+ {
+ 'field' : 'controller-node',
+ 'type' : 'identifier',
+ 'completion' : 'complete-from-another',
+ 'other' : 'controller-node|id',
+ 'data-handler' : 'alias-to-value',
+ }
+ ),
+ }
+ ),
+ },
+ {
+ 'field' : 'log-name',
+ 'type' : 'string',
+ 'completion' : 'complete-log-names',
+ 'doc' : 'show-logging-+',
+ 'action' : 'dump-log',
+ },
+ ),
+}
+
+SHOW_EVENT_HISTORY_COMMAND_DESCRIPTION = {
+ 'name' : 'show',
+ 'mode' : 'login',
+ 'short-help' : 'Show recent network or system events',
+ 'doc' : 'event-history|show',
+ 'doc-example' : 'event-history|show-example',
+ 'action' : 'legacy-cli',
+ 'no-supported' : False,
+ 'obj-type' : 'event-history',
+ 'args' : (
+ 'event-history',
+ {
+ 'field' : 'event',
+ 'type' : 'enum',
+ 'values' : (
+ # 'attachment-point', not currently available
+ # 'packet-in', not currently available
+ 'topology-link',
+ 'topology-switch',
+ 'topology-cluster',
+ ),
+ 'doc' : 'show-event-history-+',
+ },
+ {
+ 'optional' : True,
+ 'field' : 'count',
+ 'tag' : 'last',
+ 'base-type' : 'integer',
+ 'range' : (1,10000),
+ 'doc' : 'show-event-history-count',
+ }
+ ),
+}
+
+SHOW_FLOW_CACHE_COMMAND_DESCRIPTION = {
+ 'name' : 'show',
+ 'mode' : 'login',
+ 'short-help' : 'Show the contents of the controller flow cache',
+ 'doc' : 'flow-cache|show',
+ 'doc-example' : 'flow-cache|show-example',
+ 'action' : 'display-rest',
+ 'url' : 'flow-cache/vns/all/all',
+ 'rest-type' : 'dict-with-flows',
+ 'format' : 'flow-cache',
+ 'no-supported' : False,
+ #'obj-type' : 'flow-cache',
+ 'args' : (
+ 'flow-cache',
+ {
+ 'optional' : True,
+ 'choices' : (
+ (
+ {
+ 'optional' : False,
+ 'field' : 'application',
+ 'tag' : 'app',
+ 'type' : 'string',
+ 'short-help': 'Show the entries associated with a specific application',
+ 'doc' : 'flow-cache|show-application',
+ },
+ {
+ 'optional' : False,
+ 'field' : 'instance',
+ 'tag' : 'app-instance',
+ 'type' : 'string',
+ 'doc' : 'flow-cache|show-instance',
+ 'action' : 'display-rest',
+ 'url' : 'flow-cache/%(application)s/%(instance)s/all',
+ 'rest-type': 'dict-with-flows',
+ },
+ ),
+ {
+ 'field' : 'counters',
+ 'type' : 'enum',
+ 'values' : 'counters',
+ 'action' : 'display-rest',
+ 'url' : 'flow-cache/vns/all/counters',
+ 'format' : 'flow-cache-counters',
+ 'rest-type' : 'dict-with-counters|status',
+ 'detail' : 'details',
+ 'short-help': 'Show the counters for the flow cache',
+ 'doc' : 'flow-cache|show-counters',
+ },
+ )
+ }
+ ),
+}
+
+FEATURE_COMMAND_DESCRIPTION = {
+ 'name' : 'feature',
+ 'mode' : 'config',
+ 'short-help' : 'Enable features for controller',
+ 'doc' : 'feature',
+ 'doc-example' : 'feature-example',
+ 'command-type' : 'config',
+ 'obj-type' : 'feature',
+ 'args': {
+ 'choices': (
+ {
+ 'token' : 'vns',
+ 'short-help' : 'Enable the VNS feature',
+ 'doc' : 'feature-vns',
+ 'action' : (
+ {
+ 'proc' : 'write-object',
+ 'data' : {
+ # The primary key ('id') must be present to
+ # read the old row value, and update items,
+ # otherwise a 'new' row is written with default
+ # values
+
+ 'id' : 'feature',
+ 'netvirt-feature' : True,
+ },
+ },
+ {
+ 'proc' : 'wait-for-controller',
+ },
+ ),
+ 'no-action' : (
+ {
+ 'proc' : 'write-object',
+ 'data' : {
+ 'id' : 'feature',
+ 'netvirt-feature' : False ,
+ },
+ },
+ {
+ 'proc' : 'wait-for-controller',
+ },
+ )
+ },
+ {
+ 'token' : 'flow-pusher',
+ 'short-help' : 'Enable the static flow pusher feature',
+ 'doc' : 'feature-flow-pusher',
+ 'action' : (
+ {
+ 'proc' : 'write-object',
+ 'data' : {
+ 'id' : 'feature',
+ 'static-flow-pusher-feature' : True,
+ },
+ },
+ {
+ 'proc' : 'wait-for-controller',
+ },
+
+ ),
+ 'no-action' : (
+ {
+ 'proc' : 'write-object',
+ 'data' : {
+ 'id' : 'feature',
+ 'static-flow-pusher-feature' : False,
+ },
+ },
+ {
+ 'proc' : 'wait-for-controller',
+ },
+ )
+ },
+ {
+ 'token' : 'performance-monitor',
+ 'short-help' : 'Enable the performance monitor feature',
+ 'doc' : 'feature-performance-monitor',
+ 'action' : (
+ {
+ 'proc' : 'write-object',
+ 'data' : {
+ 'id' : 'feature',
+ 'performance-monitor-feature' : True,
+ },
+ },
+ {
+ 'proc' : 'wait-for-controller',
+ },
+ ),
+ 'no-action' : (
+ {
+ 'proc' : 'write-object',
+ 'data' : {
+ 'id' : 'feature',
+ 'performance-monitor-feature' : False,
+ },
+ },
+ {
+ 'proc' : 'wait-for-controller',
+ },
+ )
+ },
+ ),
+ },
+}
+
+
+SHOW_FEATURE_COMMAND_DESCRIPTION = {
+ 'name' : 'show',
+ 'mode' : 'login',
+ 'short-help' : 'Show enabled and disabled features',
+ 'doc' : 'show-feature',
+ 'doc-example' : 'show-feature-example',
+ 'command-type' : 'display-table',
+ 'obj-type' : 'feature',
+ 'data' : { 'id' : 'feature' },
+ 'args' : (
+ 'feature',
+ )
+}
+
+
+VERSION_COMMAND_DESCRIPTION = {
+ 'name' : 'version',
+ 'no-supported' : False,
+ 'short-help' : 'Move to a specific version of command syntax',
+ 'doc' : 'core|version',
+ 'doc-example' : 'core|version-example',
+ 'mode' : 'config*',
+ 'action' : 'version',
+ 'args': {
+ 'field' : 'version',
+ 'type' : 'string',
+ 'completion' : 'description-versions'
+ }
+}
+
+"""
+CLEAR_COMMAND_DESCRIPTION = {
+ 'name' : 'clearterm',
+ 'no-supported' : False,
+ 'short-help' : 'Clears and resets the terminal screen',
+ 'doc' : 'clearterm',
+ 'doc-example' : 'clearterm-example',
+ 'mode' : 'login',
+ 'action' : 'clearterm',
+ 'args' : {}
+}
+"""
+
+COPY_COMMAND_DESCRIPTION = {
+ 'name' : 'copy',
+ 'no-supported' : False,
+ 'short-help' : 'Copy configs to other configs',
+ 'doc' : 'copy|copy',
+ 'doc-example' : 'copy|copy-example',
+ 'mode' : 'enable',
+ 'action' : 'legacy-cli',
+ 'obj-type' : 'copy',
+ 'args': (
+ {
+ 'choices' : (
+ {
+ 'field' : 'source',
+ 'type' : 'config',
+ 'completion' : 'complete-config-copy',
+ 'help-name' : 'source specifier',
+ 'doc' : 'copy|copy-source',
+ },
+ ),
+ },
+ {
+ 'optional': True,
+ 'choices' : (
+ {
+ 'field' : 'dest',
+ 'type' : 'config',
+ 'completion' : 'complete-config-copy',
+ 'help-name' : 'destination specifier',
+ 'doc' : 'copy|copy-dest',
+ },
+ )
+ },
+ )
+}
+
+
+WRITE_COMMAND_DESCRIPTION = {
+ 'name' : 'write',
+ 'no-supported' : False,
+ 'short-help' : 'Write config to memory or terminal, or clear',
+ 'doc' : 'core|write',
+ 'doc-example' : 'core|write-example',
+ 'mode' : 'enable',
+ 'action' : 'legacy-cli',
+ 'obj-type' : 'write',
+ 'args': (
+ {
+ 'field' : 'source',
+ 'type' : 'enum',
+ 'values' : {'terminal' : 'running-config'},
+ 'short-help' : 'Show the current active configuration',
+ 'doc' : 'core|write-terminal',
+ 'action' : 'legacy-cli',
+ 'obj-type' : 'copy',
+ 'doc-example' : 'write-source-+',
+ },
+ ),
+}
+
+WRITE_ERASE_COMMAND_DESCRIPTION = {
+ 'name' : 'write',
+ 'no-supported' : False,
+ 'mode' : 'enable',
+ 'args' : (
+ {
+ 'field' : 'erase',
+ 'type' : 'enum',
+ 'values' : ('erase'),
+ 'short-help' : 'Erase settings and restore to factory defaults',
+ 'doc' : 'core|factory-default',
+ }
+ ),
+ 'action' : (
+ {
+ 'proc' : 'factory-default',
+ },
+ )
+}
+"""
+ENABLE_SUBMODE_COMMAND_DESCRIPTION = {
+ 'name' : 'enable',
+ 'mode' : 'login',
+ 'no-supported' : False,
+ 'help' : 'Enter enable mode',
+ 'short-help' : 'Enter enable mode',
+ 'doc' : 'enable',
+ 'doc-example' : 'enable-example',
+ 'command-type' : 'config-submode',
+ 'obj-type' : None,
+ 'parent-field' : None,
+ 'submode-name' : 'enable',
+ 'args' : (),
+}
+
+CONFIGURE_SUBMODE_COMMAND_DESCRIPTION = {
+ 'name' : 'configure',
+ 'mode' : 'enable',
+ 'no-supported' : False,
+ 'help' : 'Enter configure mode',
+ 'short-help' : 'Enter configure mode',
+ 'doc' : 'config',
+ 'doc-example' : 'config-example',
+ 'command-type' : 'config-submode',
+ 'obj-type' : None,
+ 'parent-field' : None,
+ 'submode-name' : 'config',
+ 'args' : {
+ 'token' : 'terminal',
+ 'optional' : 'true',
+ },
+}
+"""
+DEBUG_CLI_COMMAND_DESCRIPTION = {
+ 'name' : 'debug',
+ 'mode' : ['login', 'enable', 'config*'],
+ 'short-help' : 'Manage various cli debugging features',
+ 'doc' : 'debug|debug-cli',
+ 'doc-example' : 'debug|debug-cli-example',
+ 'args' : {
+ 'choices' : (
+ {
+ 'token' : 'cli',
+ 'action' : 'cli-set',
+ 'no-action' : 'cli-unset',
+ 'variable' : 'debug',
+ 'short-help' : 'Display more detailed information on errors',
+ 'doc' : 'debug|cli',
+ },
+ {
+ 'token' : 'cli-backtrace',
+ 'action' : 'cli-set',
+ 'no-action' : 'cli-unset',
+ 'variable' : 'cli-backtrace',
+ 'short-help' : 'Display backtrace information on errors',
+ 'doc' : 'debug|cli-backtrace',
+ },
+ {
+ 'token' : 'cli-batch',
+ 'action' : 'cli-set',
+ 'no-action' : 'cli-unset',
+ 'variable' : 'cli-batch',
+ 'short-help' : 'Disable any prompts to allow simpler batch processing',
+ 'doc' : 'debug|cli-batch',
+ },
+ {
+ 'token' : 'description',
+ 'action' : 'cli-set',
+ 'no-action' : 'cli-unset',
+ 'variable' : 'description',
+ 'short-help' : 'Display verbose debug information while processing commands',
+ 'doc' : 'debug|description',
+ },
+ (
+ {
+ 'token' : 'rest',
+ 'action' : 'cli-set',
+ 'no-action' : 'cli-unset',
+ 'variable' : 'rest',
+ 'short-help' : 'Display URLs of any information retrieved via REST',
+ 'doc' : 'debug|rest',
+ },
+ {
+ 'optional' : True,
+ 'optional-for-no' : True,
+ 'choices' : (
+ {
+ 'field' : 'detail',
+ 'type' : 'enum',
+ 'values' : ('details', 'brief'),
+ 'short-help' : 'Display both URLs and returned content for REST requests',
+ 'doc' : 'debug|debug-cli-rest-format',
+ },
+ {
+ 'field' : 'record',
+ 'tag' : 'record',
+ 'type' : 'string',
+ 'short-help' : 'record rest api activitiy',
+ },
+ ),
+ },
+ ),
+ {
+ 'token' : 'python',
+ 'action' : 'shell-command',
+ 'command' : 'python',
+ 'short-help' : 'Enter a python shell',
+ 'doc' : 'debug|python',
+ },
+ {
+ 'token' : 'bash',
+ 'action' : 'shell-command',
+ 'command' : 'bash',
+ 'short-help' : 'Enter a bash shell',
+ 'doc' : 'debug|bash',
+ },
+ {
+ 'token' : 'cassandra-cli',
+ 'action' : 'shell-command',
+ 'command' : 'cassandra-cli',
+ 'short-help' : 'Enter a cassandra shell',
+ 'doc' : 'debug|assandra-cli',
+ },
+ {
+ 'token' : 'netconfig',
+ 'action' : 'shell-command',
+ 'command' : 'netconfig',
+ 'short-help' : 'Enter a netconfig shell',
+ 'doc' : 'debug|netconfig',
+ },
+ # tcpdump requires that the 'tail' of the debug command be tcpdump syntax,
+ # but that would mean describing the complete tcpdump syntax here, and parsing it
+ # {
+ # 'token' : 'tcpdump',
+ # 'action' : 'shell-command',
+ # 'command' : '/opt/sdnplatform/sys/bin/bscnetconfig',
+ # },
+ )
+ }
+}
+
+
+HA_CONFIG_CLI_COMMAND_DESCRIPTION = {
+ 'name' : 'ha',
+ 'short-help' : 'Configure high availability',
+ 'doc' : 'ha|ha-vrrp',
+ 'doc-example' : 'ha|ha-vrrp-example',
+ 'mode' : 'config*',
+ 'feature' : 'ha',
+ 'args' : {
+ 'choices' : (
+ {
+ 'field' : 'cluster-number',
+ 'tag' : 'cluster-number',
+ 'base-type' : 'integer',
+ 'range' : (1, 255),
+ 'completion-text' : '1-255',
+ 'syntax-help' : "Enter a small integer (1-255) to distinguish different controller clusters",
+ 'short-help' : 'Set the VRRP cluster number',
+ 'doc' : 'ha|ha-cluster-number',
+ 'obj-type' : 'global-config',
+ 'obj-id' : 'global',
+ 'default-for-no' : 1,
+ 'action' : 'write-fields-explicit',
+ 'no-action' : 'reset-fields-explicit',
+ },
+ )
+ }
+}
+
+HA_CLI_COMMAND_DESCRIPTION = {
+ 'name' : 'ha',
+ 'no-supported' : False,
+ 'short-help' : 'Perform actions related to high availability',
+ 'doc' : 'ha|ha-failover',
+ 'doc-example' : 'ha|ha-failover-example',
+ 'feature' : 'ha',
+ 'mode' : 'enable',
+ 'args' : {
+ 'choices' : (
+ {
+ 'token' : 'failover',
+ 'short-help': 'Trigger a failure of the current node',
+ 'path' : 'system/ha/failback',
+ 'action' : (
+ {
+ 'proc' : 'confirm',
+ 'prompt' : 'Fallback will change the HA operating mode,'
+ 'enter "yes" (or "y") to continue:',
+ },
+ {
+ 'proc' : 'rest-post-data',
+ },
+ ),
+ },
+ (
+ {
+ 'token' : 'provision',
+ },
+ {
+ 'field' : 'ip',
+ 'type' : 'ip-address-not-mask',
+ 'action' : (
+ {
+ 'proc' : 'confirm',
+ 'prompt' : "Confirm to continue addition of new ip, "
+ 'enter "yes" (or "y") to continue:',
+ },
+ {
+ 'proc' : 'rest-post-data',
+ 'path' : 'system/ha/provision'
+ },
+ ),
+ },
+ ),
+ (
+ {
+ 'token' : 'decommission',
+ },
+ {
+ 'action' : 'controller-decommission',
+ 'obj-type' : 'controller-node',
+ 'optional' : False,
+ 'field' : 'id',
+ 'type' : 'identifier',
+ 'completion' : 'complete-alias-choice',
+ 'data-handler' : 'alias-to-value',
+ 'doc' : 'controller|controller-node-name',
+ },
+ ),
+ )
+ }
+}
+
+
+SHOW_HA_COMMAND_DESCRIPTION = {
+ 'name' : 'show',
+ 'no-supported' : False,
+ 'short-help' : 'Show high availability configuration',
+ 'doc' : 'ha|show',
+ 'doc-example' : 'ha|show-example',
+ 'feature' : 'ha',
+ 'mode' : 'login',
+ 'obj-type' : 'global-config',
+ 'command-type' : 'display-table',
+ 'action' : (
+ {
+ 'proc' : 'display-table',
+ },
+ # borrowed from controller-node, would be better to
+ # have this in common code
+ {
+ 'proc' : 'query-table',
+ 'obj-type' : 'controller-node',
+ },
+ {
+ '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',
+ 'title' : '\nController Nodes\n',
+ 'format' : 'controller-node',
+ }
+ ),
+ 'args' : (
+ 'ha',
+ {
+ 'optional' : True,
+ 'field' : 'detail',
+ 'type' : 'enum',
+ 'values' : 'details',
+ 'doc' : 'format|details',
+ },
+
+ )
+}
+
+BOOT_COMMAND_DESCRIPTION = {
+ 'name' : 'boot',
+ 'no-supported' : False,
+ 'short-help' : 'Configure system boot options',
+ 'doc' : 'core|boot',
+ 'doc-example' : 'core|boot-example',
+ 'mode' : 'enable',
+ 'args' : (
+ {
+ 'field' : 'factory-default',
+ 'type' : 'enum',
+ 'values' : ('factory-default'),
+ 'short-help' : 'Erase settings and restore to factory defaults',
+ 'doc' : 'core|factory-default',
+ }
+ ),
+ 'action' : (
+ {
+ 'proc' : 'factory-default',
+ },
+ )
+}
+
+RELOAD_COMMAND_DESCRIPTION = {
+ 'name' : 'reload',
+ 'no-supported' : False,
+ 'short-help' : 'Reload and reboot',
+ 'doc' : 'core|reload',
+ 'doc-example' : 'core|reload-example',
+ 'mode' : 'enable',
+ 'args' : (),
+ 'obj-type' : 'reload',
+ 'action' : (
+ {
+ 'proc' : 'confirm',
+ 'prompt' : 'Confirm Reload (yes to continue) '
+ },
+ # XXX what about checking to see if the running-config
+ # has been copied to the startup config?
+ {
+ 'proc' : 'query-rest',
+ 'url' : 'system/reload'
+ },
+ )
+}
+
+UPGRADE_COMMAND_DESCRIPTION = {
+ 'name' : 'upgrade',
+ 'no-supported' : False,
+ 'short-help' : 'Manage the controller upgrade process',
+ 'doc' : 'core|upgrade',
+ 'doc-example' : 'core|upgrade-example',
+ 'mode' : 'enable',
+ 'args' : (
+ {
+ 'optional' : True,
+ 'type' : 'enum',
+ 'field' : 'force',
+ 'values' : ('force'),
+ 'short-help' : 'Ignore validation errors and upgrade anyway',
+ 'doc' : 'core|upgrade-force'
+ },
+ {
+ 'optional' : True,
+ 'type' : 'enum',
+ 'field' : 'details',
+ 'values' : ('details'),
+ 'short-help' : 'Display more information on the upgrade',
+ 'doc' : 'core|upgrade-details'
+ }
+ ),
+ 'obj-type' : 'upgrade',
+ 'action' : 'controller-upgrade',
+}
+
+UPGRADE_ABORT_COMMAND_DESCRIPTION = {
+ 'name' : 'upgrade',
+ 'no-supported' : False,
+ 'short-help' : 'Manage the controller upgrade process',
+ 'mode' : 'enable',
+ 'doc-example' : 'core|upgrade-abort-example',
+ 'obj-type' : 'upgrade',
+ 'args' : (
+ {
+ 'type' : 'enum',
+ 'field' : 'abort',
+ 'values' : 'abort',
+ 'short-help' : 'Abort an upgrade already installed',
+ 'doc' : 'core|upgrade-abort'
+ },
+ ),
+ 'action' : (
+ {
+ 'proc' : 'confirm',
+ 'prompt' : 'Confirm to abort an upgrade already installed'\
+ ' onto second partition\n'\
+ 'enter "yes" (or "y") to continue:',
+ },
+ {
+ 'proc' : 'rest-post-data',
+ 'path' : 'system/upgrade/abort'
+ },
+ )
+}
+
+ROLLBACK_COMMAND_DESCRIPTION = {
+ 'name' : 'rollback',
+ 'no-supported' : False,
+ 'short-help' : 'rollback cluster to specified config',
+ 'mode' : 'enable',
+ 'doc-example' : 'core|rollback-config-example',
+ 'obj-type' : 'rollback',
+ 'args' : (
+ {
+ 'type' : 'enum',
+ 'field' : 'dir',
+ 'short-help' : 'source directory',
+ 'values' : ('images://', 'saved-configs://'),
+ },
+ {
+ 'field' : 'file',
+ 'type' : 'string',
+ 'short-help' : 'config file name',
+ },
+ ),
+ 'action' : 'controller-config-rollback'
+}
+
+
+command.add_action('implement-connect', command.sdnsh.implement_connect,
+ {'kwargs': {'data' : '$data',}})
+
+
+CONNECT_COMMAND_DESCRIPTION = {
+ 'name' : 'connect',
+ 'mode' : 'login',
+ 'no-supported' : False,
+ 'short-help' : 'Connect to a controller\'s REST API',
+ 'doc' : 'connect|connect',
+ 'doc-example' : 'connect|connect-example',
+ 'obj-type' : 'controller-node',
+ 'action' : 'implement-connect',
+ 'args' : (
+ {
+ 'choices': (
+ {
+ 'field' : 'controller-id',
+ 'type' : 'obj-type',
+ 'completion' : 'complete-alias-choice',
+ 'completion-text' : 'controller id or alias',
+ 'short-help' : 'controller-id',
+ 'doc' : 'connect|connect-id',
+ },
+ {
+ 'field' : 'ip-address',
+ 'type' : 'ip-address',
+ 'completion' : 'complete-alias-choice',
+ 'completion-text' : 'ip address',
+ 'short-help' : 'controller-id',
+ 'doc' : 'connect|connect-ip',
+ },
+ ),
+ },
+ {
+ 'field' : 'port',
+ 'tag' : 'port',
+ 'type' : 'integer',
+ 'range' : (1,65535),
+ 'optional' : True,
+ 'doc' : 'connect|connect-port'
+ },
+ )
+}
+
+command.add_action('implement-ping', command.sdnsh.implement_ping,
+ {'kwargs': {'data' : '$data',}})
+
+PING_COMMAND_DESCRIPTION = {
+ 'name' : 'ping',
+ 'mode' : 'login',
+ 'no-supported' : False,
+ 'short-help' : 'ping a switch or ip address',
+ 'doc' : 'ping|ping',
+ 'doc-example' : 'ping|ping-example',
+ 'obj-type' : 'switches',
+ 'action' : 'implement-ping',
+ 'args' : (
+ {
+ 'field' : 'count',
+ 'type' : 'integer',
+ 'tag' : 'count',
+ 'optional' : True,
+ 'completion-text' : 'ping count',
+ 'doc' : 'ping|ping-count'
+ },
+ {
+ 'field' : 'ip-address',
+ 'type' : 'resolvable-ip-address',
+ 'completion-text' : 'ip-address ping target',
+ 'other' : 'switches|dpid',
+ 'completion' : [
+ 'complete-alias-choice',
+ 'complete-from-another',
+ ],
+ 'data-handler' : 'alias-to-value',
+ 'doc' : 'types|resolvable-ip-address'
+ },
+ ),
+}
+
+
+command.add_action('implement-traceroute', command.sdnsh.implement_traceroute,
+ {'kwargs': {'data' : '$data',}})
+
+TRACEROUTE_COMMAND_DESCRIPTION = {
+ 'name' : 'traceroute',
+ 'mode' : 'login',
+ 'no-supported' : False,
+ 'short-help' : 'Determine the L3 path to some destination',
+ 'doc' : 'traceroute|traceroute',
+ 'doc-example' : 'traceroute|traceroute-example',
+ 'obj-type' : 'switches',
+ 'action' : 'implement-traceroute',
+ 'args' : (
+ {
+ 'field' : 'ip-address',
+ 'type' : 'resolvable-ip-address',
+ 'completion-text' : 'ip-address ping target',
+ 'other' : 'switches|dpid',
+ 'completion' : [
+ 'complete-alias-choice',
+ 'complete-from-another',
+ ],
+ 'data-handler' : 'alias-to-value',
+ 'doc' : 'types|resolvable-ip-address'
+ },
+ ),
+}
+
+SET_CLI_COMMAND_DESCRIPTION = {
+ 'name' : 'set',
+ 'mode' : 'login',
+ 'no-supported' : False,
+ 'short-help' : 'Manage CLI sessions settings',
+ 'doc' : 'set|set',
+ 'doc-example' : 'set|set-example',
+ 'action' : 'cli-set',
+ 'variable' : 'set',
+ 'args' : (
+ 'length',
+ {
+ 'choices' : (
+ {
+ 'field' : 'length',
+ 'base-type' : 'integer',
+ 'range' : (0,512),
+ },
+ {
+ 'field' : 'length',
+ 'type' : 'enum',
+ 'values' : 'term',
+ },
+ )
+ },
+ ),
+}
+#"""
+#
+# FORMATS
+#
+
+import fmtcnv
+
+"""
+GLOBAL_CONFIG_FORMAT = {
+ 'global-config' : {
+ 'field-orderings' : {
+ 'details' : [
+ 'cluster-name',
+ 'cluster-number',
+ 'ha-enabled',
+ ],
+ 'default' : [
+ 'cluster-name',
+ 'cluster-number',
+ 'ha-enabled',
+ ],
+ },
+
+ 'fields' : {
+ 'cluster-name' : {
+ 'verbose-name' : 'Cluster Name',
+ },
+ 'cluster-number' : {
+ 'verbose-name' : 'Cluster Number',
+ },
+ 'ha-enabled' : {
+ 'verbose-name' : 'HA Enabled',
+ },
+ },
+ },
+}
+
+
+FEATURE_FORMAT = {
+ 'feature' : {
+ 'field-orderings' : {
+ 'default' : [
+ 'netvirt-feature',
+ 'static-flow-pusher-feature',
+ 'performance-monitor-feature',
+ ],
+ },
+
+ 'fields' : {
+ 'netvirt-feature' : { 'verbose-name' : 'VNS Feature',
+ 'formatter' : fmtcnv.replace_boolean_with_enable_disable,
+ },
+ 'static-flow-pusher-feature' : { 'verbose-name' : 'Static Flow Pusher Feature',
+ 'formatter' : fmtcnv.replace_boolean_with_enable_disable,
+ },
+ 'performance-monitor-feature' : { 'verbose-name' : 'Performance Monitoring Feature',
+ 'formatter' : fmtcnv.replace_boolean_with_enable_disable,
+ },
+ }
+ },
+}
+
+LINK_FORMAT = {
+ 'link' : {
+ 'field-orderings' : {
+ 'default' : [ 'Idx', 'src-switch', 'src-port', 'src-port-state',
+ 'Idx', 'dst-switch', 'dst-port', 'dst-port-state', 'link-type' ]
+ },
+ 'fields' : {
+ 'src-port' : { 'formatter' : fmtcnv.decode_openflow_port_src_switch },
+ 'dst-port' : { 'formatter' : fmtcnv.decode_openflow_port_dst_switch },
+ 'src-switch' : { 'formatter' : fmtcnv.replace_switch_with_alias },
+ 'dst-switch' : { 'formatter' : fmtcnv.replace_switch_with_alias },
+ 'src-port-state' : { 'formatter' : fmtcnv.decode_port_state },
+ 'dst-port-state' : { 'formatter' : fmtcnv.decode_port_state },
+ 'link-type' : { 'verbose-name' : 'Link Type',
+ },
+ }
+ },
+}
+
+CONFIG_FORMAT = {
+ 'config' : {
+ 'field-orderings' : {
+ 'default' : ['Idx', 'name', 'length', 'version', 'timestamp' ],
+ },
+ 'fields' : {
+ 'name' : { 'primary_key': True
+ },
+ 'version' : {
+ },
+ 'length' : {
+ },
+ 'timestamp': {
+ },
+ },
+ },
+}
+
+
+TEST_PKTIN_ROUTE_FORMAT = {
+ 'test-pktin-route' : {
+ 'field-orderings' : {
+ 'default' : ['Idx', 'cluster', 'hop', 'dpid', 'inPort', 'outPort'],
+ },
+ 'fields' : {
+ 'cluster' : {'verbose-name' : 'Cluster',
+ 'formatter' : fmtcnv.print_cluster_id
+ },
+ 'hop' : {'verbose-name' : 'Hop'
+ },
+ 'dpid' : {'verbose-name' : 'Switch',
+ 'formatter' : fmtcnv.print_switch_and_alias,
+ },
+ 'inPort' : {'verbose-name' : 'Input-Intf',
+ 'formatter' : fmtcnv.decode_openflow_port_dpid,
+ },
+ 'outPort': {'verbose-name': 'Output-Intf',
+ 'formatter' : fmtcnv.decode_openflow_port_dpid,
+ },
+ },
+ },
+}
+
+
+PERFORMANCE_DATA_FORMAT = {
+ 'performance-data' : {
+ 'field-orderings' : {
+ 'default' : ['BktNo', 'StartTime', 'CompName', 'Pkts', 'Avg',
+ 'Min', 'Max', 'StdDev'],
+ },
+ 'fields' : {
+ 'Pkts' : {'verbose-name': 'Pkts*'
+ },
+ 'CompName' : {'verbose-name' : 'Component'
+ },
+ 'StartTime': {'verbose-name' : 'Start Time'
+ }
+ }
+ },
+}
+
+
+FLOW_CACHE_COUNTERS_FORMAT = {
+ 'flow-cache-counters' : {
+ 'field-orderings' : {
+ 'details' : [
+ 'applName',
+ 'maxFlows',
+ 'activeCnt',
+ 'inactiveCnt',
+ 'addCnt',
+ 'delCnt',
+ 'activatedCnt',
+ 'deactivatedCnd',
+ 'cacheHitCnt',
+ 'missCnt',
+ 'flowModRemovalMsgLossCnt',
+ 'notStoredFullCnt',
+ 'fcObjFreedCnt',
+ 'unknownOperCnt',
+ 'flowCacheAlmostFull',
+ ],
+
+ },
+
+ 'fields' : {
+ 'applName' : { 'verbose-name' : 'Application name',
+ },
+ 'maxFlows' : { 'verbose-name' : 'Max flow cache size',
+ },
+ 'activeCnt' : { 'verbose-name' : 'Active entries',
+ },
+ 'inactiveCnt' : { 'verbose-name' : 'Inactive entries',
+ },
+ 'addCnt' : { 'verbose-name' : 'Add operations',
+ },
+ 'delCnt' : { 'verbose-name' :'Del operations',
+ },
+ 'activatedCnt' : { 'verbose-name' : 'Activated',
+ },
+ 'deactivatedCnd' : { 'verbose-name' : 'Deactivated',
+ },
+ 'cacheHitCnt' : { 'verbose-name' : 'Cache hits',
+ },
+ 'missCnt' : { 'verbose-name' : 'Cache misses',
+ },
+ 'flowModRemovalMsgLossCnt' : { 'verbose-name' : 'Lost removal messages',
+ },
+ 'notStoredFullCnt' : { 'verbose-name' : 'Not stored; cache full',
+ },
+ 'fcObjFreedCnt' : { 'verbose-name' : 'Free count',
+ },
+ 'unknownOperCnt' : { 'verbose-name' : 'Unknown operations',
+ },
+ 'flowCacheAlmostFull' : { 'verbose-name' : 'Cache near full',
+ },
+ },
+ },
+}
+
+
+FLOW_CACHE_FORMAT = {
+ 'flow-cache' : {
+ 'field-orderings' : {
+ 'default': ['Idx', 'Appl', 'AppInst', 'VLAN', 'PCP', 'SrcMAC',
+ 'DestMAC', 'EtherType', 'SrcIPAddr', 'DstIPAddr',
+ 'Protocol', 'TOS', 'SrcPort', 'DstPort',
+ 'Source-Switch', 'InputPort', 'Wildcards', 'Action',
+ 'Cookie', 'State', 'Time', 'SC'],
+ },
+ 'fields' : {
+ 'VLAN' : {'formatter' : fmtcnv.convert_signed_short_for_vlan
+ },
+ 'Source-Switch' : {'formatter' : fmtcnv.print_switch_and_alias
+ },
+ 'InputPort' : {'formatter' : fmtcnv.decode_openflow_port_source_switch
+ },
+ 'SrcMAC' : {'formatter' : fmtcnv.print_host_and_alias
+ },
+ 'DestMAC' : {'formatter' : fmtcnv.print_host_and_alias
+ },
+ 'EtherType' : {'formatter' : fmtcnv.decode_ether_type
+ },
+ 'Protocol' : {'formatter' : fmtcnv.decode_network_protocol
+ },
+ 'SrcPort' : {'formatter' : fmtcnv.decode_src_port
+ },
+ 'DstPort' : {'formatter' : fmtcnv.decode_dst_port
+ },
+ 'Cookie' : {'formatter' : fmtcnv.decode_flow_cookie
+ },
+ 'Time' : {'formatter' : fmtcnv.timestamp_to_local_timestr
+ },
+ }
+ },
+}
+
+
+EV_HIST_TOPOLOGY_FORMAT = {
+ 'ev-hist-topology-switch' : {
+ 'field-orderings' : {
+ 'default' : ['Idx', 'Time', 'Switch' , 'IpAddr', 'Port',
+ 'State', 'Action', 'Reason' ],
+ },
+ 'fields' : {
+ 'Time' : {
+ 'verbose-name' : 'Time'
+ },
+ 'Switch' : {'verbose-name' : 'Switch',
+ 'formatter' : fmtcnv.print_switch_and_alias
+ },
+ 'Port' : {'verbose-name' : 'Port'
+ },
+ 'IpAddr' : {'verbose-name' : 'IpAddr.'
+ },
+ 'Action' : {'verbose-name' : 'Action'
+ },
+ 'Reason' : {'verbose-name' : 'Reason'
+ },
+ 'State' : {'verbose-name' : 'State'
+ },
+ }
+ },
+}
+
+
+
+EV_HIST_TOPOLOGY_CLUSTER_FORMAT = {
+ 'ev-hist-topology-cluster' : {
+ 'field-orderings' : {
+ 'default' : ['Idx', 'Time', 'Switch' , 'OldClusterId',
+ 'NewClusterId', 'State', 'Action', 'Reason' ],
+ },
+ 'fields' : {
+ 'Time' : {
+ 'verbose-name' : 'Time'
+ },
+ 'Switch' : {'verbose-name' : 'Switch',
+ 'formatter' : fmtcnv.print_switch_and_alias
+ },
+ 'Action' : {'verbose-name' : 'Action'
+ },
+ 'Reason' : {'verbose-name' : 'Reason'
+ },
+ 'State' : {'verbose-name' : 'State'
+ },
+ }
+ },
+}
+
+
+EV_HIST_TOPOLOGY_LINK_FORMAT = {
+ 'ev-hist-topology-link' : {
+ 'field-orderings' : {
+ 'default' : ['Idx', 'Time', 'Source-Switch' , 'Dest-Switch',
+ 'SrcPort', 'DstPort',
+ 'SrcPortState', 'DstPortState',
+ 'State', 'Action', 'Reason' ],
+ },
+ 'fields' : {
+ 'Time' : {
+ 'verbose-name' : 'Time'
+ },
+ 'Source-Switch' : {'verbose-name' : 'Source-Switch',
+ 'formatter' : fmtcnv.print_switch_and_alias
+ },
+ 'Dest-Switch' : {'verbose-name' : 'Dest-Switch',
+ 'formatter' : fmtcnv.print_switch_and_alias
+ },
+ 'SrcPort' : {'verbose-name' : 'SrcPort',
+ 'formatter' : fmtcnv.decode_openflow_port_source_switch
+ },
+ 'DstPort' : {'verbose-name' : 'DstPort',
+ 'formatter' : fmtcnv.decode_openflow_port_dest_switch
+ },
+ 'SrcPortState' : {'verbose-name' : 'SrcPrtSt'
+ },
+ 'DstPortState' : {'verbose-name' : 'DstPrtSt'
+ },
+ 'Action' : {'verbose-name' : 'Action'
+ },
+ 'Reason' : {'verbose-name' : 'Reason'
+ },
+ 'State' : {'verbose-name' : 'State'
+ },
+ }
+ },
+}
+
+
+EV_HIST_ATTACHMENT_POINT_FORMAT = {
+ 'ev-hist-attachment-point' : {
+ 'field-orderings' : {
+ 'default' : ['Idx', 'Time', 'Host', 'Switch' , 'Port', 'VLAN',
+ 'Action', 'Reason' ],
+ },
+ 'fields' : {
+ 'Time_ns' : {
+ 'verbose-name' : 'Time'
+ #'formatter' : fmtcnv.timestamp_ns_to_local_timestr
+ },
+ 'Host' : {'verbose-name' : 'Host',
+ 'formatter' : fmtcnv.print_host_and_alias
+ },
+ 'Switch' : {'verbose-name' : 'Switch',
+ 'formatter' : fmtcnv.print_switch_and_alias
+ },
+ 'Port' : {'verbose-name' : 'IF',
+ 'formatter' : fmtcnv.decode_openflow_port,
+ },
+ 'VLAN' : {'verbose-name' : 'VLAN'
+ },
+ 'Action' : {'verbose-name' : 'Action'
+ },
+ 'Reason' : {'verbose-name' : 'Reason'
+ },
+ }
+ },
+}
+
+
+EV_HIST_PACKET_IN_FORMAT = {
+ 'ev-hist-packet-in' : {
+ 'field-orderings' : {
+ 'default' : ['Idx', 'Time',
+ 'dataLayerSource',
+ 'dataLayerDestination',
+ 'dataLayerType',
+ 'dataLayerVirtualLan',
+ #'dataLayerVirtualLanPriorityCodePoint',
+ 'inputSwitch',
+ 'inputPort',
+ 'networkSource',
+ 'networkDestination',
+ #'networkSourceMaskLen',
+ #'networkDestinationMaskLen',
+ 'networkProtocol',
+ 'networkTypeOfService',
+ 'transportSource',
+ 'transportDestination',
+ #'Action', 'reason'
+ ],
+ },
+ 'fields' : {
+ 'Time' : {
+ 'verbose-name' : 'Time'
+ #'formatter' : fmtcnv.timestamp_ns_to_local_timestr
+ },
+ 'wildcards' : { 'verbose-name' : 'Wildcards',
+ 'formatter' : fmtcnv.convert_integer_to_bitmask
+ },
+ 'dataLayerSource' : { 'verbose-name' : 'Src MAC',
+ 'formatter' : fmtcnv.print_host_and_alias
+ },
+ 'dataLayerDestination' : { 'verbose-name' : 'Dst MAC',
+ 'formatter' : fmtcnv.print_host_and_alias
+ },
+ 'dataLayerType' : { 'verbose-name' : 'Eth Type',
+ 'formatter' : fmtcnv.decode_ether_type
+ },
+ 'dataLayerVirtualLan' : { 'verbose-name' : 'VLAN',
+ 'formatter' : fmtcnv.convert_signed_short_for_vlan
+ },
+ 'dataLayerVirtualLanPriorityCodePoint' : { 'verbose-name' : 'VLAN PCP'
+ },
+ 'inputSwitch' : { 'verbose-name' : 'Switch',
+ 'formatter' : fmtcnv.print_switch_and_alias
+ },
+ 'inputPort' : { 'verbose-name' : 'Port',
+ 'formatter' : fmtcnv.decode_openflow_port_inputSwitch
+ },
+ 'networkSource' : { 'verbose-name' : 'Src IP'
+ },
+ 'networkDestination' : { 'verbose-name' : 'Dst IP'
+ },
+ 'networkSourceMaskLen' : { 'verbose-name' : 'Src IP Bits'
+ },
+ 'networkDestinationMaskLen' : { 'verbose-name' : 'Dst IP Bits'
+ },
+ 'networkProtocol' : { 'verbose-name' : 'Proto.',
+ 'formatter' : fmtcnv.decode_network_protocol
+ },
+ 'networkTypeOfService' : { 'verbose-name' : 'TOS'
+ },
+ 'transportSource' : { 'verbose-name' : 'NwSPort',
+ 'formatter' : fmtcnv.decode_src_port
+ },
+ 'transportDestination' : { 'verbose-name' : 'NwDPort',
+ 'formatter' : fmtcnv.decode_dst_port
+ },
+ 'Action' : {'verbose-name' : 'Action'
+ },
+ 'Reason' : {'verbose-name' : 'Reason'
+ },
+ }
+ },
+}
+"""
+
+def realtime_flow_timeout(i, data=None):
+ return ('%s/%s' %
+ (fmtcnv.convert_signed_short_to_unsigned(data['hardTimeout']),
+ fmtcnv.convert_signed_short_to_unsigned(data['idleTimeout'])))
+
+REALTIME_FLOW_FORMAT = {
+ 'realtime_flow' : {
+ 'field-orderings' : {
+ 'default' : [
+ 'Idx', 'switch', 'cookie',
+ 'byteCount', 'packetCount',
+ 'actions', 'dataLayerSource', 'dataLayerDestination',
+ 'flow-brief',
+ ],
+ 'scoped' : [
+ 'Idx', 'cookie',
+ 'byteCount', 'packetCount',
+ 'actions', 'dataLayerSource', 'dataLayerDestination',
+ 'flow-brief',
+
+ ],
+ 'brief' : [ 'Idx', 'switch', 'cookie', 'dataLayerSource', 'dataLayerDestination',
+ 'networkSource', 'networkDestination', 'networkProtocol',
+ 'transportSource', 'transportDestination'],
+ 'default' : [ 'Idx', 'switch', 'byteCount', 'packetCount', 'durationSeconds',
+ 'cookie', 'inputPort', 'dataLayerSource', 'dataLayerDestination',
+ 'dataLayerType', 'networkSource', 'networkDestination', 'networkProtocol',
+ 'transportSource', 'transportDestination'],
+ 'scoped' : [ 'Idx', 'switch', 'byteCount', 'packetCount', 'durationSeconds',
+ 'cookie', 'inputPort', 'dataLayerSource', 'dataLayerDestination',
+ 'dataLayerType', 'networkSource', 'networkDestination', 'networkProtocol',
+ 'transportSource', 'transportDestination'],
+ 'details' : [ 'Idx', 'switch', 'byteCount', 'packetCount', 'durationSeconds',
+ 'cookie', 'hardTimeout', 'idleTimeout', 'priority', 'tableId', 'inputPort',
+ 'dataLayerSource', 'dataLayerDestination', 'dataLayerType', 'dataLayerVirtualLan',
+ 'dataLayerVirtualLanPriorityCodePoint', 'networkSource', 'networkDestination',
+ 'networkProtocol', 'transportSource', 'transportDestination',
+ 'networkTypeOfService', 'actions'],
+ 'vns_flow': [ 'Idx', 'dataLayerSource', 'dataLayerDestination', 'dataLayerVirtualLan', 'dataLayerType'],
+ 'summary' : [ 'Idx', 'vnsName', 'vnsFlowCnt', 'flowEntryCnt'],
+ },
+ 'fields': {
+ 'switch' : { 'verbose-name' : 'Switch',
+ 'formatter' : fmtcnv.replace_switch_with_alias
+ },
+ 'flow-brief' : {
+ 'verbose-name' : 'Match',
+ 'formatter' : fmtcnv.realtime_flow_brief,
+ },
+ 'flow-timeout' : {
+ 'verbose-name' : 'H/I',
+ 'formatter' : realtime_flow_timeout,
+ },
+ 'byteCount' : { 'verbose-name': 'Bytes',
+ 'primary_key':True
+ },
+ 'packetCount' : { 'verbose-name' : 'Packets'
+ },
+ 'cookie' : { 'verbose-name' : 'Author',
+ 'formatter' : fmtcnv.decode_flow_cookie,
+ },
+ 'durationSeconds' : { 'verbose-name' : 'Dur(s)'
+ },
+ 'durationNanoseconds' : { 'verbose-name' : 'Dur(ns)'
+ },
+ 'hardTimeout' : { 'verbose-name' : 'Hard Timeout',
+ 'formatter' : fmtcnv.convert_signed_short_to_unsigned
+ },
+ 'idleTimeout' : { 'verbose-name' : 'Idle Timeout',
+ 'formatter' : fmtcnv.convert_signed_short_to_unsigned
+ },
+ 'length' : { 'verbose-name' : 'Length'
+ },
+ 'priority' : { 'verbose-name' : 'Priority',
+ 'formatter' : fmtcnv.convert_signed_short_to_unsigned
+ },
+ 'tableId' : { 'verbose-name' : 'Table' },
+ 'wildcards' : { 'verbose-name' : 'Wildcards',
+ 'formatter' : fmtcnv.convert_integer_to_bitmask
+ },
+ 'dataLayerSource' : { 'verbose-name' : 'Src MAC',
+ 'formatter' : fmtcnv.replace_host_with_alias
+ },
+ 'dataLayerDestination' : { 'verbose-name' : 'Dst MAC',
+ 'formatter' : fmtcnv.replace_host_with_alias
+ },
+ 'dataLayerType' : { 'verbose-name' : 'Ether Type',
+ 'formatter' : fmtcnv.decode_ether_type
+ },
+ 'dataLayerVirtualLan' : { 'verbose-name' : 'VLAN ID',
+ 'formatter' : fmtcnv.convert_signed_short_to_unsigned
+ },
+ 'dataLayerVirtualLanPriorityCodePoint' : { 'verbose-name' : 'VLAN PCP'
+ },
+ 'inputPort' : { 'verbose-name' : 'In Port',
+ 'formatter' : fmtcnv.decode_openflow_port
+ },
+ 'networkSource' : { 'verbose-name' : 'Src IP'
+ },
+ 'networkDestination' : { 'verbose-name' : 'Dst IP'
+ },
+ 'networkSourceMaskLen' : { 'verbose-name' : 'Src IP Bits'
+ },
+ 'networkDestinationMaskLen' : { 'verbose-name' : 'Dst IP Bits'
+ },
+ 'networkProtocol' : { 'verbose-name' : 'Protocol',
+ 'formatter' : fmtcnv.decode_network_protocol
+ },
+ 'networkTypeOfService' : { 'verbose-name' : 'TOS Bits'
+ },
+ 'transportSource' : { 'verbose-name' : 'Src Port',
+ 'formatter' : fmtcnv.decode_src_port
+ },
+ 'transportDestination' : { 'verbose-name' : 'Dst Port',
+ 'formatter' : fmtcnv.decode_dst_port
+ },
+ 'actions' : { 'verbose-name' : 'Actions',
+ 'formatter' : fmtcnv.decode_actions
+ },
+ 'vnsName' : { 'verbose-name' : 'VNS'
+ },
+ 'vnsFlowCnt' : { 'verbose-name' : 'Flows'
+ },
+ 'flowEntryCnt' : { 'verbose-name' : 'Flow-Entries'
+ },
+ }
+ },
+}
+
+REALTIME_TABLE_IP_FLOW_FORMAT = {
+ 'realtime_table_ip_flow' : {
+ 'field-orderings' : {
+ 'default' : [
+ 'Idx', 'cookie',
+ 'byteCount', 'packetCount','priority',
+ 'networkDestination',
+ 'flow-brief','actions'
+ ],
+ 'scoped' : [
+ 'Idx', 'byteCount', 'packetCount', 'durationSeconds',
+ 'cookie','priority',
+ 'networkDestination', 'actions'
+ ],
+ 'brief' : [ 'Idx', 'byteCount', 'packetCount', 'durationSeconds',
+ 'cookie','priority',
+ 'networkDestination', 'actions'
+ ],
+ 'default' : [ 'Idx', 'byteCount', 'packetCount', 'durationSeconds',
+ 'cookie','priority',
+ 'networkDestination', 'actions'
+ ],
+ 'scoped' : [ 'Idx', 'byteCount', 'packetCount', 'durationSeconds',
+ 'cookie','priority',
+ 'networkDestination', 'actions'
+ ],
+ 'details' : [ 'Idx', 'byteCount', 'packetCount', 'durationSeconds',
+ 'cookie','priority'
+ 'networkDestination', 'actions'
+ ],
+ #'vns_flow': [ 'Idx', 'dataLayerSource', 'dataLayerDestination', 'dataLayerVirtualLan', 'dataLayerType'],
+ #'summary' : [ 'Idx', 'vnsName', 'vnsFlowCnt', 'flowEntryCnt'],
+ },
+ 'fields': {
+ 'switch' : { 'verbose-name' : 'Switch',
+ 'formatter' : fmtcnv.replace_switch_with_alias
+ },
+ 'flow-brief' : {
+ 'verbose-name' : 'Match',
+ 'formatter' : fmtcnv.realtime_flow_brief,
+ },
+ 'flow-timeout' : {
+ 'verbose-name' : 'H/I',
+ 'formatter' : realtime_flow_timeout,
+ },
+ 'byteCount' : { 'verbose-name': 'Bytes',
+ 'primary_key':True
+ },
+ 'packetCount' : { 'verbose-name' : 'Packets'
+ },
+ 'cookie' : { 'verbose-name' : 'Cookie'#,
+ #'formatter' : fmtcnv.decode_flow_cookie,
+ },
+ 'durationSeconds' : { 'verbose-name' : 'Dur(s)'
+ },
+ 'durationNanoseconds' : { 'verbose-name' : 'Dur(ns)'
+ },
+ 'hardTimeout' : { 'verbose-name' : 'Hard Timeout',
+ 'formatter' : fmtcnv.convert_signed_short_to_unsigned
+ },
+ 'idleTimeout' : { 'verbose-name' : 'Idle Timeout',
+ 'formatter' : fmtcnv.convert_signed_short_to_unsigned
+ },
+ 'length' : { 'verbose-name' : 'Length'
+ },
+ 'priority' : { 'verbose-name' : 'Priority',
+ 'formatter' : fmtcnv.convert_signed_short_to_unsigned
+ },
+ 'tableId' : { 'verbose-name' : 'Table' },
+ 'wildcards' : { 'verbose-name' : 'Wildcards',
+ 'formatter' : fmtcnv.convert_integer_to_bitmask
+ },
+ 'dataLayerSource' : { 'verbose-name' : 'Src MAC',
+ 'formatter' : fmtcnv.replace_host_with_alias
+ },
+ 'dataLayerDestination' : { 'verbose-name' : 'Dst MAC',
+ 'formatter' : fmtcnv.replace_host_with_alias
+ },
+ 'dataLayerType' : { 'verbose-name' : 'Ether Type',
+ 'formatter' : fmtcnv.decode_ether_type
+ },
+ 'dataLayerVirtualLan' : { 'verbose-name' : 'VLAN ID',
+ 'formatter' : fmtcnv.convert_signed_short_to_unsigned
+ },
+ 'dataLayerVirtualLanPriorityCodePoint' : { 'verbose-name' : 'VLAN PCP'
+ },
+ 'inputPort' : { 'verbose-name' : 'In Port',
+ 'formatter' : fmtcnv.decode_openflow_port
+ },
+ 'networkSource' : { 'verbose-name' : 'Src IP'
+ },
+ 'networkDestination' : { 'verbose-name' : 'Dst IP'
+ },
+ 'networkSourceMaskLen' : { 'verbose-name' : 'Src IP Bits'
+ },
+ 'networkDestinationMaskLen' : { 'verbose-name' : 'Dst IP Bits'
+ },
+ 'networkProtocol' : { 'verbose-name' : 'Protocol',
+ 'formatter' : fmtcnv.decode_network_protocol
+ },
+ 'networkTypeOfService' : { 'verbose-name' : 'TOS Bits'
+ },
+ 'transportSource' : { 'verbose-name' : 'Src Port',
+ 'formatter' : fmtcnv.decode_src_port
+ },
+ 'transportDestination' : { 'verbose-name' : 'Dst Port',
+ 'formatter' : fmtcnv.decode_dst_port
+ },
+ 'actions' : { 'verbose-name' : 'Instructions',
+ },
+ 'vnsName' : { 'verbose-name' : 'VNS'
+ },
+ 'vnsFlowCnt' : { 'verbose-name' : 'Flows'
+ },
+ 'flowEntryCnt' : { 'verbose-name' : 'Flow-Entries'
+ },
+ }
+ },
+}
+
+
+
+REALTIME_TABLE_MPLS_FLOW_FORMAT = {
+ 'realtime_table_mpls_flow' : {
+ 'field-orderings' : {
+ 'default' : [
+ 'Idx', 'priority',
+ 'byteCount', 'packetCount',
+ 'mplsLabel','mplsBos','mplsTc',
+ 'flow-brief', 'actions'
+ ],
+ 'scoped' : [
+ 'Idx', 'byteCount', 'packetCount', 'durationSeconds',
+ 'priority',
+ 'mplsLabel','mplsBos','mplsTc','actions'
+ ],
+ 'brief' : [ 'Idx', 'byteCount', 'packetCount', 'durationSeconds',
+ 'priority',
+ 'mplsLabel','mplsBos','mplsTc','actions'
+ ],
+ 'default' : [ 'Idx', 'byteCount', 'packetCount', 'durationSeconds',
+ 'priority',
+ 'mplsLabel','mplsBos','mplsTc','actions'
+ ],
+ 'scoped' : [ 'Idx', 'byteCount', 'packetCount', 'durationSeconds',
+ 'priority',
+ 'mplsLabel','mplsBos','mplsTc','actions'
+ ],
+ 'details' : [ 'Idx', 'byteCount', 'packetCount', 'durationSeconds',
+ 'priority',
+ 'mplsLabel','mplsBos','mplsTc','actions'
+ ],
+ #'vns_flow': [ 'Idx', 'dataLayerSource', 'dataLayerDestination', 'dataLayerVirtualLan', 'dataLayerType'],
+ #'summary' : [ 'Idx', 'vnsName', 'vnsFlowCnt', 'flowEntryCnt'],
+ },
+ 'fields': {
+ 'switch' : { 'verbose-name' : 'Switch',
+ 'formatter' : fmtcnv.replace_switch_with_alias
+ },
+ 'flow-brief' : {
+ 'verbose-name' : 'Match',
+ 'formatter' : fmtcnv.realtime_flow_brief,
+ },
+ 'flow-timeout' : {
+ 'verbose-name' : 'H/I',
+ 'formatter' : realtime_flow_timeout,
+ },
+ 'byteCount' : { 'verbose-name': 'Bytes',
+ 'primary_key':True
+ },
+ 'packetCount' : { 'verbose-name' : 'Packets'
+ },
+ 'cookie' : { 'verbose-name' : 'Cookie',
+ #'formatter' : fmtcnv.decode_flow_cookie,
+ },
+ 'durationSeconds' : { 'verbose-name' : 'Dur(s)'
+ },
+ 'durationNanoseconds' : { 'verbose-name' : 'Dur(ns)'
+ },
+ 'hardTimeout' : { 'verbose-name' : 'Hard Timeout',
+ 'formatter' : fmtcnv.convert_signed_short_to_unsigned
+ },
+ 'idleTimeout' : { 'verbose-name' : 'Idle Timeout',
+ 'formatter' : fmtcnv.convert_signed_short_to_unsigned
+ },
+ 'length' : { 'verbose-name' : 'Length'
+ },
+ 'priority' : { 'verbose-name' : 'Priority',
+ 'formatter' : fmtcnv.convert_signed_short_to_unsigned
+ },
+ 'tableId' : { 'verbose-name' : 'Table' },
+ 'wildcards' : { 'verbose-name' : 'Wildcards',
+ 'formatter' : fmtcnv.convert_integer_to_bitmask
+ },
+ 'dataLayerSource' : { 'verbose-name' : 'Src MAC',
+ 'formatter' : fmtcnv.replace_host_with_alias
+ },
+ 'dataLayerDestination' : { 'verbose-name' : 'Dst MAC',
+ 'formatter' : fmtcnv.replace_host_with_alias
+ },
+ 'dataLayerType' : { 'verbose-name' : 'Ether Type',
+ 'formatter' : fmtcnv.decode_ether_type
+ },
+ 'dataLayerVirtualLan' : { 'verbose-name' : 'VLAN ID',
+ 'formatter' : fmtcnv.convert_signed_short_to_unsigned
+ },
+ 'dataLayerVirtualLanPriorityCodePoint' : { 'verbose-name' : 'VLAN PCP'
+ },
+ 'inputPort' : { 'verbose-name' : 'In Port',
+ 'formatter' : fmtcnv.decode_openflow_port
+ },
+ 'networkSource' : { 'verbose-name' : 'Src IP'
+ },
+ 'networkDestination' : { 'verbose-name' : 'Dst IP'
+ },
+ 'networkSourceMaskLen' : { 'verbose-name' : 'Src IP Bits'
+ },
+ 'networkDestinationMaskLen' : { 'verbose-name' : 'Dst IP Bits'
+ },
+ 'networkProtocol' : { 'verbose-name' : 'Protocol',
+ 'formatter' : fmtcnv.decode_network_protocol
+ },
+ 'networkTypeOfService' : { 'verbose-name' : 'TOS Bits'
+ },
+ 'transportSource' : { 'verbose-name' : 'Src Port',
+ 'formatter' : fmtcnv.decode_src_port
+ },
+ 'transportDestination' : { 'verbose-name' : 'Dst Port',
+ 'formatter' : fmtcnv.decode_dst_port
+ },
+ 'actions' : { 'verbose-name' : 'Instructions'
+ },
+ 'vnsName' : { 'verbose-name' : 'VNS'
+ },
+ 'vnsFlowCnt' : { 'verbose-name' : 'Flows'
+ },
+ 'flowEntryCnt' : { 'verbose-name' : 'Flow-Entries'
+ },
+ 'mplsTc' : { 'verbose-name' : 'MPLS TC'
+ },
+ 'mplsLabel' : { 'verbose-name' : 'MPLS Label'
+ },
+ 'mplsBos' : { 'verbose-name' : 'MPLS BOS'
+ },
+ }
+ },
+}
+
+
+
+
+REALTIME_TABLE_ACL_FLOW_FORMAT = {
+ 'realtime_table_acl_flow' : {
+ 'field-orderings' : {
+ 'default' : [ 'Idx','byteCount', 'packetCount', 'durationSeconds',
+ 'cookie','priority', 'inputPort', 'dataLayerSource', 'dataLayerDestination',
+ 'dataLayerType', 'networkSource', 'networkDestination', 'networkProtocol',
+ 'transportSource', 'transportDestination''mplsLabel','actions'],
+ 'scoped' : [ 'Idx','byteCount', 'packetCount', 'durationSeconds',
+ 'cookie','priority', 'inputPort', 'dataLayerSource', 'dataLayerDestination',
+ 'dataLayerType', 'networkSource', 'networkDestination', 'networkProtocol',
+ 'transportSource', 'transportDestination','actions'],
+ },
+ 'fields': {
+ 'switch' : { 'verbose-name' : 'Switch',
+ 'formatter' : fmtcnv.replace_switch_with_alias
+ },
+ 'flow-brief' : {
+ 'verbose-name' : 'Match',
+ 'formatter' : fmtcnv.realtime_flow_brief,
+ },
+ 'flow-timeout' : {
+ 'verbose-name' : 'H/I',
+ 'formatter' : realtime_flow_timeout,
+ },
+ 'byteCount' : { 'verbose-name': 'Bytes',
+ 'primary_key':True
+ },
+ 'packetCount' : { 'verbose-name' : 'Packets'
+ },
+ 'cookie' : { 'verbose-name' : 'Cookie',
+ #'formatter' : fmtcnv.decode_flow_cookie,
+ },
+ 'durationSeconds' : { 'verbose-name' : 'Dur(s)'
+ },
+ 'durationNanoseconds' : { 'verbose-name' : 'Dur(ns)'
+ },
+ 'hardTimeout' : { 'verbose-name' : 'Hard Timeout',
+ 'formatter' : fmtcnv.convert_signed_short_to_unsigned
+ },
+ 'idleTimeout' : { 'verbose-name' : 'Idle Timeout',
+ 'formatter' : fmtcnv.convert_signed_short_to_unsigned
+ },
+ 'length' : { 'verbose-name' : 'Length'
+ },
+ 'priority' : { 'verbose-name' : 'Priority',
+ 'formatter' : fmtcnv.convert_signed_short_to_unsigned
+ },
+ 'tableId' : { 'verbose-name' : 'Table' },
+ 'wildcards' : { 'verbose-name' : 'Wildcards',
+ 'formatter' : fmtcnv.convert_integer_to_bitmask
+ },
+ 'dataLayerSource' : { 'verbose-name' : 'Src MAC',
+ 'formatter' : fmtcnv.replace_host_with_alias
+ },
+ 'dataLayerDestination' : { 'verbose-name' : 'Dst MAC',
+ 'formatter' : fmtcnv.replace_host_with_alias
+ },
+ 'dataLayerType' : { 'verbose-name' : 'EthType',
+ 'formatter' : fmtcnv.decode_ether_type
+ },
+ 'dataLayerVirtualLan' : { 'verbose-name' : 'VLAN ID',
+ 'formatter' : fmtcnv.convert_signed_short_to_unsigned
+ },
+ 'dataLayerVirtualLanPriorityCodePoint' : { 'verbose-name' : 'VLAN PCP'
+ },
+ 'inputPort' : { 'verbose-name' : 'In Port',
+ 'formatter' : fmtcnv.decode_openflow_port
+ },
+ 'networkSource' : { 'verbose-name' : 'Src IP'
+ },
+ 'networkDestination' : { 'verbose-name' : 'Dst IP'
+ },
+ 'networkSourceMaskLen' : { 'verbose-name' : 'Src IP Bits'
+ },
+ 'networkDestinationMaskLen' : { 'verbose-name' : 'Dst IP Bits'
+ },
+ 'networkProtocol' : { 'verbose-name' : 'Protocol',
+ 'formatter' : fmtcnv.decode_network_protocol
+ },
+ 'networkTypeOfService' : { 'verbose-name' : 'TOS Bits'
+ },
+ 'transportSource' : { 'verbose-name' : 'Src Port',
+ 'formatter' : fmtcnv.decode_src_port
+ },
+ 'transportDestination' : { 'verbose-name' : 'Dst Port',
+ 'formatter' : fmtcnv.decode_dst_port
+ },
+ 'actions' : { 'verbose-name' : 'Instructions'
+ },
+ 'vnsName' : { 'verbose-name' : 'VNS'
+ },
+ 'vnsFlowCnt' : { 'verbose-name' : 'Flows'
+ },
+ 'flowEntryCnt' : { 'verbose-name' : 'Flow-Entries'
+ },
+ 'mplsTc' : { 'verbose-name' : 'MPLS TC'
+ },
+ 'mplsLabel' : { 'verbose-name' : 'MPLS LABEL'
+ },
+ 'mplsBos' : { 'verbose-name' : 'MPLS BOS'
+ },
+ }
+ },
+}
+
+
+REALTIME_AGGREGATE_FORMAT = {
+ 'realtime_aggregate' : {
+ 'field-orderings' : {
+ 'default' : [ 'Idx', 'switch', 'flowCount', 'byteCount', 'packetCount' ],
+ 'scoped' : [ 'Idx', 'flowCount', 'byteCount', 'packetCount' ],
+ 'brief' : [ 'Idx', 'switch', 'flowCount', 'byteCount', 'packetCount' ],
+ },
+ 'fields': {
+ 'switch' : { 'verbose-name' : 'Switch',
+ 'formatter' : fmtcnv.replace_switch_with_alias
+ },
+ 'length' : { 'verbose-name': 'Length'
+ },
+ 'flowCount' : { 'verbose-name' : 'Flows'
+ },
+ 'byteCount' : { 'verbose-name' : 'Bytes'
+ },
+ 'packetCount' : { 'verbose-name' : 'Packets'
+ },
+ }
+ },
+}
+
+
+REALTIME_DESC_FORMAT = {
+ 'realtime_desc' : {
+ 'field-orderings' : {
+ 'default' : [ 'Idx', 'switch', 'serialNumber', 'manufacturerDescription',
+ 'hardwareDescription', 'datapathDescription',
+ 'softwareDescription' ],
+ 'scoped' : [ 'Idx', 'serialNumber', 'manufacturerDescription',
+ 'hardwareDescription', 'datapathDescription',
+ 'softwareDescription' ],
+ 'brief' : [ 'Idx', 'switch', 'serialNumber', 'manufacturerDescription',
+ 'hardwareDescription', 'datapathDescription',
+ 'softwareDescription' ],
+ },
+ 'fields': {
+ 'switch' : { 'verbose-name' : 'Switch',
+ 'formatter' : fmtcnv.replace_switch_with_alias
+ },
+ 'softwareDescription' : { 'verbose-name': 'SW Version'
+ },
+ 'datapathDescription' : { 'verbose-name' : 'Model'
+ },
+ 'hardwareDescription' : { 'verbose-name' : 'Make'
+ },
+ 'manufacturerDescription' : { 'verbose-name' : 'Vendor'
+ },
+ 'serialNumber' : { 'verbose-name' : 'Serial #'
+ },
+ }
+ },
+}
+
+
+REALTIME_PORT_FORMAT = {
+ 'realtime_port' : {
+ 'field-orderings' : {
+ 'default' : [ 'Idx', 'switch', 'portNumber','portStatus', 'receiveBytes',
+ 'receivePackets', 'receiveErrors', 'receiveDropped',
+ 'receiveCRCErrors', 'receiveOverrunErrors',
+ 'receiveFrameErrors', 'transmitBytes',
+ 'transmitPackets', 'transmitErrors',
+ 'transmitDropped', 'collisions' ],
+ 'details' : [ 'Idx', 'switch', 'portNumber','portStatus', 'receiveBytes',
+ 'receivePackets', 'receiveErrors', 'receiveDropped',
+ 'receiveCRCErrors', 'receiveOverrunErrors',
+ 'receiveFrameErrors', 'transmitBytes',
+ 'transmitPackets', 'transmitErrors',
+ 'transmitDropped', 'collisions' ],
+ 'scoped' : [ 'Idx', 'portNumber','portStatus', 'receiveBytes',
+ 'receivePackets', 'receiveErrors', 'receiveDropped',
+ 'receiveCRCErrors', 'receiveOverrunErrors',
+ 'receiveFrameErrors', 'transmitBytes',
+ 'transmitPackets', 'transmitErrors',
+ 'transmitDropped', 'collisions' ],
+ 'brief' : [ 'Idx', 'switch', 'portNumber','portStatus',
+ 'receiveBytes', 'receivePackets', 'receiveErrors',
+ 'transmitBytes', 'transmitPackets', 'transmitErrors',
+ ]
+ },
+ 'fields': {
+ 'switch' : { 'verbose-name' : 'Switch',
+ 'formatter' : fmtcnv.replace_switch_with_alias
+ },
+ 'receiveBytes' : { 'verbose-name' : 'Rcv Bytes',
+ 'formatter' : fmtcnv.decode_port_counter
+ },
+ 'receivePackets' : { 'verbose-name' : 'Rcv Pkts',
+ 'formatter' : fmtcnv.decode_port_counter
+ },
+ 'receiveErrors' : { 'verbose-name' : 'Rcv Errs',
+ 'formatter' : fmtcnv.decode_port_counter
+ },
+ 'receiveDropped' : { 'verbose-name' : 'Rcv Dropped',
+ 'formatter' : fmtcnv.decode_port_counter
+ },
+ 'receiveCRCErrors' : { 'verbose-name' : 'Rcv CRC',
+ 'formatter' : fmtcnv.decode_port_counter
+ },
+ 'receiveOverrunErrors' : { 'verbose-name' : 'Rcv Overruns',
+ 'formatter' : fmtcnv.decode_port_counter
+ },
+ 'receiveFrameErrors' : { 'verbose-name' : 'Rcv Frame Errs',
+ 'formatter' : fmtcnv.decode_port_counter
+ },
+ 'transmitBytes' : { 'verbose-name' : 'Xmit Bytes',
+ 'formatter' : fmtcnv.decode_port_counter
+ },
+ 'transmitPackets' : { 'verbose-name' : 'Xmit Pkts',
+ 'formatter' : fmtcnv.decode_port_counter
+ },
+ 'transmitErrors' : { 'verbose-name' : 'Xmit Errs',
+ 'formatter' : fmtcnv.decode_port_counter
+ },
+ 'transmitDropped' : { 'verbose-name' : 'Xmit Dropped',
+ 'formatter' : fmtcnv.decode_port_counter
+ },
+ 'collisions' : { 'verbose-name' : 'Collisions',
+ 'formatter' : fmtcnv.decode_port_counter
+ },
+ 'portNumber' : { 'verbose-name' : 'OF Port #',
+ 'formatter' : fmtcnv.decode_openflow_port
+ },
+ 'length' : { 'verbose-name' : 'Length'
+ },
+ 'portStatus' : { 'verbose-name' : 'Status'
+ },
+ }
+
+ },
+}
+
+
+REALTIME_GROUP_FORMAT = {
+ 'realtime_group' : {
+ 'field-orderings' : {
+ 'default' : [ 'Idx', 'grouptype','groupid' , 'totalpktcnt', 'totalbytecnt',
+ 'bucketpktcnt', 'bucketbytecnt',
+ 'setsrcmac', 'setdstmac',
+ 'pushMplslabel', 'setBos',
+ 'COPY_TTL_OUT','DEC_MPLS_TTL','outport','goToGroup',
+ ],
+ 'scoped' : [ 'Idx', 'grouptype','groupid','totalpktcnt', 'totalbytecnt',
+ 'bucketpktcnt', 'bucketbytecnt',
+ 'setsrcmac', 'setdstmac',
+ 'pushMplsLabel','setBos',
+ 'COPY_TTL_OUT','DEC_MPLS_TTL','outport','goToGroup',
+ ],
+ },
+ 'fields': {
+ 'groupid' : { 'verbose-name' : 'Group Id',
+ },
+ 'grouptype' : { 'verbose-name' : 'Group Type',
+ },
+ 'totalpktcnt' : { 'verbose-name' : 'Pkts',
+ 'formatter' : fmtcnv.decode_port_counter
+ },
+ 'totalbytecnt' : { 'verbose-name' : 'Bytes',
+ 'formatter' : fmtcnv.decode_port_counter
+ },
+ 'bucketpktcnt' : { 'verbose-name' : 'Bucket Pkts',
+ 'formatter' : fmtcnv.decode_port_counter
+ },
+ 'bucketbytecnt' : { 'verbose-name' : 'Bucket Bytes',
+ 'formatter' : fmtcnv.decode_port_counter
+ },
+ 'setsrcmac' : { 'verbose-name' : 'Set Src Mac',
+ },
+ 'setdstmac' : { 'verbose-name' : 'Set Dst Mac',
+ },
+ 'pushMplsLabel' : { 'verbose-name' : 'Push Mpls',
+ },
+ 'setBos' : { 'verbose-name' : 'Set Bos',
+ },
+ 'outport' : { 'verbose-name' : 'Outport',
+ },
+ 'goToGroup' : { 'verbose-name' : 'Group',
+ },
+ 'COPY_TTL_OUT' : { 'verbose-name' : 'COPY TTL',
+ },
+ 'DEC_MPLS_TTL' : { 'verbose-name' : 'Dec Mpls TTL',
+ },
+ }
+ },
+}
+
+
+REALTIME_TABLE_FORMAT = {
+ 'realtime_table' : {
+ 'field-orderings' : {
+ 'default' : [ 'Idx', 'switch', 'name', 'tableId', 'wildcards',
+ 'maximumEntries', 'lookupCount', 'matchedCount', 'activeCount' ],
+ 'scoped' : [ 'Idx','name', 'tableId', 'wildcards',
+ 'maximumEntries', 'lookupCount', 'matchedCount', 'activeCount' ],
+ 'brief' : [ 'Idx', 'switch', 'name', 'tableId', 'wildcards',
+ 'maximumEntries', 'lookupCount', 'matchedCount', 'activeCount' ],
+ },
+ 'fields': {
+ 'switch' : { 'verbose-name' : 'Switch',
+ 'formatter' : fmtcnv.replace_switch_with_alias
+ },
+ 'wildcards' : { 'verbose-name': 'Wildcards'
+ },
+ 'matchedCount' : { 'verbose-name' : '# Matched'
+ },
+ 'maximumEntries' : { 'verbose-name' : 'Maximum Entries'
+ },
+ 'name' : { 'verbose-name' : 'Name'
+ },
+ 'activeCount' : { 'verbose-name' : '# Active'
+ },
+ 'length' : { 'verbose-name' : 'Length'
+ },
+ 'tableId' : { 'verbose-name' : 'Table ID'
+ },
+ 'lookupCount' : { 'verbose-name' : '# Lookups'
+ },
+ }
+ },
+}
+
+SHOW_TUNNEL_FORMAT = {
+ 'show_tunnel' : {
+ 'field-orderings' : {
+ 'default' : [ 'Idx', 'tunnelId', 'policies','tunnelPath','labelStack',],
+ 'details' : [ 'Idx', 'tunnelId', 'policies','tunnelPath','labelStack', 'dpidGroup',],
+ },
+ 'fields': {
+ 'tunnelId' : { 'verbose-name' : 'Id',
+ },
+ 'dpidGroup' : { 'verbose-name' : 'Dpid(Node Id)/Group',
+ },
+ 'labelStack' : { 'verbose-name' : 'Label Stack [Outer-->Inner]',
+ },
+ 'tunnelPath' : { 'verbose-name' : 'Tunnel Path [Head-->Tail]',
+ },
+ }
+ },
+}
+
+SHOW_POLICY_FORMAT = {
+ 'show_policy' : {
+ 'field-orderings' : {
+ 'default' : [ 'Idx', 'policyId', 'policyType','priority','dstMacAddress','srcMacAddress',
+ 'etherType','dstIpAddress' ,'ipProtocolNumber','srcIpAddress', 'dstTcpPortNumber',
+ 'srcTcpPortNumber','tunnelId'
+ ]
+ },
+ 'fields': {
+ 'policyId' : { 'verbose-name' : 'Policy Id',
+ },
+ 'policyType' : { 'verbose-name': 'Policy Type',
+ },
+ 'dstMacAddress' : { 'verbose-name': 'Dst Mac',
+ },
+ 'srcMacAddress' : { 'verbose-name': 'Src Mac',
+ },
+ 'dstIpAddress' : { 'verbose-name': 'Dst IP',
+ },
+ 'srcIpAddress' : { 'verbose-name': 'Src IP',
+ },
+ 'dstTcpPortNumber' : { 'verbose-name': 'Dst TcpPort',
+ },
+ 'srcTcpPortNumber' : { 'verbose-name': 'Src TcpPort',
+ },
+ 'etherType' : { 'verbose-name': 'Ether Type',
+ },
+
+ 'ipProtocolNumber' : { 'verbose-name': 'IP Protocol',
+ },
+ 'tunnelId' : { 'verbose-name': 'Tunnel Used',
+ },
+
+ }
+ },
+}
+
+
+
+REALTIME_FEATURES_FORMAT = {
+ 'realtime_features' : {
+ 'field-orderings' : {
+ 'default' : [ 'Idx', 'switch', 'portNumber', 'name', 'hardwareAddress',
+ 'config', 'state', 'currentFeatures', 'advertisedFeatures',
+ 'supportedFeatures', 'peerFeatures'],
+ 'scoped' : [ 'Idx', 'portNumber', 'name', 'hardwareAddress',
+ 'config', 'state', 'currentFeatures', 'advertisedFeatures',
+ 'supportedFeatures', 'peerFeatures'],
+ 'brief' : [ 'Idx', 'switch', 'portNumber', 'name',
+ 'currentFeatures', 'advertisedFeatures',
+ 'supportedFeatures', 'peerFeatures'],
+ },
+ 'fields': {
+ 'switch' : { 'verbose-name' : 'Switch',
+ 'formatter' : fmtcnv.replace_switch_with_alias
+ },
+ 'portNumber' : { 'verbose-name': 'OF Port #',
+ 'formatter' : fmtcnv.decode_openflow_port
+ },
+ 'hardwareAddress' : { 'verbose-name' : 'HW Mac Address'
+ },
+ 'name' : { 'verbose-name' : 'Name'
+ },
+ 'config' : { 'verbose-name' : 'Config',
+ 'formatter' : fmtcnv.decode_port_config
+ },
+ 'state' : { 'verbose-name' : 'State',
+ 'formatter' : fmtcnv.decode_port_up_down
+ },
+ 'stp-state' : { 'verbose-name' : 'STP State',
+ 'formatter' : fmtcnv.decode_port_stp_state
+ },
+ 'currentFeatures' : { 'verbose-name' : 'Current',
+ 'formatter' : fmtcnv.decode_port_features
+ },
+ 'advertisedFeatures' : { 'verbose-name' : 'Advertised',
+ 'formatter' : fmtcnv.decode_port_features
+ },
+ 'supportedFeatures' : { 'verbose-name' : 'Supported',
+ 'formatter' : fmtcnv.decode_port_features
+ },
+ 'peerFeatures' : { 'verbose-name' : 'Peer',
+ 'formatter' : fmtcnv.decode_port_features
+ },
+ }
+ },
+}
+
+
+REALTIME_QUEUE_FORMAT = {
+ 'realtime_queue' : {
+ 'field-orderings' : {
+ 'default' : [ 'Idx', 'switch', 'portNumber',
+ 'queueId', 'transmitBytes', 'transmitPackets', 'transmitErrors',
+ ],
+ 'scoped' : [ 'Idx', 'portNumber',
+ 'queueId', 'transmitBytes', 'transmitPackets', 'transmitErrors',
+ ],
+ 'brief' : [ 'Idx', 'switch', 'portNumber',
+ 'queueId', 'transmitBytes', 'transmitPackets', 'transmitErrors',
+ ],
+ },
+
+ 'fields' : {
+ 'switch' : { 'verbose-name' : 'Switch',
+ 'formatter' : fmtcnv.replace_switch_with_alias
+ },
+ 'portNumber' : { 'verbose-name': 'OF Port #',
+ 'formatter' : fmtcnv.decode_openflow_port
+ },
+ 'queueId' : { 'verbose-name' : 'Queue ID',
+ },
+ 'transmitBytes' : { 'verbose-name' : 'Xmit Bytes'
+ },
+ 'transmitPackets' : { 'verbose-name' : 'Xmit Pkts'
+ },
+ 'transmitErrors' : { 'verbose-name' : 'Xmit Errors'
+ },
+ }
+ },
+}
+
+
+
+
+ROUTER_FORMAT = {
+ 'router' : {
+ 'field-orderings' : {
+ 'default' : ['Idx','dpid','name', 'routerIP','routerMac','isEdgeRouter','nodeSId'
+ ],
+ },
+ 'fields': {
+ 'dpid' : { 'verbose-name' : 'Router DPID',
+ #'formatter' : fmtcnv.eprint_switch_and_alias,
+ },
+ 'name' : { 'verbose-name' : 'Router Name',
+ #'formatter' : fmtcnv.decode_port_counter
+ },
+ 'routerIP' : { 'verbose-name' : 'Router IP',
+ },
+ 'routerMac' : { 'verbose-name' : 'Router Mac',
+ #'formatter' : fmtcnv.decode_port_counter
+ },
+ 'isEdgeRouter' : { 'verbose-name' : 'Edge Router',
+ #'formatter' : fmtcnv.decode_port_counter
+ },
+ 'nodeSId' : { 'verbose-name' : 'Node SId',
+ #'formatter' : fmtcnv.decode_port_counter
+ },
+ }
+ },
+}
+
+#adjacency
+ROUTER_ADJACENCY_FORMAT= {
+ 'router_adjacency' : {
+ 'field-orderings' : {
+ 'default' : [ 'Idx', 'adjacencySid', 'ports'],
+ 'scoped' : [ 'Idx', 'adjacencySid', 'ports'],
+ },
+ 'fields': {
+ 'adjacencySid' : { 'verbose-name' : 'Adjacency Sid(s)',
+ },
+
+ },
+
+ },
+}
+
+ROUTER_PORT_FORMAT = {
+ 'router_port' : {
+ 'field-orderings' : {
+ 'default' : [ 'Idx', 'name', 'portNo', 'subnetIp','adjacency'],
+ 'scoped' : [ 'Idx', 'name', 'portNo', 'subnetIp','adjacency'],
+ },
+ 'fields': {
+ 'adjacency' : { 'verbose-name' : 'Adjacency Sid(s)',
+ },
+ 'portNo' : { 'verbose-name' : 'Port #',
+ },
+ 'subnetIp' : { 'verbose-name' : 'Subnet',
+ },
+
+ },
+ }
+}
+
+"""
+SWITCH_CLUSTER_FORMAT = {
+ 'switch-cluster' : {
+ 'field-orderings' : {
+ 'default' : [ 'Idx', 'cluster-id', 'switches', ],
+ },
+ 'fields' : {
+ 'cluster-id' : { 'formatter' : fmtcnv.print_cluster_id,
+ },
+ 'switches' : { 'formatter' : fmtcnv.print_switches
+ },
+ }
+ },
+}
+
+BROADCAST_DOMAIN_FORMAT = {
+ 'external-ports' : {
+ 'field-orderings' : {
+ 'default' : [ 'Idx', 'ports', ],
+ },
+ 'fields' : {
+ 'ports' : { 'verbose-name': 'Switch Ports',
+ 'formatter' : fmtcnv.print_switch_port_list,
+ },
+ }
+ },
+}
+
+TECH_SUPPORT_CONFIG_FORMAT = {
+ 'tech-support-config' : {
+ 'field-orderings' : {
+ 'default' : [ 'cmd-type',
+ 'cmd'
+ ],
+ },
+ },
+}
+
+
+VERSION_FORMAT = {
+ 'version' : {
+ 'field-orderings' : {
+ 'details' : [ 'controller' ]
+ },
+
+ 'fields' : {
+ 'controller' : {
+ 'verbose-name' : 'Controller version',
+ }
+ }
+ },
+}
+
+
+SYSTEM_CLOCK_FORMAT = {
+ 'system-clock' : {
+ 'field-orderings' : {
+ 'default' : [ 'time' ],
+ 'details' : [ 'time', 'tz' ]
+ },
+
+ 'fields' : {
+ 'time' : {
+ },
+ 'tz' : { 'verbose-name' : 'Timezone'
+ },
+ },
+ },
+}
+"""