Adding ONOS Segment Routing CLI files to new repo
diff --git a/cli/desc/version200/policy.py b/cli/desc/version200/policy.py
new file mode 100644
index 0000000..eac0209
--- /dev/null
+++ b/cli/desc/version200/policy.py
@@ -0,0 +1,338 @@
+import command
+import json
+import fmtcnv
+POLICY_CONFIG_FORMAT = {
+ 'policy-config' : {
+ 'field-orderings' : {
+ 'default' : [
+ 'policy-id',
+ ],
+ },
+ },
+}
+
+POLICY_SUBMODE_COMMAND_DESCRIPTION = {
+ 'name' : 'policy',
+ 'short-help' : 'Enter policy submode, configure SR policy details',
+ 'mode' : 'config',
+ 'command-type' : 'config-submode',
+ 'obj-type' : 'policy-config',
+ 'submode-name' : 'config-policy',
+ 'parent-field' : None,
+ 'doc' : 'policy|policy',
+ 'doc-example' : 'policy|policy-example',
+ #'completion' : 'policy-id-completion',
+ 'args' : {
+ 'action' : (
+ {
+ 'proc' : 'create-policy',
+ },
+ {
+ 'proc' : 'push-mode-stack',
+ },
+ ),
+ 'no-action' : (
+ {
+ 'proc' : 'remove-policy',
+ },
+ ),
+ 'choices' : (
+ (
+ {
+ 'field' : 'policy-id',
+ 'type' : 'identifier',
+ 'completion' : 'complete-object-field',
+ 'syntax-help' : 'Enter a policy name',
+ 'doc' : 'policy|policy',
+ },
+ {
+ 'token' : 'policy-type',
+ 'optional-for-no' : True,
+ 'short-help' : 'Set type of policy',
+ 'doc' : 'policy|policy',
+ 'completion' : 'complete-object-field',
+ },
+ {
+ 'field' : 'policy-type',
+ 'optional-for-no' : True,
+ 'type' : 'enum',
+ 'values' : ('tunnel-flow','loadbalanced','avoid','deny'),
+ 'completion' : 'complete-object-field',
+ 'syntax-help' : 'Enter a policy type',
+ 'doc' : 'policy|policy',
+ #'doc-include' : [ 'type-doc' ],
+ },
+ ),
+ ),
+ }
+}
+
+SRC_IP_MATCH = {
+ 'choices' : (
+ (
+ {
+ 'field' : 'src_ip',
+ 'type' : 'cidr-range',
+ 'help-name' : 'src-cidr',
+ #'data-handler' : 'split-cidr-data-inverse',
+ #'dest-ip' : 'src-ip',
+ #'dest-netmask' : 'src-ip-mask',
+ 'data' : {
+ 'dst_ip' : '0.0.0.0/0',
+ },
+ 'doc' : 'vns|vns-access-list-cidr-range',
+ }
+ ),
+ (
+ {
+ 'token' : 'any',
+ 'data' : {
+ 'src_ip' : '0.0.0.0/0',
+ 'dst_ip' : '0.0.0.0/0',
+ },
+ 'doc' : 'vns|vns-access-list-ip-any',
+ }
+ ),
+ )
+}
+
+SRC_PORT_MATCH = (
+ {
+ 'field' : 'src_tp_port_op',
+ 'type' : 'enum',
+ 'values' : ('eq', 'neq'),
+ 'doc' : 'vns|vns-access-list-port-op-+',
+ },
+ {
+ 'choices' : (
+ {
+ 'field' : 'src_tp_port',
+ 'base-type' : 'hex-or-decimal-integer',
+ 'range' : (0,65535),
+ 'data-handler' : 'hex-to-integer',
+ 'doc' : 'vns|vns-access-list-port-hex',
+ 'doc-include' : [ 'range' ],
+ },
+ {
+ 'field' : 'src_tp_port',
+ 'type' : 'enum',
+ 'values' : fmtcnv.tcp_name_to_number_dict,
+ 'permute' : 'skip',
+ 'doc' : 'vns|vns-access-list-port-type',
+ },
+ ),
+ },
+)
+
+
+DST_IP_MATCH = {
+ 'choices' : (
+ (
+ {
+ 'field' : 'dst_ip',
+ 'type' : 'cidr-range',
+ 'help-name' : 'dst-cidr',
+ #'data-handler' : 'split-cidr-data-inverse',
+ #'dest-ip' : 'dst-ip',
+ #'dest-netmask' : 'dst-ip-mask',
+ 'doc' : 'vns|vns-access-list-cidr-range',
+ },
+ ),
+ (
+ {
+ 'token' : 'any',
+ 'data' : {
+ 'dst_ip' : '0.0.0.0/0',
+ },
+ 'doc' : 'vns|vns-access-list-ip-any',
+ }
+ ),
+ )
+}
+
+
+DST_PORT_MATCH = (
+ {
+ 'field' : 'dst_tp_port_op',
+ 'type' : 'enum',
+ 'values' : ('eq', 'neq'),
+ 'doc' : 'vns|vns-access-list-port-op+',
+ },
+ {
+ 'choices' : (
+ {
+ 'field' : 'dst_tp_port',
+ 'base-type' : 'hex-or-decimal-integer',
+ 'range' : (0,65535),
+ 'data-handler' : 'hex-to-integer',
+ 'doc' : 'vns|vns-access-list-port-hex',
+ },
+ {
+ 'field' : 'dst_tp_port',
+ 'type' : 'enum',
+ 'values' : fmtcnv.tcp_name_to_number_dict,
+ 'permute' : 'skip'
+ },
+ ),
+ }
+)
+
+POLICY_FLOW_ENTRY_COMMAND_DESCRIPTION = {
+ 'name' : 'flow-entry',
+ 'mode' : 'config-policy',
+ 'command-type' : 'config',
+ 'short-help' : 'Configure flow entry',
+ 'doc' : 'flow-entry|flow-entry',
+ 'doc-example' : 'flow-entry|flow-entry-example',
+ 'parent-field' : 'policy',
+ 'args' : {
+ 'action' : (
+ {
+ 'proc' : 'create-policy',
+ },
+ ),
+ 'choices' : (
+ (
+ {
+ 'choices' : (
+ {
+ 'field' : 'proto_type',
+ 'type' : 'enum',
+ 'values' : ('ip','tcp','udp'),
+ 'doc' : 'vns|vns-access-list-entry-type-+',
+ },
+ {
+ 'field' : 'proto_type',
+ 'base-type' : 'hex-or-decimal-integer',
+ 'range' : (0,255),
+ 'help-name' : 'ip protocol',
+ 'data-handler' : 'hex-to-integer',
+ 'doc' : 'vns|vns-access-entry-type-ip-protocol',
+ 'doc-include' : [ 'range' ],
+ },
+ )
+ },
+ # Complexity arises from the SRC_IP match part
+ # being, required, while the port match
+ # is optional, as is the DST_IP match, but the
+ # DST_PORT_MATCH is only possible to describe when
+ # the DST_IP part is included
+ SRC_IP_MATCH,
+ {
+ 'optional' : True,
+ 'optional-for-no' : True,
+ 'args' : SRC_PORT_MATCH,
+ },
+ {
+ 'optional' : True,
+ 'optional-for-no' : True,
+ 'args' : (
+ DST_IP_MATCH,
+ {
+ 'optional' : True,
+ 'optional-for-no' : True,
+ 'args' : DST_PORT_MATCH,
+ },
+ ),
+ },
+ ),
+ ),
+ },
+}
+POLICY_TUNNEL_ID_COMMAND_DESCRIPTION = {
+ 'name' : 'tunnel',
+ 'mode' : 'config-policy',
+ #'obj-type' : 'policy-config',
+ 'command-type' : 'config',
+ 'short-help' : 'Configure tunnel id',
+ #'doc' : 'policy|tunnel',
+ #'doc-example' : 'policy|policy-tunnel-example',
+ 'parent-field' : 'policy',
+ 'args' : {
+ 'action' : (
+ {
+ 'proc' : 'create-policy',
+ },
+ ),
+ 'completion' : 'tunnelid-completion',
+ 'field' : 'tunnel-id',
+ 'type' : 'identifier',
+ 'syntax-help' : 'Enter tunnel id',
+ 'doc' : 'policy|tunnel-id',
+ 'doc-include' : [ 'type-doc' ],
+ }
+}
+
+POLICY_PRIORITY_COMMAND_DESCRIPTION = {
+ 'name' : 'priority',
+ 'mode' : 'config-policy',
+ 'command-type' : 'config',
+ 'short-help' : 'Configure policy priority',
+ 'doc' : 'policy|priority',
+ 'doc-example' : 'policy|policy-priority-example',
+ 'parent-field' : 'policy',
+ 'args' : {
+ 'action' : (
+ {
+ 'proc' : 'create-policy',
+ },
+ ),
+ 'field' : 'priority',
+ 'base-type' : 'integer',
+ 'range' : (0, 65535),
+ }
+}
+
+SHOW_POLICY_COMMAND_DESCRIPTION = {
+ 'name' : 'show',
+ 'mode' : 'login',
+ 'command-type' : 'display-table',
+ 'all-help' : 'Show switch information',
+ 'short-help' : 'Show switch summary',
+ #'obj-type' : 'switches',
+ 'doc' : 'switch|show',
+ 'doc-example' : 'switch|show-example',
+ 'args' : (
+ {
+ 'token' : 'policy',
+ 'field' : 'showpolicy',
+ 'action' : 'display-rest',
+ 'sort' : ['policyId',],
+ 'doc' : 'switch|show',
+ 'url' : [
+ 'showpolicy',
+ ],
+ 'format' : 'show_policy',
+ },
+ )
+}
+
+
+def tunnel_id_completion(prefix, completions):
+ query_url = "http://127.0.0.1:8000/rest/v1/showtunnel"
+ result = command.sdnsh.store.rest_simple_request(query_url)
+ entries = json.loads(result)
+ for entry in entries:
+ if entry['tunnelId'].startswith(prefix):
+ completions[entry['tunnelId']+' '] = entry['tunnelId']
+ return
+
+command.add_completion('tunnel-id-completion', tunnel_id_completion,
+ {'kwargs': { 'prefix' : '$text',
+ 'completions' : '$completions',
+ }})
+
+
+def policy_id_completion(prefix, completions):
+ query_url = "http://127.0.0.1:8000/rest/v1/showpolicy"
+ result = command.sdnsh.store.rest_simple_request(query_url)
+ entries = json.loads(result)
+ for entry in entries:
+ if entry['policyId'].startswith(prefix):
+ completions[entry['policyId']+' '] = entry['policyId']
+ return
+
+command.add_completion('policy-id-completion', policy_id_completion,
+ {'kwargs': { 'prefix' : '$text',
+ 'completions' : '$completions',
+ }})
\ No newline at end of file