From: Suchi Raman Date: Wed, 23 Oct 2013 14:32:10 +0000 (-0400) Subject: Initial commit of nfchain. X-Git-Tag: jenkins-affinity-bulk-release-prepare-only-1~44 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=effd48410999b80b15c151cf117cb7e0e8ed17a7;p=affinity.git Initial commit of nfchain. Signed-off-by: Suchi Raman --- diff --git a/nfchain/api/pom.xml b/nfchain/api/pom.xml new file mode 100644 index 0000000..5d04b89 --- /dev/null +++ b/nfchain/api/pom.xml @@ -0,0 +1,175 @@ + + + 4.0.0 + + org.opendaylight.affinity + affinityParent + 0.4.1-SNAPSHOT + ../.. + + + org.opendaylight.affinity + nfchain + 0.4.0-SNAPSHOT + bundle + + + scm:git:ssh://git.opendaylight.org:29418/affinity.git + scm:git:ssh://git.opendaylight.org:29418/affinity.git + + + + 0.5.9-SNAPSHOT + 0.5.8-SNAPSHOT + UTF-8 + 1.7 + 1.7 + 2.4.0 + http://nexus.opendaylight.org/content + + + + + + + org.apache.felix + maven-bundle-plugin + 2.3.6 + true + + + org.opendaylight.yangtools + yang-maven-plugin + ${yang.version} + + + + generate-sources + + + src/main/yang + + + + org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl + + + target/generated-sources/sal + + + + true + + + + + + org.opendaylight.yangtools + maven-sal-api-gen-plugin + ${yang.codegen.version} + jar + + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.7 + + + generate-sources + + add-source + + + + target/generated-sources/sal + + + + + + + + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + + org.opendaylight.yangtools + + + yang-maven-plugin + + + [0.5,) + + + + generate-sources + + + + + + + + + + + + + + + + + + + + org.opendaylight.controller.model + model-inventory + 1.0-SNAPSHOT + + + + org.opendaylight.yangtools + yang-binding + ${yang.version} + + + org.opendaylight.yangtools + yang-common + ${yang.version} + + + org.opendaylight.yangtools.model + ietf-inet-types + 2010.09.24-SNAPSHOT + + + org.opendaylight.yangtools.model + ietf-yang-types + 2010.09.24-SNAPSHOT + + + + org.opendaylight.yangtools.model + opendaylight-l2-types + 2013.08.27.1-SNAPSHOT + + + + diff --git a/nfchain/api/src/main/yang/nfchain.yang b/nfchain/api/src/main/yang/nfchain.yang new file mode 100644 index 0000000..19cb591 --- /dev/null +++ b/nfchain/api/src/main/yang/nfchain.yang @@ -0,0 +1,87 @@ +module nfchain { + namespace "urn:opendaylight:affinity:nfchain"; + prefix nfchain; + + import ietf-inet-types { prefix inet; } + import ietf-yang-types { prefix yang; } + import yang-ext { prefix ext; } + import opendaylight-inventory {prefix inv;} + import opendaylight-l2-types { prefix l2types; } + + revision "2013-10-20" { + description "Initial revision of affinity model to be reviewed"; + } + + //************************************************** + // Gateway hosting the network function. + //************************************************** + grouping gateway { + leaf id { + type string; + } + // Address is either an IP address, MAC address, or switch/port. + leaf location { + description "Mac or Inet address"; + type union { + type inv:node-connector-id; + type inet:ip-address; + } + } + } + + // Each nf chain has an id, a flowspec and a list of gateways. + grouping chain { + leaf id { + type chain-id; + } + leaf flowSpec { + type uint32; // tbd + } + list gateway { + key id; + ext:context-instance "gateway-context"; + uses gateway; + } + } + + // Container for all nf_chain objects + container nfdb { + list chain { + key id; + ext:context-instance "chain"; + uses chain; + } + } + + typedef chain-id { + type inet:uri; + } + + typedef gateway-ref { + type instance-identifier; + } + + identity gateway-context; + + // nf chain reference. + typedef chain-ref { + type instance-identifier; + } + identity chain-context; + + //************************************************** + // Gateway chain. + //************************************************** + rpc add { + input { + leaf chain { + type chain-id; + } + container gateway { + uses gateway; + } + } + } + rpc list { + } +} diff --git a/nfchain/impl/pom.xml b/nfchain/impl/pom.xml new file mode 100644 index 0000000..955609f --- /dev/null +++ b/nfchain/impl/pom.xml @@ -0,0 +1,63 @@ + + 4.0.0 + + + + org.opendaylight.affinity + affinityParent + 0.4.1-SNAPSHOT + ../.. + + + org.opendaylight.affinity + nfchain-impl + 0.4.0-SNAPSHOT + bundle + + + scm:git:ssh://git.opendaylight.org:29418/controller.git + scm:git:ssh://git.opendaylight.org:29418/controller.git + https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL + + + + + + + org.apache.felix + maven-bundle-plugin + 2.3.6 + true + + + org.opendaylight.affinity.nfchain.provider.Activator + + + + + + + + + ${project.groupId} + nfchain + ${project.version} + + + org.opendaylight.controller + hosttracker + 0.4.1-SNAPSHOT + + + org.opendaylight.controller + sal-binding-api + 1.0-SNAPSHOT + + + org.opendaylight.controller + sal-common-util + 1.0-SNAPSHOT + + + diff --git a/nfchain/impl/src/main/java/org/opendaylight/affinity/nfchain/provider/Activator.java b/nfchain/impl/src/main/java/org/opendaylight/affinity/nfchain/provider/Activator.java new file mode 100644 index 0000000..8cd2801 --- /dev/null +++ b/nfchain/impl/src/main/java/org/opendaylight/affinity/nfchain/provider/Activator.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2013 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 + */ + +/* + * Copyright (c) 2013 Plexxi, Inc. and others. All rights reserved. + */ + +package org.opendaylight.affinity.nfchain.provider; + +import java.util.Dictionary; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.Set; +import java.util.Collection; +import java.util.Collections; + +import org.opendaylight.controller.sal.binding.api.AbstractBindingAwareProvider; +import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; +import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; +import org.opendaylight.controller.sal.binding.api.NotificationProviderService; +import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext; +import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext; + +import org.opendaylight.yangtools.yang.binding.RpcService; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.opendaylight.controller.hosttracker.IfIptoHost; +import org.opendaylight.controller.hosttracker.IfNewHostNotify; + +import org.opendaylight.yang.gen.v1.urn.opendaylight.affinity.nfchain.rev131020.NfchainService; + +public class Activator extends AbstractBindingAwareProvider { + protected static final Logger log = LoggerFactory + .getLogger(Activator.class); + + private ProviderContext providerContext; + private NfchainManager nfcmgr; + + public Activator() { + nfcmgr = new NfchainManager(); + } + + @Override + public void onSessionInitiated(ProviderContext session) { + log.info("Provider session initialized"); + + this.providerContext = session; + nfcmgr.setNotificationProvider(session.getSALService(NotificationProviderService.class)); + providerContext.addRpcImplementation(NfchainService.class, nfcmgr); + } + + @Override + public Collection getImplementations() { + return Collections.emptySet(); + } + + @Override + public Collection getFunctionality() { + return Collections.emptySet(); + } +} diff --git a/nfchain/impl/src/main/java/org/opendaylight/affinity/nfchain/provider/NfchainManager.java b/nfchain/impl/src/main/java/org/opendaylight/affinity/nfchain/provider/NfchainManager.java new file mode 100644 index 0000000..a9085a0 --- /dev/null +++ b/nfchain/impl/src/main/java/org/opendaylight/affinity/nfchain/provider/NfchainManager.java @@ -0,0 +1,114 @@ + +/* + * Copyright (c) 2013 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.affinity.nfchain.provider; + +import java.util.Collections; + +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; + +import org.opendaylight.controller.sal.binding.api.NotificationProviderService; +import org.opendaylight.controller.sal.common.util.Futures; +import org.opendaylight.controller.sal.common.util.Rpcs; + +import org.opendaylight.yangtools.yang.common.RpcError; +import org.opendaylight.yangtools.yang.common.RpcResult; + +import org.opendaylight.yang.gen.v1.urn.opendaylight.affinity.nfchain.rev131020.NfchainService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.affinity.nfchain.rev131020.NfchainData; +import org.opendaylight.yang.gen.v1.urn.opendaylight.affinity.nfchain.rev131020.NfdbBuilder; + +import org.opendaylight.yang.gen.v1.urn.opendaylight.affinity.nfchain.rev131020.ChainId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.affinity.nfchain.rev131020.Gateway; +import org.opendaylight.yang.gen.v1.urn.opendaylight.affinity.nfchain.rev131020.Nfdb; +import org.opendaylight.yang.gen.v1.urn.opendaylight.affinity.nfchain.rev131020.NfdbBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.affinity.nfchain.rev131020.AddInput; + +import org.opendaylight.controller.hosttracker.hostAware.HostNodeConnector; +import org.opendaylight.controller.sal.core.Node; +import org.opendaylight.controller.sal.core.NodeConnector; +import org.opendaylight.controller.sal.packet.BitBufferHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.opendaylight.controller.hosttracker.IfIptoHost; +import org.opendaylight.controller.hosttracker.IfNewHostNotify; + +/** + * NfchainManager -- sends flow programming rules to flow programming service. + */ +public class NfchainManager implements NfchainService, NfchainData { + private static final long serialVersionUID = 1L; + protected static final Logger log = LoggerFactory.getLogger(NfchainManager.class); + + private NotificationProviderService notificationProvider; + private final ExecutorService executor; + private Future> currentTask; + + public NfchainManager() { + executor = Executors.newFixedThreadPool(1); + } + + @Override + public Nfdb getNfdb() { + NfdbBuilder builder = new NfdbBuilder(); + return builder.build(); + } + + @Override + public Future> add(AddInput input) { + // TODO Auto-generated method stub + log.info("add gateway - Received input chain = {}, gateway = {}.", input.getChain(), input.getGateway()); + if (currentTask != null) { + return inProgressError(); + } + currentTask = executor.submit(new addGatewayTask(input)); + return currentTask; + } + + @Override + public Future> list() { + log.info("List command received"); + RpcResult result = Rpcs. getRpcResult(false, null, Collections. emptySet()); + return Futures.immediateFuture(result); + } + + private Future> inProgressError() { + RpcResult result = Rpcs. getRpcResult(false, null, Collections. emptySet()); + return Futures.immediateFuture(result); + } + + private void cancel() { + currentTask.cancel(true); + } + + public void setNotificationProvider(NotificationProviderService salService) { + this.notificationProvider = salService; + } + + private class addGatewayTask implements Callable> { + + final AddInput input; + + public addGatewayTask(AddInput input) { + this.input = input; + } + + @Override + public RpcResult call() throws Exception { + Thread.sleep(1000); + log.info("add gateway returning"); + currentTask = null; + return Rpcs. getRpcResult(true, null, Collections. emptySet()); + } + } +} diff --git a/nfchain/pom.xml b/nfchain/pom.xml new file mode 100644 index 0000000..fe28724 --- /dev/null +++ b/nfchain/pom.xml @@ -0,0 +1,24 @@ + + 4.0.0 + + org.opendaylight.affinity + affinityParent + 0.4.1-SNAPSHOT + + + pom + org.opendaylight.affinity + nfchain + 0.4.1-SNAPSHOT + + + scm:git:ssh://git.opendaylight.org:29418/affinity.git + scm:git:ssh://git.opendaylight.org:29418/affinity.git + + + + api + impl + + diff --git a/pom.xml b/pom.xml index 78297e2..127e28f 100644 --- a/pom.xml +++ b/pom.xml @@ -58,6 +58,7 @@ analytics/integrationtest analytics/northbound l2agent + nfchain