<artifactId>unimgr-cisco-xr-driver</artifactId>
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>unimgr-cisco-xe-driver</artifactId>
- <version>${project.version}</version>
- </dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>ovs-driver</artifactId>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
-
-This program and the accompanying materials are made available under the
-terms of the Eclipse Public License v1.0 which accompanies this distribution,
-and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- 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>
- <artifactId>config-parent</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <relativePath />
- </parent>
-
- <properties>
- <checkstyle.skip>true</checkstyle.skip>
- <powermock.version>1.6.4</powermock.version>
- <org.springframework.boot.version>1.4.1.RELEASE</org.springframework.boot.version>
- <jboss.resteasy.version>3.0.19.Final</jboss.resteasy.version>
- <com.github.spullara.mustache.java.version>0.9.4</com.github.spullara.mustache.java.version>
- </properties>
-
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.opendaylight.unimgr</groupId>
- <artifactId>unimgr-cisco-xe-driver</artifactId>
- <version>0.3.0-SNAPSHOT</version>
- <packaging>bundle</packaging>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.8</source>
- <target>1.8</target>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <Embed-Dependency>*;artifactId=compiler</Embed-Dependency>
- </instructions>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
- <dependencies>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>unimgr-impl</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>com.github.spullara.mustache.java</groupId>
- <artifactId>mustache.java</artifactId>
- <version>${com.github.spullara.mustache.java.version}</version>
- <type>pom</type>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>unimgr-impl</artifactId>
- <version>${project.version}</version>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
-
- <!-- dependencies to use AbstractDataBrokerTest -->
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>sal-binding-broker-impl</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>sal-binding-broker-impl</artifactId>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
-
- <!-- dependencies to use mustache.java project for CLI generation -->
- <dependency>
- <groupId>com.github.spullara.mustache.java</groupId>
- <artifactId>compiler</artifactId>
- <version>${com.github.spullara.mustache.java.version}</version>
- </dependency>
-
- <!-- Testing Dependencies -->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-core</artifactId>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.powermock</groupId>
- <artifactId>powermock-core</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.powermock</groupId>
- <artifactId>powermock-module-junit4</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.powermock</groupId>
- <artifactId>powermock-api-mockito</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.powermock</groupId>
- <artifactId>powermock-api-support</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.powermock</groupId>
- <artifactId>powermock-reflect</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.mdsal.model</groupId>
- <artifactId>ietf-yang-types-20130715</artifactId>
- </dependency>
- <!-- For REST -->
- <dependency>
- <groupId>com.eclipsesource.jaxrs</groupId>
- <artifactId>jersey-all</artifactId>
- </dependency>
- </dependencies>
-</project>
+++ /dev/null
-/*
- * Copyright (c) 2016 Cisco Systems Inc and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.unimgr.mef.nrp.cisco.rest;
-
-public interface CiscoExecutor {
-
- String getRunningConfig() throws Exception;
- void setRunningConfig(String runningConfig) throws Exception;
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 Cisco Systems Inc and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.unimgr.mef.nrp.cisco.rest;
-
-import java.net.InetAddress;
-
-import javax.ws.rs.client.Entity;
-import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.Response;
-
-import org.opendaylight.unimgr.mef.nrp.cisco.rest.core.CiscoRestExecutor;
-import org.opendaylight.unimgr.mef.nrp.cisco.rest.core.RestExecutor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class CiscoRestRunner implements CiscoExecutor{
-
- private static final Logger LOGGER = LoggerFactory.getLogger(CiscoRestRunner.class);
-
- private InetAddress destination;
- private String userName;
- private String password;
-
- public CiscoRestRunner(InetAddress destination, String userName, String password) {
- this.destination = destination;
- this.userName = userName;
- this.password = password;
- }
-
- @Override
- public String getRunningConfig() throws Exception{
- LOGGER.info("Getting running config for Cisco: " + destination);
-
- try(RestExecutor restExecutor = new CiscoRestExecutor(destination, userName, password)) {
- restExecutor.setUpConnection();
-
- WebTarget target = restExecutor.getWebTarget();
- Response response = target.path("global/running-config").request().get();
- String runningConfig = response.readEntity(String.class);
-
- if(response.getStatus() != 200){
- String responseString = response.readEntity(String.class);
- LOGGER.warn("Problem with getting running config for " + destination + ". Response is:\n" + responseString);
- throw new Exception("Problem with getting running config for " + destination + ". Response is:\n" + responseString);
- } else {
- LOGGER.info("Successfully got running config for Cisco " + destination);
- }
-
- return runningConfig;
- } catch(Exception e){
- LOGGER.error("Cannot get running config for " + destination, e);
- throw e;
- }
- }
-
- @Override
- public void setRunningConfig(String runningConfig) throws Exception{
- LOGGER.info("Setting running config for Cisco: " + destination);
- LOGGER.debug("Running connfig: " + runningConfig);
-
- Response response;
-
- try(RestExecutor restExecutor = new CiscoRestExecutor(destination, userName, password)) {
- restExecutor.setUpConnection();
- response = restExecutor.getWebTarget().path("global/running-config").request().put(Entity.text(runningConfig));
- } catch(Exception e){
- LOGGER.error("Cannot set running config for " + destination, e);
- throw e;
- }
-
- if(response.getStatus() != 200 && response.getStatus() != 204){
- //Sth went wrong on device
- String responseString = response.readEntity(String.class);
- LOGGER.warn("Problem with setting running config for " + destination + ". Commands are:\n" + runningConfig + "\nResponse is:\n" + responseString);
- throw new Exception("Problem with setting running config for " + destination + ". Commands are:\n" + runningConfig + "\nResponse is:\n" + responseString);
- } else {
- LOGGER.info("Successfully set running config for Cisco " + destination);
- }
- }
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 Cisco Systems Inc and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.unimgr.mef.nrp.cisco.rest.core;
-
-import java.io.IOException;
-import java.net.InetAddress;
-
-import javax.ws.rs.client.Entity;
-import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.opendaylight.unimgr.mef.nrp.cisco.rest.response.AuthResponse;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-public class CiscoRestExecutor implements RestExecutor {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(CiscoRestExecutor.class);
- private static final String AUTH_TOKEN_SERVICES = "auth/token-services";
-
- private AuthResponse authResponse;
- private ClientProvider clientProvider;
-
- private final InetAddress destination;
- private final String userName;
- private final String password;
-
- public CiscoRestExecutor(InetAddress destination, String userName, String password) {
- this.destination = destination;
- this.userName = userName;
- this.password = password;
- }
-
- @Override
- public void setUpConnection(){
- LOGGER.info("Setting up a REST connection to Cisco: " + destination);
-
- clientProvider = new ClientProvider.DefaultClientProvider();
-
- TargetProvider defaultTargetProvider = new TargetProvider.DefaultTargetProvider(clientProvider, destination);
- TargetProvider basicAuthTargetProvider = new TargetProvider.BasicAuthTargetProvider(defaultTargetProvider, userName, password);
-
- WebTarget target = basicAuthTargetProvider.get().path(AUTH_TOKEN_SERVICES);
- Response post = target.request(MediaType.APPLICATION_JSON_TYPE).post(Entity.text(""));
-
- String responseString = post.readEntity(String.class);
- authResponse = mapToObject(responseString, AuthResponse.class);
-
- LOGGER.info("REST Connection successfully set up for Cisco: " + destination);
- }
-
- @Override
- public WebTarget getWebTarget() {
- checkPreconditions();
-
- TargetProvider targetProvider = new TargetProvider.DefaultTargetProvider(clientProvider, destination);
- return new TargetProvider.XauthTargetProvider(targetProvider, authResponse.getTokenId()).get();
- }
-
- @Override
- public void close() throws IOException {
- LOGGER.info("Closing connection for Cisco: " + destination);
- if(clientProvider!=null){
- clientProvider.get().close();
- }
- clientProvider = null;
- authResponse = null;
- LOGGER.info("Successfully closed connection for Cisco: " + destination);
- }
-
- private <T> T mapToObject(String input, Class<T> result){
- ObjectMapper mapper = new ObjectMapper();
- try {
- return mapper.readValue(input, result);
- } catch (IOException e) {
- throw new RuntimeException("Cannot map input " + input + " to class " + result, e);
- }
- }
-
- private void checkPreconditions(){
- if(!isConnectionSetUp()){
- LOGGER.error("Connection is not set up for " + destination);
- throw new RuntimeException("Connection is not set up for " + destination);
- }
- }
-
- private boolean isConnectionSetUp(){
- if(authResponse != null) {
- return true;
- }
- return false;
- }
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 Cisco Systems Inc and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.unimgr.mef.nrp.cisco.rest.core;
-
-import java.security.KeyManagementException;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public interface ClientProvider {
-
- Client get();
-
- public static class DefaultClientProvider implements ClientProvider {
- private static final String SECURE_PROTOCOL_INSTANCE = "TLS";
-
- private Client client;
-
- public DefaultClientProvider() {
- client = buildClient();
- }
-
- @Override
- public Client get() {
- return client;
- };
-
- public Client buildClient() {
- return ClientBuilder.newBuilder().sslContext(SslContextProvider.INSTANCE.get()).hostnameVerifier((s1, s2) -> true).build();
- }
-
-
- static class EmptyTrustManager implements X509TrustManager {
- @Override
- public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
- }
- @Override
- public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
- }
- @Override
- public X509Certificate[] getAcceptedIssuers() {
- return new X509Certificate[0];
- }
- }
-
- enum SslContextProvider {
- INSTANCE;
-
- private static final Logger LOGGER = LoggerFactory.getLogger(SslContextProvider.class);
-
- private SSLContext sslContext = initSslContext();
-
- SSLContext get() {
- if(sslContext == null) {
- throw new RuntimeException("SSL Context not initializated", new Throwable());
- }
- return sslContext;
- }
-
- private static SSLContext initSslContext() {
- SSLContext sslcontext = null;
- try {
- sslcontext = SSLContext.getInstance(SECURE_PROTOCOL_INSTANCE);
- sslcontext.init(null, new TrustManager[] { new EmptyTrustManager() }, new java.security.SecureRandom());
- return sslcontext;
- } catch (KeyManagementException | NoSuchAlgorithmException e) {
- LOGGER.error("Cannot initialize SSL Context", e);
- }
- return sslcontext;
- }
- }
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 Cisco Systems Inc and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.unimgr.mef.nrp.cisco.rest.core;
-
-import java.io.Closeable;
-
-import javax.ws.rs.client.WebTarget;
-
-public interface RestExecutor extends Closeable{
-
- void setUpConnection();
- WebTarget getWebTarget();
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 Cisco Systems Inc and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.unimgr.mef.nrp.cisco.rest.core;
-
-import java.io.IOException;
-import java.net.InetAddress;
-
-import javax.ws.rs.client.ClientRequestContext;
-import javax.ws.rs.client.ClientRequestFilter;
-import javax.ws.rs.client.WebTarget;
-
-import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
-
-public interface TargetProvider {
-
- WebTarget get();
-
- public static class DefaultTargetProvider implements TargetProvider {
- private ClientProvider clientProvider;
- private InetAddress destination;
-
- public DefaultTargetProvider(ClientProvider clientProvider, InetAddress destination) {
- this.clientProvider = clientProvider;
- this.destination = destination;
- }
-
- @Override
- public WebTarget get() {
- WebTarget target = clientProvider.get().target(buildUriString());
- return target;
- }
-
- private String buildUriString(){
- return new StringBuilder().append("https://").append(destination.getHostAddress()).append("/api/v1").toString();
- }
- }
-
- public static class BasicAuthTargetProvider implements TargetProvider {
- private TargetProvider targerProvider;
- private String userName;
- private String password;
-
- public BasicAuthTargetProvider(TargetProvider targerProvider, String userName, String password) {
- this.targerProvider = targerProvider;
- this.userName = userName;
- this.password = password;
- }
-
- @Override
- public WebTarget get() {
- WebTarget target = targerProvider.get();
- target.register(HttpAuthenticationFeature.basic(userName, password));
- return target;
- }
- }
-
- public static class XauthTargetProvider implements TargetProvider {
- private TargetProvider targerProvider;
- private String tokenId;
-
- public XauthTargetProvider(TargetProvider targerProvider, String tokenId) {
- this.targerProvider = targerProvider;
- this.tokenId = tokenId;
- }
-
- @Override
- public WebTarget get() {
- WebTarget target = targerProvider.get();
- target.register(new AuthRequestFilter(tokenId));
- return target;
- }
-
-
- private static class AuthRequestFilter implements ClientRequestFilter {
-
- private String tokenId;
-
- public AuthRequestFilter(String tokenId) {
- this.tokenId = tokenId;
- }
-
- @Override
- public void filter(ClientRequestContext requestContext) throws IOException {
- requestContext.getHeaders().add("X-Auth-Token", tokenId);
-
- }
- }
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 Cisco Systems Inc and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.unimgr.mef.nrp.cisco.rest.response;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-@JsonIgnoreProperties(ignoreUnknown=true)
-public class AuthResponse {
-
- @JsonProperty("token-id")
- private String tokenId;
-
- public String getTokenId() {
- return tokenId;
- }
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 Cisco Systems Inc and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.unimgr.mef.nrp.cisco.xe.activator;
-
-import com.google.common.base.Optional;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.unimgr.mef.nrp.cisco.rest.CiscoExecutor;
-import org.opendaylight.unimgr.mef.nrp.cisco.rest.CiscoRestRunner;
-import org.opendaylight.unimgr.mef.nrp.cisco.xe.util.CliGeneratorUtil;
-import org.opendaylight.unimgr.mef.nrp.cisco.xe.util.IpAddressLoopbackNotFoundException;
-import org.opendaylight.unimgr.mef.nrp.cisco.xe.util.RunningConfig;
-import org.opendaylight.unimgr.mef.nrp.common.ResourceActivator;
-import org.opendaylight.unimgr.mef.nrp.common.ResourceActivatorException;
-import org.opendaylight.unimgr.mef.nrp.common.ResourceNotAvailableException;
-import org.opendaylight.unimgr.utils.MdsalUtils;
-import org.opendaylight.yang.gen.v1.urn.mef.unimgr.ext.rev160725.CTagVlanId;
-import org.opendaylight.yang.gen.v1.urn.mef.unimgr.ext.rev160725.FcPort1;
-import org.opendaylight.yang.gen.v1.urn.mef.unimgr.ext.rev160725.Node1;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.Set;
-
-public class P2pConnectionActivator implements ResourceActivator {
-
- private static final Logger LOG = LoggerFactory.getLogger(P2pConnectionActivator.class);
-
- private DataBroker dataBroker;
-
- public P2pConnectionActivator(DataBroker dataBroker) {
- this.dataBroker = dataBroker;
- }
-
- @Override
- public void activate(String nodeName, String outerName, String innerName, FcPort portA, FcPort portZ, long mtu) throws TransactionCommitFailedException, ResourceActivatorException {
- LOG.info("Activate\nPort A: " + portA + "\nPort Z: " + portZ);
-
- checkPreconditions(portA, portZ);
-
- Node1 node1A = getNode1augmentation(getNode(portA));
- Node1 node1Z = getNode1augmentation(getNode(portZ));
-
- CiscoExecutor restExecutorA = createCiscoExecutor(node1A);
- CiscoExecutor restExecutorZ = createCiscoExecutor(node1Z);
-
- RunningConfig configA = new RunningConfig(getRunningConfig(restExecutorA));
- RunningConfig configZ = new RunningConfig(getRunningConfig(restExecutorZ));
-
- int vcId = getVcId(configA, configZ);
-
- LOG.info("Activating A side");
- activateSide(portA, vcId, restExecutorA, configZ);
-
- LOG.info("Activating Z side");
- activateSide(portZ, vcId, restExecutorZ, configA);
-
- LOG.info("Activation finished");
- }
-
- @Override
- public void deactivate(String nodeName, String outerName, String innerName, FcPort portA, FcPort portZ, long mtu)
- throws TransactionCommitFailedException, ResourceActivatorException {
- LOG.info("Deactivate\nPort A: " + portA + "\nPort Z: " + portZ);
-
- checkPreconditions(portA, portZ);
-
- LOG.info("Deactivating A side");
- deactivateSide(portA);
-
- LOG.info("Deactivating Z side");
- deactivateSide(portZ);
-
- LOG.info("Deactivation finished");
- }
-
- private void checkPreconditions(FcPort portA, FcPort portZ) throws ResourceActivatorException {
- checkPreconditionsForPort(portA);
- checkPreconditionsForPort(portZ);
- }
-
- private void checkPreconditionsForPort(FcPort port) throws ResourceActivatorException{
- if(port.getAugmentation(FcPort1.class) == null) {
- throw new ResourceActivatorException("VLan parameter has to be specified for port: " + port);
- }
- }
-
- private int getVcId(RunningConfig configA, RunningConfig configZ){
- Set<Integer> usedVcIds = configA.getUsedVcIdValues();
- usedVcIds.addAll(configZ.getUsedVcIdValues());
- int vcId = CliGeneratorUtil.generateVcId(usedVcIds);
- return vcId;
- }
-
- private void activateSide(FcPort port, int vcId, CiscoExecutor ciscoExecutor, RunningConfig oppositeSideRunningConfig) throws ResourceActivatorException{
- String commands = generateCliCommands(port, oppositeSideRunningConfig, vcId);
- setRunningConfig(ciscoExecutor, commands);
- }
-
- private void deactivateSide(FcPort port) throws ResourceActivatorException{
- Node1 node1 = getNode1augmentation(getNode(port));
- CiscoExecutor restExecutor = createCiscoExecutor(node1);
- String commands = generateCliNoCommands(port);
- setRunningConfig(restExecutor, commands);
- }
-
- private Node getNode(FcPort port) throws ResourceNotAvailableException {
-
- InstanceIdentifier<Node> nodeIid = InstanceIdentifier.builder(NetworkTopology.class)
- .child(Topology.class, new TopologyKey(port.getTopology()))
- .child(Node.class, new NodeKey(port.getNode()))
- .build();
-
- Optional<Node> result = MdsalUtils.readOptional(dataBroker, LogicalDatastoreType.CONFIGURATION, nodeIid);
-
- if (result.isPresent()) {
- return result.get();
- } else {
- LOG.error("Node " + nodeIid + " does not exists");
- throw new ResourceNotAvailableException("Node " + nodeIid + " does not exists");
- }
- }
-
- private CiscoExecutor createCiscoExecutor(Node1 node) throws ResourceActivatorException{
- try {
- return new CiscoRestRunner(
- InetAddress.getByName(new String(node.getConnectionSettings().getHost().getIpAddress().getValue())),
- node.getConnectionSettings().getUserName(),
- node.getConnectionSettings().getPassword());
- } catch (UnknownHostException e) {
- LOG.error("Host name cannot be resolved for: " + node.getConnectionSettings().getHost().toString());
- throw new ResourceActivatorException("Host name cannot be resolved for: " + node.getConnectionSettings().getHost().toString(),e);
- }
- }
-
- private Node1 getNode1augmentation(Node node) throws ResourceActivatorException {
- Node1 node1 = node.getAugmentation(Node1.class);
- if (node1 == null) {
- LOG.error("Connection settings can not be obtained from node :" + node);
- throw new ResourceActivatorException("Connection settings can not be obtained from node :" + node);
- }
- return node1;
- }
-
- private String getRunningConfig(CiscoExecutor executor) throws ResourceActivatorException{
- try {
- return executor.getRunningConfig();
- } catch (Exception e) {
- throw new ResourceActivatorException(e.getMessage(), e);
- }
- }
-
- private void setRunningConfig(CiscoExecutor executor, String runningConfig) throws ResourceActivatorException{
- try {
- executor.setRunningConfig(runningConfig);
- } catch (Exception e) {
- throw new ResourceActivatorException(e.getMessage(), e);
- }
- }
-
- private String generateCliCommands(FcPort port, RunningConfig oppsiteSideConfig, int vcId) throws ResourceActivatorException{
- CTagVlanId cTagVlanId = port.getAugmentation(FcPort1.class).getCTagVlanId();
- try {
- String commands = CliGeneratorUtil.generateServiceCommands(
- port.getTp().getValue(),
- cTagVlanId.getValue().shortValue(),
- cTagVlanId.getValue().shortValue(),
- oppsiteSideConfig.getIpAddressLoopback0(),
- vcId);
- LOG.info("Generated commands:\n" + commands);
- return commands;
- } catch (IOException e) {
- throw new ResourceActivatorException("Cannot generate commands for port: " + port, e);
- } catch (IpAddressLoopbackNotFoundException e) {
- LOG.error("Problem with getting loopback address for port: " + port, e);
- throw e;
- }
- }
-
- private String generateCliNoCommands(FcPort port) {
- CTagVlanId cTagVlanId = port.getAugmentation(FcPort1.class).getCTagVlanId();
- String commands = CliGeneratorUtil.generateNoServiceCommands(
- port.getTp().getValue(),
- cTagVlanId.getValue().shortValue());
- LOG.debug("Generated commands:\nPort: " + port + "\nCommands: \n" + commands);
- return commands;
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 Cisco Systems Inc and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.unimgr.mef.nrp.cisco.xe.driver;
-
-
-import java.util.Optional;
-
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.unimgr.mef.nrp.api.ActivationDriver;
-import org.opendaylight.unimgr.mef.nrp.api.ActivationDriverBuilder;
-import org.opendaylight.unimgr.mef.nrp.cisco.xe.activator.P2pConnectionActivator;
-import org.opendaylight.unimgr.mef.nrp.common.ResourceActivatorException;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.forwarding.constructs.ForwardingConstruct;
-import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class P2pConnectionDriverBuilder implements ActivationDriverBuilder {
-
- private static final Logger LOG = LoggerFactory.getLogger(P2pConnectionDriverBuilder.class);
-
- private static final String GROUP_NAME = "local";
- private static final String XE_TOPOLOGY_ID = "topology-cisco-xe";
- private P2pConnectionActivator activator;
-
-
-
- public P2pConnectionDriverBuilder(DataBroker dataBroker) {
- activator = new P2pConnectionActivator(dataBroker);
- }
-
- @Override
- public Optional<ActivationDriver> driverFor(FcPort port, BuilderContext _ctx) {
- //TODO: use SBI API to check connectivity
- if(XE_TOPOLOGY_ID.equals(port.getTopology().getValue())){
- return Optional.of(getDriver());
- }
- return Optional.empty();
- }
-
- @Override
- public Optional<ActivationDriver> driverFor(FcPort aPort, FcPort zPort, BuilderContext context) {
- //TODO: use SBI API to check connectivity
- if(XE_TOPOLOGY_ID.equals(aPort.getTopology().getValue()) && XE_TOPOLOGY_ID.equals(zPort.getTopology().getValue())){
- return Optional.of(getDriver());
- }
- return Optional.empty();
- }
-
- protected ActivationDriver getDriver() {
- final ActivationDriver driver = new ActivationDriver() {
- public FcPort aEnd;
- public FcPort zEnd;
-
- @Override
- public void commit() {
- //ignore for the moment
- }
-
- @Override
- public void rollback() {
- //ignore for the moment
- }
-
- @Override
- public void initialize(FcPort from, FcPort to, ForwardingConstruct ctx) {
- this.zEnd = to;
- this.aEnd = from;
- }
-
- @Override
- public void activate() throws TransactionCommitFailedException, ResourceActivatorException {
- String aEndNodeName = aEnd.getNode().getValue();
- activator.activate(aEndNodeName, GROUP_NAME, GROUP_NAME, aEnd, zEnd, 1522);
- }
-
- @Override
- public void deactivate() throws TransactionCommitFailedException, ResourceActivatorException {
-
- String aEndNodeName = aEnd.getNode().getValue();
- activator.deactivate(aEndNodeName, GROUP_NAME, GROUP_NAME, aEnd, zEnd, 1522);
- }
-
- @Override
- public int priority() {
- return 0;
- }
- };
-
- return driver;
- }
-}
+++ /dev/null
-package org.opendaylight.unimgr.mef.nrp.cisco.xe.util;
-
-/*
- * Copyright (c) 2016 Cisco Systems Inc and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-import com.github.mustachejava.DefaultMustacheFactory;
-import com.github.mustachejava.Mustache;
-import com.github.mustachejava.MustacheFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.io.StringWriter;
-import java.util.Random;
-import java.util.Set;
-
-public class CliGeneratorUtil {
- private static final Logger LOG = LoggerFactory.getLogger(CliGeneratorUtil.class);
-
- public static String generateServiceCommands(String interfaceName, short serviceInstanceId, short cTagVlanId, String ipAddressOfPeer, int vcIdValue) throws IOException {
- StringWriter writer = new StringWriter();
-
- MustacheFactory mf = new DefaultMustacheFactory(CliGeneratorUtil.class.getPackage().getName().replaceAll("\\.","/"));
-
- Mustache mustache = mf.compile("createServiceInstance.mustache");
-
- LOG.debug("Compiled mustache "+mustache);
-
- mustache.execute(writer, new ServiceInstance(interfaceName, serviceInstanceId, cTagVlanId,ipAddressOfPeer,vcIdValue)).flush();
- return writer.toString();
- }
-
- public static String generateNoServiceCommands(String interfaceName, short serviceInstanceId){
- StringBuilder sb = new StringBuilder();
- sb.append("interface ").
- append(interfaceName).
- append("\n no service instance ").
- append(serviceInstanceId).
- append(" ethernet");
-
- return sb.toString();
- }
-
- public static int generateVcId(Set<Integer> idsInUse){
- Random random = new Random();
- int vcId;
- do {
- vcId = Math.abs(random.nextInt())+1; // <1-4294967295> possible VC ID value in command line while MAX int is 2147483647 . +1 to avoid 0
- }while (idsInUse.contains(new Integer(vcId)));
-
- return vcId;
- }
- private static class ServiceInstance {
- ServiceInstance(String interfaceName, short serviceInstanceId, short cTagVlanId, String ipAddressOfPeer, int vcIdValue) {
- this.interfaceName = interfaceName;
- this.serviceInstanceId = serviceInstanceId;
- this.cTagVlanId = cTagVlanId;
- this.ipAddressOfPeer = ipAddressOfPeer;
- this.vcIdValue = vcIdValue;
- }
-
- String interfaceName, ipAddressOfPeer;
- short cTagVlanId, serviceInstanceId ;
- int vcIdValue;
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 Cisco Systems Inc and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.unimgr.mef.nrp.cisco.xe.util;
-
-import org.opendaylight.unimgr.mef.nrp.common.ResourceNotAvailableException;
-
-public class IpAddressLoopbackNotFoundException extends ResourceNotAvailableException {
-
-}
+++ /dev/null
-package org.opendaylight.unimgr.mef.nrp.cisco.xe.util;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.HashSet;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class RunningConfig {
-
- private static final String IP_ADDRESS_LOOPBACK0_PATTERN = "interface Loopback0[\\n\\d]+ ip address (\\d+\\.\\d+\\.\\d+\\.\\d+) \\d+\\.\\d+\\.\\d+\\.\\d+";
- private static final String VC_VALUE_PATTERN = "xconnect \\d+\\.\\d+\\.\\d+\\.\\d+ (\\d+) encapsulation mpls";
- private static final Logger LOG = LoggerFactory.getLogger(RunningConfig.class);
- private String config;
-
-
- public RunningConfig (String config){
- this.config = config;
- }
-
- public Set<Integer> getUsedVcIdValues(){
-
- Set values = new HashSet();
- Pattern p = Pattern.compile(VC_VALUE_PATTERN);
- Matcher m = p.matcher(config);
- while(m.find()) {
- LOG.debug("found vc id value: " + m.group(1));
- values.add(Integer.parseInt(m.group(1)));
- }
- LOG.debug("values : "+values);
- return values;
- }
-
- public String getIpAddressLoopback0() throws IpAddressLoopbackNotFoundException {
-
- Pattern p = Pattern.compile(IP_ADDRESS_LOOPBACK0_PATTERN);
- Matcher m = p.matcher(config);
- if(m.find()) {
- LOG.debug("IpAddressLoopback0 : "+m.group(1));
- return m.group(1);
- }
- LOG.error("Pattern "+p.toString()+" not found in running config :\n"+config);
- throw new IpAddressLoopbackNotFoundException();
- }
-
- @Override
- public String toString(){
- return config;
- }
-}
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Copyright (c) 2015 Cisco Systems Inc. and others. All rights reserved.
-
-This program and the accompanying materials are made available under the
-terms of the Eclipse Public License v1.0 which accompanies this distribution,
-and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
- odl:use-default-for-reference-types="true">
-
- <reference id="dataBroker" interface="org.opendaylight.controller.md.sal.binding.api.DataBroker" />
-
- <service id="ciscoIosXeP2pConnectionDriverService" interface="org.opendaylight.unimgr.mef.nrp.api.ActivationDriverBuilder">
- <bean class="org.opendaylight.unimgr.mef.nrp.cisco.xe.driver.P2pConnectionDriverBuilder">
- <argument ref="dataBroker" />
- </bean>
- </service>
-</blueprint>
+++ /dev/null
-interface {{interfaceName}}
-mtu 1522
-no ip address
-no service instance {{serviceInstanceId}} ethernet
-no shutdown
-service instance {{serviceInstanceId}} ethernet
-encapsulation dot1q {{cTagVlanId}}
-xconnect {{ipAddressOfPeer}} {{vcIdValue}} encapsulation mpls
-mtu 1508
\ No newline at end of file
+++ /dev/null
-package org.opendaylight.unimgr.mef.nrp.cisco.xe.util;
-
-/*
- * Copyright (c) 2016 Cisco Systems Inc and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import java.io.IOException;
-
-public class CliGeneratorUtilTest{
-
- @Test
- public void createServiceCommandsTest() {
- StringBuffer expectedResult = new StringBuffer();
- expectedResult
- .append("interface GigabitEthernet4\n")
- .append("mtu 1522\n")
- .append("no ip address\n")
- .append("no service instance 23 ethernet\n")
- .append("no shutdown\n")
- .append("service instance 23 ethernet\n")
- .append("encapsulation dot1q 100\n")
- .append("xconnect 3.3.3.3 3000 encapsulation mpls\n")
- .append("mtu 1508");
- try {
- Assert.assertEquals(expectedResult.toString(),CliGeneratorUtil.generateServiceCommands("GigabitEthernet4", (short) 23, (short) 100,"3.3.3.3", 3000).replaceAll("\r\n","\n"));
- } catch (IOException e) {
- Assert.fail(e.toString());
- }
- }
-
- @Test
- public void createNoServiceCommandsTest() {
- StringBuffer expectedResult = new StringBuffer();
- expectedResult
- .append("interface GigabitEthernet4\n")
- .append(" no service instance 23 ethernet");
- Assert.assertEquals(CliGeneratorUtil.generateNoServiceCommands("GigabitEthernet4", (short) 23),expectedResult.toString());
- }
-
-}
+++ /dev/null
-package org.opendaylight.unimgr.mef.nrp.cisco.xe.util;
-/*
- * Copyright (c) 2016 Cisco Systems Inc and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-import org.junit.Assert;
-import org.junit.Test;
-
-import java.util.HashSet;
-import java.util.Set;
-
-public class RunningConfigTest {
- @Test
- public void getUsedVcIdValuesTest() {
- Set<Integer> expected = new HashSet<Integer>();
- expected.add(3000);
- expected.add(3001);
- Assert.assertEquals(expected, config.getUsedVcIdValues());
- }
-
- @Test
- public void getIpAddressLoopback0Test(){
- try {
- Assert.assertEquals("1.1.1.1", config.getIpAddressLoopback0());
- } catch (IpAddressLoopbackNotFoundException e) {
- Assert.fail(e.toString());
- }
- }
-
- private RunningConfig config = new RunningConfig("Building configuration...\n" +
- "\n" +
- "Current configuration : 2482 bytes\n" +
- "!\n" +
- "! Last configuration change at 14:17:47 UTC Fri Oct 7 2016 by user1\n" +
- "!\n" +
- "version 15.4\n" +
- "service timestamps debug datetime msec\n" +
- "service timestamps log datetime msec\n" +
- "no platform punt-keepalive disable-kernel-core\n" +
- "platform console virtual\n" +
- "!\n" +
- "hostname testing\n" +
- "!\n" +
- "boot-start-marker\n" +
- "boot-end-marker\n" +
- "!\n" +
- "!\n" +
- "enable secret 5 _HASH_/\n" +
- "!\n" +
- "no aaa new-model\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "\n" +
- "\n" +
- "no ip domain lookup\n" +
- "ip domain name webpage.com\n" +
- "\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "subscriber templating\n" +
- "!\n" +
- "multilink bundle-name authenticated\n" +
- "!\n" +
- "!\n" +
- "license udi pid _pid_ sn _sn_\n" +
- "license boot level premium\n" +
- "spanning-tree extend system-id\n" +
- "!\n" +
- "username user1 privilege 15 secret 5 _HASH1_\n" +
- "username user2 privilege 15 secret 5 _HASH2_.\n" +
- "!\n" +
- "redundancy\n" +
- " mode none\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "cdp run\n" +
- "!\n" +
- "ip ssh version 2\n" +
- "no ip ssh server authenticate user keyboard\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "!\n" +
- "interface Loopback0\n" +
- " ip address 1.1.1.1 255.255.255.255\n" +
- "!\n" +
- "interface VirtualPortGroup0\n" +
- " ip unnumbered GigabitEthernet1\n" +
- " no mop enabled\n" +
- " no mop sysid\n" +
- "!\n" +
- "interface GigabitEthernet1\n" +
- " description <<< Management port - do not modify >>>\n" +
- " ip address dhcp\n" +
- " negotiation auto\n" +
- "!\n" +
- "interface GigabitEthernet2\n" +
- " description <<< MPLS network connection >>>\n" +
- " ip address 10.0.0.1 255.255.255.252\n" +
- " negotiation auto\n" +
- " mpls ip\n" +
- " cdp enable\n" +
- "!\n" +
- "interface GigabitEthernet3\n" +
- " no ip address\n" +
- " shutdown\n" +
- " negotiation auto\n" +
- "!\n" +
- "interface GigabitEthernet4\n" +
- " description Connection to Host\n" +
- " mtu 1522\n" +
- " no ip address\n" +
- " negotiation auto\n" +
- " service instance 1 ethernet\n" +
- " !\n" +
- " service instance 100 ethernet\n" +
- " encapsulation dot1q 100\n" +
- " xconnect 3.3.3.3 3000 encapsulation mpls\n" +
- " mtu 1508\n" +
- " !\n" +
- " service instance 101 ethernet\n" +
- " encapsulation dot1q 101\n" +
- " xconnect 3.3.3.3 3001 encapsulation mpls\n" +
- " mtu 1508\n" +
- " !\n" +
- "!\n" +
- "router ospf 100\n" +
- " network 1.1.1.1 0.0.0.0 area 0\n" +
- " network 10.0.0.0 0.0.0.3 area 0\n" +
- "!\n" +
- "!\n" +
- "virtual-service csr_mgmt\n" +
- " vnic gateway VirtualPortGroup0\n" +
- " guest ip address 178.26.176.38\n" +
- " activate\n" +
- "!\n" +
- "ip forward-protocol nd\n" +
- "!\n" +
- "no ip http server\n" +
- "no ip http secure-server\n" +
- "ip route 178.26.176.38 255.255.255.255 VirtualPortGroup0\n" +
- "!\n" +
- "!\n" +
- "snmp-server community user1 RO\n" +
- "!\n" +
- "!\n" +
- "control-plane\n" +
- "!\n" +
- "!\n" +
- "line con 0\n" +
- " stopbits 1\n" +
- "line vty 0 4\n" +
- " exec-timeout 30 0\n" +
- " privilege level 15\n" +
- " login local\n" +
- " transport preferred ssh\n" +
- " transport input telnet ssh\n" +
- " transport output none\n" +
- "line vty 5 10\n" +
- " exec-timeout 30 0\n" +
- " privilege level 15\n" +
- " login local\n" +
- " transport preferred ssh\n" +
- " transport input telnet ssh\n" +
- " transport output none\n" +
- "line vty 11 98\n" +
- " login\n" +
- " transport input telnet ssh\n" +
- "!\n" +
- "netconf ssh\n" +
- "!\n" +
- "end\n");
-}
\ No newline at end of file
<artifactId>cisco-xrmodels</artifactId>
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>unimgr-cisco-xe-driver</artifactId>
- <version>${project.version}</version>
- </dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>ovs-driver</artifactId>
<feature version="${dluxapps.version}">odl-dluxapps-applications</feature>
</feature>
- <feature name="odl-unimgr-cisco-xe-driver" version="${project.version}" description='OpenDaylight :: UniMgr :: Cisco XE Driver'>
- <feature version='${project.version}'>odl-unimgr</feature>
- <bundle>mvn:org.opendaylight.unimgr/unimgr-cisco-xe-driver/{{VERSION}}</bundle>
- <bundle>mvn:com.eclipsesource.jaxrs/jersey-all/2.22.2</bundle>
- </feature>
-
<feature name='odl-unimgr-cisco-xr-driver' version='${project.version}' description='OpenDaylight :: UniMgr :: Cisco XR Driver'>
<feature version='${project.version}'>odl-unimgr</feature>
<bundle>mvn:org.opendaylight.unimgr/cisco-xrmodels/{{VERSION}}</bundle>
<type>xml</type>
<classifier>features</classifier>
</dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>odl-unimgr-cisco-xe-driver</artifactId>
- <version>${project.version}</version>
- <type>xml</type>
- <classifier>features</classifier>
- </dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>odl-unimgr-cisco-xr-driver</artifactId>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (c) 2015 Cable Television Laboratories, Inc. All rights reserved.
- This program and the accompanying materials are made available under the
- terms of the Eclipse Public License v1.0 which accompanies this distribution,
- and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <groupId>org.opendaylight.odlparent</groupId>
- <artifactId>single-feature-parent</artifactId>
- <version>1.9.0-SNAPSHOT</version>
- <relativePath />
- </parent>
- <groupId>org.opendaylight.unimgr</groupId>
- <artifactId>odl-unimgr-cisco-xe-driver</artifactId>
- <version>0.3.0-SNAPSHOT</version>
- <packaging>feature</packaging>
-
- <name>ODL :: unimgr :: ${project.artifactId}</name>
- <modelVersion>4.0.0</modelVersion>
-
- <properties>
- <mdsal.version>1.6.0-SNAPSHOT</mdsal.version>
- <controller.mdsal.version>1.6.0-SNAPSHOT</controller.mdsal.version>
- <restconf.version>1.6.0-SNAPSHOT</restconf.version>
- <yangtools.version>1.2.0-SNAPSHOT</yangtools.version>
- <dlux.version>0.6.0-SNAPSHOT</dlux.version>
- <dluxapps.version>0.6.0-SNAPSHOT</dluxapps.version>
- <ovsdb.version>1.5.0-SNAPSHOT</ovsdb.version>
- <netvirt.version>1.5.0-SNAPSHOT</netvirt.version>
- <vpnservice.version>0.5.0-SNAPSHOT</vpnservice.version>
- <mdsal.model.version>0.11.0-SNAPSHOT</mdsal.model.version>
- <netconf.version>1.3.0-SNAPSHOT</netconf.version>
- <genius.version>0.3.0-SNAPSHOT</genius.version>
- <l2switch.version>0.6.0-SNAPSHOT</l2switch.version>
- <configfile.directory>etc/opendaylight/karaf</configfile.directory>
- <openflowplugin.version>0.5.0-SNAPSHOT</openflowplugin.version>
- <openflowjava.version>0.10.0-SNAPSHOT</openflowjava.version>
- <ovsdb.version>1.5.0-SNAPSHOT</ovsdb.version>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>org.opendaylight.unimgr</groupId>
- <artifactId>odl-unimgr</artifactId>
- <version>${project.version}</version>
- <type>xml</type>
- <classifier>features</classifier>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.unimgr</groupId>
- <artifactId>unimgr-cisco-xe-driver</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>com.eclipsesource.jaxrs</groupId>
- <artifactId>jersey-all</artifactId>
- <version>2.22.2</version>
- </dependency>
- </dependencies>
-
-</project>
<module>odl-unimgr-console</module>
<module>odl-unimgr-rest</module>
<module>odl-unimgr-ui</module>
- <module>odl-unimgr-cisco-xe-driver</module>
<module>odl-unimgr-cisco-xr-driver</module>
<module>odl-unimgr-ovs-driver</module>
</modules>
<module>impl</module>
<module>netvirt</module>
<module>cisco-xr-driver</module>
- <module>cisco-xe-driver</module>
<module>ovs-driver</module>
<module>dlux</module>
<module>cli</module>