list[dict]: A list of dictionary items describing the operational
        state of interfaces.
        This method currently only lists the Physical Interfaces (
        Gigabitethernet, tengigabitethernet, fortygigabitethernet,
        hundredgigabitethernet) and Loopback interfaces.  It currently
        excludes VLAN interfaces, FCoE, Port-Channels, Management and Fibre
        Channel ports.

def interfaces(self):
        """list[dict]: A list of dictionary items describing the operational
        state of interfaces.
        This method currently only lists the Physical Interfaces (
        Gigabitethernet, tengigabitethernet, fortygigabitethernet,
        hundredgigabitethernet) and Loopback interfaces.  It currently
        excludes VLAN interfaces, FCoE, Port-Channels, Management and Fibre
        Channel ports.
        """
        urn = "{urn:brocade.com:mgmt:brocade-interface-ext}"
        int_ns = 'urn:brocade.com:mgmt:brocade-interface-ext'

        result = []
        has_more = ''
        last_interface_name = ''
        last_interface_type = ''

        while (has_more == '') or (has_more == 'true'):
            request_interface = self.get_interface_detail_request(
                last_interface_name, last_interface_type)
            interface_result = self._callback(request_interface, 'get')
            has_more = interface_result.find('%shas-more' % urn).text

            for item in interface_result.findall('%sinterface' % urn):
                interface_type = item.find('%sinterface-type' % urn).text
                interface_name = item.find('%sinterface-name' % urn).text
                last_interface_type = interface_type
                last_interface_name = interface_name
                if "gigabitethernet" in interface_type:
                    interface_role = item.find('%sport-role' % urn).text
                    if_name = item.find('%sif-name' % urn).text
                    interface_state = item.find('%sif-state' % urn).text
                    interface_proto_state = item.find('%sline-protocol-state' %
                                                      urn).text
                    interface_mac = item.find(
                        '%scurrent-hardware-address' % urn).text

                    item_results = {'interface-type': interface_type,
                                    'interface-name': interface_name,
                                    'interface-role': interface_role,
                                    'if-name': if_name,
                                    'interface-state': interface_state,
                                    'interface-proto-state':
                                        interface_proto_state,
                                    'interface-mac': interface_mac}
                    result.append(item_results)
        # Loopback interfaces. Probably for other non-physical interfaces, too.
        ip_result = []
        request_interface = ET.Element('get-ip-interface', xmlns=int_ns)
        interface_result = self._callback(request_interface, 'get')
        for interface in interface_result.findall('%sinterface' % urn):
            int_type = interface.find('%sinterface-type' % urn).text
            int_name = interface.find('%sinterface-name' % urn).text
            if int_type == 'unknown':
                continue

            int_state = interface.find('%sif-state' % urn).text
            int_proto_state = interface.find('%sline-protocol-state' %
                                             urn).text
            ip_address = interface.find('.//%sipv4' % urn).text
            results = {'interface-type': int_type,
                       'interface-name': int_name,
                       'interface-role': None,
                       'if-name': None,
                       'interface-state': int_state,
                       'interface-proto-state': int_proto_state,
                       'interface-mac': None,
                       'ip-address': ip_address}
            x = next((x for x in result if int_type == x['interface-type'] and
                      int_name == x['interface-name']), None)
            if x is not None:
                results.update(x)
            ip_result.append(results)
        return ip_result