<mdsal.version>1.2.0-SNAPSHOT</mdsal.version>
<vpns.mdsalutil.version>0.1.0-SNAPSHOT</vpns.mdsalutil.version>
<model.bgp.version>2013.07.15.7-SNAPSHOT</model.bgp.version>
+ <openflowplugin.version>0.1.0-SNAPSHOT</openflowplugin.version>
</properties>
<dependencies>
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <groupId>org.opendaylight.controller</groupId>
+ <groupId>org.opendaylight.vpnservice</groupId>
<artifactId>config-parent</artifactId>
- <version>0.3.0-SNAPSHOT</version>
- <relativePath/>
- </parent>
+ <version>0.1.0-SNAPSHOT</version>
+ <relativePath>../../commons/config-parent</relativePath>
+ </parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.opendaylight.vpnservice</groupId>
<version>0.1.0-SNAPSHOT</version>
<packaging>bundle</packaging>
- <properties>
- <!-- ODL -->
- <openflowplugin.version>0.1.0-SNAPSHOT</openflowplugin.version>
- </properties>
-
- <build>
- <plugins>
- <!--
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <version>${bundle.plugin.version}</version>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <Export-Package>
- org.opendaylight.vpnservice.mdsalutil,
- org.opendaylight.vpnservice.mdsalutil.interfaces
- </Export-Package>
- <Import-Package>
- com.google.common.*,
- org.opendaylight.yang.*,
- org.opendaylight.yangtools.*,
- org.opendaylight.controller.sal.binding.api.*,
- org.opendaylight.controller.md.sal.common.api.*,
- org.opendaylight.controller.sal.common
- </Import-Package
- </instructions>
- <manifestLocation>${project.basedir}/META-INF</manifestLocation>
- </configuration>
- </plugin>
- -->
- <plugin>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>yang-maven-plugin</artifactId>
- <executions>
- <execution>
- <goals>
- <goal>generate-sources</goal>
- </goals>
- <configuration>
- <codeGenerators>
- <generator>
- <codeGeneratorClass>org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl</codeGeneratorClass>
- <outputBaseDir>${salGeneratorPath}</outputBaseDir>
- </generator>
- <generator>
- <codeGeneratorClass>org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator</codeGeneratorClass>
- <outputBaseDir>${jmxGeneratorPath}</outputBaseDir>
- <additionalConfiguration>
- <namespaceToPackage1>urn:opendaylight:params:xml:ns:yang==org.opendaylight.controller.config.yang</namespaceToPackage1>
- </additionalConfiguration>
- </generator>
- <generator>
- <codeGeneratorClass>org.opendaylight.yangtools.yang.unified.doc.generator.maven.DocumentationGeneratorImpl</codeGeneratorClass>
- <outputBaseDir>target/site/models</outputBaseDir>
- </generator>
- </codeGenerators>
- <inspectDependencies>true</inspectDependencies>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
<dependencies>
<dependency>
<groupId>org.opendaylight.openflowplugin.model</groupId>
<artifactId>model-flow-service</artifactId>
<version>${openflowplugin.version}</version>
</dependency>
- <!--
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>sal-binding-api</artifactId>
- </dependency>
- -->
- <!-- removed due to missing constraint
- <dependency>
- <groupId>org.opendaylight.controller.model</groupId>
- <artifactId>model-flow-service</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller.model</groupId>
- <artifactId>model-flow-base</artifactId>
- </dependency>
- -->
- <!-- <dependency>
- <groupId>org.opendaylight.controller.model</groupId>
- <artifactId>model-flow-management</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller.model</groupId>
- <artifactId>model-inventory</artifactId>
- </dependency>
- -->
- <!--
- <dependency>
- <groupId>org.opendaylight.controller.model</groupId>
- <artifactId>model-flow-statistics</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.opendaylight.controller.adsal</groupId>
- <artifactId>sal</artifactId>
- </dependency>
- -->
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>config-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>sal-common</artifactId>
- </dependency>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
- <!--
- <dependency>
- <groupId>org.opendaylight.controller.model</groupId>
- <artifactId>model-topology</artifactId>
- </dependency>
- -->
-
+
</dependencies>
</project>
public class MDSALDataStoreUtils {
- public <T extends DataObject> Optional<T> read(final DataBroker broker,final LogicalDatastoreType datastoreType,
+ public static <T extends DataObject> Optional<T> read(final DataBroker broker,final LogicalDatastoreType datastoreType,
InstanceIdentifier<T> path) {
ReadOnlyTransaction tx = broker.newReadOnlyTransaction();
Futures.addCallback(tx.submit(), callback);
}
- public <T extends DataObject> void asyncUpdate(final DataBroker broker,final LogicalDatastoreType datastoreType,
+ public static <T extends DataObject> void asyncUpdate(final DataBroker broker,final LogicalDatastoreType datastoreType,
InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
WriteTransaction tx = broker.newWriteOnlyTransaction();
tx.merge(datastoreType, path, data, true);
Futures.addCallback(tx.submit(), callback);
}
- public <T extends DataObject> void asyncRemove(final DataBroker broker,final LogicalDatastoreType datastoreType,
+ public static <T extends DataObject> void asyncRemove(final DataBroker broker,final LogicalDatastoreType datastoreType,
InstanceIdentifier<T> path, FutureCallback<Void> callback) {
WriteTransaction tx = broker.newWriteOnlyTransaction();
tx.delete(datastoreType, path);
public void sendPacketOutWithActions(long lDpnId, long groupId, byte[] payload, List<ActionInfo> actionInfos);
public void sendARPPacketOutWithActions(long dpid, byte[] payload, List<ActionInfo> action_info);
-
- public void printTest() ;
- }
+}
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <groupId>org.opendaylight.controller</groupId>
+ <groupId>org.opendaylight.vpnservice</groupId>
<artifactId>config-parent</artifactId>
- <version>0.3.0-SNAPSHOT</version>
- <relativePath/>
- </parent>
+ <version>0.1.0-SNAPSHOT</version>
+ <relativePath>../../commons/config-parent</relativePath>
+ </parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.opendaylight.vpnservice</groupId>
<artifactId>mdsalutil-impl</artifactId>
<dependency>
<groupId>org.opendaylight.openflowplugin.model</groupId>
<artifactId>model-flow-base</artifactId>
- <version>0.1.0-SNAPSHOT</version>
+ <version>${openflowplugin.version}</version>
</dependency>
<dependency>
<groupId>org.opendaylight.openflowplugin.model</groupId>
<artifactId>model-flow-service</artifactId>
- <version>0.1.0-SNAPSHOT</version>
+ <version>${openflowplugin.version}</version>
</dependency>
<!-- TEST Dependencies -->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- </dependency>
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-all</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
+ <dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.5.2</version>
<scope>test</scope>
<type>test-jar</type>
</dependency>
- <dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- </dependency>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>mdsalutil-api</artifactId>
<build>
<plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <version>${bundle.plugin.version}</version>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <Export-Package>
- </Export-Package>
- <Service-Component>
- </Service-Component>
- </instructions>
- <manifestLocation>${project.basedir}/META-INF</manifestLocation>
- </configuration>
- </plugin>
- <plugin>
- <artifactId>maven-clean-plugin</artifactId>
- <version>${maven.clean.plugin.version}</version>
- <configuration>
- <filesets>
- <fileset>
- <directory>${basedir}/src/main/xtend-gen</directory>
- <includes>
- <include>**</include>
- </includes>
- </fileset>
- </filesets>
- </configuration>
- </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
import java.math.BigInteger;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
-
import org.opendaylight.vpnservice.mdsalutil.ActionInfo;
import org.opendaylight.vpnservice.mdsalutil.ActionType;
import org.opendaylight.vpnservice.mdsalutil.FlowEntity;
import org.opendaylight.vpnservice.mdsalutil.GroupEntity;
import org.opendaylight.vpnservice.mdsalutil.MDSALUtil;
-import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
private PacketProcessingService m_packetProcessingService;
- private final AtomicInteger m_atomicInteger = new AtomicInteger();
-
- //TODO : IF ID MANAGER IS RQD
-
/**
* Writes the flows and Groups to the MD SAL DataStore
* which will be sent to the openflowplugin for installing flows/groups on the switch.
}
-
@Override
public void close() throws Exception {
s_logger.info("MDSAL Manager Closed");
}
-
- public void printTest() {
-
- s_logger.info(" INTER MODULECOMMUNICATION IS WORKING!!!!");
- }
-
public void installFlow(FlowEntity flowEntity) {
try {
- s_logger.info("within installFlow {}", flowEntity.getDpnId());
+ s_logger.info("InstallFlow for flowEntity {} ", flowEntity);
if (flowEntity.getCookie() == null) {
- // s_logger.info("Helium_sync: Cookie is null");
- flowEntity.setCookie(new BigInteger("0110000", 16));
+ flowEntity.setCookie(new BigInteger("0110000", 16));
}
FlowKey flowKey = new FlowKey( new FlowId(flowEntity.getFlowId()) );
FlowBuilder flowbld = flowEntity.getFlowBuilder();
- Flow flow = flowbld.build() ;
-
Node nodeDpn = buildDpnNode(flowEntity.getDpnId());
- InstanceIdentifier<Node> nodeInstanceId = InstanceIdentifier.builder(Nodes.class)
- .child(Node.class, nodeDpn.getKey()).build();
-
InstanceIdentifier<Flow> flowInstanceId = InstanceIdentifier.builder(Nodes.class)
.child(Node.class, nodeDpn.getKey()).augmentation(FlowCapableNode.class)
.child(Table.class, new TableKey(flowEntity.getTableId())).child(Flow.class,flowKey).build();
- String sTransactionUri = generateTransactionUri();
-
- TableKey tableKey = new TableKey(flowEntity.getTableId() );
- InstanceIdentifier<Table> tableInstanceId = InstanceIdentifier.create(Nodes.class).child(Node.class, nodeDpn.getKey())
- .augmentation(FlowCapableNode.class).child(Table.class, tableKey);
- Table table = new TableBuilder().setKey(tableKey).setFlow(Collections.<Flow>emptyList()).build();
-
WriteTransaction modification = m_dataBroker.newWriteOnlyTransaction();
- //CHECK IF RQD
- // modification.put(LogicalDatastoreType.CONFIGURATION, nodeInstanceId, nodeDpn, true);
-
-
- modification.put(LogicalDatastoreType.CONFIGURATION, tableInstanceId, table);
-
- modification.put(LogicalDatastoreType.CONFIGURATION, flowInstanceId, flowbld.build());
+ modification.put(LogicalDatastoreType.CONFIGURATION, flowInstanceId, flowbld.build(),true );
CheckedFuture<Void,TransactionCommitFailedException> submitFuture = modification.submit();
}
});
} catch (Exception e) {
- s_logger.error("Could not install flow: {}, exception: {}", flowEntity, e.getMessage());
+ s_logger.error("Could not install flow: {}, exception: {}", flowEntity, e);
}
}
Group group = groupEntity.getGroupBuilder().build();
Node nodeDpn = buildDpnNode(groupEntity.getDpnId());
- InstanceIdentifier<Node> nodeInstanceId = InstanceIdentifier.builder(Nodes.class)
- .child(Node.class, nodeDpn.getKey()).build();
+
InstanceIdentifier<Group> groupInstanceId = InstanceIdentifier.builder(Nodes.class)
.child(Node.class, nodeDpn.getKey()).augmentation(FlowCapableNode.class)
.child(Group.class, new GroupKey(new GroupId(groupEntity.getGroupId()))).build();
WriteTransaction modification = m_dataBroker.newWriteOnlyTransaction();
- //CHECK IF RQD
- // modification.put(LogicalDatastoreType.CONFIGURATION, nodeInstanceId, nodeDpn);
- modification.put(LogicalDatastoreType.CONFIGURATION, groupInstanceId, group);
+ modification.put(LogicalDatastoreType.CONFIGURATION, groupInstanceId, group, true);
CheckedFuture<Void,TransactionCommitFailedException> submitFuture = modification.submit();
}
});
} catch (Exception e) {
- s_logger.error("Could not install Group: {}, exception: {}", groupEntity, e.getMessage());
+ s_logger.error("Could not install Group: {}, exception: {}", groupEntity, e);
throw e;
}
}
});
} catch (Exception e) {
- s_logger.error("Could not remove Flow: {}, exception: {}", flowEntity, e.getMessage());
+ s_logger.error("Could not remove Flow: {}, exception: {}", flowEntity, e);
}
}
}
});
} catch (Exception e) {
- s_logger.error("Could not remove Group: {}, exception: {}", groupEntity, e.getMessage());
+ s_logger.error("Could not remove Group: {}, exception: {}", groupEntity, e);
}
}
installGroup(groupEntity);
}
- private String generateTransactionUri() {
- long lTransactionIdOut = m_atomicInteger.incrementAndGet();
-
- // TO DO Introduce this later
- // return "" + (lTransactionIdOut | m_lTransactionIdPrefix);
- return "" + (lTransactionIdOut );
- }
-/*
- private String generateTransactionUriForFlow(long nTransactionId) {
- long lTransactionIdOut = m_atomicInteger.incrementAndGet();
- return Long.toString((lTransactionIdOut | m_lTransactionIdPrefix)) + EUtil.TRANSACTION_ID_SEPARATOR
- + Long.toString(nTransactionId);
- }
-*/
-
public void sendPacketOut(long lDpnId, int groupId, byte[] payload) {
List<ActionInfo> actionInfos = new ArrayList<ActionInfo>();
getNodeConnRef("openflow:" + lDpnId, "0xfffffffd")));
}
- private NodeKey getNodeKey(long dpId) {
- String nodeId = "openflow:" + dpId;
- NodeKey nodeKey = new NodeKey(new NodeId(nodeId));
- return nodeKey;
- }
-
public InstanceIdentifier<Node> nodeToInstanceId(Node node) {
return InstanceIdentifier.builder(Nodes.class).child(Node.class, node.getKey()).toInstance();
}
return _nodeConnectorRef;
}
- private long getDpnIdFromNodeName(String nodeName) {
- String dpId = nodeName.substring(nodeName.lastIndexOf(":") + 1);
- return Long.parseLong(dpId);
- }
-
private Node buildDpnNode(long lDpnId) {
NodeId nodeId = new NodeId("openflow:" + lDpnId);
Node nodeDpn = new NodeBuilder().setId(nodeId).setKey(new NodeKey(nodeId)).build();
mdSalMgr.sendARPPacketOutWithActions(dpid, payload, action_info);
}
-
- @Override
- public void printTest() {
- // TODO Auto-generated method stub
- mdSalMgr.printTest();
- }
-
}