@Override
  public void ndlInterface(
      Resource intf, OntModel om, Resource conn, Resource node, String ip, String mask) {

    // ignore request items
    // if (requestPhase)
    //	return;

    // System.out.println("Interface " + l + " has IP/netmask" + ip + "/" + mask);
    // logger.debug("Interface " + intf + " between " + node + " and " + conn + " has IP/netmask " +
    // ip + "/" + mask);

    if (intf == null) return;
    OrcaNode on = null;
    OrcaLink ol = null;
    OrcaCrossconnect crs = null;
    if (node != null) on = nodes.get(getTrueName(node));

    if (conn != null) {
      ol = links.get(getTrueName(conn));
      if (ol == null)
        // maybe it is a crossconnect and not a link connection
        crs = (OrcaCrossconnect) nodes.get(getTrueName(conn));
    }

    // extract the IP address from label, if it is not set on
    // the interface in the request (basically we favor manifest
    // setting over the request because in node groups that's the
    // correct one)
    String nmInt = null;
    if (ip == null) {
      String ifIpLabel = NdlCommons.getLabelID(intf);
      // x.y.z.w/24
      if (ifIpLabel != null) {
        String[] ipnm = ifIpLabel.split("/");
        if (ipnm.length == 2) {
          ip = ipnm[0];
          nmInt = ipnm[1];
        }
      }
    } else {
      if (mask != null) nmInt = "" + RequestSaver.netmaskStringToInt(mask);
    }

    // check mirrored storage interfaces
    if ((ip == null) && (sharedStorageLinkInterfaceEquivalence.containsKey(intf))) {
      String ifIpLabel = NdlCommons.getLabelID(sharedStorageLinkInterfaceEquivalence.get(intf));
      // x.y.z.w/24
      if (ifIpLabel != null) {
        String[] ipnm = ifIpLabel.split("/");
        if (ipnm.length == 2) {
          ip = ipnm[0];
          nmInt = ipnm[1];
        }
      }
    }

    if (on != null) {
      if (ol != null) {
        on.setIp(ol, ip, nmInt);
        on.setInterfaceName(ol, getTrueName(intf));
        on.setMac(ol, NdlCommons.getAddressMAC(intf));
      } else if (crs != null) {
        // for individual nodes
        // create link from node to crossconnect and assign IP if it doesn't exist

        // check if the nodes are listed in the map

        if (interfaceToNode.get(getTrueName(intf)) != null) {
          // logger.debug("  Creating a link  from " + on + " to " + crs);
          ol = new OrcaLink("Unnamed");
          pg.addEdgeLater(on, crs, null, ol);
        } else {
          // logger.debug("  Skipping a link from " + on + " to " + crs + " as interface isn't
          // remembered");
        }
        on.setIp(ol, ip, nmInt);
        on.setInterfaceName(ol, getTrueName(intf));
        on.setMac(ol, NdlCommons.getAddressMAC(intf));
      } else {
        // this could be a disconnected node group
        if (on instanceof OrcaNodeGroup) {
          OrcaNodeGroup ong = (OrcaNodeGroup) on;
          ong.setInternalIp(ip, "" + RequestSaver.netmaskStringToInt(mask));
        }
      }
    }
  }