def ifacelist(self):
        """
        :return: hash of interface categories. each category containing a list of \
            iface pointers to interfaces that belong in that category. For example
           ifacelist['bridges'] points to a list of bridge Ifaces.
           TODO: refactor!
        """

        # ifacelist is already populated..
        # to reset set ``self._ifacelist = None``
        if len(self._ifacelist.get('all')) > 0:
            return self._ifacelist

        self._initialize_ifacelist()
        list_of_ports = sorted(nn.portname_list())
        feature_cache = self.cache.Cache()
        feature_cache.run()
        for _portname in list_of_ports:
            _printiface = self.print_iface.iface(_portname, feature_cache)
            if self.show_up and _printiface.iface.linkstate < 2:
                continue
            # if iface is a l2 subint bridgemem, then ignore
            if _printiface.iface.is_subint() and \
                    isinstance(_printiface, self.print_bridge.PrintBridgeMember):
                continue

            self._ifacelist['all'][_portname] = _printiface

            if isinstance(_printiface.iface, self.iface.Iface):
                if _printiface.iface.is_phy():
                    self._ifacelist['phy'][_portname] = _printiface
                elif _printiface.iface.is_mgmt():
                    self._ifacelist['mgmt'][_portname] = _printiface

            # mutual exclusive bond/bridge/bondmem/bridgemem
            if isinstance(_printiface, self.print_bridge.PrintBridge):
                self._ifacelist['bridge'][_portname] = _printiface
                self._ifacelist['l2'][_portname] = _printiface
            elif isinstance(_printiface, self.print_bond.PrintBond):
                self._ifacelist['bond'][_portname] = _printiface
                if _printiface.iface.is_bridgemem():
                    self._ifacelist['l2'][_portname] = _printiface
            elif isinstance(_printiface, self.print_bridge.PrintBridgeMember):
                self._ifacelist['l2'][_portname] = _printiface
            elif isinstance(_printiface, self.print_bond.PrintBondMember):
                self._ifacelist['bondmem'][_portname] = _printiface
                continue

            # mutual exclusive - l3/trunk/access
            if _printiface.iface.is_l3():
                self._ifacelist['l3'][_portname] = _printiface
            elif _printiface.iface.is_trunk():
                self._ifacelist['trunk'][_portname] = _printiface
            elif _printiface.iface.is_access():
                self._ifacelist['access'][_portname] = _printiface

        return self._ifacelist
def test_portlist(mock_import, mock_provider_check):
    mock_provider_check.return_value = 'debian'
    mock_debian_iface = MagicMock()
    mock_debian_iface.portname_list.return_value = ['eth22', 'eth33']
    values = {
        'netshowlib.debian.iface': mock_debian_iface
    }
    mock_import.side_effect = mod_args_generator(values)
    assert_equals(nn.portname_list(), ['eth22', 'eth33'])
    def vlan_aware_bridge(self):
        if self._vlan_aware_bridge:
            return self._vlan_aware_bridge

        portlist = netshowlib.portname_list()
        for _portname in portlist:
            _iface = netshowlib.iface(_portname)
            if hasattr(_iface, 'vlan_filtering') and \
                    _iface.vlan_filtering and \
                    _iface.is_bridge():
                self._vlan_aware_bridge = _iface

        return self._vlan_aware_bridge
    def run(self):
        """
        :return: basic neighbor information based on data obtained on netshow-lib
        """
        feature_cache = self.cache.Cache()
        feature_cache.run()
        for _ifacename in sorted(nn.portname_list()):
            _piface = self.print_iface.iface(_ifacename, feature_cache)
            if hasattr(_piface.iface, 'is_phy') and _piface.iface.is_phy():
                if self.show_up and _piface.iface.linkstate < 2:
                    continue
                if self.show_errors and _piface.iface.counters.total_err == 0:
                    continue
                self.ifacelist[_ifacename] = _piface

        if self.use_json:
            return json.dumps(self.ifacelist, cls=NetEncoder, indent=4)

        return self.print_counters()
    def run(self):
        """
        :return: basic neighbor information based on data obtained on netshow-lib
        """
        feature_cache = self.cache.Cache()
        feature_cache.run()
        for _ifacename in sorted(nn.portname_list()):
            _piface = self.print_iface.iface(_ifacename, feature_cache)
            if hasattr(_piface.iface, 'is_phy') and _piface.iface.is_phy():
                if self.show_up and _piface.iface.linkstate < 2:
                    continue
                if self.show_errors and _piface.iface.counters.total_err == 0:
                    continue
                self.ifacelist[_ifacename] = _piface

        if self.use_json:
            return json.dumps(self.ifacelist,
                              cls=NetEncoder, indent=4)
        return self.print_counters()