def METHOD_NAME(df: pd.DataFrame, datadir: str):
    '''Validate that each VRF/interface list is in interfaces table.
    This is to catch problems in parsing interfaces such that the different
    tables contain a different interface name than the interface table itself.
    For example, in parsing older NXOS, we got iftable with Eth1/1 and the
    route table with Ethernet1/1. The logic of ensuring this also ensures that
    the VRFs in the route table are all known to the interface table.
    '''
    # Create a new df of namespace/hostname/vrf to oif mapping
    only_oifs = df[['namespace', 'hostname', 'vrf', 'oifs']] \
        .query('vrf != ":vxlan"') \
        .explode('oifs') \
        .dropna() \
        .groupby(by=['namespace', 'hostname', 'vrf'])['oifs'] \
        .unique() \
        .reset_index() \
        .explode('oifs') \
        .query('~oifs.str.contains("_nexthopVrf:")') \
        .rename(columns={'oif': 'ifname'}) \
        .reset_index(drop=True)
    # Fetch the address table
    addr_df = _get_table_data('address', DATADIR[0])
    assert not addr_df.empty, 'unexpected empty address table'
    addr_oifs = addr_df[['namespace', 'hostname', 'vrf', 'ifname']] \
        .groupby(by=['namespace', 'hostname', 'vrf'])['ifname'] \
        .unique() \
        .reset_index() \
        .explode('ifname') \
        .reset_index(drop=True)
    m_df = only_oifs.merge(addr_oifs, how='left', indicator=True)
    # Verify we have no rows where the route table OIF has no corresponding
    # interface table info
    assert m_df.query('_merge != "both" and namespace != "vmx"').empty, \
        'Unknown interfaces in routes table'