class VxlanTopologyUtils {

  @VisibleForTesting
  static boolean reachableEdge(
      EndpointPair<VxlanNode> edge, NetworkConfigurations nc, TracerouteEngine tracerouteEngine) {
    VxlanNode nodeU = edge.nodeU();
    VxlanNode nodeV = edge.nodeV();
    String hostU = nodeU.getHostname();
    String hostV = nodeV.getHostname();
    // nodeU and nodeV must be compatible coming in to this function
    int vni = nodeU.getVni();
    Layer2Vni vniSettingsU = nc.getVniSettings(hostU, vni).get();
    // early exit if unsupported
    if (vniSettingsU.getBumTransportMethod() != BumTransportMethod.UNICAST_FLOOD_GROUP) {
      // TODO: support multicast transport
      return false;
    }
    Layer2Vni vniSettingsV = nc.getVniSettings(hostV, vni).get();
    String vrfU = getVniSrcVrf(vniSettingsU);
    String vrfV = getVniSrcVrf(vniSettingsV);
    Ip srcIpU = vniSettingsU.getSourceAddress();
    Ip srcIpV = vniSettingsV.getSourceAddress();
    int udpPort = vniSettingsU.getUdpPort();
    return vxlanFlowDelivered(hostU, vrfU, srcIpU, hostV, srcIpV, udpPort, tracerouteEngine)
        && vxlanFlowDelivered(hostV, vrfV, srcIpV, hostU, srcIpU, udpPort, tracerouteEngine);
  }

  private  VxlanTopologyUtils();

}