From 48aea7d129e98f08c43c50e376171ea424f28c1d Mon Sep 17 00:00:00 2001 From: Thomas Kee Date: Wed, 20 Aug 2014 14:30:55 -0700 Subject: [PATCH] developer house keeping Change-Id: Ib9d8cb18f196d17cc115ed162164fc874ecc5d53 Signed-off-by: Thomas Kee --- git/README | 5 + git/commit-msg | 181 +++++++++ git/config | 23 ++ packetcable-consumer/pom.xml | 93 +++++ packetcable-consumer/src/main/yang/README.md | 0 packetcable-it/pom.xml | 94 +++++ .../sample/toaster/it/ToasterTest.java | 109 ++++++ .../src/test/resources/controller.xml | 231 +++++++++++ packetcable-it/src/test/resources/logback.xml | 18 + packetcable-model/pom.xml | 149 ++----- packetcable-model/src/main/yang/README.md | 0 .../src/main/yang/packetcable-service.yang | 12 +- .../src/main/yang/packetcable.yang.old | 86 ++++ packetcable-provider/pom.xml | 108 +++++ .../impl/PacketcableProviderModule.java | 66 ++++ .../PacketcableProviderModuleFactory.java | 13 + .../OpendaylightPacketcableProvider.java | 290 ++++++++++++++ .../main/yang/packetcable-provider-impl.yang | 89 +++++ pom.xml | 368 ++++-------------- 19 files changed, 1513 insertions(+), 422 deletions(-) create mode 100644 git/README create mode 100755 git/commit-msg create mode 100644 git/config create mode 100644 packetcable-consumer/pom.xml create mode 100644 packetcable-consumer/src/main/yang/README.md create mode 100644 packetcable-it/pom.xml create mode 100644 packetcable-it/src/test/java/org/opendaylight/controller/sample/toaster/it/ToasterTest.java create mode 100644 packetcable-it/src/test/resources/controller.xml create mode 100644 packetcable-it/src/test/resources/logback.xml create mode 100644 packetcable-model/src/main/yang/README.md create mode 100644 packetcable-model/src/main/yang/packetcable.yang.old create mode 100644 packetcable-provider/pom.xml create mode 100644 packetcable-provider/src/main/java/org/opendaylight/controller/config/yang/config/packetcable_provider/impl/PacketcableProviderModule.java create mode 100644 packetcable-provider/src/main/java/org/opendaylight/controller/config/yang/config/packetcable_provider/impl/PacketcableProviderModuleFactory.java create mode 100644 packetcable-provider/src/main/java/org/opendaylight/controller/packetcable/provider/OpendaylightPacketcableProvider.java create mode 100644 packetcable-provider/src/main/yang/packetcable-provider-impl.yang diff --git a/git/README b/git/README new file mode 100644 index 0000000..086784e --- /dev/null +++ b/git/README @@ -0,0 +1,5 @@ +gitdir=$(git rev-parse --git-dir); scp -p -P 29418 xsited@git.opendaylight.org:hooks/commit-msg ${gitdir}/hooks/ +git add . +git commit --signoff -m "comment" +git push origin HEAD:refs/for/master + diff --git a/git/commit-msg b/git/commit-msg new file mode 100755 index 0000000..73dbc75 --- /dev/null +++ b/git/commit-msg @@ -0,0 +1,181 @@ +#!/bin/sh +# From Gerrit Code Review 2.8.1 +# +# Part of Gerrit Code Review (http://code.google.com/p/gerrit/) +# +# Copyright (C) 2009 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +unset GREP_OPTIONS + +CHANGE_ID_AFTER="Bug|Issue" +MSG="$1" + +# Check for, and add if missing, a unique Change-Id +# +add_ChangeId() { + clean_message=`sed -e ' + /^diff --git a\/.*/{ + s/// + q + } + /^Signed-off-by:/d + /^#/d + ' "$MSG" | git stripspace` + if test -z "$clean_message" + then + return + fi + + if test "false" = "`git config --bool --get gerrit.createChangeId`" + then + return + fi + + # Does Change-Id: already exist? if so, exit (no change). + if grep -i '^Change-Id:' "$MSG" >/dev/null + then + return + fi + + id=`_gen_ChangeId` + T="$MSG.tmp.$$" + AWK=awk + if [ -x /usr/xpg4/bin/awk ]; then + # Solaris AWK is just too broken + AWK=/usr/xpg4/bin/awk + fi + + # How this works: + # - parse the commit message as (textLine+ blankLine*)* + # - assume textLine+ to be a footer until proven otherwise + # - exception: the first block is not footer (as it is the title) + # - read textLine+ into a variable + # - then count blankLines + # - once the next textLine appears, print textLine+ blankLine* as these + # aren't footer + # - in END, the last textLine+ block is available for footer parsing + $AWK ' + BEGIN { + # while we start with the assumption that textLine+ + # is a footer, the first block is not. + isFooter = 0 + footerComment = 0 + blankLines = 0 + } + + # Skip lines starting with "#" without any spaces before it. + /^#/ { next } + + # Skip the line starting with the diff command and everything after it, + # up to the end of the file, assuming it is only patch data. + # If more than one line before the diff was empty, strip all but one. + /^diff --git a/ { + blankLines = 0 + while (getline) { } + next + } + + # Count blank lines outside footer comments + /^$/ && (footerComment == 0) { + blankLines++ + next + } + + # Catch footer comment + /^\[[a-zA-Z0-9-]+:/ && (isFooter == 1) { + footerComment = 1 + } + + /]$/ && (footerComment == 1) { + footerComment = 2 + } + + # We have a non-blank line after blank lines. Handle this. + (blankLines > 0) { + print lines + for (i = 0; i < blankLines; i++) { + print "" + } + + lines = "" + blankLines = 0 + isFooter = 1 + footerComment = 0 + } + + # Detect that the current block is not the footer + (footerComment == 0) && (!/^\[?[a-zA-Z0-9-]+:/ || /^[a-zA-Z0-9-]+:\/\//) { + isFooter = 0 + } + + { + # We need this information about the current last comment line + if (footerComment == 2) { + footerComment = 0 + } + if (lines != "") { + lines = lines "\n"; + } + lines = lines $0 + } + + # Footer handling: + # If the last block is considered a footer, splice in the Change-Id at the + # right place. + # Look for the right place to inject Change-Id by considering + # CHANGE_ID_AFTER. Keys listed in it (case insensitive) come first, + # then Change-Id, then everything else (eg. Signed-off-by:). + # + # Otherwise just print the last block, a new line and the Change-Id as a + # block of its own. + END { + unprinted = 1 + if (isFooter == 0) { + print lines "\n" + lines = "" + } + changeIdAfter = "^(" tolower("'"$CHANGE_ID_AFTER"'") "):" + numlines = split(lines, footer, "\n") + for (line = 1; line <= numlines; line++) { + if (unprinted && match(tolower(footer[line]), changeIdAfter) != 1) { + unprinted = 0 + print "Change-Id: I'"$id"'" + } + print footer[line] + } + if (unprinted) { + print "Change-Id: I'"$id"'" + } + }' "$MSG" > "$T" && mv "$T" "$MSG" || rm -f "$T" +} +_gen_ChangeIdInput() { + echo "tree `git write-tree`" + if parent=`git rev-parse "HEAD^0" 2>/dev/null` + then + echo "parent $parent" + fi + echo "author `git var GIT_AUTHOR_IDENT`" + echo "committer `git var GIT_COMMITTER_IDENT`" + echo + printf '%s' "$clean_message" +} +_gen_ChangeId() { + _gen_ChangeIdInput | + git hash-object -t commit --stdin +} + + +add_ChangeId diff --git a/git/config b/git/config new file mode 100644 index 0000000..593511a --- /dev/null +++ b/git/config @@ -0,0 +1,23 @@ +[core] + repositoryformatversion = 0 + filemode = true + logallrefupdates = true + precomposeunicode = true +[remote "origin"] + url = ssh://xsited@git.opendaylight.org:29418/packetcable.git + fetch = +refs/heads/*:refs/remotes/origin/* + fetch = +refs/notes/*:refs/notes/* + push = HEAD:refs/for/master +[branch "master"] + remote = origin + merge = refs/heads/master +[gerrit] + createchangeid = true +[remote "github"] + url = https://github.com/xsited/packetcable.git + fetch = +refs/heads/*:refs/remotes/origin/* +[remote "odl"] + url = ssh://xsited@git.opendaylight.org:29418/packetcable.git + fetch = +refs/heads/*:refs/remotes/odl-origin/* + push = HEAD:refs/for/master + diff --git a/packetcable-consumer/pom.xml b/packetcable-consumer/pom.xml new file mode 100644 index 0000000..c1da112 --- /dev/null +++ b/packetcable-consumer/pom.xml @@ -0,0 +1,93 @@ + + + 4.0.0 + + org.opendaylight.controller.packetcable + packetcable-plugin + 1.1-SNAPSHOT + + packetcable-consumer + bundle + + + 1.1-SNAPSHOT + + + + + ${project.groupId} + packetcable-model + ${project.version} + + + org.opendaylight.controller + config-api + + + org.opendaylight.controller + sal-common-util + + + org.opendaylight.controller + sal-binding-api + + + org.opendaylight.controller + sal-binding-config + + + org.osgi + org.osgi.core + + + + + + + maven-checkstyle-plugin + + true + + + + org.apache.felix + maven-bundle-plugin + + + org.opendaylight.yangtools + yang-maven-plugin + + + config + + generate-sources + + + + + org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator + ${jmxGeneratorPath} + + urn:opendaylight:params:xml:ns:yang:controller==org.opendaylight.controller.config.yang + + + + org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl + ${salGeneratorPath} + + + true + + + + + + + + + scm:git:ssh://git.opendaylight.org:29418/controller.git + scm:git:ssh://git.opendaylight.org:29418/controller.git + HEAD + https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL + + diff --git a/packetcable-consumer/src/main/yang/README.md b/packetcable-consumer/src/main/yang/README.md new file mode 100644 index 0000000..e69de29 diff --git a/packetcable-it/pom.xml b/packetcable-it/pom.xml new file mode 100644 index 0000000..1d0ae93 --- /dev/null +++ b/packetcable-it/pom.xml @@ -0,0 +1,94 @@ + + + 4.0.0 + + org.opendaylight.controller.packetcable + packetcable-plugin + 1.1-SNAPSHOT + + packetcable-it + + + + + junit + junit + + + org.opendaylight.controller + sal-binding-it + + + org.opendaylight.controller.samples + sample-toaster + + + org.opendaylight.controller.samples + sample-toaster-consumer + + + + org.opendaylight.controller.samples + sample-toaster-provider + + + org.openexi + nagasena + + + org.openexi + nagasena-rta + + + org.ops4j.pax.exam + pax-exam-junit4 + ${exam.version} + + + equinoxSDK381 + org.eclipse.osgi + test + + + org.ops4j.pax.exam + pax-exam-container-native + ${exam.version} + test + + + org.ops4j.pax.exam + pax-exam-link-mvn + ${exam.version} + test + + + + + + + maven-checkstyle-plugin + + true + + + + + org.ops4j.pax.exam + maven-paxexam-plugin + + + generate-config + + generate-depends-file + + + + + + + + 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 + + diff --git a/packetcable-it/src/test/java/org/opendaylight/controller/sample/toaster/it/ToasterTest.java b/packetcable-it/src/test/java/org/opendaylight/controller/sample/toaster/it/ToasterTest.java new file mode 100644 index 0000000..30f1762 --- /dev/null +++ b/packetcable-it/src/test/java/org/opendaylight/controller/sample/toaster/it/ToasterTest.java @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2014 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.controller.sample.toaster.it; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.opendaylight.controller.sample.kitchen.api.EggsType; +import org.opendaylight.controller.sample.kitchen.api.KitchenService; +import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.HashBrown; +import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.WhiteBread; +import org.ops4j.pax.exam.Configuration; +import org.ops4j.pax.exam.Option; +import org.ops4j.pax.exam.junit.PaxExam; +import org.ops4j.pax.exam.options.DefaultCompositeOption; +import org.ops4j.pax.exam.util.Filter; +import org.ops4j.pax.exam.util.PathUtils; + +import javax.inject.Inject; +import javax.management.MBeanServer; +import javax.management.ObjectName; + +import java.lang.management.ManagementFactory; + +import static org.junit.Assert.assertEquals; +import static org.opendaylight.controller.test.sal.binding.it.TestHelper.baseModelBundles; +import static org.opendaylight.controller.test.sal.binding.it.TestHelper.bindingAwareSalBundles; +import static org.opendaylight.controller.test.sal.binding.it.TestHelper.configMinumumBundles; +import static org.opendaylight.controller.test.sal.binding.it.TestHelper.flowCapableModelBundles; +import static org.opendaylight.controller.test.sal.binding.it.TestHelper.junitAndMockitoBundles; +import static org.opendaylight.controller.test.sal.binding.it.TestHelper.mdSalCoreBundles; +import static org.ops4j.pax.exam.CoreOptions.mavenBundle; +import static org.ops4j.pax.exam.CoreOptions.options; +import static org.ops4j.pax.exam.CoreOptions.systemPackages; +import static org.ops4j.pax.exam.CoreOptions.systemProperty; + +@RunWith(PaxExam.class) +public class ToasterTest { + + @Inject + @Filter(timeout=60*1000) + KitchenService kitchenService; + + @Configuration + public Option[] config() { + return options(systemProperty("osgi.console").value("2401"), mavenBundle("org.slf4j", "slf4j-api") + .versionAsInProject(), // + mavenBundle("org.slf4j", "log4j-over-slf4j").versionAsInProject(), // + + systemProperty("logback.configurationFile").value( + "file:" + PathUtils.getBaseDir() + + "/src/test/resources/logback.xml"), + mavenBundle("ch.qos.logback", "logback-core").versionAsInProject(), // + mavenBundle("ch.qos.logback", "logback-classic").versionAsInProject(), // + systemProperty("osgi.bundles.defaultStartLevel").value("4"), + systemPackages("sun.nio.ch"), + + toasterBundles(), + mdSalCoreBundles(), + + bindingAwareSalBundles(), + configMinumumBundles(), + // BASE Models + baseModelBundles(), + flowCapableModelBundles(), + + // Set fail if unresolved bundle present + systemProperty("pax.exam.osgi.unresolved.fail").value("true"), + junitAndMockitoBundles()); + } + + private Option toasterBundles() { + return new DefaultCompositeOption( + mavenBundle("org.opendaylight.controller.samples", "sample-toaster-provider").versionAsInProject(), + mavenBundle("org.opendaylight.controller.samples", "sample-toaster-consumer").versionAsInProject(), + mavenBundle("org.opendaylight.controller.samples", "sample-toaster").versionAsInProject(), + mavenBundle("org.openexi", "nagasena").versionAsInProject(), + mavenBundle("org.openexi", "nagasena-rta").versionAsInProject() + ); + } + + @Test + public void testToaster() throws Exception { + + MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer(); + ObjectName providerOn = new ObjectName("org.opendaylight.controller:instanceName=toaster-provider-impl,type=RuntimeBean,moduleFactoryName=toaster-provider-impl"); + + long toastsMade = (long) platformMBeanServer.getAttribute(providerOn, "ToastsMade"); + assertEquals(0, toastsMade); + + boolean success = true; + + // Make toasts using OSGi service + success &= kitchenService.makeBreakfast( EggsType.SCRAMBLED, HashBrown.class, 4).get().isSuccessful(); + success &= kitchenService.makeBreakfast( EggsType.POACHED, WhiteBread.class, 8 ).get().isSuccessful(); + + Assert.assertTrue("Not all breakfasts succeeded", success); + + // Verify toasts made count on provider via JMX/config-subsystem + toastsMade = (long) platformMBeanServer.getAttribute(providerOn, "ToastsMade"); + assertEquals(2, toastsMade); + } + +} diff --git a/packetcable-it/src/test/resources/controller.xml b/packetcable-it/src/test/resources/controller.xml new file mode 100644 index 0000000..4cce64d --- /dev/null +++ b/packetcable-it/src/test/resources/controller.xml @@ -0,0 +1,231 @@ + + + + + + + + + + + + prefix:schema-service-singleton + yang-schema-service + + + prefix:runtime-generated-mapping + runtime-mapping-singleton + + + prefix:binding-notification-broker + binding-notification-broker + + + prefix:binding-broker-impl + binding-broker-impl + + binding:binding-notification-service + binding-notification-broker + + + binding:binding-data-broker + binding-data-broker + + + + + + prefix:dom-inmemory-data-broker + inmemory-data-broker + + dom:schema-service + yang-schema-service + + + + prefix:dom-broker-impl + inmemory-dom-broker + + dom:dom-async-data-broker + inmemory-data-broker + + + + prefix:binding-data-compatible-broker + inmemory-binding-data-broker + + dom:dom-broker-osgi-registry + dom-broker + + + binding:binding-dom-mapping-service + runtime-mapping-singleton + + + + prefix:binding-forwarded-data-broker + binding-async-data-broker + + + dom:dom-broker-osgi-registry + dom-broker + + + binding:binding-dom-mapping-service + runtime-mapping-singleton + + + + + + + + prefix:toaster-provider-impl + + toaster-provider-impl + + + binding:binding-rpc-registry + binding-rpc-broker + + + + binding:binding-async-data-broker + binding-data-broker + + + + + binding:binding-notification-service + + binding-notification-broker + + + + + + + prefix:kitchen-service-impl + + kitchen-service-impl + + + binding:binding-rpc-registry + binding-rpc-broker + + + + + binding:binding-notification-service + + binding-notification-broker + + + + + + dom:schema-service + + yang-schema-service + /modules/module[type='schema-service-singleton'][name='yang-schema-service'] + + + + binding-impl:binding-dom-mapping-service + + runtime-mapping-singleton + /modules/module[type='runtime-generated-mapping'][name='runtime-mapping-singleton'] + + + + binding:binding-notification-service + + binding-notification-broker + /modules/module[type='binding-notification-broker'][name='binding-notification-broker'] + + + + binding:binding-broker-osgi-registry + + binding-osgi-broker + /modules/module[type='binding-broker-impl'][name='binding-broker-impl'] + + + + binding:binding-rpc-registry + + binding-rpc-broker + /modules/module[type='binding-broker-impl'][name='binding-broker-impl'] + + + + + dom:dom-broker-osgi-registry + + dom-broker + /modules/module[type='dom-broker-impl'][name='inmemory-dom-broker'] + + + + + binding:binding-data-broker + + binding-data-broker + /modules/module[type='binding-data-compatible-broker'][name='inmemory-binding-data-broker'] + + + + + binding:binding-async-data-broker + + binding-data-broker + /modules/module[type='binding-forwarded-data-broker'][name='binding-async-data-broker'] + + + + + dom:dom-async-data-broker + + inmemory-data-broker + /modules/module[type='dom-inmemory-data-broker'][name='inmemory-data-broker'] + + + + + + + kitchen:kitchen-service + + + kitchen-service + /modules/module[type='kitchen-service-impl'][name='kitchen-service-impl'] + + + + + + + urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding?module=opendaylight-md-sal-binding&revision=2013-10-28 + urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom?module=opendaylight-md-sal-dom&revision=2013-10-28 + urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl?module=opendaylight-sal-binding-broker-impl&revision=2013-10-28 + urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl?module=opendaylight-sal-dom-broker-impl&revision=2013-10-28 + urn:opendaylight:params:xml:ns:yang:controller:md:sal:common?module=opendaylight-md-sal-common&revision=2013-10-28 + + + http://netconfcentral.org/ns/toaster?module=toaster&revision=2009-11-20 + urn:opendaylight:params:xml:ns:yang:controller:config:kitchen-service:impl?module=kitchen-service-impl&revision=2014-01-31 + urn:opendaylight:params:xml:ns:yang:controller:config:toaster-provider:impl?module=toaster-provider-impl&revision=2014-01-31 + + + + + diff --git a/packetcable-it/src/test/resources/logback.xml b/packetcable-it/src/test/resources/logback.xml new file mode 100644 index 0000000..d76c2d3 --- /dev/null +++ b/packetcable-it/src/test/resources/logback.xml @@ -0,0 +1,18 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + + + + + diff --git a/packetcable-model/pom.xml b/packetcable-model/pom.xml index bb9a4e2..60e9d46 100644 --- a/packetcable-model/pom.xml +++ b/packetcable-model/pom.xml @@ -3,36 +3,44 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.opendaylight.packetcable - packetcable-parent - 1.0.0-SNAPSHOT - + org.opendaylight.controller.packetcable + packetcable-plugin + 1.1-SNAPSHOT + packetcable-model 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 - HEAD - + + + org.opendaylight.yangtools.model + ietf-inet-types + + + org.opendaylight.yangtools.model + ietf-yang-types + + + org.opendaylight.yangtools + yang-binding + + + org.opendaylight.yangtools + yang-common + + - - org.apache.felix - maven-bundle-plugin - ${bundle.plugin.version} - true - - - org.opendaylight.packetcable.packetcable-model - - - org.opendaylight.yangtools yang-maven-plugin - ${yangtools.version} + + + org.opendaylight.yangtools + maven-sal-api-gen-plugin + ${yangtools.version} + jar + + @@ -50,98 +58,13 @@ - - - org.opendaylight.yangtools - maven-sal-api-gen-plugin - ${yangtools.version} - jar - - - - - - - org.eclipse.m2e - lifecycle-mapping - 1.0.0 - - - - - - org.opendaylight.yangtools - yang-maven-plugin - [0.5,) - - generate-sources - - - - - - - - - - - - - - - org.opendaylight.yangtools - yang-binding - ${yangtools.version} - - - org.opendaylight.yangtools - yang-common - ${yangtools.version} - - - org.opendaylight.yangtools.model - ietf-inet-types - ${ietf-inet-types.version} - - - org.opendaylight.yangtools.model - ietf-yang-types - ${ietf-yang-types.version} - - - org.opendaylight.controller.model - model-flow-base - ${controller.model.version} - - - org.opendaylight.controller.model - model-flow-management - ${controller.model.version} - - - org.opendaylight.controller.model - model-flow-service - ${controller.model.version} - - - org.opendaylight.controller.model - model-flow-statistics - ${controller.model.version} - - - org.opendaylight.controller.model - model-inventory - ${controller.model.version} - - - org.opendaylight.controller - sal-binding-api - ${controller.model.version} - - - org.opendaylight.packetcable + + scm:git:ssh://git.opendaylight.org:29418/controller.git + scm:git:ssh://git.opendaylight.org:29418/controller.git + HEAD + https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL + diff --git a/packetcable-model/src/main/yang/README.md b/packetcable-model/src/main/yang/README.md new file mode 100644 index 0000000..e69de29 diff --git a/packetcable-model/src/main/yang/packetcable-service.yang b/packetcable-model/src/main/yang/packetcable-service.yang index e40a105..b4b4afc 100644 --- a/packetcable-model/src/main/yang/packetcable-service.yang +++ b/packetcable-model/src/main/yang/packetcable-service.yang @@ -1,4 +1,4 @@ -module packetcable-service { +module packetcable-service{ namespace "urn:opendaylight:packetcable:service"; prefix pcmm; @@ -299,7 +299,7 @@ module packetcable-service { } } - grouping update-tp-defaults-unsolicited-grant-service-with-actvity-detection { + grouping update-tp-defaults-unsolicited-grant-service-with-activity-detection { // uses "tp:tp-context-ref"; container original-tp { @@ -310,7 +310,7 @@ module packetcable-service { } } - rpc traffic-profile-get-defaults-unsolicited-grant-service-with-actvity-detection { + rpc traffic-profile-get-defaults-unsolicited-grant-service-with-activity-detection { input { uses tr:transaction-metadata; @@ -319,18 +319,18 @@ module packetcable-service { } } output { - uses update-tp-defaults-unsolicited-grant-service-with-actvity-detection; + uses update-tp-defaults-unsolicited-grant-service-with-activity-detection; uses tr:transaction-aware; } } - rpc traffic-profile-update-defaults-unsolicited-grant-service-with-actvity-detection { + rpc traffic-profile-update-defaults-unsolicited-grant-service-with-activity-detection { input { uses tr:transaction-metadata; leaf tp-ref { type tp:tp-reference; } - uses update-tp-defaults-unsolicited-grant-service-with-actvity-detection; + uses update-tp-defaults-unsolicited-grant-service-with-activity-detection; } output { uses tr:transaction-aware; diff --git a/packetcable-model/src/main/yang/packetcable.yang.old b/packetcable-model/src/main/yang/packetcable.yang.old new file mode 100644 index 0000000..5dcdbeb --- /dev/null +++ b/packetcable-model/src/main/yang/packetcable.yang.old @@ -0,0 +1,86 @@ + module packetcable { + + namespace "urn:opendaylight:node:packetcable"; + prefix packetcable; + + + import ietf-yang-types { prefix yang; } + import ietf-inet-types { prefix inet; } + import packetcable-cmts {prefix cmts; } + + + + organization "Packetcabel ODL"; + + contact + "Thomas Kee "; + + description + "Packetcable plugin for the PCMM driver"; + + revision "2014-07-23" { + description + "Packetcable module."; + } + + typdef pcmm-configuration + { + leaf ip-address { + type inet:ip-address; + mandatory true; + description "The IP address of the controller to connect to."; + } + leaf port { + type inet:port-number; + default 3918; + description "The port number at the controller to connect to."; + } + }//typdef pcmm-configuration + + rpc init-connection + { + description + "Request connection with the CMTS"; + input + { + leaf connectionConf + { + type pcmm-configuration ; + description + "cmts configuration"; + } + } + } // rpc init-connection + + rpc disconnect { + input + { + leaf connectionConf + { + type pcmm-configuration ; + description + "cmts configuration"; + } + } + description + "Disconnect from CMTS. + A 'resource-denied' error will be returned + if the packetcable service is disabled."; + } // rpc disconnect + + + notification connectedToCMTS { + description + "Indicates that the toaster has run of out bread."; + } // notification connectedToCMTS + + notification desconnectedFromCMTS { + description + "Indicates that the toaster has run of out bread."; + leaf connectionConf { + type pcmm-configuration ; + description "cmts configuration"; + } + } // notification desconnectedFromCMTS + + } // module packetcable diff --git a/packetcable-provider/pom.xml b/packetcable-provider/pom.xml new file mode 100644 index 0000000..ec0931e --- /dev/null +++ b/packetcable-provider/pom.xml @@ -0,0 +1,108 @@ + + + 4.0.0 + + org.opendaylight.controller.packetcable + packetcable-plugin + 1.1-SNAPSHOT + + packetcable-provider + bundle + + + 1.1-SNAPSHOT + + + + + ${project.groupId} + packetcable-model + ${project.version} + + + org.opendaylight.yangtools.model + ietf-inet-types + + + org.opendaylight.yangtools.model + ietf-yang-types + + + org.opendaylight.controller + config-api + + + org.opendaylight.controller + sal-binding-api + + + org.opendaylight.controller + sal-binding-config + + + org.opendaylight.controller + sal-common-util + + + org.osgi + org.osgi.core + + + + + + + maven-checkstyle-plugin + + true + + + + + org.apache.felix + maven-bundle-plugin + + + org.opendaylight.controller.config.yang.toaster_provider, + * + + + + + org.opendaylight.yangtools + yang-maven-plugin + + + config + + generate-sources + + + + + org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator + ${jmxGeneratorPath} + + urn:opendaylight:params:xml:ns:yang:controller==org.opendaylight.controller.config.yang + + + + org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl + ${salGeneratorPath} + + + true + + + + + + + + scm:git:ssh://git.opendaylight.org:29418/controller.git + scm:git:ssh://git.opendaylight.org:29418/controller.git + HEAD + https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL + + diff --git a/packetcable-provider/src/main/java/org/opendaylight/controller/config/yang/config/packetcable_provider/impl/PacketcableProviderModule.java b/packetcable-provider/src/main/java/org/opendaylight/controller/config/yang/config/packetcable_provider/impl/PacketcableProviderModule.java new file mode 100644 index 0000000..ab0c880 --- /dev/null +++ b/packetcable-provider/src/main/java/org/opendaylight/controller/config/yang/config/packetcable_provider/impl/PacketcableProviderModule.java @@ -0,0 +1,66 @@ +package org.opendaylight.controller.config.yang.config.packetcable_provider.impl; + +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; +import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; +import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddressBuilder; + +public class PacketcableProviderModule + extends + org.opendaylight.controller.config.yang.config.packetcable_provider.impl.AbstractPacketcableProviderModule { + public PacketcableProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { + super(identifier, dependencyResolver); + } + + public PacketcableProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.controller.config.yang.config.packetcable_provider.impl.PacketcableProviderModule oldModule, java.lang.AutoCloseable oldInstance) { + super(identifier, dependencyResolver, oldModule, oldInstance); + } + + @Override + public void customValidation() { + // add custom validation form module attributes here. + } +// + @Override + public java.lang.AutoCloseable createInstance() { +// final OpendaylightPacketcableProvider opendaylightPcmmProvider = new OpendaylightPacketcableProvider(); +// +// // Register to md-sal +// opendaylightPcmmProvider.setNotificationProvider(getNotificationServiceDependency()); +// +// DataBroker dataBrokerService = getDataBrokerDependency(); +// opendaylightPcmmProvider.setDataProvider(dataBrokerService); +// +// final ListenerRegistration dataChangeListenerRegistration = dataBrokerService.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, OpendaylightPacketcableProvider.TOASTER_IID, opendaylightPcmmProvider, DataChangeScope.SUBTREE); +// +// final BindingAwareBroker.RpcRegistration rpcRegistration = getRpcRegistryDependency().addRpcImplementation(ToasterService.class, opendaylightPcmmProvider); +// +// // Register runtimeBean for toaster statistics via JMX +// final PacketcableProviderRuntimeRegistration runtimeReg = getRootRuntimeBeanRegistratorWrapper().register(opendaylightPcmmProvider); +// +// // Wrap PCMM driver as AutoCloseable and close registrations to md-sal at +// // close() +// final class AutoCloseablePcmmProvider implements AutoCloseable { +// +// @Override +// public void close() throws Exception { +// dataChangeListenerRegistration.close(); +// rpcRegistration.close(); +// runtimeReg.close(); +// opendaylightPcmmProvider.close(); +// +// log.info("Toaster provider (instance {}) torn down.", this); +// } +// } +// +// AutoCloseable ret = new AutoCloseablePcmmProvider(); +// log.info("Toaster provider (instance {}) initialized.", ret); +// return ret; + return null; + } + +} diff --git a/packetcable-provider/src/main/java/org/opendaylight/controller/config/yang/config/packetcable_provider/impl/PacketcableProviderModuleFactory.java b/packetcable-provider/src/main/java/org/opendaylight/controller/config/yang/config/packetcable_provider/impl/PacketcableProviderModuleFactory.java new file mode 100644 index 0000000..c196c60 --- /dev/null +++ b/packetcable-provider/src/main/java/org/opendaylight/controller/config/yang/config/packetcable_provider/impl/PacketcableProviderModuleFactory.java @@ -0,0 +1,13 @@ +/* +* Generated file +* +* Generated from: yang module name: packetcable-provider-impl yang module local name: packetcable-provider-impl +* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator +* Generated at: Thu Jul 24 00:40:30 CEST 2014 +* +* Do not modify this file unless it is present under src/main directory +*/ +package org.opendaylight.controller.config.yang.config.packetcable_provider.impl; +public class PacketcableProviderModuleFactory extends org.opendaylight.controller.config.yang.config.packetcable_provider.impl.AbstractPacketcableProviderModuleFactory { + +} diff --git a/packetcable-provider/src/main/java/org/opendaylight/controller/packetcable/provider/OpendaylightPacketcableProvider.java b/packetcable-provider/src/main/java/org/opendaylight/controller/packetcable/provider/OpendaylightPacketcableProvider.java new file mode 100644 index 0000000..85d0d2e --- /dev/null +++ b/packetcable-provider/src/main/java/org/opendaylight/controller/packetcable/provider/OpendaylightPacketcableProvider.java @@ -0,0 +1,290 @@ +package org.opendaylight.controller.packetcable.provider; + +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.atomic.AtomicReference; + +import org.opendaylight.controller.config.yang.config.packetcable_provider.impl.PacketcableProviderRuntimeMXBean; +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.WriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.sal.binding.api.NotificationProviderService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.node.cmts.rev140120.CmtsInstance; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsAddInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsAddOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsAddOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsAdded; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsAddedBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsRemoveInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsRemoveOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsRemoveOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsRemoved; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsRemovedBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsUpdateInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsUpdateOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsUpdateOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsUpdated; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.CmtsUpdatedBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.PacketcableServiceService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsBestEffortInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsBestEffortOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsDownstreamServiceInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsDownstreamServiceOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsFlowspecInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsFlowspecOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsNonRealTimePollingServiceInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsNonRealTimePollingServiceOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsRealTimePollingServiceInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsRealTimePollingServiceOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsUnsolicitedGrantServiceInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsUnsolicitedGrantServiceOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsUnsolicitedGrantServiceWithActivityDetectionInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileGetDefaultsUnsolicitedGrantServiceWithActivityDetectionOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsBestEffortInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsBestEffortOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsDownstreamServiceInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsDownstreamServiceOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsFlowspecInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsFlowspecOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsNonRealTimePollingServiceInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsNonRealTimePollingServiceOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsRealTimePollingServiceInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsRealTimePollingServiceOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsUnsolicitedGrantServiceInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsUnsolicitedGrantServiceOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsUnsolicitedGrantServiceWithActivityDetectionInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packetcable.service.rev140120.TrafficProfileUpdateDefaultsUnsolicitedGrantServiceWithActivityDetectionOutput; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.common.RpcResult; +import org.opendaylight.yangtools.yang.common.RpcResultBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.collect.Lists; +import com.google.common.util.concurrent.FutureCallback; +import com.google.common.util.concurrent.Futures; + +@SuppressWarnings("unused") +public class OpendaylightPacketcableProvider implements + PacketcableServiceService, PacketcableProviderRuntimeMXBean, + DataChangeListener, AutoCloseable { + + private static final Logger logger = LoggerFactory.getLogger(OpendaylightPacketcableProvider.class); + private NotificationProviderService notificationProvider; + private DataBroker dataProvider; + + private final ExecutorService executor; + + // The following holds the Future for the current make toast task. + // This is used to cancel the current toast. + private final AtomicReference> currentConnectionsTasks = new AtomicReference<>(); + + private List> cmtsInstances; + + public OpendaylightPacketcableProvider() { + executor = Executors.newCachedThreadPool(); + cmtsInstances = Lists.newArrayList(); + + } + + public void setNotificationProvider(final NotificationProviderService salService) { + this.notificationProvider = salService; + } + + public void setDataProvider(final DataBroker salDataProvider) { + this.dataProvider = salDataProvider; + } + + /** + * Implemented from the AutoCloseable interface. + */ + @Override + public void close() throws ExecutionException, InterruptedException { + executor.shutdown(); + if (dataProvider != null) { + for (Iterator> iter = cmtsInstances.iterator(); iter.hasNext();) { + WriteTransaction tx = dataProvider.newWriteOnlyTransaction(); + tx.delete(LogicalDatastoreType.OPERATIONAL, iter.next()); + Futures.addCallback(tx.submit(), new FutureCallback() { + @Override + public void onSuccess(final Void result) { + logger.debug("Delete commit result: " + result); + } + + @Override + public void onFailure(final Throwable t) { + logger.error("Delete operation failed", t); + } + }); + } + } + } + + // private CmtsInstance buildCmtsConnection(final String host) { + // InetAddress address = InetAddress.getByName(host); + // IpAddress ipAddress = + // IpAddressBuilder.getDefaultInstance(address.getHostAddress()); + // PcmmConfigurationBuilder pcmmConfigurationBuilder = new + // PcmmConfigurationBuilder().setIpAddress(ipAddress); + // org.opendaylight.yang.gen.v1.urn.opendaylight.node.cmts.rev140120.cmts.instance.ConfigurationPointsBuilder + // configurationPointsBuilder = new + // org.opendaylight.yang.gen.v1.urn.opendaylight.node.cmts.rev140120.cmts.instance.ConfigurationPointsBuilder().build(); + // return new CmtsAddedBuilder().setConfigurationPoints().build(); + // } + + /** + * Implemented from the DataChangeListener interface. + */ + @Override + public void onDataChanged(final AsyncDataChangeEvent, DataObject> change) { + DataObject dataObject = change.getUpdatedSubtree(); + logger.debug("OpendaylightPacketcableProvider.onDataChanged() :" + dataObject); + } + + @Override + public Boolean getConnectionState() { + return null; + } + + @Override + public void closeCmtsConnection() { + for (Iterator> iter = cmtsInstances.iterator(); iter.hasNext();) { + + // notificationProvider.publish(paramNotification) + // iter.next().getId() + } + } + + @Override + public Future> cmtsAdd(CmtsAddInput input) { + //TODO how to get this transaction id ??? + TransactionId transactionId = null; + if (transactionId != null) { + CmtsAdded cmtsAdded = new CmtsAddedBuilder().setCmtsRef(input.getCmtsRef()).setId(input.getId()).setConfigurationPoints(input.getConfigurationPoints()).setTransactionUri(input.getTransactionUri()).setTransactionId(transactionId).setNode(input.getNode()).setManagedCableModemSubscribers(input.getManagedCableModemSubscribers()).build(); + notificationProvider.publish(cmtsAdded); + CmtsAddOutput output = new CmtsAddOutputBuilder().setTransactionId(transactionId).build(); + return Futures.immediateFuture(RpcResultBuilder.success(output).build()); + } else { + return Futures.immediateFuture(RpcResultBuilder. failed().build()); + } + } + + @Override + public Future> cmtsRemove(CmtsRemoveInput input) { + TransactionId transactionId = null; + if (transactionId != null) { + CmtsRemoved cmtsRemoved = new CmtsRemovedBuilder().setCmtsRef(input.getCmtsRef()).setId(input.getId()).setConfigurationPoints(input.getConfigurationPoints()).setTransactionUri(input.getTransactionUri()).setTransactionId(transactionId).setNode(input.getNode()).setManagedCableModemSubscribers(input.getManagedCableModemSubscribers()).build(); + notificationProvider.publish(cmtsRemoved); + CmtsRemoveOutput output = new CmtsRemoveOutputBuilder().setTransactionId(transactionId).build(); + return Futures.immediateFuture(RpcResultBuilder.success(output).build()); + } else { + return Futures.immediateFuture(RpcResultBuilder. failed().build()); + } + } + + @Override + public Future> cmtsUpdate(CmtsUpdateInput input) { + TransactionId transactionId = null; + if (transactionId != null) { + CmtsUpdated cmtsUpdated = new CmtsUpdatedBuilder().setCmtsRef(input.getCmtsRef()).setId(input.getOriginalCmts().getId()).setConfigurationPoints(input.getOriginalCmts().getConfigurationPoints()).setTransactionUri(input.getTransactionUri()).setTransactionId(transactionId).setNode(input.getNode()).setManagedCableModemSubscribers(input.getOriginalCmts().getManagedCableModemSubscribers()).build(); + notificationProvider.publish(cmtsUpdated); + CmtsUpdateOutput output = new CmtsUpdateOutputBuilder().setTransactionId(transactionId).build(); + return Futures.immediateFuture(RpcResultBuilder.success(output).build()); + } else { + return Futures.immediateFuture(RpcResultBuilder. failed().build()); + } + } + + @Override + public Future> trafficProfileGetDefaultsBestEffort(TrafficProfileGetDefaultsBestEffortInput input) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Future> trafficProfileGetDefaultsDownstreamService(TrafficProfileGetDefaultsDownstreamServiceInput input) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Future> trafficProfileGetDefaultsFlowspec(TrafficProfileGetDefaultsFlowspecInput input) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Future> trafficProfileGetDefaultsNonRealTimePollingService(TrafficProfileGetDefaultsNonRealTimePollingServiceInput input) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Future> trafficProfileGetDefaultsRealTimePollingService(TrafficProfileGetDefaultsRealTimePollingServiceInput input) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Future> trafficProfileGetDefaultsUnsolicitedGrantService(TrafficProfileGetDefaultsUnsolicitedGrantServiceInput input) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Future> trafficProfileGetDefaultsUnsolicitedGrantServiceWithActivityDetection(TrafficProfileGetDefaultsUnsolicitedGrantServiceWithActivityDetectionInput input) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Future> trafficProfileUpdateDefaultsBestEffort(TrafficProfileUpdateDefaultsBestEffortInput input) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Future> trafficProfileUpdateDefaultsDownstreamService(TrafficProfileUpdateDefaultsDownstreamServiceInput input) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Future> trafficProfileUpdateDefaultsFlowspec(TrafficProfileUpdateDefaultsFlowspecInput input) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Future> trafficProfileUpdateDefaultsNonRealTimePollingService(TrafficProfileUpdateDefaultsNonRealTimePollingServiceInput input) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Future> trafficProfileUpdateDefaultsRealTimePollingService(TrafficProfileUpdateDefaultsRealTimePollingServiceInput input) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Future> trafficProfileUpdateDefaultsUnsolicitedGrantService(TrafficProfileUpdateDefaultsUnsolicitedGrantServiceInput input) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Future> trafficProfileUpdateDefaultsUnsolicitedGrantServiceWithActivityDetection(TrafficProfileUpdateDefaultsUnsolicitedGrantServiceWithActivityDetectionInput input) { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/packetcable-provider/src/main/yang/packetcable-provider-impl.yang b/packetcable-provider/src/main/yang/packetcable-provider-impl.yang new file mode 100644 index 0000000..83e6a28 --- /dev/null +++ b/packetcable-provider/src/main/yang/packetcable-provider-impl.yang @@ -0,0 +1,89 @@ +module packetcable-provider-impl { + + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:controller:config:packetcable-provider:impl"; + prefix "packetcable-provider-impl"; + + import config { prefix config; revision-date 2013-04-05; } + import rpc-context { prefix rpcx; revision-date 2013-06-17; } + import opendaylight-md-sal-binding { prefix mdsal; revision-date 2013-10-28; } + import ietf-inet-types {prefix inet;revision-date 2010-09-24;} + + description + "This module contains the base YANG definitions for + packetcable-provider impl implementation."; + + revision "2014-01-31" { + description + "Initial revision."; + } + + // This is the definition of the service implementation as a module identity. + identity packetcable-provider-impl { + base config:module-type; + + // Specifies the prefix for generated java classes. + config:java-name-prefix PacketcableProvider; + } + + // Augments the 'configuration' choice node under modules/module. + augment "/config:modules/config:module/config:configuration" { + case packetcable-provider-impl { + when "/config:modules/config:module/config:type = 'packetcable-provider-impl'"; + + container rpc-registry { + uses config:service-ref { + refine type { + mandatory true; + config:required-identity mdsal:binding-rpc-registry; + } + } + } + + container notification-service { + uses config:service-ref { + refine type { + mandatory true; + config:required-identity mdsal:binding-notification-service; + } + } + } + + container data-broker { + uses config:service-ref { + refine type { + mandatory false; + config:required-identity mdsal:binding-async-data-broker; + } + } + } + } + } + + augment "/config:modules/config:module/config:state" { + case packetcable-provider-impl { + when "/config:modules/config:module/config:type = 'packetcable-provider-impl'"; + + leaf connection-state { + type boolean; + } + + rpcx:rpc-context-instance "close-cmts-connection-rpc"; + } + } + + identity close-cmts-connection-rpc; + + rpc close-cmts-connection { + description + "JMX call to close the cmts connection."; + + input { + uses rpcx:rpc-context-ref { + refine context-instance { + rpcx:rpc-context-instance close-cmts-connection-rpc; + } + } + } + } +} diff --git a/pom.xml b/pom.xml index e9a6513..74bfbeb 100644 --- a/pom.xml +++ b/pom.xml @@ -1,313 +1,75 @@ - - 4.0.0 - - org.opendaylight.controller - commons.opendaylight - 1.4.2-SNAPSHOT - - pom - org.opendaylight.packetcable - packetcable-parent - 1.0.0-SNAPSHOT + + 4.0.0 + + org.opendaylight.controller + sal-parent + 1.1-SNAPSHOT + - - UTF-8 - http://nexus.opendaylight.org/content - 0.6.2-SNAPSHOT - 2.3.7 - dav:http://nexus.opendaylight.org/content/sites/site - 1.7 - 1.7 - 2.5.1 - 1.1-SNAPSHOT - 3.8.1.v20120830-144521 - 2010.09.24.4-SNAPSHOT - 2010.09.24.4-SNAPSHOT - 3.1.3.RELEASE - 1.9.10 - src/main/yang-gen-config - src/main/yang-gen-sal - 0.2.5-SNAPSHOT - 1.1-SNAPSHOT - + org.opendaylight.controller.packetcable + packetcable-plugin + pom - - 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 - HEAD - - - - - - opendaylight-mirror - opendaylight-mirror - ${nexusproxy}/groups/public/ - - false - - - true - never - - - - - opendaylight-snapshot - opendaylight-snapshot - ${nexusproxy}/repositories/opendaylight.snapshot/ - - true - - - false - - - - - - - - opendaylight-mirror - opendaylight-mirror - ${nexusproxy}/groups/public/ - - false - - - true - never - - - - - opendaylight-snapshot - opendaylight-snapshot - ${nexusproxy}/repositories/opendaylight.snapshot/ - - true - - - false - - - - - - - - opendaylight-release - ${nexusproxy}/repositories/opendaylight.release/ - - - - opendaylight-snapshot - ${nexusproxy}/repositories/opendaylight.snapshot/ - - - - website - ${sitedeploy} - - - - - - - - + + packetcable-model + packetcable-consumer + packetcable-provider + + + scm:git:ssh://git.opendaylight.org:29418/controller.git + scm:git:ssh://git.opendaylight.org:29418/controller.git + HEAD + https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL + + + + org.opendaylight.controller.model + model-flow-base + + + org.opendaylight.controller.model + model-flow-service + + + org.opendaylight.yangtools.model + ietf-inet-types + + + org.opendaylight.yangtools.model + ietf-yang-types + + + org.opendaylight.controller.model + model-inventory + + + org.opendaylight.yangtools.model + opendaylight-l2-types + + + + + maven-checkstyle-plugin true - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven.compile.plugin.version} - - ${java.version.source} - ${java.version.target} - - - - - org.codehaus.mojo - build-helper-maven-plugin - 1.8 - - - add-source - - add-source - - generate-sources - - - src/main/yang - ${jmxGeneratorPath} - ${salGeneratorPath} - - - - - - - - maven-clean-plugin - - - - ${jmxGeneratorPath} - - ** - - - - ${salGeneratorPath} - - ** - - - - + + - - - org.eclipse.m2e - lifecycle-mapping - 1.0.0 - - - - - - org.codehaus.mojo - properties-maven-plugin - [0.0,) - - set-system-properties - - - - - - - - - org.codehaus.enunciate - maven-enunciate-plugin - [0.0,) - - docs - - - - - - - - - org.jacoco - jacoco-maven-plugin - [0.0,) - - prepare-agent - pre-test - post-test - - - - - - - - - org.ops4j.pax.exam - maven-paxexam-plugin - [1.2.4,) - - generate-depends-file - - - - - false - - - - - - org.apache.maven.plugins - maven-checkstyle-plugin - [2.0,) - - check - - - - - - - - - org.opendaylight.yangtools - yang-maven-plugin - [0.5,) - - generate-sources - - - - - - - - - org.codehaus.groovy.maven - gmaven-plugin - 1.0 - - execute - - - - - - - - - org.apache.maven.plugins - maven-enforcer-plugin - ${enforcer.version} - - enforce - - - - - - - - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - - - protocol_plugins.packetcable - packetcable-model - - + + + + + + + + + + + + -- 2.36.6