Trying to remove pyc files that are getting past gitignore

Change-Id: I17a060d3d7814a654a67bf36552d6133a7add092
diff --git a/cli/cli/error.pyc b/cli/cli/error.pyc
old mode 100755
new mode 100644
index 65fad68..175aac1
--- a/cli/cli/error.pyc
+++ b/cli/cli/error.pyc
Binary files differ
diff --git a/cli/cli/fmtcnv.py b/cli/cli/fmtcnv.py
deleted file mode 100755
index 1e53fe1..0000000
--- a/cli/cli/fmtcnv.py
+++ /dev/null
@@ -1,1295 +0,0 @@
-#
-# Copyright (c) 2012,2013 Big Switch Networks, Inc.
-#
-# Licensed under the Eclipse Public License, Version 1.0 (the
-# "License"); you may not use this file except in compliance with the
-# License. You may obtain a copy of the License at
-#
-#      http://www.eclipse.org/legal/epl-v10.html
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-# implied. See the License for the specific language governing
-# permissions and limitations under the License.
-#
-
-#  sdnsh - The Controller Shell
-
-import base64
-import struct
-import time
-import re
-from datetime import datetime, timedelta, tzinfo
-from calendar import timegm
-from timesince import timesince, timesince_sec
-import doctest
-import traceback
-import utif
-
-
-# Timezone constants
-class Utc(tzinfo):
-    def utcoffset(self, dt):
-        return timedelta(0)
-    def tzname(self, dt):
-        return "UTC"
-    def dst(self, dt):
-        return timedelta(0)
-UTC = Utc()
-
-
-class Pst(tzinfo):
-    def utcoffset(self, dt):
-        return timedelta(0,0,0,0,0,-8)
-    def tzname(self, dt):
-        return "PST"
-    def dst(self, dt):
-        return timedelta(0,0,0,0,0,-7)
-PST = Pst()
-
-
-alias_dicts = {}
-
-
-def update_alias_dict(obj_type, dict):
-    """
-    Update alias dictionaries: for switch, host, etc.
-    """
-    global alias_dicts
-    alias_dicts[obj_type] = dict
-
-
-def convert_mac_in_base64_byte_array_to_hex_string(i, data=None):
-    # hmmm - tasty python
-    if i == "*" or i == "": 
-        return "*"
-    return ":".join(["%0.2x" % x for x in struct.unpack('BBBBBB', base64.b64decode(i))])
-
-
-def convert_mac_in_decimal_to_hex_string(i, data=None):
-    if i == "*" or i == "":
-        return "*"
-    mac = hex(i)
-    # some python implementations append 'L' to hex() so we need to remove it
-    if mac[len(mac)-1] == 'L':
-        mac = mac[:len(mac)-1]
-    mac = ('0' * (14 - len(mac)) + mac[2:])
-    return ':'.join([mac[x:x+2] for x in xrange(0, len(mac), 2)])
-
-
-def convert_ip_in_integer_to_dotted_decimal(i, data=None):
-    if i == "*" or i == "": 
-        return "*"
-    return '.'.join(reversed([ (str((i >> (8*x)) & 0xff)) for x in range(0,4)]))
-
-
-def convert_integer_to_bitmask(i, data=None):
-    if i == "*" or i == "": 
-        return "*"
-    return bin(i)
-
-
-def convert_long_to_dpid(i, data=None):
-    if i == "*" or i == "": 
-        return "*"
-    i = int(i)
-    return ':'.join(reversed([ "%-.2x" % ((i >> (8*x)) & 0xff) for x in range(0,8)]))
-
-
-def convert_signed_short_to_unsigned(i, data=None):
-    try:
-        i = int(i)
-    except:
-        return i
-
-    if i < 0: 
-        return i + 2**16
-    else: 
-        return i
-
-
-def convert_signed_short_for_vlan(i, data=None):
-    if i == -1:
-        return "-"
-    else:
-        return convert_signed_short_to_unsigned(i, data)
-
-
-def convert_to_string(i, data=None):
-    if type(i) == list:
-        return ', '.join(i)
-    elif type(i) == dict:
-        return ', '.join(["%s:%s" % x for x in i.dict()])
-    else:
-        return str(i)
-
-
-def print_hex(i, data=None):
-    if i == "" or not int(i): 
-        return ""
-    else: 
-        return hex(i)
-
-
-def timestamp_to_local_timestr(i, data=None):
-    if i == '':
-        return ''
-    return time.strftime("%Y-%m-%d %H:%M:%S %Z", time.localtime(i/1000))
-
-
-def utc_timestr_to_timestamp(s):
-    return timegm(time.strptime(s, "%Y-%m-%d %H:%M:%S.%f")) * 1000
-
-
-def print_from_utc_timestr(s, data=None):
-    """Converts from a UTC time string like 2010-12-12 15:27:41.650000
-    to time string in local timezone like 2011-06-23 02:51:41 PDT
-
-    # Doctest only valid in Pacific Time ;-|
-    >>> print_from_utc_timestr('2010-12-12 15:27:41.650000')
-    '2010-12-12 07:27:41 PST'
-    >>> print_from_utc_timestr('2010-06-12 15:27:41.650000')
-    '2010-06-12 08:27:41 PDT'
-    >>> print_from_utc_timestr('')
-    ''
-    >>> print_from_utc_timestr(None)
-    ''
-    >>> print_from_utc_timestr('Not a valid timestamp')
-    ''
-    """
-    ret = ''
-    try:
-        ret = timestamp_to_local_timestr(utc_timestr_to_timestamp(s))
-    except:
-        pass
-    return ret
-
-
-def print_time_since_utc(i, data=None):
-    if i == None or i == '':
-        return ''
-    return timesince(datetime.fromtimestamp((i/1000)))
-
-
-def print_time_since_utc_timestr(s, data=None, now=None):
-    """Converts from a UTC time string like 2010-12-12 15:27:41.65000
-    to human readabel string like 'Last seen 4 minutes ago'
-
-    >>> now = datetime(*(time.strptime('2010-12-12 15:27:41.650000', "%Y-%m-%d %H:%M:%S.%f")[0:6]+(0, PST)))
-    >>> print_time_since_utc_timestr('2010-12-12 15:27:41.650000', now=now)
-    '8 hours'
-    >>> print_time_since_utc_timestr('')
-    ''
-    >>> print_time_since_utc_timestr(None)
-    ''
-    >>> print_time_since_utc_timestr('Not a valid timestamp')
-    ''
-    """
-    ret = ''
-    if s == '':
-        return ''
-    try:
-        date_obj = datetime(*(time.strptime(s, "%Y-%m-%d %H:%M:%S.%f")[0:6] + (0, UTC)))
-        ret = timesince(date_obj, now)
-    except Exception, e:
-        try:
-            date_obj = datetime(*(time.strptime(s, "%Y-%m-%d %H:%M:%S")[0:6] + (0, UTC)))
-            ret = timesince(date_obj, now)
-        except Exception, e:
-            try:
-                date_obj = datetime(*(time.strptime(s, "%Y-%m-%dT%H:%M:%S.%fZ")[0:6] + (0, UTC)))
-                ret = timesince(date_obj, now)
-            except Exception, e:
-                ret = "<fail>"
-                pass
-    return ret
-
-
-def print_timesince_msec_since(i, data=None):
-    if i == '':
-        return i
-    return timesince_sec(int(i)/1000)
-
-def print_enum_string_and_int(values, i, not_found_val = None):
-    if values and i in values:
-        return "%s(%s)" % (values[i], i)
-    else:
-        if not_found_val:
-            return not_found_val
-        else:
-            return i
-
-
-def print_enum_string_and_hex_int(values, i, not_found_val = None):
-    if values and i in values:
-        return "%s(%#x)" % (values[i], int(i))
-    else:
-        if not_found_val:
-            return not_found_val
-        else:
-            return i
-
-
-def print_mask_enum_string_and_int(values, bits):
-    if bits == "": 
-        return bits
-    bits_copy = bits
-    enums = []
-    bit_test = 1
-    while bits_copy:
-        if bit_test & bits_copy:
-            if bit_test in values:
-                enums.append(values[bit_test])
-            bits_copy &= bits_copy-1
-        bit_test <<= 1
-    if enums:
-        return ",".join(enums) + "(%s)" % (hex(bits) if bits > 9 else bits)
-    else:
-        if bits > 9:
-            return hex(int(bits))
-        return "0"
-
-
-def print_physical_port(i, data=None, switch_key=None):
-    global alias_dicts
-
-    if not data:
-        return str(i)
-    name_dict = alias_dicts.get("portNames")
-    if not name_dict:
-        return str(i)
-    if switch_key:
-        key_string = data[switch_key] + '.' + "%d" % i
-    elif 'switch' in data:
-        key_string = data['switch'] + '.' + "%d" % i
-    elif 'Switch' in data:
-        key_string = data['Switch'] + '.' + "%d" % i
-    # return the physical name if it exists, otherwise i
-    return str(name_dict.get(key_string, i))
-
-
-def print_byte_unit(i, data=None, suffix=None):
-    """
-    Convert the value of 'i' into a byte rate value,
-    for example '10 GB'
-    """
-    try:
-        value = int(i)
-    except:
-        if i == '':
-            return 'Unknown'
-        return i
-
-    converter = (
-                    (1024 * 1028 * 1024 * 1024 * 1024 , ' PB'),
-                    (1024 * 1028 * 1024 * 1024 ,        ' TB'),
-                    (1024 * 1028 * 1024 ,               ' GB'),
-                    (1028 * 1024 ,                      ' MB'),
-                    (1024 ,                             ' KB'),
-                )
-    if suffix == None:
-        suffix = ''
-
-    for idx, (boundary, name) in enumerate(converter):
-        value = i / boundary
-        if value:
-            return '%s%s%s' % (value, name, suffix)
-    else:
-        return '%s B%s' % (i, suffix)
-
-def print_byte_rate(i, data=None):
-    return print_byte_unit(i, data, 'ps')
-
-def print_bit_unit(i, data=None, suffix=None):
-    """
-    Convert the value of 'i' into a bit rate value,
-    for example '10 Gb'
-    """
-    try:
-        value = int(i)
-    except:
-        if i == '':
-            return 'Unknown'
-        return i
-
-    converter = (
-                    (1000 * 1000 * 1000 * 1000 * 1000 , ' Pb'),
-                    (1000 * 1000 * 1000 * 1000 ,        ' Tb'),
-                    (1000 * 1000 * 1000 ,               ' Gb'),
-                    (1000 * 1000 ,                      ' Mb'),
-                    (1000 ,                             ' Kb'),
-                )
-    if suffix == None:
-        suffix = ''
-
-    for idx, (boundary, name) in enumerate(converter):
-        value = i / boundary
-        if value:
-            return '%s%s%s' % (value, name, suffix)
-    else:
-        return '%s b%s' % (i, suffix)
-
-def print_bit_rate(i, data=None):
-    return print_bit_unit(i, data, 'ps')
-
-
-def decode_openflow_port(i, data=None, switch_key=None):
-    if i == "*" or i == "": 
-        return "*"
-    # If the first character of the port name is a plus sign ('+')
-    # this is intended to bypass any lookup -- its a way to indicate
-    # the field is already an openflow interface.
-    if isinstance(i, unicode) and  i[0] == '+':
-        return i[1:]
-    i = convert_signed_short_to_unsigned(i)
-    i &= 0xffff
-    values = { 
-        0xfff8 : "input",
-        0xfff9 : "table",
-        0xfffa : "normal",
-        0xfffb : "flood",
-        0xfffc : "all",
-        0xfffd : "controller",
-        0xfffe : "local",
-        0xffff : "none",
-        }
-    if i >= 0xff00:
-        if i in values:
-            return "%s (%s)" % (i, values[i])
-        else:
-            return "%s" % values[i]
-    phys_port = print_physical_port(i, data, switch_key)
-    if str(i) != phys_port:
-        return str(i) + ' (' + phys_port + ')'
-    return str(i)
-
-
-def decode_openflow_port_src_switch(i, data=None):
-    return decode_openflow_port(i, data, 'src-switch')
-
-
-def decode_openflow_port_source_switch(i, data=None):
-    return decode_openflow_port(i, data, 'Source-Switch')
-
-
-def decode_openflow_port_dst_switch(i, data=None):
-    return decode_openflow_port(i, data, 'dst-switch')
-
-
-def decode_openflow_port_dest_switch(i, data=None):
-    return decode_openflow_port(i, data, 'Dest-Switch')
-
-
-def decode_openflow_port_inputSwitch(i, data=None):
-    return decode_openflow_port(i, data, 'inputSwitch')
-
-
-def decode_openflow_port_dpid(i, data=None):
-    return decode_openflow_port(i, data, 'dpid')
-
-
-# well known cookie id's managed directly, other's can be registered
-cookie_app_ids = {
-    1: "lswitch",
-    2: "FL:forw",
-    3: "TUN:forw",
-    4: "VTA:forw",
-   10: "static",
-}
-
-flow_cookie_registry = { }
-
-def register_flow_cookie_decoder(name, app_id, encoder_proc, decoder_proc, conversion_dict_name):
-    """
-    Register a flow encoding/decoding strategy
-    """
-    # should be provide a return code?
-
-    cookie_app_ids[app_id] = name
-    flow_cookie_registry[int(app_id)] = {
-                                          'name'    : name,
-                                          'encoder' : encoder_proc,
-                                          'decoder' : decoder_proc,
-                                          'cvt'     : conversion_dict_name
-                                        }
-
-def callout_flow_encoders(context):
-    for (registrant, registry) in flow_cookie_registry.items():
-        dict_name = registry['cvt']
-        alias_dicts[dict_name] = registry['encoder'](context)
-
-
-def decode_flow_cookie(i, data=None):
-    cookie = i
-    new_cookie = None
-
-    # 12 bits app id - 20 bits flow hash - 32 bits user cookie
-    app_id = (cookie >> 52) & ((1 << 12) - 1)
-
-    flow_hash = (cookie >> 32) & ((1 << 20) - 1)
-    if app_id in cookie_app_ids:
-        new_cookie = cookie_app_ids[app_id]
-        if cookie_app_ids[app_id] == "static":
-            global alias_dicts
-            flow_map = alias_dicts.get("staticflow", [])
-            if flow_hash in flow_map:
-                new_cookie += "-%s" % flow_map[flow_hash]
-            else:
-                new_cookie += "-flow_hash: %s" % flow_hash
-        else:
-            if flow_hash != 0:
-                new_cookie += "-flow_hash: %s" % flow_hash
-        user_cookie = (cookie & ((1 << 32) - 1))
-
-        if user_cookie:
-            if app_id in flow_cookie_registry:
-                # Call registered function with the conversion dictionary
-                # and the cookie
-                conversion_dict_name = flow_cookie_registry[app_id]['cvt']
-                new_cookie = (flow_cookie_registry[app_id]['decoder'])(
-                                alias_dicts.get(conversion_dict_name), cookie)
-            else:
-                new_cookie += ", cookie: %#x" % user_cookie
-    else:
-        # if the app_id isn't known, display all 64 bits of the cookie
-        new_cookie = "unknown %s, cookie %s" % (app_id, cookie)
-
-    if new_cookie:
-        return new_cookie
-
-    return '%#x' % cookie
-
-
-ether_type_to_name_dict = {
-    0x0800 : "ip",
-    0x0806 : "arp",
-    0x8035 : "rarp",
-    0x809B : "appletalk",
-    0x809B : "appletalk-aarp",
-    0x8100 : "802.1Q",
-    0x8137 : "ipx",
-    0x8138 : "novell",
-    0x86dd : "ipv6",
-    0x8847 : "mpls",
-    0x8848 : "mpls-mc",
-    0x88cc : "lldp",
-}
-
-
-ether_type_to_number_dict = dict([[v, n] for (n,v) in ether_type_to_name_dict.items()])
-
-
-def decode_ether_type(i, data=None):
-    if i == "*" or i == "": 
-        return "*"
-    if type(i) != int and i.startswith("0x"):
-        i = int(i, 16) # i is in hex
-    i = convert_signed_short_to_unsigned(i)
-
-    try:
-        i &= 0xffff
-    except:
-        return '*cvt %s %s*' % (i, type(i))
-
-    return print_enum_string_and_hex_int(ether_type_to_name_dict, i)
-
-
-def decode_network_protocol(i, data=None):
-    if i == "*" or i == "": 
-        return "*"
-    ether_type = "ip" # default
-    if data:
-        if 'ether-type' in data:
-            ether_type = decode_ether_type(data['ether-type'])
-        elif 'dataLayerType' in data:
-            ether_type = decode_ether_type(data['dataLayerType'])
-        ether_type = str(ether_type).split('(')[0]
-    net_proto_hash = {
-        "ip" : {
-            1  : "icmp",
-            2  : "igmp",
-            3  : "ggp",
-            4  : "ip-in-ip",
-            6  : "tcp",
-            17 : "udp",
-            50 : "esp",
-            51 : "ah"
-            },
-        "arp": {
-            1  : "arp-req",
-            2  : "arp-rep",
-            3  : "rarp-req",
-            4  : "rarp-rep",
-            5  : "drarp-req",
-            6  : "drarp-rep",
-            7  : "drarp-err",
-            8  : "inarp-req",
-            9  : "inarp-rep",
-            }
-        }
-    return print_enum_string_and_int(net_proto_hash.get(ether_type, None), i)
-
-tcp_decode_port_dict = {
-    22   : "ssh",
-    53   : "dns",
-    80   : 'http',
-    443  : 'https'
-}
-
-tcp_name_to_number_dict = dict([[v, n] for (n,v) in tcp_decode_port_dict.items()])
-
-# fill in values if we want!
-def decode_tcp_port(i): 
-    return print_enum_string_and_int(tcp_decode_port_dict, i)
-
-
-udp_decode_port_dict = {
-    53 : "dns",
-}
-
-udp_name_to_number_dict = dict([[v, n] for (n,v) in udp_decode_port_dict.items()])
-
-def decode_udp_port(i): 
-    values = { 
-        }
-    return print_enum_string_and_int(values, i)
-
-
-icmp_type_code_hash = {
-    0 : { "name"  : "echo-rep" },
-    3 : { "name"  : "dest-unreach",
-          "codes" : { 0 : "net-unreach",
-                      1 : "host-unreach",
-                      2 : "proto-unreach",
-                      3 : "port-unreach",
-                      4 : "frag-needed",
-                      5 : "src-rt-fail",
-                      6 : "dest-net-unk",
-                      7 : "dest-host-unk",
-                      8 : "src-host-isol",
-                      9 : "prohibit-dest-net",
-                      10 : "prohibit-dest-host",
-                      11 : "dest-net-unreach-for-tos",
-                      12 : "dest-host-unreach-for-tos",
-                      13 : "prohibit-comm" } },
-    4 : { "name"  : "src-quench" },
-    5 : { "name"  : "redirect",
-          "codes" : { 0 : "redir-for-net",
-                      1 : "redir-for-host",
-                      2 : "redir-for-net-for-tos",
-                      3 : "redir-for-host-for-tos" } },
-    6 : { "name"  : "alt-addr-for-host" },
-    8 : { "name"  : "echo-req" },
-    9 : { "name"  : "router-advert" },
-    10: { "name"  : "router-sel" },
-    11: { "name"  : "time-exceeded",
-          "codes" : { 0 : "ttl-exceeded",
-                      1 : "frag-reassemble-exceeded" } },
-    12: { "name"  : "param-problem",
-          "codes" : { 0 : "pointer-error",
-                      1 : "missing-opt",
-                      2 : "bad-length" } },
-    13: { "name" : "timestamp-request" },
-    14: { "name" : "timestamp-reply" },
-    15: { "name" : "info-request" },
-    16: { "name" : "info-reply" },
-    17: { "name" : "addr-mask-request" },
-    18: { "name" : "addr-mask-reply" },
-    30: { "name" : "traceroute" }
-}
-                      
-
-def decode_icmp_type(i, data=None):
-    if i in icmp_type_code_hash:
-        return "%s(%s)" % (icmp_type_code_hash[i]['name'], i)
-    else:
-        return i
-
-
-def decode_icmp_code(i, data=None):
-    if data and 'transportSource' in data:
-        icmp_type = decode_icmp_type(data['transportSource'], data)
-    elif data and 'src-port' in data:
-        icmp_type = decode_icmp_type(data['src-port'], data)
-    try:
-        return print_enum_string_and_int(icmp_type_code_hash[icmp_type]["codes"], i, "-")
-    except:
-        return "-"
-
-
-def decode_src_port(i, data=None):
-    i = convert_signed_short_to_unsigned(i)
-    if data:
-        if 'networkProtocol' in data:
-            net_proto = decode_network_protocol(data['networkProtocol'], data)
-        elif 'protocol' in data:
-            net_proto = decode_network_protocol(data['protocol'], data)
-        elif 'Protocol' in data:
-            net_proto = decode_network_protocol(data['Protocol'], data)
-        else:
-            return i
-        net_proto = str(net_proto).split('(')[0]
-        if net_proto == "icmp":
-            return decode_icmp_type(i)
-        elif net_proto == "tcp":
-            return decode_tcp_port(i)
-        elif net_proto == "udp":
-            return decode_udp_port(i)
-    return i
-
-
-def decode_dst_port(i, data=None):
-    i = convert_signed_short_to_unsigned(i)
-    if data:
-        if 'networkProtocol' in data:
-            net_proto = decode_network_protocol(data['networkProtocol'], data)
-        elif 'protocol' in data:
-            net_proto = decode_network_protocol(data['protocol'], data)
-        elif 'Protocol' in data:
-            net_proto = decode_network_protocol(data['Protocol'], data)
-        else:
-            return i
-        net_proto = str(net_proto).split('(')[0]
-        if net_proto == "icmp":
-            return decode_icmp_code(i, data)
-        elif net_proto == "tcp":
-            return decode_tcp_port(i)
-        elif net_proto == "udp":
-            return decode_udp_port(i)
-    return i
-
-
-def decode_actions(action_list, data=None):
-    TTL_DECREMENT_SUBTYPE = 18
-    SET_TUNNEL_DST_SUBTYPE = 2
-    NICIRA_VENDOR_ID=8992  #0x00002320
-    BSN_VENDOR_ID=6035143  #0x5c16c7
-    decoded_actions = []
-    for a in action_list:
-        decoded_action = a['type']
-        if decoded_action == "OUTPUT":
-            port = decode_openflow_port(a['port'], data)
-            decoded_action = "output=%s" % (port,)
-        elif decoded_action == "OPAQUE_ENQUEUE":
-            # LOOK! Not decoded to physical port since the configuration part of CLI does not do the translation either
-            decoded_action = "enqueue=%d:0x%02x" % (a['port'], a['queueId'])
-        elif decoded_action == "SET_VLAN_ID":
-            decoded_action = "set-vlan-id=%d" % a['virtualLanIdentifier']
-        elif decoded_action == "SET_VLAN_PCP":
-            decoded_action = "set-vlan-priority=0x%02x" % a['virtualLanPriorityCodePoint']
-        elif decoded_action == "STRIP_VLAN":
-            decoded_action = "strip-vlan"
-        elif decoded_action == "SET_DL_SRC":
-            decoded_action = "set-src-mac=%s" % a['dataLayerAddress']
-        elif decoded_action == "SET_DL_DST":
-            decoded_action = "set-dst-mac=%s" % a['dataLayerAddress']
-        elif decoded_action == "SET_NW_SRC":
-            decoded_action = "set-src-ip=%s" % decode_ipaddr(a['networkAddress'])
-        elif decoded_action == "SET_NW_DST":
-            decoded_action = "set-dst-ip=%s" % decode_ipaddr(a['networkAddress'])
-        elif decoded_action == "SET_NW_TOS":
-            decoded_action = "set-tos-bits=0x%02x" % a['networkTypeOfService']
-        elif decoded_action == "SET_TP_SRC":
-            decoded_action = "set-src-port=%d" % a['transportPort']
-        elif decoded_action == "SET_TP_DST":
-            decoded_action = "set-dst-port=%d" % a['transportPort']
-        elif decoded_action =="VENDOR":
-            if 'vendor' in a:
-                if a['vendor']==NICIRA_VENDOR_ID:
-                    if 'vendorData' in a:
-                        vendordata=a['vendorData'].decode('base64','strict')
-                        vendordata=vendordata.encode('hex')
-                        if vendordata.startswith('0012'):
-                            decoded_action="nicira_vendor:dec TTL"
-                        else:
-                            decoded_action="nicira_vendor:unknown"
-                if a['vendor']==BSN_VENDOR_ID:
-                    if 'vendorData' in a:
-                        vendordata=a['vendorData'].decode('base64','strict')
-                        vendordata=vendordata.encode('hex')
-                        if vendordata.startswith('00000001'):  #BSN_ACTION_MIRROR
-                            decoded_action="bsn_vendor:MIRROR"
-                        elif vendordata.startswith('00000002'): #SET_TUNNEL_DST_SUBTYPE
-                            ip=vendordata[8:]
-                            ipaddr=[]
-                            for i in [6,4,2,0]:
-                                ipint= ip[i:i+2]
-                                ipint= str(int(ipint,16))
-                                ipaddr.append(ipint)
-                            ipstr='.'.join(ipaddr)
-                            decoded_action="bsn_vendor:TUNNL:" + ipstr
-                        else:
-                            decoded_action="bsn_vendor:unknown"
-        decoded_actions.append(decoded_action)
-    if len(decoded_actions) == 0:
-        return "drop"
-    else:
-        return ",".join(decoded_actions)
-
-
-def decode_port_counter(i, data=None):
-    if i == -1: 
-        return "n/a"
-    else: 
-        return i
-
-
-def decode_macaddr(addr):
-    ret = 'invalid-mac-addr'
-    try:
-        macbytes = base64.b64decode(addr)
-        ret = ':'.join(["%02x" % ord(b) for b in macbytes])
-    except:
-        # ignore exception, the address is already set to invalid
-        pass
-    return ret
-
-
-def decode_ipaddr(addr):
-    ret = 'invalid-ip-addr'
-    try:
-        ipbytes = [0, 0, 0, 0]
-        for i in range(4):
-            ipbytes[3-i] = addr & 0x000000ff
-            addr = addr>>8
-        ret = '.'.join(["%d" % b for b in ipbytes])
-    except:
-        # ignore exception, the address is already set to invalid
-        pass
-    return ret
-
-
-def decode_port_config(i, data=None):
-    i = abs(i)
-    values = {
-        1 << 0 : "port-down",
-        1 << 1 : "no-stp",
-        1 << 2 : "no-recv",
-        1 << 3 : "no-recv-stp",
-        1 << 4 : "no-flood",
-        1 << 5 : "no-fwd",
-        1 << 6 : "no-pkt-in",
-        1 << 31 : "mirror",
-        }
-    if i == 0 or i == '':
-        return ''
-    return print_mask_enum_string_and_int(values, i)
-
-def decode_port_state(i, data=None):
-    if i == '':
-        return 'Unknown'
-
-    # The two bits at (3 << 8) are a mask for the STP value
-    # which are listed in the following dictionary. Note that these
-    # aren't simply bit masks, so we can't use print_mask_enum_string_and_int
-    # here. So instead we special case the formatting of this field. We could
-    # probably factor some of this logic into a utility function, but
-    # this works for now.
-    stp_values = {
-        0 << 8 : ": stp-listen",
-        1 << 8 : ": stp-learn-no-relay",
-        2 << 8 : ": stp-forward",
-        3 << 8 : ": stp-block-broadcast",
-        }
-    value = "link-down" if i == 1 else "link-up" + stp_values.get(i, '')
-    return "%s(%s)" % (value, hex(i) if i > 9 else i)
- 
-
-def decode_port_up_down(i, data=None):
-    if i == '':
-        return 'Unknown'
-    return "down" if i == 1 else 'up'
-
-
-def decode_port_stp_state(i, data=None):
-    if i == '':
-        return ''
-    stp_values = {
-        0 << 8 : "listen",
-        1 << 8 : "learn-no-relay",
-        2 << 8 : "forward",
-        3 << 8 : "block-broadcast",
-        }
-    value = '' if i == 1 else stp_values.get(i)
-    return "%s(%s)" % (value, hex(i) if i > 9 else i)
-
-
-def decode_port_linkrate(i, data=None):
-    values = {
-        1 << 0 : "10mb-hd",
-        1 << 1 : "10mb-fd",
-        1 << 2 : "100mb-hd",
-        1 << 3 : "100mb-fd",
-        1 << 4 : "1gb-hd",
-        1 << 5 : "1gb-fd",
-        1 << 6 : "10gb-fd",
-        }
-    if type(i) != int:
-        return "Unknown"
-    if (int(i) & 0x7f) == 0:
-        return "Unknown"
-    return print_mask_enum_string_and_int(values, int(i) & 0x7f)
-
-
-def decode_port_features(i, data=None):
-    values = {
-        1 << 0 : "10mb-hd",
-        1 << 1 : "10mb-fd",
-        1 << 2 : "100mb-hd",
-        1 << 3 : "100mb-fd",
-        1 << 4 : "1gb-hd",
-        1 << 5 : "1gb-fd",
-        1 << 6 : "10gb-fd",
-        1 << 7 : "copper",
-        1 << 8 : "fiber",
-        1 << 9 : "autoneg",
-        1 << 10 : "pause",
-        1 << 11 : "pause-asym",
-        }
-    return print_mask_enum_string_and_int(values, i)
-
-
-def decode_switch_capabilities(i, data=None):
-    values = {
-        1 << 0 : "flow",
-        1 << 1 : "tbl",
-        1 << 2 : "port",
-        1 << 3 : "stp",
-        1 << 5 : "ip-reasm",
-        1 << 6 : "queue-stats",
-        1 << 7 : "match-ip-in-arp",
-        }
-    return print_mask_enum_string_and_int(values, i)
-
-
-def decode_switch_actions(i, data=None):
-    values = {
-        1 << 0 : "output",
-        1 << 1 : "vlan-vid",
-        1 << 2 : "vlan-pcp",
-        1 << 3 : "strip-vlan",
-        1 << 4 : "dl-src",
-        1 << 5 : "dl-dst",
-        1 << 6 : "nw-src",
-        1 << 7 : "nw-dst",
-        1 << 8 : "nw-tos",
-        1 << 9 : "tp-src",
-        1 << 10 : "tp-dst",
-        1 << 11 : "enqueue",
-        }
-    if (i == 0):
-        return "mirror"
-    return print_mask_enum_string_and_int(values, i)
-
-
-wildcards = {
-    1 << 0 : 'in port',
-    1 << 1 : 'vlan',
-    1 << 2 : 'pri',
-    1 << 3 : 'eth',
-    1 << 4 : 'tos',
-    1 << 5 : 'proto',
-    1 << 6 : 'src',
-    1 << 7 : 'dst',
-    1 << 8 : 'mpls',
-    1 << 9 : 'tc',
-}
-
-def realtime_flow_brief(i, data=None):
-    brief = []
-    wildcard = data['wildcards']
-    # wild = print_mask_enum_string_and_int(wildcards, wildcard)
-    try:
-        i = int(wildcard)
-    except:
-        return ''
-
-    if not wildcard & 0x1:
-        brief.append('rx=%s' % decode_openflow_port(data['inputPort'], data))
-    if (not wildcard & 0x2) and (data['dataLayerVirtualLan'] != -1):
-        brief.append('vlan:%s' % data['dataLayerVirtualLan'])
-    if (not wildcard & 0x4) and (data['dataLayerVirtualLanPriorityCodePoint'] != '*'):
-        brief.append('pri:%s' % data['dataLayerVirtualLanPriorityCodePoint'])
-    if (not wildcard & 0x8) and (data['dataLayerType'] != '*') :
-        brief.append('eth:%s' % data['dataLayerType'])
-    if not wildcard & 0x10:
-        brief.append('tos:%s' % data['networkTypeOfService'])
-    if not wildcard & 0x20:
-        brief.append('ip:%s' % data['networkProtocol'])
-    if data['networkSourceMaskLen']:
-        brief.append('src:%s' % utif.ip_and_neg_mask(data['networkSource'],
-                                                  data['networkSourceMaskLen']))
-    if not wildcard & 0x40:
-        brief.append('sport:%s' % data['transportSource'])
-    if data['networkSourceMaskLen']:
-        brief.append('src:%s' % utif.ip_and_neg_mask(data['networkSource'],
-                                                  data['networkSourceMaskLen']))
-    if not wildcard & 0x80:
-        brief.append('dport:%s' % data['transportDestination'])
-    # mpls not in OF1.0
-    #if not wildcard & 0x100:
-        #brief.append('mpls: ?')
-    #if not wildcard & 0x200:
-        #brief.append('mpls-tc: ?')
-
-    return ', '.join(brief)
-
-
-def formatter_to_alias_update(formatter, update):
-    """
-    Associate the items which need updating with the formatter.
-    the update parameter is a dict, allowing multiple updates
-    over several distinct fields
-
-    Update this procedure as new decoding procedures are
-    added which require some alias translation to be updated
-
-    @param formatter function which is called to format a field
-    @param update dictionry passed in, updated with alias types to update
-    """
-    name = formatter.__name__
-    if name in ['print_host_and_alias',
-                'print_all_host_attachment_points',
-                'print_devicemanager_attachment_points',
-                'replace_host_with_alias',
-                ]:
-        update['host'] = True
-    if name in ['print_host_attachment_point',
-                'print_vns_physical_interface_id',
-                'decode_openflow_port',
-                'decode_openflow_port_src_switch',
-                'decode_openflow_port_dst_switch',
-                'decode_openflow_port_source_switch',
-                'decode_openflow_port_inputSwitch',
-                'decode_openflow_port_dpid',
-                'realtime_flow_brief',
-                ]:
-        update['switch'] = True # port implies switch
-        update['port'] = True
-    if name in ['print_switch_and_alias',
-                'print_switch_and_alias_dpid_as_long',
-                'print_switches',
-                'replace_switch_with_alias',
-                ]:
-        update['switch'] = True
-    if name in ['decode_flow_cookie'
-                ]:
-        update['flow'] = True
-    if name in ['replace_controller_node_with_alias',
-               ]:
-        update['controller-node'] = True
-    return update
-
-def print_switch_port_list(i, data=None):
-    if i == None:
-        return ''
-    return ' '.join([replace_switch_with_alias(x['switch']) + \
-                    '/' + decode_openflow_port(x['port']) for x in i])
-
-def print_switch_port(i):
-    if i == None:
-        return ''
-    return replace_switch_with_alias(x['switch']) + \
-                    '/' + decode_openflow_port(x['port'])
-
-def print_host_attachment_point(i, data=None):
-    if i == None:
-        return "Inactive"
-    if len(i) == 1:
-        if_name = decode_openflow_port(i[0]['ingress-port'],
-                                       data['attachment-points'][0])
-        return replace_switch_with_alias(i[0]['switch']) + '/' + if_name
-    if len(i) == 0:
-        return ""
-    first = i[0]
-    if 'prime' in first:
-        if_name = decode_openflow_port(i[0]['ingress-port'],
-                                            data['attachment-points'][0])
-        return "%s/%s+[%s]" % (replace_switch_with_alias(i[0]['switch']),
-                               if_name, str(len(i)-1))
-    return "multiple (" + str(len(i)) + ")"
-
-
-def print_all_host_attachment_points(i, data=None):
-    if i == None:
-        return ''
-    return ' '.join([replace_switch_with_alias(x['switch']) + \
-                     '/' + decode_openflow_port(x['ingress-port'],
-                                                data['attachment-points'][0])
-                        for x in i])
-
-
-def print_devicemanager_attachment_points(i, data=None):
-    if i == None:
-        return ''
-    return ' '.join([replace_switch_with_alias(x['switch']) + \
-                     '/' + decode_openflow_port(x['port'],
-                                                data['attachment-points'][0])
-                        for x in i])
-
-
-def print_cluster_id(i, data=None):
-    return str(i)
-
-
-def print_switches(i, data=None):
-    return ' '.join([replace_switch_with_alias(dpid) for dpid in i])
-
-
-def print_single_tag(tag):
-    fields = tag.split('|')
-    return "%s.%s=%s" % (fields[0],fields[1],fields[2])
-
-def print_host_tags(i, data=None):
-    if i == None or len(i) == 0:
-        return ""
-    tag = i
-    if type(tag) == dict:
-        tag = [i]
-        
-    if len(tag) == 1:
-        # 'tag' is a complete row from the store, specifically 'tag-mapping'
-        # the 'tag' key holds a name which looks like: <namespace>|<name>|<value>
-        # which is then split, and recombined for display
-        return print_single_tag(tag[0]['tag'])
-    if len(tag) == 0:
-        return ""
-    return "multiple (" + str(len(tag)) + ")"
-
-
-def print_all_host_tags(i, data=None):
-    if i == None:
-        return ''
-    if i == dict:
-        return print_single_tag(i['tag'])
-    return ' '.join([print_single_tag(x['tag']) for x in i])
-
-
-def print_ip_addresses(i, data=None):
-    if i != None:
-        if len(i) == 1:
-            return str(i[0]['ip-address'])
-        if len(i) == 0:
-            return ""
-        # if there are multiple addressed, see if some of the addresses
-        # are "less" important than others.
-        less_interesting = 0
-        more_interesting = None
-        for ips in i:
-            if ips['ip-address'] == '0.0.0.0':
-                less_interesting += 1
-            elif re.match(r'169.254.*', ips['ip-address']):
-                less_interesting += 1
-            else:
-                more_interesting = ips['ip-address']
-
-        if len(i) == less_interesting + 1:
-            return "%s+(%d)" % (more_interesting, less_interesting)
-        s = sorted(i, key=lambda k: k['last-seen'])
-        return "%s+(%d)" % (s[-1]['ip-address'], len(s) - 1)
-        # return "multiple (" + str(len(i)) + ")"    
-    return "Unknown"
-
-
-def print_all_ip_addresses(i, data=None):
-    if i == None:
-        return ''
-    return ' '.join([x['ip-address'] for x in i])
-
-
-def print_devicemanager_ip_addresses(i, data=None):
-    if i == None:
-        return ''
-    return ' '.join([x['ip'] for x in i])
-
-
-def print_join_list(i, data=None):
-    return ', '.join(i)
-
-
-def replace_with_alias(object_type, i, data=None):
-    """
-    use when we have aliases for other objects
-    """
-    global alias_dicts
-    alias_dict = alias_dicts.get(object_type, {i : i})
-    if not alias_dict:
-        return i
-    return alias_dict.get(i, i)
-
-
-def print_switch_and_alias(i, data=None):
-    """
-    """
-    dpid = str(i)
-    alias = replace_switch_with_alias(i, data)
-    if dpid == alias:
-        return dpid
-    else:
-        return dpid + ' (' + alias + ')'
-
- 
-def print_switch_and_alias_dpid_as_long(i, data=None):
-    dpid = convert_long_to_dpid(i)
-    return print_switch_and_alias(dpid)
-
-
-def print_switch_interface_and_alias(i, data=None):
-    """
-    """
-    switch_interface = str(i)
-    return switch_interface
-
-
-def print_host_and_alias(i, data=None):
-    # The value of 'i' here ought to be the primary key
-    # for the host, which is a compound key.  Try hard to
-    # not deal with the construction of the key.
-    mac = str(i)
-    # if the host address is eight hex values, chop off the prefix
-    # nasty hack to deal with the use of a int64 to hold a host
-    if len(mac) == 23:
-        mac = mac[6:]
-        i = mac
-    name = replace_host_with_alias(mac, data)
-    if data == None:
-        data = {}
-
-    mac_in_data  = data.get('mac')
-    suffix = ''
-    if name != mac:
-        suffix = ' (%s)' % name
-
-    if mac_in_data:
-        return mac_in_data + suffix
-    return mac + suffix
-
-
-def print_vlan_and_alias(i, data=None):
-    vlan = int(i)
-    # if the host address is eight hex values, chop off the prefix
-    # nasty hack to deal with the use of a int64 to hold a host
-    return vlan
-
-
-def print_host_and_alias_mac_as_long(i, data=None):
-    mac = convert_mac_in_decimal_to_hex_string(i)
-    return print_host_and_alias(mac, data)
-
-def print_host_and_alias_mac_as_long_str(i, data=None):
-    # i is long decimal as string, e.g. "1342"
-    mac_decimal = int(i)
-    mac = convert_mac_in_decimal_to_hex_string(mac_decimal)
-    return print_host_and_alias(mac, data)
-
-
-# host list may also contain other items (ie: not macs)
-def print_host_list_and_alias(i, data=None):
-    # use at most 60 columns
-
-    more = 0
-    output = ""
-    for host in i:
-        mac = str(host)
-        name = replace_host_with_alias(host, data)
-        if name != mac:
-            mac +=  ' (' + name + ')'
-        if len(output) + len(mac) > 60:
-            more += 1
-        else:
-            output += mac
-            output += ' '
-    if more:
-        return "%s+(%s)" % (output, more)
-    return output
-
-
-def replace_switch_with_alias(i, data=None):
-    return replace_with_alias("switch-config", i, data)
-
-def convert_inverse_netmask_handler(i, data=None):
-    if not '.' in i:
-        return i
-    split_bytes = i.split('.')
-    return "%s.%s.%s.%s" % (255-int(split_bytes[0]),
-                            255-int(split_bytes[1]),
-                            255-int(split_bytes[2]),
-                            255-int(split_bytes[3]))
-
-def replace_host_with_alias(i, data=None):
-    return replace_with_alias("host-config", i, data)
-
-
-def replace_controller_node_with_alias(i, data=None):
-    return replace_with_alias("controller-node", i, data)
-
-
-def print_vns_count_dict(i, data=None):
-    output = ""
-    more = 0
-    for vns in i:
-        # possibly vns:refs instead?
-        #item = '%s:%s ' % (vns, i[vns])
-        item = '%s ' % vns
-        if len(output) > 40:
-            more += 1
-        else:
-            output += item
-    if more:
-        return "%s +(%s)" % (output, more)
-    return output
-
-
-def print_vns_physical_interface_id(i, data=None):
-    return i.split('|')[2]
-
-
-def print_domain_name_servers(i, data=None):
-    if len(i) == 0:
-        return 'None'
-    result = i[0]
-    if len(i) > 1:
-        result += ' +(%d)' % (len(i)-1)
-    return result
-
-
-def print_all_domain_name_servers(i, data=None):
-    if i == None:
-        return ''
-    return ', '.join(i)
-
-
-def print_clock_string(i, data = None):
-    print i, data
-
-
-def replace_boolean_with_enable_disable(i, data=None):
-    return { True : 'enabled', False : 'disabled' } [i]
-
-
-def sanitize_unicode(i, data=None):
-    return unicode(i, errors='ignore')
-
-
-def controller_node_me_entry(i, data=None):
-    if data.get('me', '') == '':
-        return 'Not current controller'
-    return 'current controller'
-
-def controller_node_me(i, data=None):
-    if 'me' in data:
-        return '*'
-    return ''
-
-
-def print_ipv4addr(i, data=None):
-    ipaddr = data['ip']
-    mask = data['masklen']
-    if (ipaddr != "*"):
-        ipaddr_int = reduce(lambda a,b: a<<8 | b, map(int, ipaddr.split(".")))
-        mask = (1 << mask) - 1
-        ipaddr_int = ipaddr_int & ~mask
-        ipaddr = ".".join(map(lambda n: str(ipaddr_int >>n & 0xFF), [24,16,8,0]))
-    return ipaddr
-
diff --git a/cli/cli/midw.pyc b/cli/cli/midw.pyc
old mode 100755
new mode 100644
index f369de2..98edddb
--- a/cli/cli/midw.pyc
+++ b/cli/cli/midw.pyc
Binary files differ
diff --git a/cli/cli/modi.pyc b/cli/cli/modi.pyc
old mode 100755
new mode 100644
index 0c145e1..b7cf0b3
--- a/cli/cli/modi.pyc
+++ b/cli/cli/modi.pyc
Binary files differ
diff --git a/cli/cli/prettyprint.pyc b/cli/cli/prettyprint.pyc
old mode 100755
new mode 100644
index 9281a1b..a939042
--- a/cli/cli/prettyprint.pyc
+++ b/cli/cli/prettyprint.pyc
Binary files differ
diff --git a/cli/cli/rest_to_model.pyc b/cli/cli/rest_to_model.pyc
old mode 100755
new mode 100644
index 516f4cf..c10c641
--- a/cli/cli/rest_to_model.pyc
+++ b/cli/cli/rest_to_model.pyc
Binary files differ
diff --git a/cli/cli/run_config.pyc b/cli/cli/run_config.pyc
old mode 100755
new mode 100644
index a22c0d7..13e4daa
--- a/cli/cli/run_config.pyc
+++ b/cli/cli/run_config.pyc
Binary files differ
diff --git a/cli/cli/timesince.pyc b/cli/cli/timesince.pyc
old mode 100755
new mode 100644
index 83071d3..e185d68
--- a/cli/cli/timesince.pyc
+++ b/cli/cli/timesince.pyc
Binary files differ
diff --git a/cli/cli/url_cache.pyc b/cli/cli/url_cache.pyc
old mode 100755
new mode 100644
index 13e30cb..e8c5e1d
--- a/cli/cli/url_cache.pyc
+++ b/cli/cli/url_cache.pyc
Binary files differ
diff --git a/cli/cli/utif.pyc b/cli/cli/utif.pyc
old mode 100755
new mode 100644
index e633ddc..59d46e4
--- a/cli/cli/utif.pyc
+++ b/cli/cli/utif.pyc
Binary files differ
diff --git a/cli/cli/vnsw.pyc b/cli/cli/vnsw.pyc
old mode 100755
new mode 100644
index b6964a1..ba24ee4
--- a/cli/cli/vnsw.pyc
+++ b/cli/cli/vnsw.pyc
Binary files differ