Adding ONOS Segment Routing CLI files to new repo
diff --git a/cli/climodelinfo.py b/cli/climodelinfo.py
new file mode 100755
index 0000000..438eda8
--- /dev/null
+++ b/cli/climodelinfo.py
@@ -0,0 +1,1833 @@
+#
+# Copyright (c) 2010,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.
+#
+
+#  sdnsh - The Controller Shell
+#  module: climodelinfo.py
+#
+# This module contains classes that help fill out more of the CLI's model
+# this will do a merge with the model_info_list object that is generated 
+# directly from the django models
+#
+# the motivation is that commands/objects that are not based in the
+# model should be able to take advantage of functions like prettyprint
+# or completion
+#
+# also, this lets us add info to the model that is CLI-specific.
+# In that respect, it is a lot like a django html view where the
+# columns are presented in a certain order in tables, and attributes
+# are grouped together in fieldsets
+
+# field-orderings must have a 'default' entry variants for brief/verbose
+
+# LOOK!
+# - sort hints for show running 
+# - justification for columns
+# - have proper class for obj_type_info ?
+
+import model_info_list # load the automatically generated model definitions from the controller
+import base64
+import struct
+import re
+import doctest
+
+onos=1
+class CliModelInfo(): 
+    # so the model is accessible from the formatter functions
+    singleton = None
+
+
+    django_model_dict = {}
+    complete_obj_type_info_dict = {}
+
+
+    def __init__(self):
+        CliModelInfo.singleton = self
+        self.django_model_dict = dict(model_info_list.model_info_dict)
+        self.complete_obj_type_info_dict = dict(self.django_model_dict)
+
+        # Clean up the tables for the user field
+
+        # merge from additional_model_info_dict
+
+        # LOOK! should be able to do this by implementing a recursive deep copy/update
+        for obj_type in self.additional_model_info_dict.keys():
+            # if a new obj_type, just copy it
+            if not obj_type in self.complete_obj_type_info_dict:
+                self.complete_obj_type_info_dict[obj_type] = dict(self.additional_model_info_dict[obj_type])
+            else:
+                # if an existing obj_type, then go through keys (we know it's a dict)
+                for obj_info in self.additional_model_info_dict[obj_type].keys():
+                    if not obj_info in self.complete_obj_type_info_dict[obj_type]:
+                        if obj_info == 'field-orderings':
+                            self.complete_obj_type_info_dict[obj_type][obj_info] = dict(self.additional_model_info_dict[obj_type][obj_info])
+                        else:
+                            # shallow copy
+                            self.complete_obj_type_info_dict[obj_type][obj_info] = self.additional_model_info_dict[obj_type][obj_info]
+                    else:
+                        if obj_info == "fields":
+                            model_fields = self.complete_obj_type_info_dict[obj_type]['fields']
+                            addl_fields = self.additional_model_info_dict[obj_type]['fields']
+
+                            # both objects have fields - be intelligent
+                            for f in addl_fields.keys():
+                                if not f in model_fields:
+                                    model_fields[f] = dict(addl_fields[f])
+                                else:
+                                    for attr in addl_fields[f].keys():
+                                        model_fields[f][attr] = addl_fields[f][attr]
+        #print self.complete_obj_type_info_dict
+
+    def add_type_info(self, name, type_info):
+        self.complete_obj_type_info_dict[name] = type_info
+
+    def get_complete_obj_type_info_dict(self):
+        return self.complete_obj_type_info_dict
+
+    def get_fields_to_print(self, obj_type, field_ordering='default'):
+        fields_to_print = []
+        obj_type_info = self.complete_obj_type_info_dict.get(obj_type, None)
+        if obj_type_info:
+            if 'field-orderings' in obj_type_info:
+                fields_to_print = obj_type_info['field-orderings'].get(field_ordering, [])
+            if len(fields_to_print) == 0: # either no field-orderings or couldn't find specific
+                fields_to_print = obj_type_info['fields'].keys()
+        return fields_to_print
+
+    def get_field_info(self, obj_type, field_name):
+        obj_type_info = self.complete_obj_type_info_dict.get(obj_type, None)
+        return obj_type_info['fields'].get(field_name, None)
+
+    # LOOK! Refactor - Should we merge this with model_info_list?
+    #if (onos == 1):
+        # do nothing
+    #    additional_model_info_dict = {}
+    #elif (onos==2):
+    if (onos == 1):
+        additional_model_info_dict = {
+        'switches' : {
+            # switches are now directly fetched via rest api.
+            # 'has_rest_model' isn't set
+            # for this table.
+            # XXX perhaps these types of descriptions need to be
+            # in a file other than climodelinfo?
+            'source'          : 'user-config',
+            'source'          : 'display',
+            'url'             : 'switches',
+            'config-obj-type' : 'switch-config',
+
+            'fields' : {
+                'dpid'               : {
+                                         'edit' : False,
+                                         'max_length': 32,
+                                         'null': False,
+                                         'primary_key': True,
+                                         'type': 'CharField',
+                                         'edit' : False,
+                                       },
+                'active'             : {
+                                         'edit' : False
+                                       },
+                'core-switch'        : {
+                                         'edit' : False,
+                                       },
+                'connected-since'    : { 
+                                         'edit' : False
+                                       },
+                'capabilities'       : {
+                                         'edit' : False
+                                       },
+                'actions'            : {
+                                         'edit' : False
+                                       },
+                'ip-address'         : {
+                                         'edit' : False
+                                       },
+                'socket-address'     : {
+                                         'edit' : False
+                                       },
+                'buffers'            : {
+                                         'edit' : False
+                                       },
+                'controller'         : {
+                                         'edit' : False,
+                                       },
+                'tables'             : {
+                                         'edit' : False
+                                       },
+                'switch-alias'       : {
+                                         'help_text' : 'Switch alias for DPID',
+                                         'edit' : False,
+                                       },
+                'tunnels'            : {
+                                         'edit' : False,
+                                       },
+                'tunnel-supported'   : {
+                                         'edit' : False,
+                                       },
+                'tunnel-termination' : {
+                                         'edit' : False,
+                                       },
+                'tunnel-active'      : {
+                                         'edit' : False,
+                                       },
+                'dp-desc'            : {
+                                         'edit' : False,
+                                       },
+                'hw-desc'            : {
+                                         'edit' : False,
+                                       },
+                'sw-desc'            : {
+                                         'edit' : False,
+                                       },
+                'serial-num'         : {
+                                         'edit' : False,
+                                       },
+                }
+            },
+        'interfaces' : {
+            # switches are now directly fetched via rest api.
+            # 'has_rest_model' isn't set
+            # for this table.
+            # XXX perhaps these types of descriptions need to be
+            # in a file other than climodelinfo?
+            'source'          : 'display',
+            'url'             : 'switches',
+            'config-obj-type' : 'switch-interface-config',
+
+            'fields' : {
+                'id'                  : {
+                                         'edit' : False,
+                                         'max_length': 48,
+                                         'null': False,
+                                         'primary_key': True,
+                                         'type' : 'compound-key',
+                                         'edit' : False,
+                                         'help_text' : '#!dpid',
+                                         'compound_key_fields': [ 'dpid' ]
+                                        },
+                'dpid'                : {
+                                           #'type'           : 'ForeignKey',
+                                           #'rel_field_name' : 'dpid',
+                                           #'rel_obj_type'   : 'switch',
+                                        },
+                'name'                : {
+                                        },
+                'number'              : {
+                                        },
+                'config'              : {
+                                        },
+                'state'               : {
+                                        },
+                'current-features'    : {
+                                        },
+                'advertised-features' : {
+                                        },
+                'supported-features'  : {
+                                        },
+                'peer-features'       : {
+                                        },
+                }
+            },
+
+
+        'switch-config' : {
+            'source' : 'debug-only',
+        },
+
+
+        'tunnel-config' : {
+            'source'          : 'user-config',
+            'source'          : 'display',
+            'url'             : 'tunnel-config',
+            'config-obj-type' : 'tunnel-config',
+
+            'fields' : {
+                'tunnel-id'               : {
+                                         'edit' : False,
+                                         'max_length': 32,
+                                         'null': False,
+                                         'primary_key': True,
+                                         'type': 'CharField',
+                                         'edit' : False,
+                                       },
+                        },
+        },
+                                      
+        'policy-config' : {
+            'source'          : 'user-config',
+            'source'          : 'display',
+            'url'             : 'policy-config',
+            'config-obj-type' : 'policy-config',
+
+            'fields' : {
+                'policy-id'               : {
+                                         'edit' : False,
+                                         'max_length': 32,
+                                         'null': False,
+                                         'primary_key': True,
+                                         'type': 'CharField',
+                                         'edit' : False,
+                                       },
+                        },
+        },
+                                      
+        'switch-alias' : {
+            'source'          : 'user-config',
+            'cascade_delete'  : True,
+            },
+
+
+        'switch-interface-config' : {
+            'source'          : 'debug-only',
+            'cascade_delete'  : True,
+
+            'fields'          : {
+                'broadcast'           : { 'edit' : False
+                                        },
+                'name'                : { 'edit' : False
+                                        },
+                'mode'                : { 
+                                          'edit' : False
+                                        },
+                },
+            },
+
+
+        'host-alias' : {
+            'source'          : 'user-config',
+            'cascade_delete'  : True,
+            'fields' : {
+                }
+            },
+
+
+        'link' : { 
+            'source'          : 'switch',
+
+            'fields' : {
+                'link-type'      : {
+                                    'type' : 'CharField'
+                                   },
+                }
+            },
+
+
+        'port' : {
+            'source'          : 'debug-only',
+
+            'fields' : {
+                'switch'              : {
+                                        },
+                'number'              : {
+                                        },
+                'config'              : {
+                                        },
+                'state'               : {
+                                        },
+                'current-features'    : {
+                                        },
+                'advertised-features' : {
+                                        },
+                'supported-features'  : {
+                                        },
+                'peer-features'       : {
+                                        },
+                }
+            },
+
+        'switch-interfaces' : {
+            'source'    : 'switch',
+
+            'fields' : {
+                'Idx'                 : { 
+                                           'edit' : False,
+                                          'type' : 'CharField'
+                                        },
+                'id'                  : {
+                                          'primary_key': True,
+                                          # format's out of the sorting business
+                                          # 'sort' : 'tail-integer',
+                                        },
+                'switch'              : {
+                                        },
+                'name'                : {
+                                          'type' : 'CharField',
+                                          'max_length' : 32,
+                                        },
+                'hardware-address'    : {
+                                        },
+                'config'              : { 
+                                        },
+                'state'               : {
+                                        },
+                'stp-state'           : { 
+                                        },
+                'current-features'    : { 
+                                        },
+                'advertised-features' : {
+                                        },
+                'supported-features'  : {
+                                        },
+                'peer-features'       : {
+                                        },
+                'receiveBytes'        : {
+                                        },
+                'receivePackets'      : {
+                                        },
+                'receiveErrors'       : {
+                                        },
+                'transmitBytes'       : {
+                                        },
+                'transmitPackets'     : {
+                                        },
+                'transmitErrors'      : {
+                                        },
+                },
+            },
+
+        'controller_switches' : {
+            'source'          : 'user-config',
+            
+            'fields' : {
+                'dpid' : { 'primary_key' : True,
+                         },
+                }
+            },
+    
+        'host-config' : {
+            'source'          : 'show',
+            'url'             : 'device',
+
+            'fields' : {
+                'Idx'                : {
+                                          'edit' : False,
+                                          'type' : 'CharField'
+                                       },
+                'mac'                : { 
+                                          'json_serialize_string': True,
+                                          'max_length': 17,
+                                          'null': False,
+                                          'type': 'CharField',
+                                          'edit' : False,
+                                        },
+                'vendor'              : {
+                                          'edit' : False,
+                                        },
+                'ips'                 : {
+                                          'edit' : False
+                                        },
+                'attachment-points'   : {
+                                          'edit' : False
+                                        },
+                'tag'                 : {
+                                          'edit' : False
+                                        },
+                'host-alias'          : { 'help_text' : 'Host alias',
+                                          'edit' : False,
+                                        },
+                'last-seen'           : {
+                                          'help_text': 'Last time a packet was seen by the controller',
+                                          'json_serialize_string': True,
+                                          'null': True,
+                                          'type': 'DateTimeField',
+                                        },
+                },
+            },
+
+        'host': {
+            # hosts are now directly fetched via rest api. 'has_rest_model' isn't set
+            # for this table.
+            # XXX perhaps these types of descriptions need to be
+            # in a file other than climodelinfo?
+            'source'          : 'user-config',
+            'source'          : 'display',
+            'url'             : 'device',
+            'config-obj-type' : 'host-config',
+
+            'fields': {
+                'mac'                : { 
+                                          'json_serialize_string': True,
+                                          'max_length': 17,
+                                          'null': False,
+                                          'primary_key': True,
+                                          'type': 'CharField',
+                                          'edit' : False,
+                                        },
+                'vlan'                : {
+                                          'help_text'            : 'VLAN Associated with host',
+                                          'json_serialize_string': False,
+                                          'null'                 : True,
+                                          'type'                 : 'IntegerField',
+                                          'edit'                 : False,
+                                          'searchable'           : True,
+                                        },
+                'dpid'                : {
+                                           'edit'           : False,
+                                           'type'           : 'ForeignKey',
+                                           'rel_field_name' : 'dpid',
+                                           'rel_obj_type'   : 'switches',
+                                        },
+                'ipv4'                : {
+                                           'edit' : False,
+                                        },
+                # Attachment point isn't searchable
+                #'attachment-points'  : {
+                                           #'edit' : False
+                                        #},
+                'last-seen'           : {
+                                          'help_text': 'Last time a packet was seen by the controller',
+                                          'json_serialize_string': True,
+                                          'null': True,
+                                          'type': 'DateTimeField',
+                                        },
+                 },
+            },
+
+
+        'host-attachment-point' : {
+            # directly fetched via rest api. 
+            # 'has_rest_model' isn't set for this table.
+            'source'          : 'controller',
+            'url'             : 'device',
+
+             'fields': {
+                'mac'          : {
+                                  'json_serialize_string': True,
+                                  'null': True,
+                                  'rel_field_name': 'mac',
+                                  'rel_obj_type': 'host',
+                                  'type': 'ForeignKey',
+                                 },
+                'vlan'         : {
+                                   'help_text': 'VLAN Associated with host',
+                                   'json_serialize_string': False,
+                                   'null': True,
+                                   'type': 'IntegerField',
+                                   'edit' : False,
+                                    'searchable' : True,
+                                 },
+                'id'           : {
+                                  'help_text': '#|mac|dpid|ingress-port',
+                                  'json_serialize_string': True,
+                                  'max_length': 64,
+                                  'null': False,
+                                  'primary_key': True,
+                                  'type': 'CharField',
+                                 },
+                'dpid'         : { 'json_serialize_string': True,
+                                   'null': True,
+                                   'rel_field_name': 'dpid',
+                                   'rel_obj_type': 'switch',
+                                   'type': 'ForeignKey',
+                                 },
+                'ingress-port' : {
+                                  'help_text': 'Open flow port number of ingress port',
+                                  'json_serialize_string': False,
+                                  'null': True,
+                                  'type': 'IntegerField',
+                                 },
+                'status'       : {
+                                   'help_text': 'Error description, blank mean no error ',
+                                   'json_serialize_string': True,
+                                   'max_length': 64,
+                                   'null': True,
+                                   'type': 'CharField',
+                                 },
+                'last-seen'    : {
+                                   'help_text': 'Last time a packet was seen by the controller',
+                                   'json_serialize_string': True,
+                                   'null': True,
+                                   'type': 'DateTimeField',
+                                 },
+                'ipv4'         : { # added to enable searching
+                                    'edit' : False,
+                                    'searchable' : True,
+                                 },
+                 },
+             },
+
+        'host-network-address': {
+            # directly fetched via rest api. 
+            # 'has_rest_model' isn't set for this table.
+            'source'          : 'switch',
+            'url'             : 'device',
+
+            'fields': {
+                'mac'        : { 'json_serialize_string': True,
+                                 'null': True,
+                                 'rel_field_name': 'mac',
+                                 'rel_obj_type': 'host',
+                                 'type': 'ForeignKey',
+                                 'edit' : False,
+                               },
+                'vlan'       : {
+                                 'help_text': 'VLAN Associated with host',
+                                 'json_serialize_string': False,
+                                 'null': True,
+                                 'type': 'IntegerField',
+                                 'edit' : False,
+                                 'searchable' : True,
+                               },
+                'id'         : {
+                                 'help_text': '#|mac|ipv4',
+                                 'json_serialize_string': True,
+                                 'max_length': 64,
+                                 'null': False,
+                                 'primary_key': True,
+                                 'type': 'CharField',
+                               },
+                'ip-address':  {
+                                 'help_text': 'IP Address of host',
+                                 'json_serialize_string': True,
+                                 'max_length': 15,
+                                 'null': True,
+                                 'type': 'CharField',
+                                 'edit' : False,
+                              },
+                'last-seen' : {
+                                'help_text': 'Last time a packet was seen by the controller',
+                                'json_serialize_string': True,
+                                'null': True,
+                                'type': 'DateTimeField',
+                              },
+                'ipv4'      : { # added to enable searching
+                                 'max_length': 15,
+                                 'null': True,
+                                 'type': 'CharField',
+                                 'edit' : False,
+                              },
+                'dpid'      : {
+                                 'edit' : False,
+                                 'searchable' : True,
+                              },
+                },
+            }
+        }
+    else:
+        additional_model_info_dict = {
+        'flow-entry' : {
+            'source'          : 'user-config',
+           'update-alias'    : ['switch', 'port'],
+            },
+
+
+        'feature' : {
+            'source'          : 'debug-only',
+
+            'fields'          : {
+                'netvirt-feature'                   : {
+                                                    'edit' : False},
+                'static-flow-pusher-feature'    : { 
+                                                    'edit' : False },
+                'performance-monitor-feature'   : { 
+                                                    'edit' : False},
+            }
+        },
+
+
+        'system-interfaces' : {
+            'source'    : '',
+
+            'fields' : {
+                'name'      : {
+                                'type' : 'CharField' },
+                'addr'      : {
+                                'type' : 'CharField' },
+                'peer'       : {
+                                'type' : 'CharField' },
+                'netmask'   : {
+                                'type' : 'CharField' },
+                'broadcast' : {
+                                'type' : 'CharField' },
+                }
+            },
+
+
+        'switch-cluster' : {
+            'source'          : 'user-config',
+
+            'fields' : {
+                'cluster-id' : {
+                                 'primary_key': True
+                               },
+                'switches'   : {
+                               },
+                }
+            },
+
+        'switches' : {
+            # switches are now directly fetched via rest api.
+            # 'has_rest_model' isn't set
+            # for this table.
+            # XXX perhaps these types of descriptions need to be
+            # in a file other than climodelinfo?
+            'source'          : 'user-config',
+            'source'          : 'display',
+            'url'             : 'switches',
+            'config-obj-type' : 'switch-config',
+
+            'fields' : {
+                'dpid'               : {
+                                         'edit' : False,
+                                         'max_length': 32,
+                                         'null': False,
+                                         'primary_key': True,
+                                         'type': 'CharField',
+                                         'edit' : False,
+                                       },
+                'active'             : {
+                                         'edit' : False
+                                       },
+                'core-switch'        : {
+                                         'edit' : False,
+                                       },
+                'connected-since'    : { 
+                                         'edit' : False
+                                       },
+                'capabilities'       : {
+                                         'edit' : False
+                                       },
+                'actions'            : {
+                                         'edit' : False
+                                       },
+                'ip-address'         : {
+                                         'edit' : False
+                                       },
+                'socket-address'     : {
+                                         'edit' : False
+                                       },
+                'buffers'            : {
+                                         'edit' : False
+                                       },
+                'controller'         : {
+                                         'edit' : False,
+                                       },
+                'tables'             : {
+                                         'edit' : False
+                                       },
+                'switch-alias'       : {
+                                         'help_text' : 'Switch alias for DPID',
+                                         'edit' : False,
+                                       },
+                'tunnels'            : {
+                                         'edit' : False,
+                                       },
+                'tunnel-supported'   : {
+                                         'edit' : False,
+                                       },
+                'tunnel-termination' : {
+                                         'edit' : False,
+                                       },
+                'tunnel-active'      : {
+                                         'edit' : False,
+                                       },
+                'dp-desc'            : {
+                                         'edit' : False,
+                                       },
+                'hw-desc'            : {
+                                         'edit' : False,
+                                       },
+                'sw-desc'            : {
+                                         'edit' : False,
+                                       },
+                'serial-num'         : {
+                                         'edit' : False,
+                                       },
+                }
+            },
+
+        'interfaces' : {
+            # switches are now directly fetched via rest api.
+            # 'has_rest_model' isn't set
+            # for this table.
+            # XXX perhaps these types of descriptions need to be
+            # in a file other than climodelinfo?
+            'source'          : 'display',
+            'url'             : 'switches',
+            'config-obj-type' : 'switch-interface-config',
+
+            'fields' : {
+                'id'                  : {
+                                         'edit' : False,
+                                         'max_length': 48,
+                                         'null': False,
+                                         'primary_key': True,
+                                         'type' : 'compound-key',
+                                         'edit' : False,
+                                         'help_text' : '#!dpid',
+                                         'compound_key_fields': [ 'dpid' ]
+                                        },
+                'dpid'                : {
+                                           #'type'           : 'ForeignKey',
+                                           #'rel_field_name' : 'dpid',
+                                           #'rel_obj_type'   : 'switch',
+                                        },
+                'name'                : {
+                                        },
+                'number'              : {
+                                        },
+                'config'              : {
+                                        },
+                'state'               : {
+                                        },
+                'current-features'    : {
+                                        },
+                'advertised-features' : {
+                                        },
+                'supported-features'  : {
+                                        },
+                'peer-features'       : {
+                                        },
+                }
+            },
+
+
+        'switch-config' : {
+            'source' : 'debug-only',
+        },
+
+
+        'switch-alias' : {
+            'source'          : 'user-config',
+            'cascade_delete'  : True,
+            },
+
+
+        'switch-interface-config' : {
+            'source'          : 'debug-only',
+            'cascade_delete'  : True,
+
+            'fields'          : {
+                'broadcast'           : { 'edit' : False
+                                        },
+                'name'                : { 'edit' : False
+                                        },
+                'mode'                : { 
+                                          'edit' : False
+                                        },
+                },
+            },
+
+
+        'host-alias' : {
+            'source'          : 'user-config',
+            'cascade_delete'  : True,
+            },
+
+
+        'link' : { 
+            'source'          : 'switch',
+
+            'fields' : {
+                'link-type'      : {
+                                    'type' : 'CharField'
+                                   },
+                }
+            },
+
+
+        'port' : {
+            'source'          : 'debug-only',
+
+            'fields' : {
+                'switch'              : {
+                                        },
+                'number'              : {
+                                        },
+                'config'              : {
+                                        },
+                'state'               : {
+                                        },
+                'current-features'    : {
+                                        },
+                'advertised-features' : {
+                                        },
+                'supported-features'  : {
+                                        },
+                'peer-features'       : {
+                                        },
+                }
+            },
+
+        'switch-interfaces' : {
+            'source'    : 'switch',
+
+            'fields' : {
+                'Idx'                 : { 
+                                           'edit' : False,
+                                          'type' : 'CharField'
+                                        },
+                'id'                  : {
+                                          'primary_key': True,
+                                          # format's out of the sorting business
+                                          # 'sort' : 'tail-integer',
+                                        },
+                'switch'              : {
+                                        },
+                'name'                : {
+                                          'type' : 'CharField',
+                                          'max_length' : 32,
+                                        },
+                'hardware-address'    : {
+                                        },
+                'config'              : { 
+                                        },
+                'state'               : {
+                                        },
+                'stp-state'           : { 
+                                        },
+                'current-features'    : { 
+                                        },
+                'advertised-features' : {
+                                        },
+                'supported-features'  : {
+                                        },
+                'peer-features'       : {
+                                        },
+                'receiveBytes'        : {
+                                        },
+                'receivePackets'      : {
+                                        },
+                'receiveErrors'       : {
+                                        },
+                'transmitBytes'       : {
+                                        },
+                'transmitPackets'     : {
+                                        },
+                'transmitErrors'      : {
+                                        },
+                },
+            },
+
+        'config' : {
+            'source'          : 'user-config',
+            
+            'fields' : {
+                'name'     : { 'primary_key': True },
+                'version'  : { },
+                'length'   : { },
+                'timestamp': { },
+                },
+            },
+
+        'controller_switches' : {
+            'source'          : 'user-config',
+            
+            'fields' : {
+                'dpid' : { 'primary_key' : True,
+                         },
+                }
+            },
+
+        'test-pktin-route' : {
+            'source' : 'debug-only',
+            
+            'fields' : {
+                'cluster' : {
+                            },
+                'hop'     : {
+                            },
+                'dpid'    : {
+                            },
+                'inPort' :  {
+                            },
+                'outPort':  {
+                            },
+                },
+            },
+
+
+        'performance-data' : {
+            'source' : 'debug-only' ,
+
+            'fields' : {
+                'Pkts'     : {
+                             },
+                'CompName' : {
+                             },
+                'StartTime': {
+                             },
+                }
+            },
+
+
+        'flow-cache-counters' : {
+            'source' : 'sdnplatform',
+            'field-orderings' : {
+                'details' : [
+                                'applName',
+                                'maxFlows',
+                                'activeCnt',
+                                'inactiveCnt',
+                                'addCnt',
+                                'delCnt',
+                                'activatedCnt',
+                                'deactivatedCnd',
+                                'cacheHitCnt',
+                                'missCnt',
+                                'flowModRemovalMsgLossCnt',
+                                'notStoredFullCnt',
+                                'fcObjFreedCnt',
+                                'unknownOperCnt',
+                                'flowCacheAlmostFull',
+                            ],
+
+            },
+
+            'fields' : {
+                'applName'                 : {
+                                             },
+                'maxFlows'                 : {
+                                             },
+                'activeCnt'                : {
+                                             },
+                'inactiveCnt'              : {
+                                             },
+                'addCnt'                   : {
+                                             },
+                'delCnt'                   : {
+                                             },
+                'activatedCnt'             : {
+                                             },
+                'deactivatedCnd'           : {
+                                             },
+                'cacheHitCnt'              : {
+                                             },
+                'missCnt'                  : {
+                                             },
+                'flowModRemovalMsgLossCnt' : {
+                                             },
+                'notStoredFullCnt'         : {
+                                             },
+                'fcObjFreedCnt'            : {
+                                             },
+                'unknownOperCnt'           : {
+                                             },
+                'flowCacheAlmostFull'      : {
+                                             },
+            },
+        },
+
+
+        'flow-cache' : {
+            'source' : 'debug-only',
+
+            'fields' : {
+                'Source-Switch'  : {
+                                   },
+                'InputPort'      : {
+                                   },
+                'SrcMAC'         : {
+                                   },
+                'DestMAC'        : {
+                                   },
+                'EtherType'      : {
+                                   },
+                'Protocol'       : {
+                                   },
+                'SrcPort'        : {
+                                   },
+                'DstPort'        : {
+                                   },
+                'Time'           : {
+                                   },
+               }
+            },
+
+
+        'ev-hist-topology-switch' : {
+            'source' : 'debug-only',
+
+            'fields' : {
+                'Idx'     : {
+                                'primary_key'  : True,
+                            },
+                'Time'    : {
+                            },
+                'Switch'  : {
+                            },
+                'Port'    : {
+                            },
+                'IpAddr'  : {
+                            },
+                'Action'  : {
+                            },
+                'Reason'  : {
+                            },
+                'State'   : {
+                            },
+                }
+            },
+
+
+        'ev-hist-topology-cluster' : {
+            'source' : 'debug-only',
+            
+            'fields' : {
+                'Time'    : {
+                                'primary_key'  : False, 
+                            },
+                'Switch'  : {
+                            },
+                'Action'  : {
+                            },
+                'Reason'  : {
+                            },
+                'State'   : {
+                            },
+                }
+            },
+
+
+        'ev-hist-topology-link' : {
+            'source' : 'debug-only',
+            
+            'fields' : {
+                'Time'           : {
+                                    'primary_key'  : False, 
+                                   },
+                'Source-Switch'  : {
+                                   },
+                'Dest-Switch'    : {
+                                   },
+                'SrcPort'        : {
+                                   },
+                'DstPort'        : {
+                                   },
+                'SrcPortState'   : {
+                                   },
+                'DstPortState'   : {
+                                   },
+                'Action'         : {
+                                   },
+                'Reason'         : {
+                                   },
+                'State'          : {
+                                   },
+                }
+            },
+
+
+        'ev-hist-attachment-point' : {
+            'source' : 'debug-only',
+            
+            'fields' : {
+                'Time_ns' : {
+                                'primary_key'  : False, 
+                            },
+                'Host'    : {
+                            },
+                'Switch'  : {
+                            },
+                'Port'    : {
+                            },
+                'VLAN'    : {
+                            },
+                'Action'  : {
+                            },
+                'Reason'  : {
+                            },
+                }
+            },
+
+
+        'ev-hist-packet-in' : {
+            'source' : 'debug-only',
+            
+            'fields' : {
+                'Time'             : {'primary_key'  : False, 
+                                     },
+                'wildcards'        : {
+                                     },
+                'dataLayerSource'  : {
+                                     },
+                'dataLayerDestination' : {
+                                     },
+                'dataLayerType'    : {
+                                     },
+                'dataLayerVirtualLan' : {
+                                     },
+                'dataLayerVirtualLanPriorityCodePoint' : { 
+                                     },
+                'inputSwitch'      : {
+                                     },
+                'inputPort'        : { 
+                                     },
+                'networkSource'    : { 
+                                     },
+                'networkDestination' : {
+                                     },
+                'networkSourceMaskLen' : {
+                                     },
+                'networkDestinationMaskLen' : {
+                                     },
+                'networkProtocol'  : {
+                                     },
+                'networkTypeOfService' : {
+                                     },
+                'transportSource'  : {
+                                     },
+                'transportDestination' : {
+                                     },
+                'Action         '  : {
+                                     },
+                'Reason'           : {
+                                     },
+                }                   
+            },
+
+
+        'vns-definition' : {
+            'source'          : 'user-config',
+            'source'          : 'show',
+            'cascade_delete'  : True,
+            'show-this'       : [
+                                    ['vns-definition', 'default'],
+                                    ['vns-interface-rule', 'vns-config' ],
+                                ],
+
+            'fields' : {
+               'active'       : {
+                                  'edit' : False,
+                                },
+               'priority'     : {
+                                  'edit' : False,
+                                },
+               'arp-mode'     : {
+                                  'edit' : False,
+                                },
+               'dhcp-mode'    : {
+                                  'edit' : False,
+                                },
+               'dhcp-ip'      : {
+                                  'edit' : False,
+                                },
+               'broadcast'    : {
+                                  'edit' : False,
+                                },
+               }
+            },
+
+
+        'vns-interface-rule' : {
+            'source'          : 'debug-only',
+            'cascade_delete'  : True,
+            'title'           : 'VNS Interface Rules',
+
+            'fields': {
+                'rule'               : { 
+                                         'type' : 'CharField',
+                                         'max_length' : 32,
+                                       },
+                'vns'                : {
+                                       },
+                'mac'                : { 'edit' : False,
+                                       },
+                'tags'               : { 
+                                         'type' : 'CharField',
+                                         'max_length' : 32,
+                                       },
+                'active'             : { 'edit' : False },
+                'allow-multiple'     : { 'edit' : False },
+                'vlan-tag-on-egress' : { 'edit' : False },
+                'description'        : { 'edit' : False },
+                'ip-subnet'          : { 'edit' : False },
+                'ports'              : { 'edit' : False },
+                'priority'           : { 'edit' : False },
+                'rule'               : { 'edit' : False },
+                'switch'             : { 'edit' : False },
+                'tags'               : { 'edit' : False },
+                'vlans'              : { 'edit' : False },
+                }
+            },
+
+
+        'display-vns-interface' : {
+            'source'          : 'user-config',
+            'cascade_delete'  : True,
+
+            'fields': {
+                'id'                : { 
+                                        'edit' : False,
+                                        'type' : 'CharField',
+                                      },
+                'rule'              : {
+                                        'edit' : False,
+                                        'type' : 'CharField',
+                                      },
+                'mac'               : {
+                                        'type' : 'CharField',
+                                        'max_length' : 32,
+                                        'edit' : False },
+                'vlan'              : { 
+                                        'type' : 'Charfield',
+                                        'max_length' : 32,
+                                        'edit' : False },
+                'ips'               : { 
+                                        'type' : 'CharField',
+                                        'max_length' : 32,
+                                        'edit' : False },
+                'attachment-points' : {
+                                        'type' : 'CharField',
+                                        'max_length' : 32,
+                                        'edit' : False },
+                'last-seen'         : { 'edit' : False,
+                                      }
+                }
+            },
+
+
+        'vns-interface-display' : {
+            'source'          : 'user-config',
+            'cascade_delete'  : True,
+
+            'fields': {
+                'id'                : {
+                                        'edit' : False,
+                                        'type' : 'CharField',
+                                      },
+                'rule'              : {
+                                        'edit' : False,
+                                        'type' : 'CharField',
+                                      },
+                'mac'               : {
+                                        'type' : 'CharField',
+                                        'max_length' : 32,
+                                        'edit' : False },
+                'vlan'              : {
+                                        'type' : 'Charfield',
+                                        'max_length' : 32,
+                                        'edit' : False },
+                'ips'               : { 
+                                        'type' : 'CharField',
+                                        'max_length' : 32,
+                                        'edit' : False },
+                'attachment-points' : { 
+                                        'type' : 'CharField',
+                                        'max_length' : 32,
+                                        'edit' : False },
+                'last-seen'         : { 'edit' : False,
+                                      }
+                }
+            },
+
+
+        'vns-access-list': {
+            'source'          : 'user-config',
+            'cascade_delete'  : True,
+
+            'fields' : {
+                'name'       : {
+                                 'edit' : False,
+                                 'cascade_delete' : True
+                               },
+                }
+            },
+
+
+        'vns-access-list-entry': {
+            'source'          : 'user-config',
+            'cascade_delete'  : True,
+
+            'fields' : {
+                #
+                # vns-acl-entry fields are a bit uncommon.  the action and type
+                # can only be configured via the create portion of the command,
+                # while many other fields requre specific validation so that
+                # alternate values can be replaced for some keywords
+                #
+                # the values of the 'validate' field is the name of the
+                # def to call (in the bigSh class)
+                #
+                'vns-access-list'  : {
+                                     },
+                'rule'             : {
+                                       'cascade_delete' : True,
+                                       'sort' : 'integer'
+                                     },
+                'action'           : {
+                                       'edit' : False
+                                     },
+                'type'             : {
+                                       'edit' : False
+                                     },
+                'src-ip'           : {
+                                     },
+                'src-ip-mask'      : {
+                                     },
+                'dst-ip'           : {
+                                     },
+                'dst-ip-mask'      : {
+                                     },
+                'src-tp-port-op'   : {
+                                     },
+                'src-tp-port'      : {
+                                     },
+                'dst-tp-port-op'   : {
+                                     },
+                'dst-tp-port'      : {
+                                     },
+                'icmp-type'        : { 
+                                     },
+                'ether-type'       : { 
+                                     },
+                }
+            },
+
+
+        'vns-interface-access-list': {
+            'source'          : 'user-config',
+            'cascade_delete'  : True,
+
+            'fields' : {
+                'vns'                : {
+                                         'type'       : 'CharField',
+                                         'max_length' : 32
+                                       },
+                'vns-interface-name' : {
+                                         'type'       : 'CharField',
+                                         'max_length' : 32
+                                       },
+                'name'               : {
+                                         'type'       : 'CharField',
+                                         'max_length' : 32
+                                       },
+                }
+            },
+
+
+        'tag' : {
+            'source'          : 'user-config',
+            'source'          : 'switch',
+            },
+
+        
+        'tag-mapping' : {
+            'source'          : 'user-config',
+            'source'          : 'switch',
+
+            'fields' : {
+                'type'      : {
+                              },
+                'host'      : {
+                              },
+                }
+            },
+
+
+        'syncd-config' : {
+            'source'          : 'debug-only',
+            },
+
+        'syncd-progress-info' : {
+            'source'          : 'debug-only',
+            },
+
+        'syncd-transport-config' : {
+            'source'          : 'debug-only',
+            },
+
+        'statd-config' : {
+            'source'          : 'debug-only',
+            },
+
+        'statdropd-config' : {
+            'source'          : 'debug-only',
+            },
+
+        'statdropd-progress-info' : {
+            'source'          : 'debug-only',
+            },
+
+        'tech-support-config' : {
+            },
+
+        'tunnel-details' : {
+            'source' : 'switch',
+
+            'fields' : {
+                'dpid'              : {
+                                         'primary_key': True,
+                                      },
+                'localTunnelIPAddr' : {
+                                      },
+                'tunnelPorts'       : {
+                                      },
+                },
+            },
+
+
+        'controller-summary' : {
+            'source' : 'switch',
+
+            'fields' : {
+                '# Access Control Lists'            : {
+                                                      },
+                '# VNS Interfaces'                  : {
+                                                      },
+                '# hosts'                           : {
+                                                      },
+                '# VNSes'                           : {
+                                                      },
+                '# attachment points'               : {
+                                                      },
+                '# inter-switch links'              : {
+                                                      },
+                '# IP Addresses'                    : {
+                                                      },
+                '# VNS Interfaces with ACL applied' : {
+                                                      },
+                },
+            },
+
+
+        'switch-interface-alias' : {
+            'source'          : 'commands',
+            'cascade_delete'  : True,
+
+            'fields' : {
+                'id'          : {
+                                }
+                }
+            },
+
+
+        'host-config' : {
+            'source'          : 'show',
+            'url'             : 'device',
+
+            'fields' : {
+                'Idx'                : {
+                                          'edit' : False,
+                                          'type' : 'CharField'
+                                       },
+                'mac'                : { 
+                                          'json_serialize_string': True,
+                                          'max_length': 17,
+                                          'null': False,
+                                          'type': 'CharField',
+                                          'edit' : False,
+                                        },
+                'vendor'              : {
+                                          'edit' : False,
+                                        },
+                'ips'                 : {
+                                          'edit' : False
+                                        },
+                'attachment-points'   : {
+                                          'edit' : False
+                                        },
+                'tag'                 : {
+                                          'edit' : False
+                                        },
+                'host-alias'          : { 'help_text' : 'Host alias',
+                                          'edit' : False,
+                                        },
+                'last-seen'           : {
+                                          'help_text': 'Last time a packet was seen by the controller',
+                                          'json_serialize_string': True,
+                                          'null': True,
+                                          'type': 'DateTimeField',
+                                        },
+                },
+            },
+
+        'host': {
+            # hosts are now directly fetched via rest api. 'has_rest_model' isn't set
+            # for this table.
+            # XXX perhaps these types of descriptions need to be
+            # in a file other than climodelinfo?
+            'source'          : 'user-config',
+            'source'          : 'display',
+            'url'             : 'device',
+            'config-obj-type' : 'host-config',
+
+            'fields': {
+                'mac'                : { 
+                                          'json_serialize_string': True,
+                                          'max_length': 17,
+                                          'null': False,
+                                          'primary_key': True,
+                                          'type': 'CharField',
+                                          'edit' : False,
+                                        },
+                'address-space'       : {
+                                           'edit'           : False,
+                                           'type'           : 'ForeignKey',
+                                           'rel_field_name' : 'name',
+                                           'rel_obj_type'   : 'address-space',
+                                        },
+                'vlan'                : {
+                                          'help_text'            : 'VLAN Associated with host',
+                                          'json_serialize_string': False,
+                                          'null'                 : True,
+                                          'type'                 : 'IntegerField',
+                                          'edit'                 : False,
+                                          'searchable'           : True,
+                                        },
+                'dpid'                : {
+                                           'edit'           : False,
+                                           'type'           : 'ForeignKey',
+                                           'rel_field_name' : 'dpid',
+                                           'rel_obj_type'   : 'switches',
+                                        },
+                'ipv4'                : {
+                                           'edit' : False,
+                                        },
+                # Attachment point isn't searchable
+                #'attachment-points'  : {
+                                           #'edit' : False
+                                        #},
+                'last-seen'           : {
+                                          'help_text': 'Last time a packet was seen by the controller',
+                                          'json_serialize_string': True,
+                                          'null': True,
+                                          'type': 'DateTimeField',
+                                        },
+                 },
+            },
+
+
+        'host-attachment-point' : {
+            # directly fetched via rest api. 
+            # 'has_rest_model' isn't set for this table.
+            'source'          : 'controller',
+            'url'             : 'device',
+
+             'fields': {
+                'mac'          : {
+                                  'json_serialize_string': True,
+                                  'null': True,
+                                  'rel_field_name': 'mac',
+                                  'rel_obj_type': 'host',
+                                  'type': 'ForeignKey',
+                                 },
+                'vlan'         : {
+                                   'help_text': 'VLAN Associated with host',
+                                   'json_serialize_string': False,
+                                   'null': True,
+                                   'type': 'IntegerField',
+                                   'edit' : False,
+                                    'searchable' : True,
+                                 },
+                'id'           : {
+                                  'help_text': '#|mac|dpid|ingress-port',
+                                  'json_serialize_string': True,
+                                  'max_length': 64,
+                                  'null': False,
+                                  'primary_key': True,
+                                  'type': 'CharField',
+                                 },
+                'dpid'         : { 'json_serialize_string': True,
+                                   'null': True,
+                                   'rel_field_name': 'dpid',
+                                   'rel_obj_type': 'switch',
+                                   'type': 'ForeignKey',
+                                 },
+                'ingress-port' : {
+                                  'help_text': 'Open flow port number of ingress port',
+                                  'json_serialize_string': False,
+                                  'null': True,
+                                  'type': 'IntegerField',
+                                 },
+                'status'       : {
+                                   'help_text': 'Error description, blank mean no error ',
+                                   'json_serialize_string': True,
+                                   'max_length': 64,
+                                   'null': True,
+                                   'type': 'CharField',
+                                 },
+                'last-seen'    : {
+                                   'help_text': 'Last time a packet was seen by the controller',
+                                   'json_serialize_string': True,
+                                   'null': True,
+                                   'type': 'DateTimeField',
+                                 },
+                'ipv4'         : { # added to enable searching
+                                    'edit' : False,
+                                    'searchable' : True,
+                                 },
+                 },
+             },
+
+        'host-network-address': {
+            # directly fetched via rest api. 
+            # 'has_rest_model' isn't set for this table.
+            'source'          : 'switch',
+            'url'             : 'device',
+
+            'fields': {
+                'mac'        : { 'json_serialize_string': True,
+                                 'null': True,
+                                 'rel_field_name': 'mac',
+                                 'rel_obj_type': 'host',
+                                 'type': 'ForeignKey',
+                                 'edit' : False,
+                               },
+                'vlan'       : {
+                                 'help_text': 'VLAN Associated with host',
+                                 'json_serialize_string': False,
+                                 'null': True,
+                                 'type': 'IntegerField',
+                                 'edit' : False,
+                                 'searchable' : True,
+                               },
+                'id'         : {
+                                 'help_text': '#|mac|ipv4',
+                                 'json_serialize_string': True,
+                                 'max_length': 64,
+                                 'null': False,
+                                 'primary_key': True,
+                                 'type': 'CharField',
+                               },
+                'ip-address':  {
+                                 'help_text': 'IP Address of host',
+                                 'json_serialize_string': True,
+                                 'max_length': 15,
+                                 'null': True,
+                                 'type': 'CharField',
+                                 'edit' : False,
+                              },
+                'last-seen' : {
+                                'help_text': 'Last time a packet was seen by the controller',
+                                'json_serialize_string': True,
+                                'null': True,
+                                'type': 'DateTimeField',
+                              },
+                'ipv4'      : { # added to enable searching
+                                 'max_length': 15,
+                                 'null': True,
+                                 'type': 'CharField',
+                                 'edit' : False,
+                              },
+                'dpid'      : {
+                                 'edit' : False,
+                                 'searchable' : True,
+                              },
+                },
+            },
+
+        'host-vns-interface' : {
+            # directly fetched via rest api. 
+            # 'has_rest_model' isn't set for this table.
+            'source'          : 'controller',
+            'url'             : 'vns/device-interface',
+            'cascade_delete'  : True,
+
+            'field-orderings' : {
+                'default'    : [ 'Idx', 'vns', 'host', 'ips',  ],
+                'vns-config' : [ 'Idx',        'host', 'ips',  ]
+                },
+            'fields' : {
+                'id'             : {
+                                     'compound_key_fields': [
+                                                              'vns',
+                                                              'vlan',
+                                                              'mac',
+                                                              'interface'
+                                                            ],
+                                     'help_text': '#|host|interface',
+                                     'json_serialize_string': False,
+                                     'null': False,
+                                     'primary_key': True,
+                                     'type': 'compound-key',
+                                   },
+                'address-space'  : { 
+                                     'json_serialize_string': True,
+                                     'null': False,
+                                     'rel_field_name': 'mac',
+                                     'rel_obj_type': 'host',
+                                     'type': 'ForeignKey',
+                                     'edit' : False,
+                                   },
+                'vlan'           : {
+                                     'type' : 'CharField',
+                                     'max_length' : 32,
+                                     'edit' : False
+                                   },
+                'mac'            : { 
+                                     'json_serialize_string': True,
+                                     'null': False,
+                                     'rel_field_name': 'mac',
+                                     'rel_obj_type': 'host',
+                                     'type': 'ForeignKey',
+                                     'edit' : False,
+                                   },
+                'interface':       {
+                                     'json_serialize_string': True,
+                                     'null': False,
+                                     'rel_field_name': 'id',
+                                     'rel_obj_type': 'vns-interface',
+                                     'type': 'ForeignKey',
+                                   },
+                'ips'            : {
+                                     'type' : 'CharField',
+                                     'max_length' : 32,
+                                     'edit' : False
+                                   },
+                }
+            },
+
+        'vns-interface' : {
+            # directly fetched via rest api. 
+            # 'has_rest_model' isn't set for this table.
+            'source'        : 'controller',
+            'url'           : 'vns/interface',
+
+            'field-orderings' : {
+                'default'    : ['Idx', 'vns', 'interface', 'rule', 'last-seen', ],
+                'vns-config' : ['Idx',        'interface', 'rule', 'last-seen', ]
+            },
+            'fields' : {
+                'id'         : {
+                                'compound_key_fields': [ 'vns',
+                                                         'interface'],
+                                 'help_text': '#|vns|interface',
+                                 'json_serialize_string': False,
+                                 'null': False,
+                                 'primary_key': True,
+                                 'type': 'compound-key',
+                               },
+                'vns'        : {
+                                'json_serialize_string': True,
+                                'null': False,
+                                'rel_field_name': 'id',
+                                'rel_obj_type': 'vns-definition',
+                                'type': 'ForeignKey',
+                               },
+                'interface'  : {
+                                 'json_serialize_string': True,
+                                 'max_length': 32,
+                                 'null': False,
+                                 'type': 'CharField',
+                                },
+                'rule'        : { 'json_serialize_string': True,
+                                  'null': True,
+                                  'rel_field_name': 'id',
+                                  'rel_obj_type': 'vns-interface-rule',
+                                  'type': 'ForeignKey',
+                                },
+                'last-seen'   : {
+                                  'help_text': 'Last time a packet was seen by the controller on this interface',
+                                  'json_serialize_string': True,
+                                  'null': True,
+                                  'type': 'DateTimeField',
+                                },
+                }
+            }
+
+        # done.
+        }