+ break;
+ }
+ }
+ // new tunnel
+ if (tunnelFound == false) {
+ tunnelBuilder.setIp(ip);
+ tunnelBuilder.setPort(tunnelType.getPortNumber());
+ tunnelBuilder.setNodeConnectorId(nodeConnectorId);
+ tunnelBuilder.setTunnelType(tunnelType.getTunnelType());
+ tunnelsUpdated = true;
+ }
+
+ // Nothing was updated, nothing to see here, move along...
+ if (tunnelsUpdated == false) {
+ return;
+ }
+
+ existingTunnels.add(tunnelBuilder.build());
+
+ // Update the OfOverlayNodeConfig with the new tunnel information
+ if (!existingTunnels.isEmpty()) {
+ ofOverlayNodeConfigBuilder.setTunnel(new ArrayList<Tunnel>(existingTunnels));
+ }
+ OfOverlayNodeConfig newConfig = ofOverlayNodeConfigBuilder.build();
+ if (addOfOverlayConfig(newConfig, new NodeId(nodeIdString), dataBroker)) {
+ LOG.trace("updateOfOverlayConfig - Added Tunnel: {} to Node: {} at NodeConnector: {}",
+ tunnelBuilder.build(), nodeIdString, nodeConnectorIdString);
+ } else {
+ LOG.error("updateOfOverlayConfig - could not write OfOverlayNodeConfig: {} to datastore.", newConfig);
+ }
+ }
+
+ public static void removeTunnelsOfOverlayConfig(String nodeIdString,
+ List<AbstractTunnelType> tunnels,
+ DataBroker dataBroker) {
+
+ if (nodeIdString == null) {
+ LOG.debug("Can't update OfOverlay: requisite information not present");
+ return;
+ }
+ List<Tunnel> existingTunnels = new ArrayList<>();
+ OfOverlayNodeConfig ofConfig = getOfOverlayConfig(nodeIdString, dataBroker);
+ if (ofConfig != null) {
+ existingTunnels = ofConfig.getTunnel();
+ }
+ Set<Tunnel> tunnelsToRemove = new HashSet<>();
+ for (AbstractTunnelType tunnelType : tunnels) {
+ for (Tunnel currentTun : existingTunnels) {
+ if (tunnelType.getTunnelType().equals(currentTun.getTunnelType())) {
+ tunnelsToRemove.add(currentTun);
+ }