/**
   * Copies data in elements from given source to elements in given destination with same
   * templateName. No element is created within this method. Does not copy references to other
   * elements (interfaces, physicalRouter, etc.)
   *
   * @param source
   * @param destination
   * @return destination updated with values in source.
   */
  private VCPENetworkModel partialCopy(VCPENetworkModel source, VCPENetworkModel destination) {
    destination.setName(source.getName());
    destination.setId(source.getId());

    VCPENetworkElement dstElement;
    for (VCPENetworkElement srcElement : source.getElements()) {
      dstElement =
          VCPENetworkModelHelper.getElementByTemplateName(
              destination.getElements(), srcElement.getTemplateName());
      if (dstElement != null) {
        dstElement.setName(srcElement.getName());
        if (srcElement instanceof Interface && dstElement instanceof Interface) {
          VCPENetworkModelHelper.copyInterface((Interface) dstElement, (Interface) srcElement);
        } else if (srcElement instanceof IPNetworkDomain && dstElement instanceof IPNetworkDomain) {
          ((IPNetworkDomain) dstElement).setOwner(((IPNetworkDomain) srcElement).getOwner());
          ((IPNetworkDomain) dstElement).setASNumber(((IPNetworkDomain) srcElement).getASNumber());
          ((IPNetworkDomain) dstElement)
              .setIPAddressRanges(((IPNetworkDomain) srcElement).getIPAddressRanges());
        }
      }
    }
    return destination;
  }
  /**
   * Creates MP-template required static routes in given model.
   *
   * <p>Creates following static routes:
   *
   * <p>in LR1: <br>
   * static route LAN_CLIENT.getIPAddressRange() next-hop LR_CLIENT_IFACE_UP1.getIPAddress()
   * (through LR_1_IFACE_DOWN) <br>
   * static route 0.0.0.0/0 next-hop WAN1_IFACE_DOWN.getIPAddress() (through LR_1_IFACE_UP) <br>
   * in LR2: <br>
   * static route LAN_CLIENT.getIPAddressRange() next-hop LR_CLIENT_IFACE_UP2.getIPAddress()
   * (through LR_2_IFACE_DOWN) <br>
   * static route 0.0.0.0/0 next-hop WAN2_IFACE_DOWN.getIPAddress() (through LR_2_IFACE_UP) <br>
   * in LR_CLIENT: <br>
   * static route LAN_CLIENT.getIPAddressRange() next-hop LAN_CLIENT_IFACE_UP.getIPAddress()
   * (through LR_CLIENT_IFACE_DOWN) <br>
   * static route WAN1.getIPAddressRange() next-hop LR_1_IFACE_DOWN.getIPAddress() (through
   * LR_CLIENT_IFACE_UP1) <br>
   * static route WAN2.getIPAddressRange() next-hop LR_2_IFACE_DOWN.getIPAddress() (through
   * LR_CLIENT_IFACE_UP2) <br>
   * static route 0.0.0.0/0 next-hop LR_1_IFACE_DOWN.getIPAddress() (through LR_CLIENT_IFACE_UP1)
   * //default provider is WAN1 <br>
   * Documented in issue OPENNAAS-869.
   *
   * @param model
   * @return given model with required static routes included
   */
  private VCPENetworkModel configureStaticRoutes(VCPENetworkModel model) {

    String allRoutes = "0.0.0.0/0";
    RoutingConfiguration config;

    List<String> clientIPRanges =
        ((IPNetworkDomain)
                VCPENetworkModelHelper.getElementByTemplateName(
                    model, TemplateConstants.LAN_CLIENT))
            .getIPAddressRanges();
    List<String> wan1IPRanges =
        ((IPNetworkDomain)
                VCPENetworkModelHelper.getElementByTemplateName(model, TemplateConstants.WAN1))
            .getIPAddressRanges();
    List<String> wan2IPRanges =
        ((IPNetworkDomain)
                VCPENetworkModelHelper.getElementByTemplateName(model, TemplateConstants.WAN2))
            .getIPAddressRanges();

    // LR_1
    config =
        ((Router)
                VCPENetworkModelHelper.getElementByTemplateName(
                    model, TemplateConstants.LR_1_ROUTER))
            .getRoutingConfiguration();
    config.setStaticRoutes(new ArrayList<StaticRouteConfiguration>(2));

    // static route LAN_CLIENT.getIPAddressRange() next-hop LR_CLIENT_IFACE_UP1.getIPAddress()
    // (through LR_1_IFACE_DOWN)
    for (String ipRange : clientIPRanges) {
      config
          .getStaticRoutes()
          .add(
              new StaticRouteConfiguration(
                  ipRange,
                  ((Interface)
                          VCPENetworkModelHelper.getElementByTemplateName(
                              model, TemplateConstants.LR_CLIENT_IFACE_UP1))
                      .getIpAddress(),
                  false));
    }
    // static route 0.0.0.0/0 next-hop WAN1_IFACE_DOWN.getIPAddress() (through LR_1_IFACE_UP)
    config
        .getStaticRoutes()
        .add(
            new StaticRouteConfiguration(
                allRoutes,
                ((Interface)
                        VCPENetworkModelHelper.getElementByTemplateName(
                            model, TemplateConstants.WAN1_IFACE_DOWN))
                    .getIpAddress(),
                false));

    // LR_2
    config =
        ((Router)
                VCPENetworkModelHelper.getElementByTemplateName(
                    model, TemplateConstants.LR_2_ROUTER))
            .getRoutingConfiguration();
    config.setStaticRoutes(new ArrayList<StaticRouteConfiguration>(2));
    // static route LAN_CLIENT.getIPAddressRange() next-hop LR_CLIENT_IFACE_UP2.getIPAddress()
    // (through LR_2_IFACE_DOWN)
    for (String ipRange : clientIPRanges) {
      config
          .getStaticRoutes()
          .add(
              new StaticRouteConfiguration(
                  ipRange,
                  ((Interface)
                          VCPENetworkModelHelper.getElementByTemplateName(
                              model, TemplateConstants.LR_CLIENT_IFACE_UP2))
                      .getIpAddress(),
                  false));
    }
    // static route 0.0.0.0/0 next-hop WAN2_IFACE_DOWN.getIPAddress() (through LR_2_IFACE_UP)
    config
        .getStaticRoutes()
        .add(
            new StaticRouteConfiguration(
                allRoutes,
                ((Interface)
                        VCPENetworkModelHelper.getElementByTemplateName(
                            model, TemplateConstants.WAN2_IFACE_DOWN))
                    .getIpAddress(),
                false));

    // LR_CLIENT
    config =
        ((Router)
                VCPENetworkModelHelper.getElementByTemplateName(
                    model, TemplateConstants.LR_CLIENT_ROUTER))
            .getRoutingConfiguration();
    config.setStaticRoutes(new ArrayList<StaticRouteConfiguration>(4));
    // static route LAN_CLIENT.getIPAddressRange() next-hop LAN_CLIENT_IFACE_UP.getIPAddress()
    // (through LR_CLIENT_IFACE_DOWN)
    for (String ipRange : clientIPRanges) {
      config
          .getStaticRoutes()
          .add(
              new StaticRouteConfiguration(
                  ipRange,
                  ((Interface)
                          VCPENetworkModelHelper.getElementByTemplateName(
                              model, TemplateConstants.LAN_CLIENT_IFACE_UP))
                      .getIpAddress(),
                  false));
    }
    // static route WAN1.getIPAddressRange() next-hop LR_1_IFACE_DOWN.getIPAddress() (through
    // LR_CLIENT_IFACE_UP1)
    for (String ipRange : wan1IPRanges) {
      config
          .getStaticRoutes()
          .add(
              new StaticRouteConfiguration(
                  ipRange,
                  ((Interface)
                          VCPENetworkModelHelper.getElementByTemplateName(
                              model, TemplateConstants.LR_1_IFACE_DOWN))
                      .getIpAddress(),
                  false));
    }
    // static route WAN2.getIPAddressRange() next-hop LR_2_IFACE_DOWN.getIPAddress() (through
    // LR_CLIENT_IFACE_UP2)
    for (String ipRange : wan2IPRanges) {
      config
          .getStaticRoutes()
          .add(
              new StaticRouteConfiguration(
                  ipRange,
                  ((Interface)
                          VCPENetworkModelHelper.getElementByTemplateName(
                              model, TemplateConstants.LR_2_IFACE_DOWN))
                      .getIpAddress(),
                  false));
    }
    // static route 0.0.0.0/0 next-hop LR_1_IFACE_DOWN.getIPAddress() (through LR_CLIENT_IFACE_UP1)
    // //default provider is WAN1
    config
        .getStaticRoutes()
        .add(
            new StaticRouteConfiguration(
                allRoutes,
                ((Interface)
                        VCPENetworkModelHelper.getElementByTemplateName(
                            model, TemplateConstants.LR_1_IFACE_DOWN))
                    .getIpAddress(),
                false));

    return model;
  }
