public void populateFibOnNewDpn(long dpnId, long vpnId, String rd) {
LOG.trace("New dpn {} for vpn {} : populateFibOnNewDpn", dpnId, rd);
InstanceIdentifier<VrfTables> id = buildVrfId(rd);
- Optional<VrfTables> vrfTable = read(LogicalDatastoreType.OPERATIONAL, id);
+ Optional<VrfTables> vrfTable = read(LogicalDatastoreType.CONFIGURATION, id);
if(vrfTable.isPresent()) {
for(VrfEntry vrfEntry : vrfTable.get().getVrfEntry()) {
addRouteInternal(dpnId, vpnId, vrfTable.get().getKey(), vrfEntry);
public void cleanUpDpnForVpn(long dpnId, long vpnId, String rd) {
LOG.trace("Remove dpn {} for vpn {} : cleanUpDpnForVpn", dpnId, rd);
InstanceIdentifier<VrfTables> id = buildVrfId(rd);
- Optional<VrfTables> vrfTable = read(LogicalDatastoreType.OPERATIONAL, id);
+ Optional<VrfTables> vrfTable = read(LogicalDatastoreType.CONFIGURATION, id);
if(vrfTable.isPresent()) {
for(VrfEntry vrfEntry : vrfTable.get().getVrfEntry()) {
deleteRoute(dpnId, vpnId, vrfTable.get().getKey(), vrfEntry);
import org.opendaylight.vpnservice.mdsalutil.InstructionType;
import org.opendaylight.vpnservice.mdsalutil.MatchFieldType;
import org.opendaylight.vpnservice.mdsalutil.MatchInfo;
-import org.opendaylight.vpnservice.mdsalutil.MetaDataUtil;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.L3tunnel;
+import org.opendaylight.vpnservice.mdsalutil.NwConstants;
+
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
GroupEntity groupEntity = MDSALUtil.buildGroupEntity(
dpnId, groupId, ipAddress, GroupTypes.GroupIndirect, listBucketInfo);
mdsalManager.installGroup(groupEntity);
- addRemoteFlow(dpnId, ifName);
+ makeRemoteFlow(dpnId, ifName, NwConstants.ADD_FLOW);
//update MD-SAL DS
addTunnelNexthopToDS(dpnId, ipAddress, groupId);
}
}
- private void addRemoteFlow(long dpId, String ifName) {
-
- long portNo = interfaceManager.getPortForInterface(ifName);
- String flowRef = getTunnelInterfaceFlowRef(dpId, LPORT_INGRESS_TABLE, portNo);
-
- String flowName = ifName;
- BigInteger COOKIE_VM_INGRESS_TABLE = new BigInteger("8000001", 16);
-
- int priority = DEFAULT_FLOW_PRIORITY;
- short gotoTableId = LFIB_TABLE;
-
- List<InstructionInfo> mkInstructions = new ArrayList<InstructionInfo>();
- mkInstructions.add(new InstructionInfo(InstructionType.goto_table, new long[] { gotoTableId }));
-
- List<MatchInfo> matches = new ArrayList<MatchInfo>();
+ private void makeRemoteFlow(long dpId, String ifName, int addOrRemoveFlow) {
+ long portNo = 0;
+ String flowName = ifName;
+ String flowRef = getTunnelInterfaceFlowRef(dpId, LPORT_INGRESS_TABLE, ifName);
+ List<MatchInfo> matches = new ArrayList<MatchInfo>();
+ List<InstructionInfo> mkInstructions = new ArrayList<InstructionInfo>();
+ if (NwConstants.ADD_FLOW == addOrRemoveFlow) {
+ interfaceManager.getPortForInterface(ifName);
matches.add(new MatchInfo(MatchFieldType.in_port, new long[] {
- dpId, portNo }));
+ dpId, portNo }));
+ mkInstructions.add(new InstructionInfo(InstructionType.goto_table, new long[] {LFIB_TABLE}));
+ }
- FlowEntity flowEntity = MDSALUtil.buildFlowEntity(dpId, LPORT_INGRESS_TABLE, flowRef,
- priority, flowName, 0, 0, COOKIE_VM_INGRESS_TABLE, matches, mkInstructions);
+ BigInteger COOKIE_VM_INGRESS_TABLE = new BigInteger("8000001", 16);
+ FlowEntity flowEntity = MDSALUtil.buildFlowEntity(dpId, LPORT_INGRESS_TABLE, flowRef,
+ DEFAULT_FLOW_PRIORITY, flowName, 0, 0, COOKIE_VM_INGRESS_TABLE, matches, mkInstructions);
+ if (NwConstants.ADD_FLOW == addOrRemoveFlow) {
mdsalManager.installFlow(flowEntity);
+ } else {
+ mdsalManager.removeFlow(flowEntity);
+ }
}
- private String getTunnelInterfaceFlowRef(long dpId, short tableId, long portNo) {
- return new StringBuilder().append(dpId).append(tableId).append(portNo).toString();
+ private String getTunnelInterfaceFlowRef(long dpId, short tableId, String ifName) {
+ return new StringBuilder().append(dpId).append(tableId).append(ifName).toString();
}
protected void addVpnNexthopToDS(long vpnId, String ipPrefix, long egressPointer) {
- InstanceIdentifierBuilder<VpnNexthops> idBuilder = InstanceIdentifier.builder(L3nexthop.class)
+ InstanceIdentifierBuilder<VpnNexthops> idBuilder = InstanceIdentifier.builder(
+ L3nexthop.class)
.child(VpnNexthops.class, new VpnNexthopsKey(vpnId));
// Add nexthop to vpn node
}
- public void removeRemoteNextHop(long dpnId, String ipAddress) {
+ public void removeRemoteNextHop(long dpnId, String ifName, String ipAddress) {
TunnelNexthop nh = getTunnelNexthop(dpnId, ipAddress);
if (nh != null) {
dpnId, nh.getEgressPointer(), ipAddress, GroupTypes.GroupIndirect, null);
// remove Group ...
mdsalManager.removeGroup(groupEntity);
+ makeRemoteFlow(dpnId, ifName, NwConstants.DEL_FLOW);
//update MD-SAL DS
removeTunnelNexthopFromDS(dpnId, ipAddress);
} else {
private <T extends DataObject> void asyncWrite(LogicalDatastoreType datastoreType,
InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
WriteTransaction tx = broker.newWriteOnlyTransaction();
- tx.put(datastoreType, path, data, true);
+ tx.merge(datastoreType, path, data, true);
Futures.addCallback(tx.submit(), callback);
}
private <T extends DataObject> void syncWrite(LogicalDatastoreType datastoreType,
InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
WriteTransaction tx = broker.newWriteOnlyTransaction();
- tx.put(datastoreType, path, data, true);
+ tx.merge(datastoreType, path, data, true);
tx.submit();
}
if (intrf.getType().equals(L3tunnel.class)) {
IfL3tunnel intfData = intrf.getAugmentation(IfL3tunnel.class);
IpAddress gatewayIp = intfData.getGatewayIp();
- String gwIp = (gatewayIp == null) ? null : gatewayIp.toString();
- String remoteIp = null;
- if (gwIp != null) {
- remoteIp = gwIp;
- } else {
- IpAddress remIp = intfData.getRemoteIp();
- remoteIp = (remIp == null) ? null : remIp.toString();
- }
+ IpAddress remoteIp = (gatewayIp == null) ? intfData.getRemoteIp() : gatewayIp;
NodeConnectorId ofPort = intrf.getAugmentation(BaseIds.class).getOfPortId();
- nexthopManager.createRemoteNextHop(intrf.getName(), ofPort.toString(), remoteIp);
+ nexthopManager.createRemoteNextHop(intrf.getName(), ofPort.toString(), remoteIp.getIpv4Address().getValue());
}
}
if (intrf.getType().equals(L3tunnel.class)) {
long dpnId = interfaceManager.getDpnForInterface(intrf.getName());
IfL3tunnel intfData = intrf.getAugmentation(IfL3tunnel.class);
- String gwIp = intfData.getGatewayIp().toString();
- String remoteIp = intfData.getRemoteIp().toString();
- if (gwIp != null) {
- remoteIp = gwIp;
- }
- nexthopManager.removeRemoteNextHop(dpnId, remoteIp);
+ IpAddress gatewayIp = intfData.getGatewayIp();
+ IpAddress remoteIp = (gatewayIp == null) ? intfData.getRemoteIp() : gatewayIp;
+ nexthopManager.removeRemoteNextHop(dpnId, intrf.getName(), remoteIp.getIpv4Address().getValue());
}
}