X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=bgpmanager%2Fbgpmanager-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fbgpmanager%2FFibDSWriter.java;h=b916e3dd5a1528e61076e2a29cf3a1b21360c8b1;hb=HEAD;hp=6737385a8569e8798f2357a81552f31d293bcaf0;hpb=7eaafc9c756f01ce75531b7d4077bbcd55bca1c7;p=vpnservice.git diff --git a/bgpmanager/bgpmanager-impl/src/main/java/org/opendaylight/bgpmanager/FibDSWriter.java b/bgpmanager/bgpmanager-impl/src/main/java/org/opendaylight/bgpmanager/FibDSWriter.java index 6737385a..b916e3dd 100644 --- a/bgpmanager/bgpmanager-impl/src/main/java/org/opendaylight/bgpmanager/FibDSWriter.java +++ b/bgpmanager/bgpmanager-impl/src/main/java/org/opendaylight/bgpmanager/FibDSWriter.java @@ -1,31 +1,31 @@ +/* + * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + package org.opendaylight.bgpmanager; -import com.google.common.util.concurrent.Futures; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; -import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.VrfEntries; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.vrfentries.VrfEntry; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.vrfentries.VrfEntryBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTables; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTablesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTablesKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.vrfentries.VrfEntryKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.FibEntries; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.List; -import java.util.Iterator; +import java.util.*; -import com.google.common.util.concurrent.FutureCallback; -import com.google.common.base.Optional; /** * Created by emhamla on 4/14/2015. @@ -40,90 +40,52 @@ public class FibDSWriter { public synchronized void addFibEntryToDS(String rd, String prefix, String nexthop, int label) { + if (rd == null || rd.isEmpty()) { + logger.error("Prefix {} not associated with vpn", prefix); + return; + } VrfEntry vrfEntry = new VrfEntryBuilder().setDestPrefix(prefix). setNextHopAddress(nexthop).setLabel((long)label).build(); - logger.info("Created vrfEntry for " + prefix + " nexthop " + nexthop + " label " + label); - InstanceIdentifierBuilder idBuilder = - InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class, new VrfTablesKey(rd)); + logger.debug("Created vrfEntry for {} nexthop {} label {}", prefix, nexthop, label); - logger.info("Created idBuilder for VrfTables"); + InstanceIdentifier.InstanceIdentifierBuilder idBuilder = + InstanceIdentifier.builder(FibEntries.class) + .child(VrfTables.class, new VrfTablesKey(rd)) + .child(VrfEntry.class, new VrfEntryKey(vrfEntry.getDestPrefix())); + InstanceIdentifier vrfEntryId= idBuilder.build(); - InstanceIdentifier vrfTableId = idBuilder.build(); - Optional vrfTable = read(LogicalDatastoreType.CONFIGURATION, vrfTableId); - if (vrfTable.isPresent()) { - List vrfEntryListExisting = vrfTable.get().getVrfEntry(); - vrfEntryListExisting.add(vrfEntry); + BgpUtil.write(broker, LogicalDatastoreType.CONFIGURATION, + vrfEntryId, vrfEntry); + } + public synchronized void removeFibEntryFromDS(String rd, String prefix) { - VrfTables vrfTableUpdate = new VrfTablesBuilder().setRouteDistinguisher(rd). - setVrfEntry(vrfEntryListExisting).build(); - write(LogicalDatastoreType.CONFIGURATION, vrfTableId, vrfTableUpdate); + if (rd == null || rd.isEmpty()) { + logger.error("Prefix {} not associated with vpn", prefix); + return; } - else { - List vrfEntryList = new ArrayList(); - vrfEntryList.add(vrfEntry); - - //add a new vrf table with this vrf entry - VrfTables vrfTableNew = new VrfTablesBuilder().setRouteDistinguisher(rd). - setVrfEntry(vrfEntryList).build(); - - logger.info("Created VrfTables"); + logger.debug("Removing fib entry with destination prefix {} from vrf table for rd {}", prefix, rd); - InstanceIdentifier vrfTableNewId = InstanceIdentifier.builder(FibEntries.class) - .child(VrfTables.class, new VrfTablesKey(rd)).build(); - logger.info("Created idBuilder for new VrfTables"); - write(LogicalDatastoreType.CONFIGURATION, vrfTableNewId, vrfTableNew); - } + InstanceIdentifierBuilder idBuilder = + InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class, new VrfTablesKey(rd)).child(VrfEntry.class, new VrfEntryKey(prefix)); + InstanceIdentifier vrfEntryId = idBuilder.build(); + BgpUtil.delete(broker, LogicalDatastoreType.CONFIGURATION, vrfEntryId); } - public synchronized void removeFibEntryFromDS(String rd, String prefix) { - - logger.debug("Removing fib entry with destination prefix " + prefix + " from vrf table for rd " + rd); + public synchronized void removeVrfFromDS(String rd) { + logger.debug("Removing vrf table for rd {}", rd); InstanceIdentifierBuilder idBuilder = - InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class, new VrfTablesKey(rd)); + InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class, new VrfTablesKey(rd)); InstanceIdentifier vrfTableId = idBuilder.build(); - Optional vrfTable = read(LogicalDatastoreType.CONFIGURATION, vrfTableId); - if (vrfTable.isPresent()) { - String searchPfx = prefix; - - List vrfEntryListExisting = vrfTable.get().getVrfEntry(); - for (Iterator it = vrfEntryListExisting.iterator(); it.hasNext(); ) { - VrfEntry elem = it.next(); - if (elem.getDestPrefix().equals(searchPfx)) { - it.remove(); - break; - } - } - - VrfTables vrfTableUpdate = new VrfTablesBuilder().setRouteDistinguisher(rd). - setVrfEntry(vrfEntryListExisting).build(); - write(LogicalDatastoreType.CONFIGURATION, vrfTableId, vrfTableUpdate); - } - } - private Optional read(LogicalDatastoreType datastoreType, - InstanceIdentifier path) { + BgpUtil.delete(broker, LogicalDatastoreType.CONFIGURATION, vrfTableId); - ReadOnlyTransaction tx = broker.newReadOnlyTransaction(); + } - Optional result = Optional.absent(); - try { - result = tx.read(datastoreType, path).get(); - } catch (Exception e) { - throw new RuntimeException(e); - } - return result; - } - private void write(LogicalDatastoreType datastoreType, - InstanceIdentifier path, T data) { - WriteTransaction tx = broker.newWriteOnlyTransaction(); - tx.put(datastoreType, path, data, true); - tx.submit(); - } }