Пример #3
0
  private VCPENetworkModel suggestVLANs(
      VCPENetworkModel physicalModel, VCPENetworkModel logicalModel) {

    Integer vlan;
    VCPENetworkElement phyElement;
    Interface phyIface;
    Interface target;

    SuggestedValues suggestedVLANs = new SuggestedValues();

    // suggest VLANs for router interfaces
    phyElement =
        (Router)
            VCPENetworkModelHelper.getElementByTemplateName(
                physicalModel, TemplateConstants.ROUTER_1_PHY);
    phyIface =
        (Interface)
            VCPENetworkModelHelper.getElementByTemplateName(
                physicalModel, TemplateConstants.ROUTER_1_PHY_IFACE_UP1);
    target =
        (Interface)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.LR_1_IFACE_UP);
    vlan =
        VLANSuggestor.suggestVLANWithPreference(
            phyElement, phyIface, suggestedVLANs, Long.valueOf(target.getVlan()).intValue());
    target.setVlan(vlan);

    phyElement =
        (Router)
            VCPENetworkModelHelper.getElementByTemplateName(
                physicalModel, TemplateConstants.ROUTER_1_PHY);
    phyIface =
        (Interface)
            VCPENetworkModelHelper.getElementByTemplateName(
                physicalModel, TemplateConstants.ROUTER_1_PHY_IFACE_UP2);
    target =
        (Interface)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.LR_2_IFACE_UP);
    vlan =
        VLANSuggestor.suggestVLANWithPreference(
            phyElement, phyIface, suggestedVLANs, Long.valueOf(target.getVlan()).intValue());
    target.setVlan(vlan);

    phyElement =
        (Router)
            VCPENetworkModelHelper.getElementByTemplateName(
                physicalModel, TemplateConstants.ROUTER_1_PHY);
    phyIface =
        (Interface)
            VCPENetworkModelHelper.getElementByTemplateName(
                physicalModel, TemplateConstants.ROUTER_1_PHY_IFACE_DOWN);
    target =
        (Interface)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.LR_CLIENT_IFACE_DOWN);
    vlan =
        VLANSuggestor.suggestVLANWithPreference(
            phyElement, phyIface, suggestedVLANs, Long.valueOf(target.getVlan()).intValue());
    target.setVlan(vlan);

    // update other endpoints of links with same vlans
    Link link;
    IPNetworkDomain net;

    target =
        (Interface)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.WAN1_IFACE_DOWN);
    link =
        (Link)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.LINK_WAN1);
    net =
        (IPNetworkDomain)
            VCPENetworkModelHelper.getElementByTemplateName(logicalModel, TemplateConstants.WAN1);
    // Passing a logical element where a physical one is expected
    updateIfaceVLANFromLink(net, target, link, suggestedVLANs);

    target =
        (Interface)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.WAN2_IFACE_DOWN);
    link =
        (Link)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.LINK_WAN2);
    net =
        (IPNetworkDomain)
            VCPENetworkModelHelper.getElementByTemplateName(logicalModel, TemplateConstants.WAN2);
    // Passing a logical element where a physical one is expected
    updateIfaceVLANFromLink(net, target, link, suggestedVLANs);

    target =
        (Interface)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.LAN_CLIENT_IFACE_UP);
    link =
        (Link)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.LINK_LAN_CLIENT);
    net =
        (IPNetworkDomain)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.LAN_CLIENT);
    // Passing a logical element where a physical one is expected
    updateIfaceVLANFromLink(net, target, link, suggestedVLANs);

    return logicalModel;
  }
