def cli(self, interface='', output=None):
    if (output is None):
        if (not interface):
            cmd = self.cli_command[1]
        else:
            cmd = self.cli_command[0].format(interface=interface)
        out = self.device.execute(cmd)
    else:
        out = output
    ret_dict = {}
    ipv6 = False
    joined_group = []
    status_code = {'ten': 'tentative', 'dep': 'duplicate', 'pre': 'preferre'}
    for line in out.splitlines():
        line = line.strip()
        p1 = re.compile('^(?P<interface>[\\w\\/\\.\\-]+) +is +(?P<enabled>[\\w\\s]+), +line +protocol +is +(?P<oper_status>\\w+)$')
        m = p1.match(line)
        if m:
            intf = m.groupdict()['interface']
            enabled = m.groupdict()['enabled'].lower()
            if (intf not in ret_dict):
                ret_dict[intf] = {}
            if ('administratively down' in enabled):
                ret_dict[intf]['enabled'] = False
            else:
                ret_dict[intf]['enabled'] = True
            ret_dict[intf]['oper_status'] = m.groupdict()['oper_status'].lower()
            joined_group = []
            continue
        p2 = re.compile('^IPv6 +is +(?P<status>\\w+), +link-local +address +is +(?P<link_local>[\\w\\:]+)( *\\[(?P<type>[\\w\\/]+)\\])?$')
        m = p2.match(line)
        if m:
            status = m.groupdict()['status']
            link_addr = m.groupdict()['link_local']
            if ('ipv6' not in ret_dict[intf]):
                ret_dict[intf]['ipv6'] = {}
            if (link_addr not in ret_dict[intf]['ipv6']):
                ret_dict[intf]['ipv6'][link_addr] = {}
            ret_dict[intf]['ipv6'][link_addr]['ip'] = link_addr
            ret_dict[intf]['ipv6'][link_addr]['origin'] = 'link_layer'
            if (status.lower() in ['preferred', 'deprecated', 'invalid', 'inaccessible', 'unknown', 'tentative', 'duplicate', 'optimistic']):
                ret_dict[intf]['ipv6'][link_addr]['status'] = status.lower()
            else:
                ret_dict[intf]['ipv6'][link_addr]['status'] = 'valid'
            continue
        p21 = re.compile('^Virtual +link\\-local +address\\(es\\)\\:$')
        m = p21.match(line)
        if m:
            ipv6 = True
            continue
        p21_1 = re.compile('^(?P<ipv6>[\\w\\:]+)( *\\[(?P<type>[\\w\\/]+)\\])?$')
        m = p21_1.match(line)
        if (m and ipv6):
            if ('ipv6' not in ret_dict[intf]):
                ret_dict[intf]['ipv6'] = {}
            address = '{ip}'.format(ip=m.groupdict()['ipv6'])
            if (address not in ret_dict[intf]['ipv6']):
                ret_dict[intf]['ipv6'][address] = {}
            ret_dict[intf]['ipv6'][address]['ip'] = m.groupdict()['ipv6']
            ret_dict[intf]['ipv6'][address]['virtual'] = True
            ip_type = m.groupdict()['type']
            if (ip_type and ('any' in ip_type.lower())):
                ret_dict[intf]['ipv6'][address]['anycast'] = True
            elif (ip_type and ('eui' in ip_type.lower())):
                ret_dict[intf]['ipv6'][address]['eui_64'] = True
            elif ip_type:
                for code in ip_type.lower().split('/'):
                    if (code in status_code):
                        ret_dict[intf]['ipv6'][address]['status'] = status_code[code]
                    else:
                        ret_dict[intf]['ipv6'][address]['status'] = 'valid'
            continue
        p3 = re.compile('^Stateless +address +autoconfig +enabled$')
        m = p3.match(line)
        if m:
            ret_dict[intf]['autoconf'] = True
            continue
        p4 = re.compile('^Global +unicast +address\\(es\\):$')
        m = p4.match(line)
        if m:
            ipv6 = True
            continue
        p4_1 = re.compile('^(?P<ipv6>[\\w\\:]+), +subnet +is +(?P<dum1>(?P<dum2>[\\w\\:]+)\\/(?P<prefix_length>[0-9]+))( *\\[(?P<type>[\\w\\/]+)\\])?$')
        m = p4_1.match(line)
        if (m and ipv6):
            if ('ipv6' not in ret_dict[intf]):
                ret_dict[intf]['ipv6'] = {}
            address = '{ip}/{mask}'.format(ip=m.groupdict()['ipv6'], mask=m.groupdict()['prefix_length'])
            if (address not in ret_dict[intf]['ipv6']):
                ret_dict[intf]['ipv6'][address] = {}
            ret_dict[intf]['ipv6'][address]['ip'] = m.groupdict()['ipv6']
            ret_dict[intf]['ipv6'][address]['prefix_length'] = m.groupdict()['prefix_length']
            try:
                status
            except Exception:
                pass
            else:
                if (status.lower() in ['preferred', 'deprecated', 'invalid', 'inaccessible', 'unknown', 'tentative', 'duplicate', 'optimistic']):
                    ret_dict[intf]['ipv6'][address]['status'] = status.lower()
                else:
                    ret_dict[intf]['ipv6'][address]['status'] = 'valid'
                ret_dict[intf]['ipv6']['enabled'] = True
            ip_type = m.groupdict()['type']
            if (ip_type and ('any' in ip_type.lower())):
                ret_dict[intf]['ipv6'][address]['anycast'] = True
            elif (ip_type and ('eui' in ip_type.lower())):
                ret_dict[intf]['ipv6'][address]['eui_64'] = True
            elif ip_type:
                for code in ip_type.lower().split('/'):
                    if (code in status_code):
                        ret_dict[intf]['ipv6'][address]['status'] = status_code[code]
                    else:
                        ret_dict[intf]['ipv6'][address]['status'] = 'valid'
            continue
        p4_2 = re.compile('^valid +lifetime +(?P<valid>\\d+) +preferred +lifetime +(?P<preferred>\\d+)$')
        m = p4_2.match(line)
        if (m and ipv6):
            try:
                address
            except Exception:
                pass
            else:
                if ('autoconf' not in ret_dict[intf]['ipv6'][address]):
                    ret_dict[intf]['ipv6'][address]['autoconf'] = {}
                ret_dict[intf]['ipv6'][address]['autoconf']['valid_lifetime'] = int(m.groupdict()['valid'])
                ret_dict[intf]['ipv6'][address]['autoconf']['preferred_lifetime'] = int(m.groupdict()['preferred'])
            continue
        p5 = re.compile('^Joined +group +address\\(es\\):$')
        m = p5.match(line)
        if m:
            ipv6 = False
            continue
        p5_1 = re.compile('^(?P<address>[\\w\\:]+)$')
        m = p5_1.match(line)
        if (m and (not ipv6)):
            joined_group.append(m.groupdict()['address'])
            ret_dict[intf]['joined_group_addresses'] = sorted(joined_group)
            continue
        p6 = re.compile('^MTU +is +(?P<mtu>\\d+) +bytes$')
        m = p6.match(line)
        if m:
            ret_dict[intf]['mtu'] = int(m.groupdict()['mtu'])
            continue
        p6 = re.compile('^VPN +Routing\\/Forwarding +\\"(?P<vrf>[\\w\\-]+)\\"$')
        m = p6.match(line)
        if m:
            ret_dict[intf]['vrf'] = m.groupdict()['vrf']
            continue
        p7 = re.compile('^ICMP +error +messages +limited +to +one +every +(?P<limited>\\d+) +milliseconds$')
        m = p7.match(line)
        if m:
            if ('ipv6' not in ret_dict[intf]):
                ret_dict[intf]['ipv6'] = {}
            if ('icmp' not in ret_dict[intf]['ipv6']):
                ret_dict[intf]['ipv6']['icmp'] = {}
            ret_dict[intf]['ipv6']['icmp']['error_messages_limited'] = int(m.groupdict()['limited'])
            continue
        p8 = re.compile('^ICMP +redirects +are +(?P<status>\\w+)$')
        m = p8.match(line)
        if m:
            if ('ipv6' not in ret_dict[intf]):
                ret_dict[intf]['ipv6'] = {}
            if ('icmp' not in ret_dict[intf]['ipv6']):
                ret_dict[intf]['ipv6']['icmp'] = {}
            if ('enabled' in m.groupdict()['status']):
                ret_dict[intf]['ipv6']['icmp']['redirects'] = True
            else:
                ret_dict[intf]['ipv6']['icmp']['redirects'] = False
            continue
        p9 = re.compile('^ICMP +unreachables +are +(?P<status>[\\w\\s]+)$')
        m = p9.match(line)
        if m:
            if ('ipv6' not in ret_dict[intf]):
                ret_dict[intf]['ipv6'] = {}
            if ('icmp' not in ret_dict[intf]['ipv6']):
                ret_dict[intf]['ipv6']['icmp'] = {}
            if ('not sent' not in m.groupdict()['status']):
                ret_dict[intf]['ipv6']['icmp']['unreachables'] = m.groupdict()['status']
            continue
        p10 = re.compile('^ND +DAD +is +(?P<status>\\w+), +number +of +DAD +attempts: +(?P<attempts>\\d+)$')
        m = p10.match(line)
        if m:
            nd_dict = ret_dict.setdefault(intf, {}).setdefault('ipv6', {}).setdefault('nd', {})
            nd_dict.setdefault('suppress', False)
            if ('enabled' in m.groupdict()['status']):
                nd_dict['dad_enabled'] = True
            else:
                nd_dict['dad_enabled'] = False
            nd_dict['dad_attempts'] = int(m.groupdict()['attempts'])
            continue
        p11 = re.compile('^ND +reachable +time +is (?P<time>\\d+) +milliseconds +\\(using +(?P<use>\\d+)\\)$')
        m = p11.match(line)
        if m:
            nd_dict = ret_dict.setdefault(intf, {}).setdefault('ipv6', {}).setdefault('nd', {})
            nd_dict.setdefault('suppress', False)
            nd_dict['reachable_time'] = int(m.groupdict()['time'])
            nd_dict['using_time'] = int(m.groupdict()['use'])
            continue
        p12 = re.compile('^ND +NS +retransmit +interval +is +(?P<interval>\\d+) +milliseconds$')
        m = p12.match(line)
        if m:
            nd_dict = ret_dict.setdefault(intf, {}).setdefault('ipv6', {}).setdefault('nd', {})
            nd_dict.setdefault('suppress', False)
            nd_dict['ns_retransmit_interval'] = int(m.groupdict()['interval'])
            continue
        p13 = re.compile('^ND +advertised +reachable +time +is +(?P<time>\\d+) +\\((?P<dummy>\\S+)\\)$')
        m = p13.match(line)
        if m:
            nd_dict = ret_dict.setdefault(intf, {}).setdefault('ipv6', {}).setdefault('nd', {})
            nd_dict.setdefault('suppress', False)
            nd_dict['advertised_reachable_time'] = int(m.groupdict()['time'])
            if (m.groupdict()['dummy'] == 'unspecified'):
                nd_dict['advertised_reachable_time_unspecified'] = True
            else:
                nd_dict['advertised_reachable_time_unspecified'] = False
            continue
        p14 = re.compile('^ND +advertised +retransmit +interval +is +(?P<time>\\d+) +\\((?P<dummy>\\S+)\\)$')
        m = p14.match(line)
        if m:
            nd_dict = ret_dict.setdefault(intf, {}).setdefault('ipv6', {}).setdefault('nd', {})
            nd_dict.setdefault('suppress', False)
            nd_dict['advertised_retransmit_interval'] = int(m.groupdict()['time'])
            if (m.groupdict()['dummy'] == 'unspecified'):
                nd_dict['advertised_retransmit_interval_unspecified'] = True
            else:
                nd_dict['advertised_retransmit_interval_unspecified'] = False
            continue
        p15 = re.compile('^ND +router +advertisements +are +sent +every +(?P<time>\\d+) +seconds$')
        m = p15.match(line)
        if m:
            nd_dict = ret_dict.setdefault(intf, {}).setdefault('ipv6', {}).setdefault('nd', {})
            nd_dict.setdefault('suppress', False)
            nd_dict['router_advertisements_interval'] = int(m.groupdict()['time'])
            continue
        p16 = re.compile('^ND +router +advertisements +live +for +(?P<time>\\d+) +seconds$')
        m = p16.match(line)
        if m:
            nd_dict = ret_dict.setdefault(intf, {}).setdefault('ipv6', {}).setdefault('nd', {})
            nd_dict.setdefault('suppress', False)
            nd_dict['router_advertisements_live'] = int(m.groupdict()['time'])
            continue
        p17 = re.compile('^ND +advertised +default +router +preference +is +(?P<prefer>\\w+)$')
        m = p17.match(line)
        if m:
            nd_dict = ret_dict.setdefault(intf, {}).setdefault('ipv6', {}).setdefault('nd', {})
            nd_dict.setdefault('suppress', False)
            nd_dict['advertised_default_router_preference'] = m.groupdict()['prefer']
            continue
        p17_1 = re.compile('^ND +RAs +are +suppressed.*$')
        m = p17_1.match(line)
        if m:
            nd_dict = ret_dict.setdefault(intf, {}).setdefault('ipv6', {}).setdefault('nd', {})
            nd_dict.update({'suppress': True})
            continue
        p18 = re.compile('^Hosts +use +(?P<addr_conf_method>[\\w\\s]+) +for +addresses.$')
        m = p18.match(line)
        if m:
            ret_dict[intf]['addresses_config_method'] = m.groupdict()['addr_conf_method']
            continue
        p19 = re.compile('^Interface +is +unnumbered. +Using +address +of +(?P<unnumbered_intf>[\\w\\/\\.]+)$')
        m = p19.match(line)
        if m:
            if ('ipv6' not in ret_dict[intf]):
                ret_dict[intf]['ipv6'] = {}
            if ('unnumbered' not in ret_dict[intf]['ipv6']):
                ret_dict[intf]['ipv6']['unnumbered'] = {}
            ret_dict[intf]['ipv6']['unnumbered']['interface_ref'] = Common.convert_intf_name(m.groupdict()['unnumbered_intf'])
            continue
        p20 = re.compile('^No +global +unicast +address +is +configured$')
        m = p20.match(line)
        if m:
            if ('ipv6' not in ret_dict[intf]):
                ret_dict[intf]['ipv6'] = {}
            ret_dict[intf]['ipv6']['enabled'] = False
            continue
    return ret_dict
