X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=vpnservice.git;a=blobdiff_plain;f=interfacemgr%2Finterfacemgr-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fvpnservice%2Finterfacemgr%2FInterfaceManager.java;h=7737e0104d80596ff32c7c92bad34fb83db54095;hp=8f0a4aa381c96369ef4d46952e6d783ad497e407;hb=d069174169932a6c65b63ac10b4a6391223bae07;hpb=7cecb2563e0ae0f68015a3b8b0495e7ea9881080 diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfaceManager.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfaceManager.java index 8f0a4aa3..7737e010 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfaceManager.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfaceManager.java @@ -7,18 +7,15 @@ */ package org.opendaylight.vpnservice.interfacemgr; - import com.google.common.base.Optional; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; - import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; - import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; @@ -34,7 +31,6 @@ import org.opendaylight.vpnservice.mdsalutil.MatchInfo; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.L2vlan; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfaceType; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfacesState; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus; @@ -49,9 +45,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.N import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.GetUniqueIdInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.GetUniqueIdInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.GetUniqueIdOutput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.Pools; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.pools.IdPool; -import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.pools.IdPoolKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.pools.id.pool.GeneratedIds; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.BaseIds; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.IfL2vlan; @@ -140,18 +134,6 @@ public class InterfaceManager extends AbstractDataChangeListener impl return id; } - private InstanceIdentifier - - buildStateInterfaceId(String interfaceName) { - //TODO Make this generic and move to AbstractDataChangeListener or Utils. - InstanceIdentifierBuilder - - idBuilder = InstanceIdentifier.builder(InterfacesState.class) - .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.class, - new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceKey(interfaceName)); - InstanceIdentifier id = idBuilder.build(); - return id; - } private void addInterface(final InstanceIdentifier identifier, final Interface interf) { @@ -164,7 +146,7 @@ public class InterfaceManager extends AbstractDataChangeListener impl ncId = nodeConn.getId(); } mapNcToInterfaceName.put(ncId, interf.getName()); - if(interf.getType().getClass().isInstance(L3tunnel.class)) { + if(interf.getType().isAssignableFrom(L3tunnel.class)) { NodeId nodeId = getNodeIdFromNodeConnectorId(ncId); IfL3tunnel l3Tunnel = interf.getAugmentation(IfL3tunnel.class); dbDpnEndpoints.put(nodeId, l3Tunnel.getLocalIp().getIpv4Address().getValue()); @@ -184,7 +166,7 @@ public class InterfaceManager extends AbstractDataChangeListener impl * if-index = interface-id */ InstanceIdentifier id = - buildStateInterfaceId(interf.getName()); + IfmUtil.buildStateInterfaceId(interf.getName()); Optional stateIf = read(LogicalDatastoreType.OPERATIONAL, id); org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface stateIface; @@ -198,7 +180,7 @@ public class InterfaceManager extends AbstractDataChangeListener impl ifaceBuilder.setOperStatus(getOperStatus(nodeConn)); ifaceBuilder.setIfIndex(getIfIndex(ifName)).setName(ifName).setType(interf.getType()); - ifaceBuilder.setKey(getStateInterfaceKeyFromName(ifName)); + ifaceBuilder.setKey(IfmUtil.getStateInterfaceKeyFromName(ifName)); stateIface = ifaceBuilder.build(); LOG.trace("Adding stateIface {} and id {} to OPERATIONAL DS", stateIface, id); asyncWrite(LogicalDatastoreType.OPERATIONAL, id, stateIface, DEFAULT_CALLBACK); @@ -233,10 +215,8 @@ public class InterfaceManager extends AbstractDataChangeListener impl * TODO: Start-delete-me */ - InstanceIdentifier.InstanceIdentifierBuilder idBuilder = - InstanceIdentifier.builder(Pools.class).child(IdPool.class, new IdPoolKey("interfaces")); - InstanceIdentifier id = idBuilder.build(); - Optional globalPool = read(LogicalDatastoreType.OPERATIONAL, id); + InstanceIdentifier id = IfmUtil.getPoolId(IfmConstants.IFM_IDPOOL_NAME); + Optional globalPool = read(LogicalDatastoreType.OPERATIONAL, id ); Long newIdValue = null; if (globalPool.isPresent()) { IdPool pool = globalPool.get(); @@ -265,11 +245,6 @@ public class InterfaceManager extends AbstractDataChangeListener impl } } - private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceKey getStateInterfaceKeyFromName( - String name) { - return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceKey(name); - } - private NodeConnector getNodeConnectorFromDataStore(Interface interf) { NodeConnectorId ncId = interf.getAugmentation(BaseIds.class).getOfPortId(); //TODO: Replace with MDSAL Util method @@ -294,7 +269,7 @@ public class InterfaceManager extends AbstractDataChangeListener impl private void delInterface(final InstanceIdentifier identifier, final Interface delInterface) { InstanceIdentifier id = - buildStateInterfaceId(delInterface.getName()); + IfmUtil.buildStateInterfaceId(delInterface.getName()); Optional stateIf = read(LogicalDatastoreType.OPERATIONAL, id); if(stateIf.isPresent()) { @@ -303,10 +278,11 @@ public class InterfaceManager extends AbstractDataChangeListener impl NodeConnectorId ncId = getNodeConnectorIdFromInterface(delInterface); if(ncId != null) { mapNcToInterfaceName.remove(ncId); - if(delInterface.getType().getClass().isInstance(L3tunnel.class)) { + if(delInterface.getType().isAssignableFrom(L3tunnel.class)) { Node node = getNodeFromDataStore(delInterface); if((node != null) &&(node.getNodeConnector().isEmpty())) { dbDpnEndpoints.remove(node.getId()); + LOG.trace("dbDpnEndpoints: {}",dbDpnEndpoints); } } } @@ -343,7 +319,7 @@ public class InterfaceManager extends AbstractDataChangeListener impl if(nc != null) { // Name doesn't change. Is it present in update? mapNcToInterfaceName.put(nc.getId(), original.getName()); - if(interf.getType().getClass().isInstance(L3tunnel.class)) { + if(interf.getType().isAssignableFrom(L3tunnel.class)) { NodeId nodeId = getNodeIdFromNodeConnectorId(nc.getId()); IfL3tunnel l3Tunnel = interf.getAugmentation(IfL3tunnel.class); dbDpnEndpoints.put(nodeId, l3Tunnel.getLocalIp().getIpv4Address().getValue()); @@ -384,38 +360,37 @@ public class InterfaceManager extends AbstractDataChangeListener impl updateInterface(identifier, original, update); } - private void asyncWrite(LogicalDatastoreType datastoreType, + protected void asyncWrite(LogicalDatastoreType datastoreType, InstanceIdentifier path, T data, FutureCallback callback) { - WriteTransaction tx = broker.newWriteOnlyTransaction(); - tx.put(datastoreType, path, data, true); - Futures.addCallback(tx.submit(), callback); + WriteTransaction tx = broker.newWriteOnlyTransaction(); + tx.put(datastoreType, path, data, true); + Futures.addCallback(tx.submit(), callback); } - private void asyncUpdate(LogicalDatastoreType datastoreType, + protected void asyncUpdate(LogicalDatastoreType datastoreType, InstanceIdentifier path, T data, FutureCallback callback) { - WriteTransaction tx = broker.newWriteOnlyTransaction(); - tx.merge(datastoreType, path, data, true); - Futures.addCallback(tx.submit(), callback); + WriteTransaction tx = broker.newWriteOnlyTransaction(); + tx.merge(datastoreType, path, data, true); + Futures.addCallback(tx.submit(), callback); } - private void asyncRemove(LogicalDatastoreType datastoreType, + protected void asyncRemove(LogicalDatastoreType datastoreType, InstanceIdentifier path, FutureCallback callback) { - WriteTransaction tx = broker.newWriteOnlyTransaction(); - tx.delete(datastoreType, path); - Futures.addCallback(tx.submit(), callback); + WriteTransaction tx = broker.newWriteOnlyTransaction(); + tx.delete(datastoreType, path); + Futures.addCallback(tx.submit(), callback); } void processPortAdd(NodeConnector port) { NodeConnectorId portId = port.getId(); FlowCapableNodeConnector ofPort = port.getAugmentation(FlowCapableNodeConnector.class); - LOG.debug("PortAdd: PortId { "+portId.getValue()+"} PortName {"+ofPort.getName()+"}"); + LOG.debug("PortAdd: PortId { " + portId.getValue() + "} PortName {" + ofPort.getName() + "}"); String ifName = this.mapNcToInterfaceName.get(portId); setInterfaceOperStatus(ifName, OperStatus.Up); } void processPortUpdate(NodeConnector oldPort, NodeConnector update) { //TODO: Currently nothing to do here. - LOG.trace("ifMap: {}, dpnMap: {}", mapNcToInterfaceName, dbDpnEndpoints); } void processPortDelete(NodeConnector port) { @@ -429,14 +404,14 @@ public class InterfaceManager extends AbstractDataChangeListener impl private void setInterfaceOperStatus(String ifName, OperStatus opStatus) { if (ifName != null) { InstanceIdentifier id = - buildStateInterfaceId(ifName); + IfmUtil.buildStateInterfaceId(ifName); Optional stateIf = read(LogicalDatastoreType.OPERATIONAL, id); org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface stateIface; org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder ifaceBuilder = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder(); if (stateIf.isPresent()) { - stateIface = ifaceBuilder.setOperStatus(opStatus).build(); + stateIface = ifaceBuilder.setOperStatus(opStatus).setKey(IfmUtil.getStateInterfaceKeyFromName(ifName)).build(); LOG.trace("Setting OperStatus for {} to {} in OPERATIONAL DS", ifName, opStatus); asyncUpdate(LogicalDatastoreType.OPERATIONAL, id, stateIface, DEFAULT_CALLBACK); } @@ -482,11 +457,12 @@ public class InterfaceManager extends AbstractDataChangeListener impl long dpn = this.getDpnForInterface(ifName); long portNo = this.getPortNumForInterface(iface).longValue(); matches.add(new MatchInfo(MatchFieldType.in_port, new long[] {dpn, portNo})); + if (ifType.isInstance(L2vlan.class)) { IfL2vlan vlanIface = iface.getAugmentation(IfL2vlan.class); long vlanVid = vlanIface.getVlanId().longValue(); if (vlanVid != 0) { - matches.add(new MatchInfo(MatchFieldType.vlan_vid, + matches.add(new MatchInfo(MatchFieldType.vlan_vid, new long[] {vlanVid})); LOG.trace("L2Vlan: {}",vlanIface); } @@ -495,10 +471,10 @@ public class InterfaceManager extends AbstractDataChangeListener impl IfL3tunnel ifL3Tunnel = iface.getAugmentation(IfL3tunnel.class); Class tunnType = ifL3Tunnel.getTunnelType(); LOG.trace("L3Tunnel: {}",ifL3Tunnel); - } else if (ifType.getClass().isInstance(StackedVlan.class)) { + } else if (ifType.isAssignableFrom(StackedVlan.class)) { IfStackedVlan ifStackedVlan = iface.getAugmentation(IfStackedVlan.class); LOG.trace("StackedVlan: {}",ifStackedVlan); - } else if (ifType.getClass().isInstance(Mpls.class)) { + } else if (ifType.isAssignableFrom(Mpls.class)) { IfMpls ifMpls = iface.getAugmentation(IfMpls.class); LOG.trace("Mpls: {}",ifMpls); } @@ -512,36 +488,35 @@ public class InterfaceManager extends AbstractDataChangeListener impl Class ifType = iface.getType(); long dpn = this.getDpnForInterface(ifName); long portNo = this.getPortNumForInterface(iface).longValue(); - if (iface.isEnabled()) { - if(ifType.isInstance(L2vlan.class)) { + if(ifType.isAssignableFrom(L2vlan.class)) { IfL2vlan vlanIface = iface.getAugmentation(IfL2vlan.class); - long vlanVid = vlanIface.getVlanId(); LOG.trace("L2Vlan: {}",vlanIface); + long vlanVid = (vlanIface == null) ? 0 : vlanIface.getVlanId(); if (vlanVid != 0) { listActionInfo.add(new ActionInfo(ActionType.push_vlan, new String[] {})); listActionInfo.add(new ActionInfo(ActionType.set_field_vlan_vid, new String[] { Long.toString(vlanVid) })); } listActionInfo.add(new ActionInfo(ActionType.output, new String[] { Long.toString(portNo)})); - - } else if (ifType.isInstance(L3tunnel.class)) { + + } else if (ifType.isAssignableFrom(L3tunnel.class)) { //TODO: Handle different tunnel types IfL3tunnel ifL3Tunnel = iface.getAugmentation(IfL3tunnel.class); Class tunnType = ifL3Tunnel.getTunnelType(); LOG.trace("L3Tunnel: {}",ifL3Tunnel); //TODO: check switch_type and configure accordingly listActionInfo.add(new ActionInfo(ActionType.output, new String[] { Long.toString(portNo)})); - - } else if (ifType.isInstance(StackedVlan.class)) { + + } else if (ifType.isAssignableFrom(StackedVlan.class)) { IfStackedVlan ifStackedVlan = iface.getAugmentation(IfStackedVlan.class); LOG.trace("StackedVlan: {}",ifStackedVlan); - // TBD - } else if (ifType.isInstance(Mpls.class)) { + // TODO: TBD + } else if (ifType.isAssignableFrom(Mpls.class)) { IfMpls ifMpls = iface.getAugmentation(IfMpls.class); LOG.trace("Mpls: {}",ifMpls); - // TBD + // TODO: TBD } } return listActionInfo; @@ -560,7 +535,7 @@ public class InterfaceManager extends AbstractDataChangeListener impl } catch (Exception e) { LOG.error("OFPort for Interface {} not found", iface.getName()); } - return null; + return 0L; } }