Пример #4
0
  private VCPENetworkModel suggestUnits(
      VCPENetworkModel physicalModel, VCPENetworkModel logicalModel) {

    VCPENetworkElement phyElement;
    IPNetworkDomain net;
    Interface target;
    Integer unit;

    SuggestedValues suggestedUnits = new SuggestedValues();

    // Suggest units from vlans

    phyElement =
        (Router)
            VCPENetworkModelHelper.getElementByTemplateName(
                physicalModel, TemplateConstants.ROUTER_1_PHY);

    target =
        (Interface)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.LR_1_IFACE_UP);
    unit = UnitSuggestor.suggestUnitFromVLAN(phyElement, target, suggestedUnits);
    target.setPort(unit);

    target =
        (Interface)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.LR_2_IFACE_UP);
    unit = UnitSuggestor.suggestUnitFromVLAN(phyElement, target, suggestedUnits);
    target.setPort(unit);

    target =
        (Interface)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.LR_CLIENT_IFACE_DOWN);
    unit = UnitSuggestor.suggestUnitFromVLAN(phyElement, target, suggestedUnits);
    target.setPort(unit);

    net =
        (IPNetworkDomain)
            VCPENetworkModelHelper.getElementByTemplateName(logicalModel, TemplateConstants.WAN1);
    target =
        (Interface)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.WAN1_IFACE_DOWN);
    unit = UnitSuggestor.suggestUnitFromVLAN(net, target, suggestedUnits);
    target.setPort(unit);

    net =
        (IPNetworkDomain)
            VCPENetworkModelHelper.getElementByTemplateName(logicalModel, TemplateConstants.WAN2);
    target =
        (Interface)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.WAN2_IFACE_DOWN);
    unit = UnitSuggestor.suggestUnitFromVLAN(net, target, suggestedUnits);
    target.setPort(unit);

    net =
        (IPNetworkDomain)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.LAN_CLIENT);
    target =
        (Interface)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.LAN_CLIENT_IFACE_UP);
    unit = UnitSuggestor.suggestUnitFromVLAN(net, target, suggestedUnits);
    target.setPort(unit);

    // Suggest units for LTs
    Link lt1 =
        (Link)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.LINK_LR_1_LR_CLIENT);
    Link lt2 =
        (Link)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.LINK_LR_2_LR_CLIENT);

    lt1.getSource().setPort(UnitSuggestor.suggestUnit(phyElement, lt1.getSource(), suggestedUnits));
    lt1.getSink().setPort(UnitSuggestor.suggestUnit(phyElement, lt1.getSink(), suggestedUnits));

    lt2.getSource().setPort(UnitSuggestor.suggestUnit(phyElement, lt2.getSource(), suggestedUnits));
    lt2.getSink().setPort(UnitSuggestor.suggestUnit(phyElement, lt2.getSink(), suggestedUnits));

    // Suggest units for LOs
    target =
        (Interface)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.LR_1_IFACE_LO);
    target.setPort(UnitSuggestor.suggestUnit(phyElement, target, suggestedUnits));

    target =
        (Interface)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.LR_2_IFACE_LO);
    target.setPort(UnitSuggestor.suggestUnit(phyElement, target, suggestedUnits));

    target =
        (Interface)
            VCPENetworkModelHelper.getElementByTemplateName(
                logicalModel, TemplateConstants.LR_CLIENT_IFACE_LO);
    target.setPort(UnitSuggestor.suggestUnit(phyElement, target, suggestedUnits));

    return logicalModel;
  }