+ public static long getRemoteBCGroup(long elanTag) {
+ return VpnConstants.ELAN_GID_MIN + ((elanTag % VpnConstants.ELAN_GID_MIN) *2);
+ }
+
+ // interface-index-tag operational container
+ public static IfIndexInterface getInterfaceInfoByInterfaceTag(DataBroker broker, long interfaceTag) {
+ InstanceIdentifier<IfIndexInterface> interfaceId = getInterfaceInfoEntriesOperationalDataPath(interfaceTag);
+ Optional<IfIndexInterface> existingInterfaceInfo = VpnUtil.read(broker, LogicalDatastoreType.OPERATIONAL, interfaceId);
+ if(existingInterfaceInfo.isPresent()) {
+ return existingInterfaceInfo.get();
+ }
+ return null;
+ }
+
+ private static InstanceIdentifier<IfIndexInterface> getInterfaceInfoEntriesOperationalDataPath(long interfaceTag) {
+ return InstanceIdentifier.builder(IfIndexesInterfaceMap.class).child(IfIndexInterface.class,
+ new IfIndexInterfaceKey((int) interfaceTag)).build();
+ }
+
+ public static String getNeutronPortNamefromPortFixedIp(DataBroker broker, String fixedIp) {
+ InstanceIdentifier id = buildFixedIpToPortNameIdentifier(fixedIp);
+ Optional<PortFixedipToPortName> portFixedipToPortNameData = read(broker, LogicalDatastoreType.CONFIGURATION,
+ id);
+ if (portFixedipToPortNameData.isPresent()) {
+ return portFixedipToPortNameData.get().getPortName();
+ }
+ return null;
+ }
+
+ private static InstanceIdentifier<PortFixedipToPortName> buildFixedIpToPortNameIdentifier(String fixedIp) {
+ InstanceIdentifier<PortFixedipToPortName> id = InstanceIdentifier.builder(NeutronPortData.class).child
+ (PortFixedipToPortName.class, new PortFixedipToPortNameKey(fixedIp)).build();
+ return id;
+ }
+
+ public static ElanTagName getElanInfoByElanTag(DataBroker broker,long elanTag) {
+ InstanceIdentifier<ElanTagName> elanId = getElanInfoEntriesOperationalDataPath(elanTag);
+ Optional<ElanTagName> existingElanInfo = VpnUtil.read(broker, LogicalDatastoreType.OPERATIONAL, elanId);
+ if(existingElanInfo.isPresent()) {
+ return existingElanInfo.get();
+ }
+ return null;
+ }
+
+ private static InstanceIdentifier<ElanTagName> getElanInfoEntriesOperationalDataPath(long elanTag) {
+ return InstanceIdentifier.builder(ElanTagNameMap.class).child(ElanTagName.class,
+ new ElanTagNameKey(elanTag)).build();
+ }
+
+
+ public static boolean isIpInSubnet(int ipAddress, String subnetCidr) {
+ String[] subSplit = subnetCidr.split("/");
+ if (subSplit.length < 2) {
+ return false;
+ }
+
+ String subnetStr = subSplit[0];
+ int subnet = 0;
+ try {
+ InetAddress subnetAddress = InetAddress.getByName(subnetStr);
+ subnet = Ints.fromByteArray(subnetAddress.getAddress());
+ } catch (Exception ex) {
+ LOG.error("Passed in Subnet IP string not convertible to InetAdddress " + subnetStr);
+ return false;
+ }
+ int prefixLength = Integer.valueOf(subSplit[1]);
+ int mask = -1 << (32 - prefixLength);
+ if ((subnet & mask) == (ipAddress & mask)) {
+ return true;
+ }
+ return false;
+ }
+
+ public static void removePrefixToInterfaceForVpnId(DataBroker broker, long vpnId) {
+ try {
+ // Clean up PrefixToInterface Operational DS
+ delete(broker, LogicalDatastoreType.OPERATIONAL,
+ InstanceIdentifier.builder(PrefixToInterface.class).child(VpnIds.class, new VpnIdsKey(vpnId)).build(),
+ DEFAULT_CALLBACK);
+ } catch (Exception e) {
+ LOG.error("Exception during cleanup of PrefixToInterface for VPN ID {}", vpnId, e);
+ }
+ }
+
+ public static void removeVpnExtraRouteForVpn(DataBroker broker, String vpnName) {
+ try {
+ // Clean up VPNExtraRoutes Operational DS
+ delete(broker, LogicalDatastoreType.OPERATIONAL,
+ InstanceIdentifier.builder(VpnToExtraroute.class).child(Vpn.class, new VpnKey(vpnName)).build(),
+ DEFAULT_CALLBACK);
+ } catch (Exception e) {
+ LOG.error("Exception during cleanup of VPNToExtraRoute for VPN {}", vpnName, e);
+ }
+ }
+
+ public static void removeVpnOpInstance(DataBroker broker, String vpnName) {
+ try {
+ // Clean up VPNInstanceOpDataEntry
+ delete(broker, LogicalDatastoreType.OPERATIONAL, getVpnInstanceOpDataIdentifier(vpnName),
+ DEFAULT_CALLBACK);
+ } catch (Exception e) {
+ LOG.error("Exception during cleanup of VPNInstanceOpDataEntry for VPN {}", vpnName, e);
+ }
+ }
+
+ public static void removeVpnInstanceToVpnId(DataBroker broker, String vpnName) {
+ try {
+ delete(broker, LogicalDatastoreType.CONFIGURATION, getVpnInstanceToVpnIdIdentifier(vpnName),
+ DEFAULT_CALLBACK);
+ } catch (Exception e) {
+ LOG.error("Exception during clean up of VpnInstanceToVpnId for VPN {}", vpnName, e);
+ }
+ }
+
+ public static void removeVrfTableForVpn(DataBroker broker, String vpnName) {
+ // Clean up FIB Entries Config DS
+ try {
+ delete(broker, LogicalDatastoreType.CONFIGURATION,
+ InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class, new VrfTablesKey(vpnName)).build(),
+ DEFAULT_CALLBACK);
+ } catch (Exception e) {
+ LOG.error("Exception during clean up of VrfTable from FIB for VPN {}", vpnName, e);
+ }
+ }
+
+ public static void removeL3nexthopForVpnId(DataBroker broker, long vpnId) {
+ try {
+ // Clean up L3NextHop Operational DS
+ delete(broker, LogicalDatastoreType.OPERATIONAL,
+ InstanceIdentifier.builder(L3nexthop.class).child(VpnNexthops.class, new VpnNexthopsKey(vpnId)).build(),
+ DEFAULT_CALLBACK);
+ } catch (Exception e) {
+ LOG.error("Exception during cleanup of L3NextHop for VPN ID {}", vpnId, e);
+ }
+ }
+}
\ No newline at end of file