[ONOS-6224] L3VPN service delete
Change-Id: I2eabb231def39dba6613dc5b95f2b16594133ad4
diff --git a/drivers/huawei/driver/src/main/java/org/onosproject/drivers/huawei/BgpConstructionUtil.java b/drivers/huawei/driver/src/main/java/org/onosproject/drivers/huawei/BgpConstructionUtil.java
index 8472ed4..85e4da6 100644
--- a/drivers/huawei/driver/src/main/java/org/onosproject/drivers/huawei/BgpConstructionUtil.java
+++ b/drivers/huawei/driver/src/main/java/org/onosproject/drivers/huawei/BgpConstructionUtil.java
@@ -33,10 +33,12 @@
import org.onosproject.yang.gen.v1.ne.bgpcomm.rev20141225.nebgpcomm.devices.device.bgp.bgpcomm.BgpVrfs;
import org.onosproject.yang.gen.v1.ne.bgpcomm.rev20141225.nebgpcomm.devices.device.bgp.bgpcomm.DefaultBgpVrfs;
import org.onosproject.yang.gen.v1.ne.bgpcomm.rev20141225.nebgpcomm.devices.device.bgp.bgpcomm.bgpvrfs.BgpVrf;
+import org.onosproject.yang.gen.v1.ne.bgpcomm.rev20141225.nebgpcomm.devices.device.bgp.bgpcomm.bgpvrfs.BgpVrfKeys;
import org.onosproject.yang.gen.v1.ne.bgpcomm.rev20141225.nebgpcomm.devices.device.bgp.bgpcomm.bgpvrfs.DefaultBgpVrf;
import org.onosproject.yang.gen.v1.ne.bgpcomm.rev20141225.nebgpcomm.devices.device.bgp.bgpcomm.bgpvrfs.bgpvrf.BgpVrfAfs;
import org.onosproject.yang.gen.v1.ne.bgpcomm.rev20141225.nebgpcomm.devices.device.bgp.bgpcomm.bgpvrfs.bgpvrf.DefaultBgpVrfAfs;
import org.onosproject.yang.gen.v1.ne.bgpcomm.rev20141225.nebgpcomm.devices.device.bgp.bgpcomm.bgpvrfs.bgpvrf.bgpvrfafs.BgpVrfAf;
+import org.onosproject.yang.gen.v1.ne.bgpcomm.rev20141225.nebgpcomm.devices.device.bgp.bgpcomm.bgpvrfs.bgpvrf.bgpvrfafs.BgpVrfAfKeys;
import org.onosproject.yang.gen.v1.ne.bgpcomm.rev20141225.nebgpcomm.devices.device.bgp.bgpcomm.bgpvrfs.bgpvrf.bgpvrfafs.DefaultBgpVrfAf;
import org.onosproject.yang.gen.v1.ne.bgpcomm.rev20141225.nebgpcomm.devices.device.bgp.bgpcomm.bgpvrfs.bgpvrf.bgpvrfafs.bgpvrfaf.DefaultImportRoutes;
import org.onosproject.yang.gen.v1.ne.bgpcomm.rev20141225.nebgpcomm.devices.device.bgp.bgpcomm.bgpvrfs.bgpvrf.bgpvrfafs.bgpvrfaf.ImportRoutes;
@@ -100,29 +102,33 @@
bgpVrf.vrfName(bgpInfo.vpnName());
Map<RouteProtocol, ProtocolInfo> proMap = bgpInfo.protocolInfo();
- addRouteProtocol(proMap, bgpVrfAfs);
+ ImportRoute route = addRouteProtocol(proMap, bgpVrfAfs);
bgpVrf.bgpVrfAfs(bgpVrfAfs);
bgpVrfList.add(bgpVrf);
bgpVrfs.bgpVrf(bgpVrfList);
bgpBuilder.bgpVrfs(bgpVrfs);
bgp.bgpcomm(bgpBuilder);
- return getModObjData(modIdLevel, bgp, devId, bgpVrf);
+ return getModObjData(modIdLevel, bgp, devId, bgpVrf, route);
}
/**
* Adds route protocol from the standard device model to the BGP address
* family respectively.
+ * //TODO: IPV6 has to be handled.
*
* @param proMap protocol map
* @param bgpVrfAfs BGP address family
+ * @return import route
*/
- private static void addRouteProtocol(Map<RouteProtocol, ProtocolInfo> proMap,
- BgpVrfAfs bgpVrfAfs) {
+ private static ImportRoute addRouteProtocol(Map<RouteProtocol, ProtocolInfo> proMap,
+ BgpVrfAfs bgpVrfAfs) {
BgpVrfAf ipv4 = new DefaultBgpVrfAf();
ImportRoutes ipv4Routes = new DefaultImportRoutes();
ipv4.afType(of(IPV4UNI));
+ ImportRoute route = null;
+
BgpVrfAf ipv6 = new DefaultBgpVrfAf();
ImportRoutes ipv6Routes = new DefaultImportRoutes();
ipv6.afType(of(IPV6UNI));
@@ -130,7 +136,7 @@
RouteProtocol protocol = info.getKey();
ProtocolInfo proInfo = info.getValue();
if (proInfo.isIpv4Af()) {
- addImportRoute(ipv4Routes, proInfo, protocol);
+ route = addImportRoute(ipv4Routes, proInfo, protocol);
}
if (proInfo.isIpv6Af()) {
addImportRoute(ipv6Routes, proInfo, protocol);
@@ -144,6 +150,7 @@
!ipv6Routes.importRoute().isEmpty()) {
addToBgpVrf(ipv6Routes, ipv6, bgpVrfAfs);
}
+ return route;
}
/**
@@ -168,13 +175,16 @@
* @param routes routes object
* @param proInfo protocol info
* @param protocol route protocol
+ * @return import route object
*/
- private static void addImportRoute(ImportRoutes routes, ProtocolInfo proInfo,
- RouteProtocol protocol) {
+ private static ImportRoute addImportRoute(ImportRoutes routes,
+ ProtocolInfo proInfo,
+ RouteProtocol protocol) {
List<ImportRoute> routeList = new LinkedList<>();
ImportRoute route = buildAfBgp(proInfo, protocol);
routeList.add(route);
routes.importRoute(routeList);
+ return route;
}
/**
@@ -233,12 +243,17 @@
* @param bgp driver BGP object
* @param devId device id
* @param bgpVrf driver BGP VRF object
+ * @param route import route object
* @return model object data
*/
public static ModelObjectData getModObjData(BgpModelIdLevel modIdLevel,
Bgp bgp, String devId,
- BgpVrf bgpVrf) {
+ BgpVrf bgpVrf, ImportRoute route) {
switch (modIdLevel) {
+
+ case VPN:
+ return getRouteProModObj(bgpVrf.vrfName(), route, devId);
+
case ROOT:
return getRootModObj(bgp, devId);
@@ -254,6 +269,36 @@
}
/**
+ * Returns the model object data of route protocol.
+ *
+ * @param vpnName VPN name
+ * @param route import route
+ * @param devId device id
+ * @return model object data
+ */
+ private static ModelObjectData getRouteProModObj(String vpnName,
+ ImportRoute route,
+ String devId) {
+ DeviceKeys key = new DeviceKeys();
+ key.deviceid(devId);
+ BgpVrfKeys vpnKey = new BgpVrfKeys();
+ vpnKey.vrfName(vpnName);
+ BgpVrfAfKeys afKey = new BgpVrfAfKeys();
+ afKey.afType(of(IPV4UNI));
+ ModelObjectId id = ModelObjectId.builder()
+ .addChild(DefaultDevices.class)
+ .addChild(DefaultDevice.class, key)
+ .addChild(DefaultBgp.class)
+ .addChild(DefaultBgpcomm.class)
+ .addChild(DefaultBgpVrfs.class)
+ .addChild(DefaultBgpVrf.class, vpnKey)
+ .addChild(DefaultBgpVrfAfs.class)
+ .addChild(DefaultBgpVrfAf.class, afKey)
+ .addChild(DefaultImportRoutes.class).build();
+ return getData(id, (InnerModelObject) route);
+ }
+
+ /**
* Returns the driver model object data with device in model object id,
* till BGP VRF.
*
@@ -316,4 +361,81 @@
device.bgp(bgp);
return device;
}
+
+ /**
+ * Returns the BGP model object data for deletion.
+ *
+ * @param bgpInfo BGP info
+ * @param bgpConfig BGP driver config
+ * @return model object data
+ */
+ static ModelObjectData getDeleteBgp(BgpInfo bgpInfo,
+ BgpDriverInfo bgpConfig) {
+ BgpModelIdLevel modIdLvl = bgpConfig.modIdLevel();
+ switch (modIdLvl) {
+ case ROOT:
+ return getDelRootModObj();
+
+ case DEVICES:
+ return getDelDevicesModObj(bgpConfig.devId());
+
+ case DEVICE:
+ return getDelDeviceModObj(bgpConfig.devId(), bgpInfo.vpnName());
+
+ default:
+ throw new IllegalArgumentException(UNSUPPORTED_MODEL_LVL);
+ }
+ }
+
+ /**
+ * Returns the model object data with respect to device level.
+ *
+ * @param devId device id
+ * @param vpnName VPN name
+ * @return model object data
+ */
+ private static ModelObjectData getDelDeviceModObj(String devId,
+ String vpnName) {
+ DeviceKeys devKeys = new DeviceKeys();
+ devKeys.deviceid(devId);
+ BgpVrfKeys vpnKey = new BgpVrfKeys();
+ vpnKey.vrfName(vpnName);
+ ModelObjectId modelId = ModelObjectId.builder()
+ .addChild(DefaultDevices.class)
+ .addChild(DefaultDevice.class, devKeys)
+ .addChild(DefaultBgp.class)
+ .addChild(DefaultBgpcomm.class)
+ .addChild(DefaultBgpVrfs.class)
+ .addChild(DefaultBgpVrf.class, vpnKey).build();
+ DefaultBgpVrfAfs afs = new DefaultBgpVrfAfs();
+ return getData(modelId, afs);
+ }
+
+ /**
+ * Returns the model object data with respect to root level.
+ *
+ * @return model object data
+ */
+ private static ModelObjectData getDelRootModObj() {
+ DefaultDevice device = new DefaultDevice();
+ ModelObjectId modelId = ModelObjectId.builder().addChild(
+ DefaultDevices.class).build();
+ return getData(modelId, device);
+ }
+
+ /**
+ * Returns the model object data for devices level.
+ *
+ * @param id device id
+ * @return model object data
+ */
+ private static ModelObjectData getDelDevicesModObj(String id) {
+ DeviceKeys devKeys = new DeviceKeys();
+ devKeys.deviceid(id);
+ ModelObjectId modelId = ModelObjectId.builder()
+ .addChild(DefaultDevices.class)
+ .addChild(DefaultDevice.class, devKeys).build();
+ DefaultBgp bgp = new DefaultBgp();
+ return getData(modelId, bgp);
+ }
}