public static List<ListenableFuture<Void>> addTepReceivedFromOvsdb(String tepIp, String strDpnId, String tzName,
boolean ofTunnel, DataBroker dataBroker,
- ManagedNewTransactionRunner txRunner) {
- List<ListenableFuture<Void>> futures = new ArrayList<>();
+ ManagedNewTransactionRunner txRunner)
+ throws Exception {
Uint64 dpnId = Uint64.ZERO;
if (strDpnId != null && !strDpnId.isEmpty()) {
IpAddress tepIpAddress = IpAddressBuilder.getDefaultInstance(tepIp);
TransportZone tzone = null;
+ // check if TEP received is already present in any other TZ.
+ TransportZone transportZone = ItmUtils.getTransportZoneOfVtep(dpnId, dataBroker);
+ if (transportZone != null) {
+ LOG.trace("Vtep (tep-ip: {} and dpid: {}) is already present in transport-zone: {}",
+ tepIpAddress, dpnId, transportZone.getZoneName());
+ if (!transportZone.getZoneName().equals(tzName)) {
+ // remove TEP from TZ because TZ is updated for TEP from southbound in this case
+ OvsdbTepRemoveWorker ovsdbTepRemoveWorkerObj = new OvsdbTepRemoveWorker(tepIp, strDpnId,
+ transportZone.getZoneName(), dataBroker);
+ ovsdbTepRemoveWorkerObj.call();
+ }
+ }
+
// Case: TZ name is not given with OVS TEP.
if (tzName == null) {
tzName = ITMConstants.DEFAULT_TRANSPORT_ZONE;
}
}
-
+ List<ListenableFuture<Void>> futures = new ArrayList<>();
final Uint64 id = dpnId;
final String name = tzName;
futures.add(txRunner.callWithNewWriteOnlyTransactionAndSubmit(Datastore.CONFIGURATION,
return null;
}
+ /**
+ * Returns the transport zone of vtep from Configuration datastore.
+ *
+ * @param dpid datapath id of vtep
+ * @param dataBroker data broker handle to perform operations on datastore
+ * @return the TransportZone object in Config DS
+ */
+ public static TransportZone getTransportZoneOfVtep(Uint64 dpid, DataBroker dataBroker) {
+ InstanceIdentifier<TransportZones> path = InstanceIdentifier.builder(TransportZones.class).build();
+ Optional<TransportZones> transportZonesOptional = ItmUtils.read(LogicalDatastoreType.CONFIGURATION,
+ path, dataBroker);
+ if (transportZonesOptional.isPresent()) {
+ TransportZones tzones = transportZonesOptional.get();
+ for (TransportZone tzone : tzones.getTransportZone()) {
+ List<Vteps> vtepList = new ArrayList<Vteps>(tzone.nonnullVteps().values());
+ if (vtepList != null && !vtepList.isEmpty()) {
+ for (Vteps vtep : vtepList) {
+ if (vtep.getDpnId().equals(dpid)) {
+ return tzone;
+ }
+ }
+ }
+ }
+ }
+ return null;
+ }
+
public static Class<? extends TunnelTypeBase> convertStringToTunnelType(String tunnelType) {
Class<? extends TunnelTypeBase> tunType = TunnelTypeVxlan.class;
if (STRING_CLASS_IMMUTABLE_BI_MAP.containsKey(tunnelType)) {
/* transaction methods */
public static ListenableFuture<Void> addTep(String tepIp, String strDpnId, String tzName, boolean ofTunnel,
- DataBroker dataBroker, ManagedNewTransactionRunner tx) {
+ DataBroker dataBroker, ManagedNewTransactionRunner tx)
+ throws Exception {
return
OvsdbTepAddConfigHelper.addTepReceivedFromOvsdb(tepIp, strDpnId, tzName, ofTunnel, dataBroker, tx).get(0);
}