def iface(name, providername=None, cache=None):
    """
    | **Interface Discovery **
    calls into ``netshowlib.[provider].iface.iface()`` to get the correct
    interface type

    :return:  Iface object that best matches interface characteristics
    """
    _providername = providername
    if not _providername:
        _providername = provider_check()

    import_str = 'netshowlib.%s.iface' % _providername
    return import_module(import_str).iface(name, cache=cache)