def cli(self, interface=, output=None):
    if (output is None):
        if (not interface):
            cmd = self.cli_command[1]
        else:
            cmd = self.cli_command[0].format(interface=interface)
        out = self.device.execute(cmd)
    else:
        out = output
    ret_dict = {}
    ipv6 = False
    joined_group = []
    status_code = {'ten': 'tentative', 'dep': 'duplicate', 'pre': 'preferre'}
    for line in out.splitlines():
        line = line.strip()
        p1 = re.compile('^(?P<interface>[\\w\\/\\.\\-]+) +is +(?P<enabled>[\\w\\s]+), +line +protocol +is +(?P<oper_status>\\w+)$')
        m = p1.match(line)
        if m:
            intf = m.groupdict()['interface']
            enabled = m.groupdict()['enabled'].lower()
            if (intf not in ret_dict):
                ret_dict[intf] = {}
            if ('administratively down' in enabled):
                ret_dict[intf]['enabled'] = False
            else:
                ret_dict[intf]['enabled'] = True
            ret_dict[intf]['oper_status'] = m.groupdict()['oper_status'].lower()
            joined_group = []
            continue
        p2 = re.compile('^IPv6 +is +(?P<status>\\w+), +link-local +address +is +(?P<link_local>[\\w\\:]+)( *\\[(?P<type>[\\w\\/]+)\\])?$')
        m = p2.match(line)
        if m:
            status = m.groupdict()['status']
            link_addr = m.groupdict()['link_local']
            if ('ipv6' not in ret_dict[intf]):
                ret_dict[intf]['ipv6'] = {}
            if (link_addr not in ret_dict[intf]['ipv6']):
                ret_dict[intf]['ipv6'][link_addr] = {}
            ret_dict[intf]['ipv6'][link_addr]['ip'] = link_addr
            ret_dict[intf]['ipv6'][link_addr]['origin'] = 'link_layer'
            if (status.lower() in ['preferred', 'deprecated', 'invalid', 'inaccessible', 'unknown', 'tentative', 'duplicate', 'optimistic']):
                ret_dict[intf]['ipv6'][link_addr]['status'] = status.lower()
            else:
                ret_dict[intf]['ipv6'][link_addr]['status'] = 'valid'
            continue
        p21 = re.compile('^Virtual +link\\-local +address\\(es\\)\\:$')
        m = p21.match(line)
        if m:
            ipv6 = True
            continue
        p21_1 = re.compile('^(?P<ipv6>[\\w\\:]+)( *\\[(?P<type>[\\w\\/]+)\\])?$')
        m = p21_1.match(line)
        if (m and ipv6):
            if ('ipv6' not in ret_dict[intf]):
                ret_dict[intf]['ipv6'] = {}
            address = '{ip}'.format(ip=m.groupdict()['ipv6'])
            if (address not in ret_dict[intf]['ipv6']):
                ret_dict[intf]['ipv6'][address] = {}
            ret_dict[intf]['ipv6'][address]['ip'] = m.groupdict()['ipv6']
            ret_dict[intf]['ipv6'][address]['virtual'] = True
            ip_type = m.groupdict()['type']
            if (ip_type and ('any' in ip_type.lower())):
                ret_dict[intf]['ipv6'][address]['anycast'] = True
            elif (ip_type and ('eui' in ip_type.lower())):
                ret_dict[intf]['ipv6'][address]['eui_64'] = True
            elif ip_type:
                for code in ip_type.lower().split('/'):
                    if (code in status_code):
                        ret_dict[intf]['ipv6'][address]['status'] = status_code[code]
                    else:
                        ret_dict[intf]['ipv6'][address]['status'] = 'valid'
            continue
        p3 = re.compile('^Stateless +address +autoconfig +enabled$')
        m = p3.match(line)
        if m:
            ret_dict[intf]['autoconf'] = True
            continue
        p4 = re.compile('^Global +unicast +address\\(es\\):$')
        m = p4.match(line)
        if m:
            ipv6 = True
            continue
        p4_1 = re.compile('^(?P<ipv6>[\\w\\:]+), +subnet +is +(?P<dum1>(?P<dum2>[\\w\\:]+)\\/(?P<prefix_length>[0-9]+))( *\\[(?P<type>[\\w\\/]+)\\])?$')
        m = p4_1.match(line)
        if (m and ipv6):
            if ('ipv6' not in ret_dict[intf]):
                ret_dict[intf]['ipv6'] = {}
            address = '{ip}/{mask}'.format(ip=m.groupdict()['ipv6'], mask=m.groupdict()['prefix_length'])
            if (address not in ret_dict[intf]['ipv6']):
                ret_dict[intf]['ipv6'][address] = {}
            ret_dict[intf]['ipv6'][address]['ip'] = m.groupdict()['ipv6']
            ret_dict[intf]['ipv6'][address]['prefix_length'] = m.groupdict()['prefix_length']
            try:
                status
            except Exception:
                pass
            else:
                if (status.lower() in ['preferred', 'deprecated', 'invalid', 'inaccessible', 'unknown', 'tentative', 'duplicate', 'optimistic']):
                    ret_dict[intf]['ipv6'][address]['status'] = status.lower()
                else:
                    ret_dict[intf]['ipv6'][address]['status'] = 'valid'
                ret_dict[intf]['ipv6']['enabled'] = True
            ip_type = m.groupdict()['type']
            if (ip_type and ('any' in ip_type.lower())):
                ret_dict[intf]['ipv6'][address]['anycast'] = True
            elif (ip_type and ('eui' in ip_type.lower())):
                ret_dict[intf]['ipv6'][address]['eui_64'] = True
            elif ip_type:
                for code in ip_type.lower().split('/'):
                    if (code in status_code):
                        ret_dict[intf]['ipv6'][address]['status'] = status_code[code]
                    else:
                        ret_dict[intf]['ipv6'][address]['status'] = 'valid'
            continue
        p4_2 = re.compile('^valid +lifetime +(?P<valid>\\d+) +preferred +lifetime +(?P<preferred>\\d+)$')
        m = p4_2.match(line)
        if (m and ipv6):
            try:
                address
            except Exception:
                pass
            else:
                if ('autoconf' not in ret_dict[intf]['ipv6'][address]):
                    ret_dict[intf]['ipv6'][address]['autoconf'] = {}
                ret_dict[intf]['ipv6'][address]['autoconf']['valid_lifetime'] = int(m.groupdict()['valid'])
                ret_dict[intf]['ipv6'][address]['autoconf']['preferred_lifetime'] = int(m.groupdict()['preferred'])
            continue
        p5 = re.compile('^Joined +group +address\\(es\\):$')
        m = p5.match(line)
        if m:
            ipv6 = False
            continue
        p5_1 = re.compile('^(?P<address>[\\w\\:]+)$')
        m = p5_1.match(line)
        if (m and (not ipv6)):
            joined_group.append(m.groupdict()['address'])
            ret_dict[intf]['joined_group_addresses'] = sorted(joined_group)
            continue
        p6 = re.compile('^MTU +is +(?P<mtu>\\d+) +bytes$')
        m = p6.match(line)
        if m:
            ret_dict[intf]['mtu'] = int(m.groupdict()['mtu'])
            continue
        p6 = re.compile('^VPN +Routing\\/Forwarding +\\"(?P<vrf>[\\w\\-]+)\\"$')
        m = p6.match(line)
        if m:
            ret_dict[intf]['vrf'] = m.groupdict()['vrf']
            continue
        p7 = re.compile('^ICMP +error +messages +limited +to +one +every +(?P<limited>\\d+) +milliseconds$')
        m = p7.match(line)
        if m:
            if ('ipv6' not in ret_dict[intf]):
                ret_dict[intf]['ipv6'] = {}
            if ('icmp' not in ret_dict[intf]['ipv6']):
                ret_dict[intf]['ipv6']['icmp'] = {}
            ret_dict[intf]['ipv6']['icmp']['error_messages_limited'] = int(m.groupdict()['limited'])
            continue
        p8 = re.compile('^ICMP +redirects +are +(?P<status>\\w+)$')
        m = p8.match(line)
        if m:
            if ('ipv6' not in ret_dict[intf]):
                ret_dict[intf]['ipv6'] = {}
            if ('icmp' not in ret_dict[intf]['ipv6']):
                ret_dict[intf]['ipv6']['icmp'] = {}
            if ('enabled' in m.groupdict()['status']):
                ret_dict[intf]['ipv6']['icmp']['redirects'] = True
            else:
                ret_dict[intf]['ipv6']['icmp']['redirects'] = False
            continue
        p9 = re.compile('^ICMP +unreachables +are +(?P<status>[\\w\\s]+)$')
        m = p9.match(line)
        if m:
            if ('ipv6' not in ret_dict[intf]):
                ret_dict[intf]['ipv6'] = {}
            if ('icmp' not in ret_dict[intf]['ipv6']):
                ret_dict[intf]['ipv6']['icmp'] = {}
            if ('not sent' not in m.groupdict()['status']):
                ret_dict[intf]['ipv6']['icmp']['unreachables'] = m.groupdict()['status']
            continue
        p10 = re.compile('^ND +DAD +is +(?P<status>\\w+), +number +of +DAD +attempts: +(?P<attempts>\\d+)$')
        m = p10.match(line)
        if m:
            nd_dict = ret_dict.setdefault(intf, {}).setdefault('ipv6', {}).setdefault('nd', {})
            nd_dict.setdefault('suppress', False)
            if ('enabled' in m.groupdict()['status']):
                nd_dict['dad_enabled'] = True
            else:
                nd_dict['dad_enabled'] = False
            nd_dict['dad_attempts'] = int(m.groupdict()['attempts'])
            continue
        p11 = re.compile('^ND +reachable +time +is (?P<time>\\d+) +milliseconds +\\(using +(?P<use>\\d+)\\)$')
        m = p11.match(line)
        if m:
            nd_dict = ret_dict.setdefault(intf, {}).setdefault('ipv6', {}).setdefault('nd', {})
            nd_dict.setdefault('suppress', False)
            nd_dict['reachable_time'] = int(m.groupdict()['time'])
            nd_dict['using_time'] = int(m.groupdict()['use'])
            continue
        p12 = re.compile('^ND +NS +retransmit +interval +is +(?P<interval>\\d+) +milliseconds$')
        m = p12.match(line)
        if m:
            nd_dict = ret_dict.setdefault(intf, {}).setdefault('ipv6', {}).setdefault('nd', {})
            nd_dict.setdefault('suppress', False)
            nd_dict['ns_retransmit_interval'] = int(m.groupdict()['interval'])
            continue
        p13 = re.compile('^ND +advertised +reachable +time +is +(?P<time>\\d+) +\\((?P<dummy>\\S+)\\)$')
        m = p13.match(line)
        if m:
            nd_dict = ret_dict.setdefault(intf, {}).setdefault('ipv6', {}).setdefault('nd', {})
            nd_dict.setdefault('suppress', False)
            nd_dict['advertised_reachable_time'] = int(m.groupdict()['time'])
            if (m.groupdict()['dummy'] == 'unspecified'):
                nd_dict['advertised_reachable_time_unspecified'] = True
            else:
                nd_dict['advertised_reachable_time_unspecified'] = False
            continue
        p14 = re.compile('^ND +advertised +retransmit +interval +is +(?P<time>\\d+) +\\((?P<dummy>\\S+)\\)$')
        m = p14.match(line)
        if m:
            nd_dict = ret_dict.setdefault(intf, {}).setdefault('ipv6', {}).setdefault('nd', {})
            nd_dict.setdefault('suppress', False)
            nd_dict['advertised_retransmit_interval'] = int(m.groupdict()['time'])
            if (m.groupdict()['dummy'] == 'unspecified'):
                nd_dict['advertised_retransmit_interval_unspecified'] = True
            else:
                nd_dict['advertised_retransmit_interval_unspecified'] = False
            continue
        p15 = re.compile('^ND +router +advertisements +are +sent +every +(?P<time>\\d+) +seconds$')
        m = p15.match(line)
        if m:
            nd_dict = ret_dict.setdefault(intf, {}).setdefault('ipv6', {}).setdefault('nd', {})
            nd_dict.setdefault('suppress', False)
            nd_dict['router_advertisements_interval'] = int(m.groupdict()['time'])
            continue
        p16 = re.compile('^ND +router +advertisements +live +for +(?P<time>\\d+) +seconds$')
        m = p16.match(line)
        if m:
            nd_dict = ret_dict.setdefault(intf, {}).setdefault('ipv6', {}).setdefault('nd', {})
            nd_dict.setdefault('suppress', False)
            nd_dict['router_advertisements_live'] = int(m.groupdict()['time'])
            continue
        p17 = re.compile('^ND +advertised +default +router +preference +is +(?P<prefer>\\w+)$')
        m = p17.match(line)
        if m:
            nd_dict = ret_dict.setdefault(intf, {}).setdefault('ipv6', {}).setdefault('nd', {})
            nd_dict.setdefault('suppress', False)
            nd_dict['advertised_default_router_preference'] = m.groupdict()['prefer']
            continue
        p17_1 = re.compile('^ND +RAs +are +suppressed.*$')
        m = p17_1.match(line)
        if m:
            nd_dict = ret_dict.setdefault(intf, {}).setdefault('ipv6', {}).setdefault('nd', {})
            nd_dict.update({'suppress': True})
            continue
        p18 = re.compile('^Hosts +use +(?P<addr_conf_method>[\\w\\s]+) +for +addresses.$')
        m = p18.match(line)
        if m:
            ret_dict[intf]['addresses_config_method'] = m.groupdict()['addr_conf_method']
            continue
        p19 = re.compile('^Interface +is +unnumbered. +Using +address +of +(?P<unnumbered_intf>[\\w\\/\\.]+)$')
        m = p19.match(line)
        if m:
            if ('ipv6' not in ret_dict[intf]):
                ret_dict[intf]['ipv6'] = {}
            if ('unnumbered' not in ret_dict[intf]['ipv6']):
                ret_dict[intf]['ipv6']['unnumbered'] = {}
            ret_dict[intf]['ipv6']['unnumbered']['interface_ref'] = Common.convert_intf_name(m.groupdict()['unnumbered_intf'])
            continue
        p20 = re.compile('^No +global +unicast +address +is +configured$')
        m = p20.match(line)
        if m:
            if ('ipv6' not in ret_dict[intf]):
                ret_dict[intf]['ipv6'] = {}
            ret_dict[intf]['ipv6']['enabled'] = False
            continue
    return ret_dict