Created pcep-capability indentity in exchange for factory of stateful07 session proposal.
PCEPCapability is implemented for stateful07 as PCEPStatefulCapability and for segment
routing as PCEPSegmentRoutingCapability.
Capabilities are add via TLVs to Open message.
Code preparation for including LS DB version number in Open message.
Unit tests updates and corretion of other influenced code.
Change-Id: Id9a6cf7f6cd24823430084dcaf10f60a70ea42f2
Signed-off-by: Milos Fabian <milfabia@cisco.com>
Signed-off-by: Iveta Halanova <iveta.halanova@pantheon.sk>
--- /dev/null
+/*
+ * 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
+ */
+package org.opendaylight.protocol.pcep;
+
+import java.net.InetSocketAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder;
+
+/**
+ * Stores usability for available capabilities
+ */
+public interface PCEPCapability {
+
+ /**
+ * Sets stateful capabilities tlv in incoming builder
+ *
+ * @param address
+ * @param builder for TLVs included in PCEPOpenObject
+ */
+ void setCapabilityProposal(InetSocketAddress address, TlvsBuilder builder);
+
+}
package org.opendaylight.protocol.pcep;
import io.netty.channel.ChannelFuture;
-
import java.net.InetSocketAddress;
-
import org.opendaylight.tcpmd5.api.KeyMapping;
/**
*
* @param address to be bound with the server
* @param listenerFactory to create listeners for clients
+ * @param peerProposal information used in our Open message
* @return instance of PCEPServer
*/
- ChannelFuture createServer(InetSocketAddress address, PCEPSessionListenerFactory listenerFactory);
+ ChannelFuture createServer(InetSocketAddress address, PCEPSessionListenerFactory listenerFactory, final PCEPPeerProposal peerProposal);
/**
* Creates server. Each server needs three factories to pass their instances to client sessions.
* @param address to be bound with the server
* @param keys RFC2385 key mapping
* @param listenerFactory to create listeners for clients
+ * @param peerProposal information used in our Open message
* @return instance of PCEPServer
*/
- ChannelFuture createServer(InetSocketAddress address, KeyMapping keys, PCEPSessionListenerFactory listenerFactory);
+ ChannelFuture createServer(InetSocketAddress address, KeyMapping keys, PCEPSessionListenerFactory listenerFactory, PCEPPeerProposal peerProposal);
}
--- /dev/null
+/*
+ * 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
+ */
+package org.opendaylight.protocol.pcep;
+
+import java.net.InetSocketAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder;
+
+/**
+ * Proposal from peer for establishment of PCEP session
+ */
+public interface PCEPPeerProposal {
+
+ /**
+ * Sets specific TLVs into incoming builder
+ *
+ * @param address
+ * @param openBuilder
+ */
+ void setPeerSpecificProposal(InetSocketAddress address, TlvsBuilder openBuilder);
+
+}
import io.netty.channel.Channel;
import io.netty.util.concurrent.Promise;
+/**
+ * Factory for creating PCEP session negotiator
+ *
+ * @param <S>
+ */
public interface PCEPSessionNegotiatorFactory<S extends PCEPSession> {
- SessionNegotiator getSessionNegotiator(PCEPSessionListenerFactory sessionListenerFactory, Channel channel, Promise<S> promise);
+
+ /**
+ * Creates PCEPSessionNegotiator instance for income attributes
+ *
+ * @param sessionListenerFactory
+ * @param channel
+ * @param promise
+ * @param peerProposal for including information from peer to our Open message
+ * @return PCEPSessionNegotiator instance
+ */
+ SessionNegotiator getSessionNegotiator(PCEPSessionListenerFactory sessionListenerFactory, Channel channel, Promise<S> promise, final PCEPPeerProposal peerProposal);
}
package org.opendaylight.protocol.pcep;
import java.net.InetSocketAddress;
-
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open;
/**
* @return specific session proposal
*/
Open getSessionProposal(InetSocketAddress address, int sessionId);
+
+ /**
+ *
+ * @param address serves as constraint, so that factory is able to return different proposals for different
+ * addresses
+ * @param sessionId is used for creation of PCEPOpenObject
+ * @param peerProposal for including information from peer to our Open message
+ * @return specific session proposal
+ */
+ Open getSessionProposal(InetSocketAddress address, int sessionId, PCEPPeerProposal peerProposal);
}
base "config:service-type";
config:java-class "org.opendaylight.protocol.pcep.PCEPSessionProposalFactory";
}
+
+ identity pcep-capability {
+ description "Service for storing usability of specific capabilities during
+ opened PCEP session.";
+ base "config:service-type";
+ config:java-class "org.opendaylight.protocol.pcep.PCEPCapability";
+ }
}
<name>pcep-parser-sync-optimizations</name>
</module>
<module>
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:pcep:impl">prefix:pcep-session-proposal-factory-impl</type>
- <name>global-pcep-session-proposal-factory</name>
+ <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:pcep:stateful07:cfg">prefix:stateful-capability</type>
+ <name>stateful-capability</name>
</module>
<module>
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:pcep:stateful07:cfg">prefix:pcep-session-proposal-factory-stateful07</type>
- <name>stateful07-prop</name>
+ <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:pcep:impl">prefix:pcep-session-proposal-factory-impl</type>
+ <name>global-pcep-session-proposal-factory</name>
+ <capability>
+ <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:pcep">prefix:pcep-capability</type>
+ <name>stateful-capability</name>
+ </capability>
</module>
<module>
<type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:pcep:impl">prefix:pcep-dispatcher-impl</type>
</pcep-extensions>
<pcep-session-proposal-factory>
<type xmlns:pcep="urn:opendaylight:params:xml:ns:yang:controller:pcep">pcep:pcep-session-proposal-factory</type>
- <name>stateful07-proposal</name>
+ <name>global-pcep-session-proposal-factory</name>
</pcep-session-proposal-factory>
<boss-group>
<type xmlns:netty="urn:opendaylight:params:xml:ns:yang:controller:netty">netty:netty-threadgroup</type>
</instance>
</service>
<service>
- <type xmlns:pcep="urn:opendaylight:params:xml:ns:yang:controller:pcep">pcep:pcep-session-proposal-factory</type>
+ <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:pcep">prefix:pcep-capability</type>
<instance>
- <name>stateful07-proposal</name>
- <provider>/config/modules/module[name='pcep-session-proposal-factory-stateful07']/instance[name='stateful07-prop']</provider>
+ <name>stateful-capability</name>
+ <provider>/config/modules/module[name='stateful-capability']/instance[name='stateful-capability']</provider>
</instance>
</service>
<provider>/config/modules/module[name='pcep-dispatcher-impl']/instance[name='global-pcep-dispatcher']</provider>
</instance>
</service>
+ <service>
+ <type xmlns:pcep="urn:opendaylight:params:xml:ns:yang:controller:pcep">pcep:pcep-session-proposal-factory</type>
+ <instance>
+ <name>global-pcep-session-proposal-factory</name>
+ <provider>/config/modules/module[name='pcep-session-proposal-factory-impl']/instance[name='global-pcep-session-proposal-factory']</provider>
+ </instance>
+ </service>
</services>
</data>
<name>pcep-parser-segment-routing</name>
</module>
<module>
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:pcep:sr:cfg">prefix:pcep-session-proposal-factory-sr</type>
- <name>pcep-session-proposal-factory-sr</name>
+ <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:pcep:sr:cfg">prefix:pcep-segment-routing-capability</type>
+ <name>pcep-segment-routing-capability</name>
</module>
<module>
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:pcep:impl">prefix:pcep-dispatcher-impl</type>
- <name>global-pcep-dispatcher</name>
- <pcep-extensions>
- <type xmlns:pcepspi="urn:opendaylight:params:xml:ns:yang:controller:pcep:spi">pcepspi:extensions</type>
- <name>global-pcep-extensions</name>
- </pcep-extensions>
- <pcep-session-proposal-factory>
- <type xmlns:pcep="urn:opendaylight:params:xml:ns:yang:controller:pcep">pcep:pcep-session-proposal-factory</type>
- <name>pcep-session-proposal-factory-sr</name>
- </pcep-session-proposal-factory>
- <boss-group>
- <type xmlns:netty="urn:opendaylight:params:xml:ns:yang:controller:netty">netty:netty-threadgroup</type>
- <name>global-boss-group</name>
- </boss-group>
- <worker-group>
- <type xmlns:netty="urn:opendaylight:params:xml:ns:yang:controller:netty">netty:netty-threadgroup</type>
- <name>global-worker-group</name>
- </worker-group>
+ <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:pcep:impl">prefix:pcep-session-proposal-factory-impl</type>
+ <name>global-pcep-session-proposal-factory</name>
+ <capability>
+ <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:pcep">prefix:pcep-capability</type>
+ <name>pcep-segment-routing-capability</name>
+ </capability>
</module>
</modules>
<services xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
</instance>
</service>
<service>
- <type xmlns:pcep="urn:opendaylight:params:xml:ns:yang:controller:pcep">pcep:pcep-session-proposal-factory</type>
+ <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:pcep">prefix:pcep-capability</type>
<instance>
- <name>pcep-session-proposal-factory-sr</name>
- <provider>/config/modules/module[name='pcep-session-proposal-factory-sr']/instance[name='pcep-session-proposal-factory-sr']</provider>
+ <name>pcep-segment-routing-capability</name>
+ <provider>/config/modules/module[name='pcep-segment-routing-capability']/instance[name='pcep-segment-routing-capability']</provider>
</instance>
</service>
</services>
--- /dev/null
+/*
+ * 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
+ */
+package org.opendaylight.controller.config.yang.pcep.stateful07.cfg;
+
+import com.google.common.base.Preconditions;
+import java.net.InetSocketAddress;
+import org.opendaylight.protocol.pcep.PCEPCapability;
+import org.opendaylight.protocol.pcep.ietf.stateful07.PCEPStatefulCapability;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder;
+
+public class PCEPStatefulCapabilityModule extends org.opendaylight.controller.config.yang.pcep.stateful07.cfg.AbstractPCEPStatefulCapabilityModule {
+
+ public PCEPStatefulCapabilityModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier,
+ final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
+ super(identifier, dependencyResolver);
+ }
+
+ public PCEPStatefulCapabilityModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier,
+ final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver,
+ final PCEPStatefulCapabilityModule oldModule, final java.lang.AutoCloseable oldInstance) {
+
+ super(identifier, dependencyResolver, oldModule, oldInstance);
+ }
+
+ @Override
+ protected void customValidation() {
+ if ((getActive() || getTriggeredInitialSync() || getTriggeredResync() || getDeltaLspSyncCapability() || getIncludeDbVersion()) && !getStateful()) {
+ setStateful(true);
+ }
+ if ((getTriggeredInitialSync() || getDeltaLspSyncCapability()) && !getIncludeDbVersion()) {
+ setIncludeDbVersion(true);
+ }
+ }
+
+ @Override
+ public java.lang.AutoCloseable createInstance() {
+ final PCEPStatefulCapability capabilityImpl = new PCEPStatefulCapability(getStateful(), getActive(), getInitiated(),
+ getTriggeredInitialSync(), getTriggeredResync(), getDeltaLspSyncCapability(), getIncludeDbVersion());
+ return new PCEPCapabilityImplCloseable(capabilityImpl);
+ }
+
+ private static final class PCEPCapabilityImplCloseable implements PCEPCapability, AutoCloseable {
+ private final PCEPStatefulCapability innerCapabilityImpl;
+ public PCEPCapabilityImplCloseable(final PCEPStatefulCapability capabilityImpl) {
+ this.innerCapabilityImpl = Preconditions.checkNotNull(capabilityImpl);
+ }
+ @Override
+ public void close() {
+ }
+ @Override
+ public void setCapabilityProposal(final InetSocketAddress address, final TlvsBuilder builder) {
+ this.innerCapabilityImpl.setCapabilityProposal(address, builder);
+ }
+ }
+}
/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
+ * 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,
*/
package org.opendaylight.controller.config.yang.pcep.stateful07.cfg;
-/**
- *
- */
-public class Stateful07PCEPSessionProposalFactoryModuleFactory extends
- org.opendaylight.controller.config.yang.pcep.stateful07.cfg.AbstractStateful07PCEPSessionProposalFactoryModuleFactory {
+public class PCEPStatefulCapabilityModuleFactory extends AbstractPCEPStatefulCapabilityModuleFactory {
}
+++ /dev/null
-/*
- * 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.config.yang.pcep.stateful07.cfg;
-
-import com.google.common.base.Preconditions;
-import java.net.InetSocketAddress;
-import org.opendaylight.controller.config.api.JmxAttributeValidationException;
-import org.opendaylight.protocol.pcep.PCEPSessionProposalFactory;
-import org.opendaylight.protocol.pcep.ietf.initiated00.Stateful07SessionProposalFactory;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- *
- */
-public final class Stateful07PCEPSessionProposalFactoryModule extends
- org.opendaylight.controller.config.yang.pcep.stateful07.cfg.AbstractStateful07PCEPSessionProposalFactoryModule {
- private static final Logger LOG = LoggerFactory.getLogger(Stateful07PCEPSessionProposalFactoryModule.class);
-
- private static final String VALUE_IS_NOT_SET = "value is not set.";
-
- private static final int DT_KA_RATIO = 4;
-
- public Stateful07PCEPSessionProposalFactoryModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier,
- final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
- super(identifier, dependencyResolver);
- }
-
- public Stateful07PCEPSessionProposalFactoryModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier,
- final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver,
- final Stateful07PCEPSessionProposalFactoryModule oldModule, final java.lang.AutoCloseable oldInstance) {
-
- super(identifier, dependencyResolver, oldModule, oldInstance);
- }
-
- @Override
- protected void customValidation() {
- JmxAttributeValidationException.checkNotNull(getActive(), VALUE_IS_NOT_SET, activeJmxAttribute);
- JmxAttributeValidationException.checkNotNull(getInitiated(), VALUE_IS_NOT_SET, initiatedJmxAttribute);
- JmxAttributeValidationException.checkNotNull(getDeadTimerValue(), VALUE_IS_NOT_SET, deadTimerValueJmxAttribute);
- JmxAttributeValidationException.checkNotNull(getKeepAliveTimerValue(), VALUE_IS_NOT_SET, keepAliveTimerValueJmxAttribute);
- JmxAttributeValidationException.checkNotNull(getTriggeredInitialSync(), VALUE_IS_NOT_SET, triggeredInitialSyncJmxAttribute);
- JmxAttributeValidationException.checkNotNull(getTriggeredResync(), VALUE_IS_NOT_SET, triggeredResyncJmxAttribute);
- JmxAttributeValidationException.checkNotNull(getDeltaLspSyncCapability(), VALUE_IS_NOT_SET, deltaLspSyncCapabilityJmxAttribute);
- JmxAttributeValidationException.checkNotNull(getIncludeDbVersion(), VALUE_IS_NOT_SET, includeDbVersionJmxAttribute);
- validateTimers();
- if ((getActive() || getTriggeredInitialSync() || getTriggeredResync() || getDeltaLspSyncCapability() || getIncludeDbVersion()) && !getStateful()) {
- setStateful(true);
- }
- if ((getTriggeredInitialSync() || getDeltaLspSyncCapability()) && !getIncludeDbVersion()) {
- setIncludeDbVersion(true);
- }
- JmxAttributeValidationException.checkNotNull(getStateful(), VALUE_IS_NOT_SET, statefulJmxAttribute);
- }
-
- private void validateTimers() {
- if (getKeepAliveTimerValue() != 0) {
- JmxAttributeValidationException.checkCondition(getKeepAliveTimerValue() >= 1, "minimum value is 1.",
- keepAliveTimerValueJmxAttribute);
- if (getDeadTimerValue() != 0 && (getDeadTimerValue() / getKeepAliveTimerValue() != DT_KA_RATIO)) {
- LOG.warn("DeadTimerValue should be 4 times greater than KeepAliveTimerValue");
- }
- }
- }
-
- @Override
- public java.lang.AutoCloseable createInstance() {
- final Stateful07SessionProposalFactory inner = new Stateful07SessionProposalFactory(getDeadTimerValue(), getKeepAliveTimerValue(), getStateful(), getActive(), getInitiated(),
- getTriggeredInitialSync(), getTriggeredResync(), getDeltaLspSyncCapability(), getIncludeDbVersion());
- return new PCEPSessionProposalFactoryCloseable(inner);
- }
-
- private static final class PCEPSessionProposalFactoryCloseable implements PCEPSessionProposalFactory, AutoCloseable {
- private final Stateful07SessionProposalFactory inner;
-
- public PCEPSessionProposalFactoryCloseable(final Stateful07SessionProposalFactory inner) {
- this.inner = Preconditions.checkNotNull(inner);
- }
-
- @Override
- public void close() {
- }
-
- @Override
- public Open getSessionProposal(final InetSocketAddress inetSocketAddress, final int sessionId) {
- return this.inner.getSessionProposal(inetSocketAddress, sessionId);
- }
- }
-}
/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
+ * 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
*/
-package org.opendaylight.protocol.pcep.ietf.initiated00;
+package org.opendaylight.protocol.pcep.ietf.stateful07;
import java.net.InetSocketAddress;
-import org.opendaylight.protocol.pcep.impl.BasePCEPSessionProposalFactory;
+import org.opendaylight.protocol.pcep.PCEPCapability;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Stateful1;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Stateful1Builder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.StatefulBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder;
-public class Stateful07SessionProposalFactory extends BasePCEPSessionProposalFactory {
+public class PCEPStatefulCapability implements PCEPCapability {
private final boolean stateful, active, instant, triggeredSync, triggeredResync, deltaLspSync, includeDbVersion;
- public Stateful07SessionProposalFactory(final int deadTimer, final int keepAlive, final boolean stateful, final boolean active,
- final boolean instant, final boolean triggeredSync, final boolean triggeredResync, final boolean deltaLspSync, final boolean includeDbVersion) {
- super(deadTimer, keepAlive);
+ public PCEPStatefulCapability(final boolean stateful, final boolean active, final boolean instant,
+ final boolean triggeredSync, final boolean triggeredResync, final boolean deltaLspSync, final boolean includeDbVersion){
this.stateful = stateful;
this.active = active;
this.instant = instant;
}
@Override
- protected void addTlvs(final InetSocketAddress address, final TlvsBuilder builder) {
- if (Stateful07SessionProposalFactory.this.stateful) {
+ public void setCapabilityProposal(final InetSocketAddress address, final TlvsBuilder builder) {
+ if (this.stateful) {
builder.addAugmentation(
- Tlvs1.class,
- new Tlvs1Builder().setStateful(
- new StatefulBuilder().setLspUpdateCapability(this.active)
- .addAugmentation(Stateful1.class, new Stateful1Builder().setInitiation(this.instant).build())
- .addAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Stateful1.class, new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Stateful1Builder()
- .setTriggeredInitialSync(this.triggeredSync)
- .setTriggeredResync(this.triggeredResync)
- .setDeltaLspSyncCapability(this.deltaLspSync)
- .setIncludeDbVersion(this.includeDbVersion)
- .build())
- .build()).build()).build();
+ Tlvs1.class, new Tlvs1Builder()
+ .setStateful( new StatefulBuilder().setLspUpdateCapability(this.active)
+ .addAugmentation(Stateful1.class, new Stateful1Builder().setInitiation(this.instant).build())
+ .addAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Stateful1.class, new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Stateful1Builder()
+ .setTriggeredInitialSync(this.triggeredSync)
+ .setTriggeredResync(this.triggeredResync)
+ .setDeltaLspSyncCapability(this.deltaLspSync)
+ .setIncludeDbVersion(this.includeDbVersion)
+ .build())
+ .build())
+ .build());
}
}
"Updated revision dates for imports.";
}
- identity pcep-session-proposal-factory-stateful07 {
+ identity stateful-capability {
base config:module-type;
- config:java-name-prefix "Stateful07PCEPSessionProposalFactory";
- config:provided-service pcep:pcep-session-proposal-factory;
+ config:java-name-prefix "PCEPStatefulCapability";
+ config:provided-service pcep:pcep-capability;
}
grouping stateful-capabilities {
}
augment "/config:modules/config:module/config:configuration" {
- case pcep-session-proposal-factory-stateful07 {
- when "/config:modules/config:module/config:type = 'pcep-session-proposal-factory-stateful07'";
+ case stateful-capability {
+ when "/config:modules/config:module/config:type = 'stateful-capability'";
uses stateful-capabilities;
}
}
--- /dev/null
+/*
+ * 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
+ */
+package org.opendaylight.protocol.pcep.ietf;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.ObjectName;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.controller.config.api.jmx.CommitStatus;
+import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
+import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
+import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
+import org.opendaylight.controller.config.yang.pcep.stateful07.cfg.PCEPStatefulCapabilityModuleFactory;
+import org.opendaylight.controller.config.yang.pcep.stateful07.cfg.PCEPStatefulCapabilityModuleMXBean;
+
+public class PCEPStatefulCapabilityModuleTest extends AbstractConfigTest {
+
+ private static final String INSTANCE_NAME = "stateful-capability";
+ private static final String FACTORY_NAME = PCEPStatefulCapabilityModuleFactory.NAME;
+
+ @Before
+ public void setUp() throws Exception {
+ super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(this.mockedContext, new PCEPStatefulCapabilityModuleFactory()));
+ }
+
+ @Test
+ public void testStatefulAfterCommitted() throws Exception {
+ createInstance(false, true, true, true, false, true, true);
+ final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
+ final PCEPStatefulCapabilityModuleMXBean mxBean = transaction.newMXBeanProxy(transaction.lookupConfigBean(
+ FACTORY_NAME, INSTANCE_NAME), PCEPStatefulCapabilityModuleMXBean.class);
+ assertTrue(mxBean.getStateful());
+ }
+
+ @Test
+ public void testNotStatefulAfterCommitted() throws Exception {
+ createInstance(false, false, false, false, false, false, false);
+ final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
+ final PCEPStatefulCapabilityModuleMXBean mxBean = transaction.newMXBeanProxy(transaction.lookupConfigBean(
+ FACTORY_NAME, INSTANCE_NAME), PCEPStatefulCapabilityModuleMXBean.class);
+ assertFalse(mxBean.getStateful());
+ }
+
+ @Test
+ public void testIncludeDbVersionAfterCommitted() throws Exception {
+ createInstance(false, false, false, false, false, true, false);
+ final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
+ final PCEPStatefulCapabilityModuleMXBean mxBean = transaction.newMXBeanProxy(transaction.lookupConfigBean(
+ FACTORY_NAME, INSTANCE_NAME), PCEPStatefulCapabilityModuleMXBean.class);
+ assertTrue(mxBean.getIncludeDbVersion());
+ }
+
+ @Test
+ public void testNotIncludeDbVersionAfterCommitted() throws Exception {
+ createInstance(false, false, false, false, false, false, false);
+ final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
+ final PCEPStatefulCapabilityModuleMXBean mxBean = transaction.newMXBeanProxy(transaction.lookupConfigBean(
+ FACTORY_NAME, INSTANCE_NAME), PCEPStatefulCapabilityModuleMXBean.class);
+ assertFalse(mxBean.getIncludeDbVersion());
+ }
+
+ @Test
+ public void testCreateBean() throws Exception {
+ final CommitStatus status = createInstance();
+ assertBeanCount(1, FACTORY_NAME);
+ assertStatus(status, 1, 0, 0);
+ }
+
+ @Test
+ public void testReusingOldInstance() throws Exception {
+ createInstance();
+ final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
+ assertBeanCount(1, FACTORY_NAME);
+ final CommitStatus status = transaction.commit();
+ assertBeanCount(1, FACTORY_NAME);
+ assertStatus(status, 0, 0, 1);
+ }
+
+ @Test
+ public void testReconfigure() throws Exception {
+ createInstance();
+ final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
+ assertBeanCount(1, FACTORY_NAME);
+ transaction.newMXBeanProxy(transaction.lookupConfigBean(FACTORY_NAME, INSTANCE_NAME),
+ PCEPStatefulCapabilityModuleMXBean.class);
+ final CommitStatus status = transaction.commit();
+ assertBeanCount(1, FACTORY_NAME);
+ assertStatus(status, 0, 0, 1);
+ }
+
+ private CommitStatus createInstance(final Boolean stateful, final Boolean active, final Boolean instant,
+ final Boolean triggeredInitialSync, final Boolean triggeredResync, final Boolean deltaLspSyncCapability,
+ final Boolean includeDbVersion) throws Exception {
+ final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
+ createInstance(transaction, stateful, active, instant, triggeredInitialSync, triggeredResync, deltaLspSyncCapability, includeDbVersion);
+ return transaction.commit();
+ }
+
+ private CommitStatus createInstance() throws Exception {
+ final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
+ createPCEPCapabilityInstance(transaction);
+ return transaction.commit();
+ }
+
+ public static ObjectName createPCEPCapabilityInstance(final ConfigTransactionJMXClient transaction) throws Exception {
+ return createInstance(transaction, true, true, true, true, true, true, true);
+ }
+
+ private static ObjectName createInstance(final ConfigTransactionJMXClient transaction, final Boolean stateful, final Boolean active, final Boolean instant,
+ final Boolean triggeredInitialSync, final Boolean triggeredResync, final Boolean deltaLspSyncCapability, final Boolean includeDbVersion) throws InstanceAlreadyExistsException {
+ final ObjectName nameCreated = transaction.createModule(FACTORY_NAME, INSTANCE_NAME);
+ final PCEPStatefulCapabilityModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated,
+ PCEPStatefulCapabilityModuleMXBean.class);
+ mxBean.setActive(active);
+ mxBean.setInitiated(instant);
+ mxBean.setStateful(stateful);
+ mxBean.setTriggeredInitialSync(triggeredInitialSync);
+ mxBean.setTriggeredResync(triggeredResync);
+ mxBean.setDeltaLspSyncCapability(deltaLspSyncCapability);
+ mxBean.setIncludeDbVersion(includeDbVersion);
+ return nameCreated;
+ }
+}
/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
+ * 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
*/
-
package org.opendaylight.protocol.pcep.ietf;
import org.junit.Assert;
import org.junit.Test;
-import org.opendaylight.protocol.pcep.ietf.initiated00.Stateful07SessionProposalFactory;
+import org.opendaylight.protocol.pcep.ietf.stateful07.PCEPStatefulCapability;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Stateful1;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Stateful1Builder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1Builder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.StatefulBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.Tlvs;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder;
-public class Stateful07SessionProposalFactoryTest {
+public class PCEPStatefulCapabilityTest {
- private static final int DEAD_TIMER = 4;
- private static final int KEEP_ALIVE = 1;
- private static final int SESSION_ID = 1;
- private static final Open OPEN_MSG = new OpenBuilder()
- .setDeadTimer((short) DEAD_TIMER)
- .setKeepalive((short) KEEP_ALIVE)
- .setSessionId((short) SESSION_ID)
- .setTlvs(new TlvsBuilder()
- .addAugmentation(Tlvs1.class, new Tlvs1Builder().setStateful(new StatefulBuilder()
+ private static final Tlvs EXPECTED_TLVS =
+ new TlvsBuilder().addAugmentation(
+ Tlvs1.class, new Tlvs1Builder()
+ .setStateful( new StatefulBuilder().setLspUpdateCapability(true)
.addAugmentation(Stateful1.class, new Stateful1Builder().setInitiation(true).build())
.addAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Stateful1.class, new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Stateful1Builder()
.setTriggeredInitialSync(true)
.setDeltaLspSyncCapability(true)
.setIncludeDbVersion(false)
.build())
- .setLspUpdateCapability(true).build()).build())
+ .build())
.build())
.build();
@Test
- public void testStateful07SessionProposalFactory() {
- final Stateful07SessionProposalFactory sspf = new Stateful07SessionProposalFactory(DEAD_TIMER, KEEP_ALIVE, true, true, true, true, false, true, false);
- Assert.assertEquals(DEAD_TIMER, sspf.getDeadTimer());
- Assert.assertEquals(KEEP_ALIVE, sspf.getKeepAlive());
+ public void testPCEPStatefulCapability() {
+ final PCEPStatefulCapability sspf = new PCEPStatefulCapability(true, true, true, true, false, true, false);
Assert.assertTrue(sspf.isActive());
Assert.assertTrue(sspf.isInstant());
Assert.assertTrue(sspf.isStateful());
Assert.assertTrue(sspf.isTriggeredSync());
Assert.assertTrue(sspf.isDeltaLspSync());
Assert.assertFalse(sspf.isIncludeDbVersion());
- Assert.assertEquals(OPEN_MSG, sspf.getSessionProposal(null, SESSION_ID));
+ final TlvsBuilder builder = new TlvsBuilder();
+ sspf.setCapabilityProposal(null, builder);
+ Assert.assertEquals(EXPECTED_TLVS, builder.build());
}
}
+++ /dev/null
-/*
- * 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.protocol.pcep.ietf;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.ObjectName;
-import org.junit.Before;
-import org.junit.Test;
-import org.opendaylight.controller.config.api.ValidationException;
-import org.opendaylight.controller.config.api.jmx.CommitStatus;
-import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
-import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
-import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
-import org.opendaylight.controller.config.yang.pcep.stateful07.cfg.Stateful07PCEPSessionProposalFactoryModuleFactory;
-import org.opendaylight.controller.config.yang.pcep.stateful07.cfg.Stateful07PCEPSessionProposalFactoryModuleMXBean;
-
-public class Stateful07SessionProposalFactoryModuleTest extends AbstractConfigTest {
-
- private static final String INSTANCE_NAME = "pcep-stateful07-proposal";
- private static final String FACTORY_NAME = Stateful07PCEPSessionProposalFactoryModuleFactory.NAME;
-
- @Before
- public void setUp() throws Exception {
- super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(this.mockedContext, new Stateful07PCEPSessionProposalFactoryModuleFactory()));
- }
-
- @Test
- public void testValidationExceptionDeadTimerValueNotSet() throws Exception {
- try {
- createInstance(null, (short) 100, true, true, true, true, true, true, true);
- fail();
- } catch (final ValidationException e) {
- assertTrue(e.getMessage().contains("DeadTimerValue value is not set"));
- }
- }
-
- @Test
- public void testValidationExceptionKeepAliveTimerNotSet() throws Exception {
- try {
- createInstance((short) 200, null, true, true, true, true, true, true, true);
- fail();
- } catch (final ValidationException e) {
- assertTrue(e.getMessage().contains("KeepAliveTimerValue value is not set"));
- }
- }
-
- @Test
- public void testValidationExceptionStatefulNotSet() throws Exception {
- try {
- createInstance((short) 200, (short) 100, null, false, false, false, false, false, false);
- fail();
- } catch (final ValidationException e) {
- assertTrue(e.getMessage().contains("Stateful value is not set"));
- }
- }
-
- @Test
- public void testValidationExceptionActiveNotSet() throws Exception {
- try {
- createInstance((short) 200, (short) 100, true, null, true, true, true, true, true);
- fail();
- } catch (final ValidationException e) {
- assertTrue(e.getMessage().contains("Active value is not set"));
- }
- }
-
- @Test
- public void testValidationExceptionInstantiatedNotSet() throws Exception {
- try {
- createInstance((short) 200, (short) 100, true, true, null, true, true, true, true);
- fail();
- } catch (final ValidationException e) {
- assertTrue(e.getMessage().contains("Initiated value is not set"));
- }
- }
-
- @Test
- public void testValidationExceptionTriggeredSyncNotSet() throws Exception {
- try {
- createInstance((short) 200, (short) 100, true, true, true, null, true, true, true);
- fail();
- } catch (final ValidationException e) {
- assertTrue(e.getMessage().contains("TriggeredInitialSync value is not set"));
- }
- }
-
- @Test
- public void testValidationExceptionTriggeredResyncNotSet() throws Exception {
- try {
- createInstance((short) 200, (short) 100, true, true, true, true, null, true, true);
- fail();
- } catch (final ValidationException e) {
- assertTrue(e.getMessage().contains("TriggeredResync value is not set"));
- }
- }
-
- @Test
- public void testValidationExceptionDeltaLspSyncNotSet() throws Exception {
- try {
- createInstance((short) 200, (short) 100, true, true, true, true, true, null, true);
- fail();
- } catch (final ValidationException e) {
- assertTrue(e.getMessage().contains("DeltaLspSyncCapability value is not set"));
- }
- }
-
- @Test
- public void testValidationExceptionIncludeDBVersionNotSet() throws Exception {
- try {
- createInstance((short) 200, (short) 100, true, true, true, true, true, true, null);
- fail();
- } catch (final ValidationException e) {
- assertTrue(e.getMessage().contains("IncludeDbVersion value is not set"));
- }
- }
-
- @Test
- public void testValidationExceptionKeepAliveTimerMinValue() throws Exception {
- try {
- createInstance((short) 200, (short) -10, true, true, true, true, true, true, true);
- fail();
- } catch (final ValidationException e) {
- assertTrue(e.getMessage().contains("minimum value is 1."));
- }
- }
-
- @Test
- public void testStatefulAfterCommitted() throws Exception {
- createInstance((short) 200, (short) 100, false, true, true, true, false, true, true);
- final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
- final Stateful07PCEPSessionProposalFactoryModuleMXBean mxBean = transaction.newMXBeanProxy(transaction.lookupConfigBean(
- FACTORY_NAME, INSTANCE_NAME), Stateful07PCEPSessionProposalFactoryModuleMXBean.class);
- assertTrue(mxBean.getStateful());
- }
-
- @Test
- public void testNotStatefulAfterCommitted() throws Exception {
- createInstance((short) 200, (short) 100, false, false, false, false, false, false, false);
- final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
- final Stateful07PCEPSessionProposalFactoryModuleMXBean mxBean = transaction.newMXBeanProxy(transaction.lookupConfigBean(
- FACTORY_NAME, INSTANCE_NAME), Stateful07PCEPSessionProposalFactoryModuleMXBean.class);
- assertFalse(mxBean.getStateful());
- }
-
- @Test
- public void testIncludeDbVersionAfterCommitted() throws Exception {
- createInstance((short) 200, (short) 100, false, false, false, false, false, true, false);
- final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
- final Stateful07PCEPSessionProposalFactoryModuleMXBean mxBean = transaction.newMXBeanProxy(transaction.lookupConfigBean(
- FACTORY_NAME, INSTANCE_NAME), Stateful07PCEPSessionProposalFactoryModuleMXBean.class);
- assertTrue(mxBean.getIncludeDbVersion());
- }
-
- @Test
- public void testNotIncludeDbVersionAfterCommitted() throws Exception {
- createInstance((short) 200, (short) 100, false, false, false, false, false, false, false);
- final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
- final Stateful07PCEPSessionProposalFactoryModuleMXBean mxBean = transaction.newMXBeanProxy(transaction.lookupConfigBean(
- FACTORY_NAME, INSTANCE_NAME), Stateful07PCEPSessionProposalFactoryModuleMXBean.class);
- assertFalse(mxBean.getIncludeDbVersion());
- }
-
- @Test
- public void testCreateBean() throws Exception {
- final CommitStatus status = createInstance();
- assertBeanCount(1, FACTORY_NAME);
- assertStatus(status, 1, 0, 0);
- }
-
- @Test
- public void testReusingOldInstance() throws Exception {
- createInstance();
- final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
- assertBeanCount(1, FACTORY_NAME);
- final CommitStatus status = transaction.commit();
- assertBeanCount(1, FACTORY_NAME);
- assertStatus(status, 0, 0, 1);
- }
-
- @Test
- public void testReconfigure() throws Exception {
- createInstance();
- final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
- assertBeanCount(1, FACTORY_NAME);
- transaction.newMXBeanProxy(transaction.lookupConfigBean(FACTORY_NAME, INSTANCE_NAME),
- Stateful07PCEPSessionProposalFactoryModuleMXBean.class);
- final CommitStatus status = transaction.commit();
- assertBeanCount(1, FACTORY_NAME);
- assertStatus(status, 0, 0, 1);
- }
-
- private CommitStatus createInstance(final Short deadTimer, final Short keepAlive, final Boolean stateful, final Boolean active,
- final Boolean instant, final Boolean triggeredInitialSync, final Boolean triggeredResync, final Boolean deltaLspSyncCapability, final Boolean includeDbVersion) throws Exception {
- final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
- createInstance(transaction, deadTimer, keepAlive, stateful, active, instant, triggeredInitialSync, triggeredResync, deltaLspSyncCapability, includeDbVersion);
- return transaction.commit();
- }
-
- private CommitStatus createInstance() throws Exception {
- final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
- createStateful07SessionProposalInstance(transaction);
- return transaction.commit();
- }
-
- public static ObjectName createStateful07SessionProposalInstance(final ConfigTransactionJMXClient transaction) throws Exception {
- return createInstance(transaction, (short) 200, (short) 100, true, true, true, true, true, true, true);
- }
-
- private static ObjectName createInstance(final ConfigTransactionJMXClient transaction, final Short deadTimer, final Short keepAlive,
- final Boolean stateful, final Boolean active, final Boolean instant,
- final Boolean triggeredInitialSync, final Boolean triggeredResync, final Boolean deltaLspSyncCapability, final Boolean includeDbVersion) throws InstanceAlreadyExistsException {
- final ObjectName nameCreated = transaction.createModule(FACTORY_NAME, INSTANCE_NAME);
- final Stateful07PCEPSessionProposalFactoryModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated,
- Stateful07PCEPSessionProposalFactoryModuleMXBean.class);
- mxBean.setActive(active);
- mxBean.setDeadTimerValue(deadTimer);
- mxBean.setInitiated(instant);
- mxBean.setKeepAliveTimerValue(keepAlive);
- mxBean.setStateful(stateful);
- mxBean.setTriggeredInitialSync(triggeredInitialSync);
- mxBean.setTriggeredResync(triggeredResync);
- mxBean.setDeltaLspSyncCapability(deltaLspSyncCapability);
- mxBean.setIncludeDbVersion(includeDbVersion);
- return nameCreated;
- }
-
-}
import org.opendaylight.controller.config.api.JmxAttributeValidationException;
import org.opendaylight.protocol.pcep.impl.DefaultPCEPSessionNegotiatorFactory;
import org.opendaylight.protocol.pcep.impl.PCEPDispatcherImpl;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open;
/**
*
@Override
public java.lang.AutoCloseable createInstance() {
- Open localPrefs = getPcepSessionProposalFactoryDependency().getSessionProposal(null, 0);
- DefaultPCEPSessionNegotiatorFactory negFactory = new DefaultPCEPSessionNegotiatorFactory(localPrefs, getMaxUnknownMessages(), getTls());
+ final DefaultPCEPSessionNegotiatorFactory negFactory = new DefaultPCEPSessionNegotiatorFactory(getPcepSessionProposalFactoryDependency(), getMaxUnknownMessages(), getTls());
return new PCEPDispatcherImpl(getPcepExtensionsDependency().getMessageHandlerRegistry(), negFactory, getBossGroupDependency(), getWorkerGroupDependency(), getMd5ServerChannelFactoryDependency());
}
import java.net.InetSocketAddress;
import org.opendaylight.controller.config.api.JmxAttributeValidationException;
+import org.opendaylight.protocol.pcep.PCEPPeerProposal;
import org.opendaylight.protocol.pcep.PCEPSessionProposalFactory;
import org.opendaylight.protocol.pcep.impl.BasePCEPSessionProposalFactory;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open;
@Override
public java.lang.AutoCloseable createInstance() {
- final BasePCEPSessionProposalFactory inner = new BasePCEPSessionProposalFactory(getDeadTimerValue(), getKeepAliveTimerValue());
+ final BasePCEPSessionProposalFactory inner = new BasePCEPSessionProposalFactory(getDeadTimerValue(), getKeepAliveTimerValue(), getCapabilityDependency());
return new PCEPSessionProposalFactoryCloseable(inner);
}
public Open getSessionProposal(final InetSocketAddress inetSocketAddress, final int i) {
return this.inner.getSessionProposal(inetSocketAddress, i);
}
+
+ @Override
+ public Open getSessionProposal(final InetSocketAddress address,
+ final int sessionId, final PCEPPeerProposal peerProposal) {
+ return this.inner.getSessionProposal(address, sessionId, peerProposal);
+ }
}
}
import io.netty.channel.Channel;
import io.netty.util.concurrent.Promise;
+import org.opendaylight.protocol.pcep.PCEPPeerProposal;
import org.opendaylight.protocol.pcep.PCEPSessionListener;
import org.opendaylight.protocol.pcep.PCEPSessionListenerFactory;
import org.opendaylight.protocol.pcep.PCEPSessionNegotiatorFactory;
private static final Logger LOG = LoggerFactory.getLogger(AbstractPCEPSessionNegotiatorFactory.class);
- private PCEPPeerRegistry sessionRegistry = new PCEPPeerRegistry();
+ private final PCEPPeerRegistry sessionRegistry = new PCEPPeerRegistry();
/**
* Create a new negotiator. This method needs to be implemented by subclasses to actually provide a negotiator.
* @return a PCEP session negotiator
*/
protected abstract AbstractPCEPSessionNegotiator createNegotiator(Promise<PCEPSessionImpl> promise, PCEPSessionListener listener,
- Channel channel, short sessionId);
+ Channel channel, short sessionId, final PCEPPeerProposal peerProposal);
@Override
public final SessionNegotiator getSessionNegotiator(final PCEPSessionListenerFactory factory,
- final Channel channel, final Promise<PCEPSessionImpl> promise) {
+ final Channel channel, final Promise<PCEPSessionImpl> promise, final PCEPPeerProposal peerProposal) {
LOG.debug("Instantiating bootstrap negotiator for channel {}", channel);
- return new PCEPSessionNegotiator(channel, promise, factory, this);
+ return new PCEPSessionNegotiator(channel, promise, factory, this, peerProposal);
}
public PCEPPeerRegistry getSessionRegistry() {
package org.opendaylight.protocol.pcep.impl;
import java.net.InetSocketAddress;
+import java.util.List;
+import org.opendaylight.protocol.pcep.PCEPCapability;
+import org.opendaylight.protocol.pcep.PCEPPeerProposal;
import org.opendaylight.protocol.pcep.PCEPSessionProposalFactory;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder;
-public class BasePCEPSessionProposalFactory implements PCEPSessionProposalFactory {
+final public class BasePCEPSessionProposalFactory implements PCEPSessionProposalFactory {
private final int keepAlive, deadTimer;
+ private final List<PCEPCapability> capabilities;
- public BasePCEPSessionProposalFactory(final int deadTimer, final int keepAlive) {
+ public BasePCEPSessionProposalFactory(final int deadTimer, final int keepAlive, final List<PCEPCapability> capabilities) {
this.deadTimer = deadTimer;
this.keepAlive = keepAlive;
+ this.capabilities = capabilities;
}
- protected void addTlvs(final InetSocketAddress address, final TlvsBuilder builder) {
- // No TLVs by default
+ private void addTlvs(final InetSocketAddress address, final TlvsBuilder builder) {
+ for (final PCEPCapability capability : this.capabilities) {
+ capability.setCapabilityProposal(address, builder);
+ }
}
@Override
public final Open getSessionProposal(final InetSocketAddress address, final int sessionId) {
+ return getSessionProposal(address, sessionId, null);
+ }
+
+ @Override
+ public Open getSessionProposal(final InetSocketAddress address, final int sessionId,
+ final PCEPPeerProposal peerProposal) {
final OpenBuilder oBuilder = new OpenBuilder();
oBuilder.setSessionId((short) sessionId);
oBuilder.setKeepalive((short) BasePCEPSessionProposalFactory.this.keepAlive);
}
final TlvsBuilder builder = new TlvsBuilder();
+ if (peerProposal != null) {
+ peerProposal.setPeerSpecificProposal(address, builder);
+ }
addTlvs(address, builder);
return oBuilder.setTlvs(builder.build()).build();
}
public final int getDeadTimer() {
return this.deadTimer;
}
+
}
import com.google.common.base.Preconditions;
import io.netty.channel.Channel;
import io.netty.util.concurrent.Promise;
+import java.net.InetSocketAddress;
import org.opendaylight.controller.config.yang.pcep.impl.Tls;
+import org.opendaylight.protocol.pcep.PCEPPeerProposal;
import org.opendaylight.protocol.pcep.PCEPSessionListener;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open;
+import org.opendaylight.protocol.pcep.PCEPSessionProposalFactory;
public final class DefaultPCEPSessionNegotiatorFactory extends AbstractPCEPSessionNegotiatorFactory {
- private final Open localPrefs;
+ private final PCEPSessionProposalFactory spf;
private final int maxUnknownMessages;
private final Tls tlsConfiguration;
- public DefaultPCEPSessionNegotiatorFactory(final Open localPrefs, final int maxUnknownMessages) {
- this(localPrefs, maxUnknownMessages, null);
+ public DefaultPCEPSessionNegotiatorFactory(final PCEPSessionProposalFactory spf, final int maxUnknownMessages) {
+ this(spf, maxUnknownMessages, null);
}
- public DefaultPCEPSessionNegotiatorFactory(final Open localPrefs, final int maxUnknownMessages, final Tls tlsConfiguration) {
- this.localPrefs = Preconditions.checkNotNull(localPrefs);
+ public DefaultPCEPSessionNegotiatorFactory(final PCEPSessionProposalFactory spf, final int maxUnknownMessages, final Tls tlsConfiguration) {
+ this.spf = Preconditions.checkNotNull(spf);
this.maxUnknownMessages = maxUnknownMessages;
this.tlsConfiguration = tlsConfiguration;
}
@Override
protected AbstractPCEPSessionNegotiator createNegotiator(final Promise<PCEPSessionImpl> promise, final PCEPSessionListener listener,
- final Channel channel, final short sessionId) {
- return new DefaultPCEPSessionNegotiator(promise, channel, listener, sessionId, this.maxUnknownMessages, this.localPrefs, this.tlsConfiguration);
+ final Channel channel, final short sessionId, final PCEPPeerProposal peerProposal) {
+ return new DefaultPCEPSessionNegotiator(promise, channel, listener, sessionId, this.maxUnknownMessages,
+ this.spf.getSessionProposal((InetSocketAddress)channel.remoteAddress(), sessionId, peerProposal), this.tlsConfiguration);
}
}
import java.io.Closeable;
import java.net.InetSocketAddress;
import org.opendaylight.protocol.pcep.PCEPDispatcher;
+import org.opendaylight.protocol.pcep.PCEPPeerProposal;
import org.opendaylight.protocol.pcep.PCEPSessionListenerFactory;
import org.opendaylight.protocol.pcep.PCEPSessionNegotiatorFactory;
import org.opendaylight.protocol.pcep.spi.MessageRegistry;
@Override
public synchronized ChannelFuture createServer(final InetSocketAddress address,
- final PCEPSessionListenerFactory listenerFactory) {
- return createServer(address, null, listenerFactory);
+ final PCEPSessionListenerFactory listenerFactory, final PCEPPeerProposal peerProposal) {
+ return createServer(address, null, listenerFactory, peerProposal);
}
@Override
public synchronized ChannelFuture createServer(final InetSocketAddress address, final KeyMapping keys,
- final PCEPSessionListenerFactory listenerFactory) {
+ final PCEPSessionListenerFactory listenerFactory, final PCEPPeerProposal peerProposal) {
this.keys = keys;
final ChannelPipelineInitializer initializer = new ChannelPipelineInitializer() {
@Override
public void initializeChannel(final SocketChannel ch, final Promise<PCEPSessionImpl> promise) {
ch.pipeline().addLast(PCEPDispatcherImpl.this.hf.getDecoders());
- ch.pipeline().addLast("negotiator", PCEPDispatcherImpl.this.snf.getSessionNegotiator(listenerFactory, ch, promise));
+ ch.pipeline().addLast("negotiator", PCEPDispatcherImpl.this.snf.getSessionNegotiator(listenerFactory, ch, promise, peerProposal));
ch.pipeline().addLast(PCEPDispatcherImpl.this.hf.getEncoders());
}
};
try {
b.channel(NioServerSocketChannel.class);
- } catch (IllegalStateException e) {
+ } catch (final IllegalStateException e) {
LOG.trace("Not overriding channelFactory on bootstrap {}", b, e);
}
- ChannelFuture f = b.bind(address);
+ final ChannelFuture f = b.bind(address);
LOG.debug("Initiated server {} at {}.", f, address);
this.keys = null;
import java.net.InetSocketAddress;
import java.util.Comparator;
import java.util.concurrent.ExecutionException;
+import org.opendaylight.protocol.pcep.PCEPPeerProposal;
import org.opendaylight.protocol.pcep.PCEPSessionListenerFactory;
import org.opendaylight.protocol.pcep.impl.PCEPPeerRegistry.SessionReference;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
private final PCEPSessionListenerFactory factory;
private final AbstractPCEPSessionNegotiatorFactory negFactory;
+ private final PCEPPeerProposal peerProposal;
public PCEPSessionNegotiator(final Channel channel, final Promise<PCEPSessionImpl> promise, final PCEPSessionListenerFactory factory,
- final AbstractPCEPSessionNegotiatorFactory negFactory) {
+ final AbstractPCEPSessionNegotiatorFactory negFactory, final PCEPPeerProposal peerProposal) {
super(promise, channel);
this.factory = factory;
this.negFactory = negFactory;
+ this.peerProposal = peerProposal;
}
+ @Override
protected void startNegotiation() throws ExecutionException {
final Object lock = this;
}
final Short sessionId = sessionReg.nextSession(clientAddress);
- final AbstractPCEPSessionNegotiator n = this.negFactory.createNegotiator(this.promise, this.factory.getSessionListener(), this.channel, sessionId);
+ final AbstractPCEPSessionNegotiator n = this.negFactory.createNegotiator(this.promise, this.factory.getSessionListener(),
+ this.channel, sessionId, this.peerProposal);
sessionReg.putSessionReference(clientAddress, new SessionReference() {
@Override
}
}
+ @Override
protected void handleMessage(final Message msg) {
throw new IllegalStateException("Bootstrap negotiator should have been replaced");
}
type uint8;
default 30;
}
+
+ list capability {
+ uses config:service-ref {
+ refine type {
+ mandatory true;
+ config:required-identity pcep:pcep-capability;
+ }
+ }
+ }
}
}
}
import io.netty.util.concurrent.Promise;
import java.net.InetSocketAddress;
import java.nio.channels.Channel;
+import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.ExecutionException;
import org.junit.After;
import org.junit.Assert;
import org.mockito.MockitoAnnotations;
import org.opendaylight.protocol.framework.NeverReconnectStrategy;
import org.opendaylight.protocol.framework.ReconnectStrategy;
+import org.opendaylight.protocol.pcep.PCEPCapability;
import org.opendaylight.protocol.pcep.PCEPSession;
import org.opendaylight.protocol.pcep.PCEPSessionListener;
import org.opendaylight.protocol.pcep.PCEPSessionListenerFactory;
import org.opendaylight.protocol.pcep.PCEPSessionNegotiatorFactory;
+import org.opendaylight.protocol.pcep.PCEPSessionProposalFactory;
import org.opendaylight.protocol.pcep.spi.MessageRegistry;
import org.opendaylight.protocol.pcep.spi.pojo.ServiceLoaderPCEPExtensionProviderContext;
import org.opendaylight.tcpmd5.api.KeyAccess;
import org.opendaylight.tcpmd5.api.KeyAccessFactory;
import org.opendaylight.tcpmd5.api.KeyMapping;
import org.opendaylight.tcpmd5.netty.MD5NioServerSocketChannelFactory;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder;
public class PCEPDispatcherImplTest {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- final Open open = new OpenBuilder().setSessionId((short) 0).setDeadTimer(DEAD_TIMER).setKeepalive(KEEP_ALIVE)
- .build();
+ final List<PCEPCapability> capList = new ArrayList<>();
+ final PCEPSessionProposalFactory sessionProposal = new BasePCEPSessionProposalFactory(DEAD_TIMER, KEEP_ALIVE, capList);
final EventLoopGroup eventLoopGroup = new NioEventLoopGroup();
final MessageRegistry msgReg = ServiceLoaderPCEPExtensionProviderContext.getSingletonInstance()
.getMessageHandlerRegistry();
- this.dispatcher = new PCEPDispatcherImpl(msgReg, new DefaultPCEPSessionNegotiatorFactory(open, 0),
+ this.dispatcher = new PCEPDispatcherImpl(msgReg, new DefaultPCEPSessionNegotiatorFactory(sessionProposal, 0),
eventLoopGroup, eventLoopGroup);
Mockito.doReturn("mockChannel").when(this.mockChannel).toString();
Mockito.doReturn(this.mockKeyAccess).when(this.kaf).getKeyAccess(Mockito.any(Channel.class));
final MD5NioServerSocketChannelFactory scf = new MD5NioServerSocketChannelFactory(this.kaf);
- final PCEPDispatcherImpl dispatcher2 = new PCEPDispatcherImpl(msgReg, new DefaultPCEPSessionNegotiatorFactory(open, 0), eventLoopGroup, eventLoopGroup, scf);
+ final PCEPDispatcherImpl dispatcher2 = new PCEPDispatcherImpl(msgReg, new DefaultPCEPSessionNegotiatorFactory(sessionProposal, 0), eventLoopGroup, eventLoopGroup, scf);
this.disp2Spy = Mockito.spy(dispatcher2);
- this.pccMock = new PCCMock(new DefaultPCEPSessionNegotiatorFactory(open, 0),
+ this.pccMock = new PCCMock(new DefaultPCEPSessionNegotiatorFactory(sessionProposal, 0),
new PCEPHandlerFactory(msgReg), new DefaultPromise<PCEPSessionImpl>(
GlobalEventExecutor.INSTANCE));
}
public PCEPSessionListener getSessionListener() {
return new SimpleSessionListener();
}
- });
+ }, null);
final PCEPSessionImpl session1 = (PCEPSessionImpl) this.pccMock.createClient(CLIENT1_ADDRESS,
new NeverReconnectStrategy(GlobalEventExecutor.INSTANCE, 500),
new PCEPSessionListenerFactory() {
public PCEPSessionListener getSessionListener() {
return new SimpleSessionListener();
}
- });
+ }, null);
final PCEPSessionImpl session1 = (PCEPSessionImpl) this.pccMock.createClient(CLIENT1_ADDRESS,
new NeverReconnectStrategy(GlobalEventExecutor.INSTANCE, 500),
new PCEPSessionListenerFactory() {
public PCEPSessionListener getSessionListener() {
return new SimpleSessionListener();
}
- });
+ }, null);
final PCEPSessionImpl session1 = (PCEPSessionImpl) this.pccMock.createClient(CLIENT1_ADDRESS,
new NeverReconnectStrategy(GlobalEventExecutor.INSTANCE, 500),
new PCEPSessionListenerFactory() {
public PCEPSessionListener getSessionListener() {
return new SimpleSessionListener();
}
- });
+ }, null);
Mockito.verify(this.disp2Spy).customizeBootstrap(Mockito.any(ServerBootstrap.class));
}
@Override
public void initializeChannel(final SocketChannel ch, final Promise promise) {
ch.pipeline().addLast(PCCMock.this.factory.getDecoders());
- ch.pipeline().addLast("negotiator", PCCMock.this.negotiatorFactory.getSessionNegotiator(listenerFactory, ch, promise));
+ ch.pipeline().addLast("negotiator", PCCMock.this.negotiatorFactory.getSessionNegotiator(listenerFactory, ch, promise, null));
ch.pipeline().addLast(PCCMock.this.factory.getEncoders());
}
});
}
- Future<PCEPSession> createClient(InetSocketAddress address, ReconnectStrategy strategy, final PCEPDispatcherImpl.ChannelPipelineInitializer initializer) {
- Bootstrap b = new Bootstrap();
+ Future<PCEPSession> createClient(final InetSocketAddress address, final ReconnectStrategy strategy, final PCEPDispatcherImpl.ChannelPipelineInitializer initializer) {
+ final Bootstrap b = new Bootstrap();
final PCEPProtocolSessionPromise p = new PCEPProtocolSessionPromise(this.executor, address, strategy, b);
(b.option(ChannelOption.SO_KEEPALIVE, Boolean.valueOf(true))).handler(new ChannelInitializer<SocketChannel>() {
@Override
- protected void initChannel(SocketChannel ch) {
+ protected void initChannel(final SocketChannel ch) {
initializer.initializeChannel(ch, p);
}
});
return p;
}
- private void setChannelFactory(Bootstrap b) {
+ private void setChannelFactory(final Bootstrap b) {
try {
b.channel(NioSocketChannel.class);
- } catch (IllegalStateException ignored) {
+ } catch (final IllegalStateException ignored) {
}
}
- private void setWorkerGroup(Bootstrap b) {
+ private void setWorkerGroup(final Bootstrap b) {
if (b.group() == null) {
b.group(this.workerGroup);
}
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ExecutionException;
import org.opendaylight.protocol.framework.ReconnectStrategy;
import org.opendaylight.protocol.framework.ReconnectStrategyFactory;
import org.opendaylight.protocol.framework.TimedReconnectStrategy;
+import org.opendaylight.protocol.pcep.PCEPCapability;
import org.opendaylight.protocol.pcep.PCEPSessionListener;
import org.opendaylight.protocol.pcep.PCEPSessionListenerFactory;
import org.opendaylight.protocol.pcep.PCEPSessionNegotiatorFactory;
+import org.opendaylight.protocol.pcep.PCEPSessionProposalFactory;
import org.opendaylight.protocol.pcep.ietf.initiated00.CrabbeInitiatedActivator;
import org.opendaylight.protocol.pcep.ietf.stateful07.StatefulActivator;
+import org.opendaylight.protocol.pcep.impl.BasePCEPSessionProposalFactory;
import org.opendaylight.protocol.pcep.impl.DefaultPCEPSessionNegotiatorFactory;
import org.opendaylight.protocol.pcep.pcc.mock.api.PccTunnelManager;
import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderContext;
}
private static PCEPSessionNegotiatorFactory getSessionNegotiatorFactory(final Open openMessage) {
- return new DefaultPCEPSessionNegotiatorFactory(openMessage, 0);
+ final List<PCEPCapability> capabilities = new ArrayList<>();
+ final PCEPSessionProposalFactory proposal = new BasePCEPSessionProposalFactory(openMessage.getDeadTimer(), openMessage.getKeepalive(), capabilities);
+ return new DefaultPCEPSessionNegotiatorFactory(proposal, 0);
}
private static ch.qos.logback.classic.Logger getRootLogger(final LoggerContext lc) {
import java.net.InetSocketAddress;
import org.opendaylight.protocol.framework.ReconnectStrategyFactory;
import org.opendaylight.protocol.pcep.PCEPDispatcher;
+import org.opendaylight.protocol.pcep.PCEPPeerProposal;
import org.opendaylight.protocol.pcep.PCEPSessionListenerFactory;
import org.opendaylight.protocol.pcep.PCEPSessionNegotiatorFactory;
import org.opendaylight.protocol.pcep.impl.PCEPHandlerFactory;
public void initializeChannel(final SocketChannel ch, final Promise<PCEPSessionImpl> promise) {
ch.pipeline().addLast(PCCDispatcher.this.factory.getDecoders());
ch.pipeline().addLast("negotiator",
- negotiatorFactory.getSessionNegotiator(listenerFactory, ch, promise));
+ negotiatorFactory.getSessionNegotiator(listenerFactory, ch, promise, null));
ch.pipeline().addLast(PCCDispatcher.this.factory.getEncoders());
}
});
}
@Override
- public synchronized ChannelFuture createServer(final InetSocketAddress address,
- final PCEPSessionListenerFactory listenerFactory) {
- return createServer(address, null, listenerFactory);
+ public synchronized ChannelFuture createServer(final InetSocketAddress address, final PCEPSessionListenerFactory listenerFactory, final PCEPPeerProposal peerProposal) {
+ return createServer(address, null, listenerFactory, peerProposal);
}
@Override
@Override
public synchronized ChannelFuture createServer(final InetSocketAddress address, final KeyMapping keys,
- final PCEPSessionListenerFactory listenerFactory) {
+ final PCEPSessionListenerFactory listenerFactory, final PCEPPeerProposal peerProposal) {
this.keys = keys;
final ChannelFuture ret = super.createServer(address, new ChannelPipelineInitializer() {
@Override
public void initializeChannel(final SocketChannel ch, final Promise<PCEPSessionImpl> promise) {
ch.pipeline().addLast(PCCDispatcher.this.hf.getDecoders());
- ch.pipeline().addLast("negotiator", PCCDispatcher.this.snf.getSessionNegotiator(listenerFactory, ch, promise));
+ ch.pipeline().addLast("negotiator", PCCDispatcher.this.snf.getSessionNegotiator(listenerFactory, ch, promise, peerProposal));
ch.pipeline().addLast(PCCDispatcher.this.hf.getEncoders());
}
});
try {
factory = NativeKeyAccessFactory.getInstance();
- } catch (NativeSupportUnavailableException e) {
+ } catch (final NativeSupportUnavailableException e) {
LOG.debug("Native key access not available, using no-op fallback", e);
factory = DummyKeyAccessFactory.getInstance();
}
import java.lang.reflect.InvocationTargetException;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.ExecutionException;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
+import org.opendaylight.protocol.pcep.PCEPCapability;
import org.opendaylight.protocol.pcep.PCEPDispatcher;
import org.opendaylight.protocol.pcep.PCEPSession;
+import org.opendaylight.protocol.pcep.PCEPSessionProposalFactory;
+import org.opendaylight.protocol.pcep.impl.BasePCEPSessionProposalFactory;
import org.opendaylight.protocol.pcep.impl.DefaultPCEPSessionNegotiatorFactory;
import org.opendaylight.protocol.pcep.impl.PCEPDispatcherImpl;
import org.opendaylight.protocol.pcep.spi.pojo.ServiceLoaderPCEPExtensionProviderContext;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Stateful1;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder;
public class PCCMockTest {
private static final String LOCAL_ADDRESS2 = "127.0.0.2";
private PCEPDispatcher pceDispatcher;
+ private static final List<PCEPCapability> CAPS = new ArrayList<>();
+ private static final PCEPSessionProposalFactory PROPOSAL = new BasePCEPSessionProposalFactory(DEAD_TIMER, KEEP_ALIVE, CAPS);
@Before
public void setUp() {
- final DefaultPCEPSessionNegotiatorFactory nf = new DefaultPCEPSessionNegotiatorFactory(
- new OpenBuilder().setKeepalive(KEEP_ALIVE).setDeadTimer(DEAD_TIMER).setSessionId((short) 0).build(), 0);
+ final DefaultPCEPSessionNegotiatorFactory nf = new DefaultPCEPSessionNegotiatorFactory(PROPOSAL, 0);
this.pceDispatcher = new PCEPDispatcherImpl(ServiceLoaderPCEPExtensionProviderContext.getSingletonInstance().getMessageHandlerRegistry(),
nf, new NioEventLoopGroup(), new NioEventLoopGroup());
}
@Test
public void testSessionEstablishment() throws UnknownHostException, InterruptedException, ExecutionException {
final TestingSessionListenerFactory factory = new TestingSessionListenerFactory();
- final Channel channel = this.pceDispatcher.createServer(new InetSocketAddress(REMOTE_ADDRESS, 4567), factory).channel();
+ final Channel channel = this.pceDispatcher.createServer(new InetSocketAddress(REMOTE_ADDRESS, 4567), factory, null).channel();
Main.main(new String[] {"--local-address", LOCAL_ADDRESS, "--remote-address", REMOTE_ADDRESS + ":4567", "--pcc", "1", "--lsp", "3",
"--log-level", "DEBUG", "-ka", "10", "-d", "40"});
Thread.sleep(1000);
Assert.assertNotNull(session);
Assert.assertEquals(40, session.getPeerPref().getDeadtimer().shortValue());
Assert.assertEquals(10, session.getPeerPref().getKeepalive().shortValue());
- Assert.assertTrue(session.getRemoteTlvs().getAugmentation(Tlvs1.class).getStateful().getAugmentation(Stateful1.class).isInitiation());
+// Assert.assertTrue(session.getRemoteTlvs().getAugmentation(Tlvs1.class).getStateful().getAugmentation(Stateful1.class).isInitiation());
channel.close().get();
}
@Test
public void testMockPCCToManyPCE() throws InterruptedException, ExecutionException, UnknownHostException {
- final DefaultPCEPSessionNegotiatorFactory nf = new DefaultPCEPSessionNegotiatorFactory(
- new OpenBuilder().setKeepalive(KEEP_ALIVE).setDeadTimer(DEAD_TIMER).setSessionId((short) 0).build(), 0);
- PCEPDispatcher dispatcher2 = new PCEPDispatcherImpl(ServiceLoaderPCEPExtensionProviderContext.getSingletonInstance().getMessageHandlerRegistry(),
+ final DefaultPCEPSessionNegotiatorFactory nf = new DefaultPCEPSessionNegotiatorFactory(PROPOSAL, 0);
+ final PCEPDispatcher dispatcher2 = new PCEPDispatcherImpl(ServiceLoaderPCEPExtensionProviderContext.getSingletonInstance().getMessageHandlerRegistry(),
nf, new NioEventLoopGroup(), new NioEventLoopGroup());
- final DefaultPCEPSessionNegotiatorFactory nf2 = new DefaultPCEPSessionNegotiatorFactory(
- new OpenBuilder().setKeepalive(KEEP_ALIVE).setDeadTimer(DEAD_TIMER).setSessionId((short) 0).build(), 0);
- PCEPDispatcher dispatcher3 = new PCEPDispatcherImpl(ServiceLoaderPCEPExtensionProviderContext.getSingletonInstance().getMessageHandlerRegistry(),
+ final DefaultPCEPSessionNegotiatorFactory nf2 = new DefaultPCEPSessionNegotiatorFactory(PROPOSAL, 0);
+ final PCEPDispatcher dispatcher3 = new PCEPDispatcherImpl(ServiceLoaderPCEPExtensionProviderContext.getSingletonInstance().getMessageHandlerRegistry(),
nf2, new NioEventLoopGroup(), new NioEventLoopGroup());
final TestingSessionListenerFactory factory = new TestingSessionListenerFactory();
final TestingSessionListenerFactory factory2 = new TestingSessionListenerFactory();
final TestingSessionListenerFactory factory3 = new TestingSessionListenerFactory();
- final Channel channel = pceDispatcher.createServer(SERVER_ADDRESS2, factory).channel();
- final Channel channel2 = dispatcher2.createServer(SERVER_ADDRESS3, factory2).channel();
- final Channel channel3 = dispatcher3.createServer(SERVER_ADDRESS4, factory3).channel();
+ final Channel channel = this.pceDispatcher.createServer(SERVER_ADDRESS2, factory, null).channel();
+ final Channel channel2 = dispatcher2.createServer(SERVER_ADDRESS3, factory2, null).channel();
+ final Channel channel3 = dispatcher3.createServer(SERVER_ADDRESS4, factory3, null).channel();
Main.main(new String[] {"--local-address", LOCAL_ADDRESS, "--remote-address", REMOTE_ADDRESS2 + "," + REMOTE_ADDRESS3 + "," + REMOTE_ADDRESS4,
"--pcc", "2"});
c.setAccessible(true);
try {
c.newInstance();
- } catch (InvocationTargetException e) {
+ } catch (final InvocationTargetException e) {
throw e.getCause();
}
}
--- /dev/null
+/*
+ * 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.config.yang.pcep.sr.cfg;
+
+import com.google.common.base.Preconditions;
+import java.net.InetSocketAddress;
+import org.opendaylight.protocol.pcep.PCEPCapability;
+import org.opendaylight.protocol.pcep.segment.routing.PCEPSegmentRoutingCapability;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder;
+
+public class PCEPSegmentRoutingCapabilityModule extends org.opendaylight.controller.config.yang.pcep.sr.cfg.AbstractPCEPSegmentRoutingCapabilityModule {
+
+ public PCEPSegmentRoutingCapabilityModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
+ super(identifier, dependencyResolver);
+ }
+
+ public PCEPSegmentRoutingCapabilityModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, final org.opendaylight.controller.config.yang.pcep.sr.cfg.PCEPSegmentRoutingCapabilityModule oldModule, final java.lang.AutoCloseable oldInstance) {
+ super(identifier, dependencyResolver, oldModule, oldInstance);
+ }
+
+ @Override
+ public java.lang.AutoCloseable createInstance() {
+ final PCEPSegmentRoutingCapability inner = new PCEPSegmentRoutingCapability(getSrCapable());
+ return new PCEPSegmentRoutingCapabilityCloseable(inner);
+ }
+
+ private static final class PCEPSegmentRoutingCapabilityCloseable implements PCEPCapability, AutoCloseable {
+ private final PCEPSegmentRoutingCapability inner;
+
+ public PCEPSegmentRoutingCapabilityCloseable(final PCEPSegmentRoutingCapability inner) {
+ this.inner = Preconditions.checkNotNull(inner);
+ }
+
+ @Override
+ public void close() {
+ }
+
+ @Override
+ public void setCapabilityProposal(final InetSocketAddress address, final TlvsBuilder builder) {
+ this.inner.setCapabilityProposal(address, builder);
+ }
+
+ }
+
+}
*/
package org.opendaylight.controller.config.yang.pcep.sr.cfg;
-public class SrPCEPSessionProposalFactoryModuleFactory extends org.opendaylight.controller.config.yang.pcep.sr.cfg.AbstractSrPCEPSessionProposalFactoryModuleFactory {
+public class PCEPSegmentRoutingCapabilityModuleFactory extends org.opendaylight.controller.config.yang.pcep.sr.cfg.AbstractPCEPSegmentRoutingCapabilityModuleFactory {
}
+++ /dev/null
-/*
- * 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.config.yang.pcep.sr.cfg;
-
-import com.google.common.base.Preconditions;
-import java.net.InetSocketAddress;
-import org.opendaylight.controller.config.api.JmxAttributeValidationException;
-import org.opendaylight.protocol.pcep.PCEPSessionProposalFactory;
-import org.opendaylight.protocol.pcep.segment.routing.SegmentRoutingSessionProposalFactory;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class SrPCEPSessionProposalFactoryModule extends org.opendaylight.controller.config.yang.pcep.sr.cfg.AbstractSrPCEPSessionProposalFactoryModule {
-
- private static final String VALUE_IS_NOT_SET = "value is not set.";
-
- private static final int DEADTIMER_KEEPALIVE_RATIO = 4;
-
- private static final Logger LOG = LoggerFactory.getLogger(SrPCEPSessionProposalFactoryModule.class);
-
- public SrPCEPSessionProposalFactoryModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
- super(identifier, dependencyResolver);
- }
-
- public SrPCEPSessionProposalFactoryModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, final org.opendaylight.controller.config.yang.pcep.sr.cfg.SrPCEPSessionProposalFactoryModule oldModule, final java.lang.AutoCloseable oldInstance) {
- super(identifier, dependencyResolver, oldModule, oldInstance);
- }
-
- @Override
- public void customValidation() {
- JmxAttributeValidationException.checkNotNull(getActive(), VALUE_IS_NOT_SET, activeJmxAttribute);
- JmxAttributeValidationException.checkNotNull(getInitiated(), VALUE_IS_NOT_SET, initiatedJmxAttribute);
- JmxAttributeValidationException.checkNotNull(getDeadTimerValue(), VALUE_IS_NOT_SET, deadTimerValueJmxAttribute);
- JmxAttributeValidationException.checkNotNull(getKeepAliveTimerValue(), VALUE_IS_NOT_SET, keepAliveTimerValueJmxAttribute);
- JmxAttributeValidationException.checkNotNull(getTriggeredInitialSync(), VALUE_IS_NOT_SET, triggeredInitialSyncJmxAttribute);
- JmxAttributeValidationException.checkNotNull(getTriggeredResync(), VALUE_IS_NOT_SET, triggeredResyncJmxAttribute);
- JmxAttributeValidationException.checkNotNull(getDeltaLspSyncCapability(), VALUE_IS_NOT_SET, deltaLspSyncCapabilityJmxAttribute);
- JmxAttributeValidationException.checkNotNull(getIncludeDbVersion(), VALUE_IS_NOT_SET, includeDbVersionJmxAttribute);
- validateTimers();
- if ((getActive() || getTriggeredInitialSync() || getTriggeredResync() || getDeltaLspSyncCapability() || getIncludeDbVersion()) && !getStateful()) {
- setStateful(true);
- }
- if ((getTriggeredInitialSync() || getDeltaLspSyncCapability()) && !getIncludeDbVersion()) {
- setIncludeDbVersion(true);
- }
- JmxAttributeValidationException.checkNotNull(getStateful(), VALUE_IS_NOT_SET, statefulJmxAttribute);
- JmxAttributeValidationException.checkNotNull(getSrCapable(), VALUE_IS_NOT_SET, srCapableJmxAttribute);
- }
-
- private void validateTimers() {
- if (getKeepAliveTimerValue() != 0) {
- JmxAttributeValidationException.checkCondition(getKeepAliveTimerValue() >= 1, "minimum value is 1.", keepAliveTimerValueJmxAttribute);
- if (getDeadTimerValue() != 0 && (getDeadTimerValue() / getKeepAliveTimerValue() != DEADTIMER_KEEPALIVE_RATIO)) {
- LOG.warn("DeadTimerValue should be 4 times greater than KeepAliveTimerValue");
- }
- }
- }
-
- @Override
- public java.lang.AutoCloseable createInstance() {
- final SegmentRoutingSessionProposalFactory inner = new SegmentRoutingSessionProposalFactory(getDeadTimerValue(), getKeepAliveTimerValue(), getStateful(), getActive(), getInitiated(), getSrCapable(),
- getTriggeredInitialSync(), getTriggeredResync(), getDeltaLspSyncCapability(), getIncludeDbVersion());
- return new PCEPSessionProposalFactoryCloseable(inner);
- }
-
- private static final class PCEPSessionProposalFactoryCloseable implements PCEPSessionProposalFactory, AutoCloseable {
- private final SegmentRoutingSessionProposalFactory inner;
-
- public PCEPSessionProposalFactoryCloseable(final SegmentRoutingSessionProposalFactory inner) {
- this.inner = Preconditions.checkNotNull(inner);
- }
-
- @Override
- public void close() {
- }
-
- @Override
- public Open getSessionProposal(final InetSocketAddress inetSocketAddress, final int sessionId) {
- return this.inner.getSessionProposal(inetSocketAddress, sessionId);
- }
- }
-
-}
package org.opendaylight.protocol.pcep.segment.routing;
import java.net.InetSocketAddress;
-import org.opendaylight.protocol.pcep.ietf.initiated00.Stateful07SessionProposalFactory;
+import org.opendaylight.protocol.pcep.PCEPCapability;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.Tlvs1;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.Tlvs1Builder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.sr.pce.capability.tlv.SrPceCapabilityBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder;
-public class SegmentRoutingSessionProposalFactory extends Stateful07SessionProposalFactory {
+public class PCEPSegmentRoutingCapability implements PCEPCapability {
private final boolean isSegmentRoutingCapable;
- public SegmentRoutingSessionProposalFactory(final int deadTimer, final int keepAlive, final boolean stateful, final boolean active,
- final boolean instant, final boolean isSegmentRoutingCapable, final boolean triggeredSync, final boolean triggeredResync, final boolean deltaLspSync, final boolean includeDbVersion) {
- super(deadTimer, keepAlive, stateful, active, instant, triggeredSync, triggeredResync, deltaLspSync, includeDbVersion);
+ public PCEPSegmentRoutingCapability(final boolean isSegmentRoutingCapable) {
this.isSegmentRoutingCapable = isSegmentRoutingCapable;
}
@Override
- protected void addTlvs(final InetSocketAddress address, final TlvsBuilder builder) {
- super.addTlvs(address, builder);
+ public void setCapabilityProposal(final InetSocketAddress address, final TlvsBuilder builder) {
if (this.isSegmentRoutingCapable) {
builder.addAugmentation(Tlvs1.class,
new Tlvs1Builder().setSrPceCapability(new SrPceCapabilityBuilder().setMsd((short) 0).build())
public boolean isSegmentRoutingCapable() {
return this.isSegmentRoutingCapable;
}
-
}
}
}
- identity pcep-session-proposal-factory-sr {
+ identity pcep-segment-routing-capability {
base config:module-type;
- config:java-name-prefix "SrPCEPSessionProposalFactory";
- config:provided-service pcep:pcep-session-proposal-factory;
+ config:java-name-prefix "PCEPSegmentRoutingCapability";
+ config:provided-service pcep:pcep-capability;
}
augment "/config:modules/config:module/config:configuration" {
- case pcep-session-proposal-factory-sr {
- when "/config:modules/config:module/config:type = 'pcep-session-proposal-factory-sr'";
+ case pcep-segment-routing-capability {
+ when "/config:modules/config:module/config:type = 'pcep-segment-routing-capability'";
uses pcep-stateful07:stateful-capabilities;
leaf sr-capable {
type boolean;
--- /dev/null
+/*
+ * 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.config.yang.pcep.sr.cfg;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.ObjectName;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.controller.config.api.jmx.CommitStatus;
+import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
+import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
+import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
+
+public class PCEPSegmentRoutingCapabilityModuleTest extends AbstractConfigTest {
+
+ private static final String INSTANCE_NAME = "sr02-session-proposal";
+ private static final String FACTORY_NAME = PCEPSegmentRoutingCapabilityModuleFactory.NAME;
+
+ @Before
+ public void setUp() throws Exception {
+ super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(this.mockedContext, new PCEPSegmentRoutingCapabilityModuleFactory()));
+ }
+
+ @Test
+ public void testCreateBean() throws Exception {
+ final CommitStatus status = createInstance();
+ assertBeanCount(1, FACTORY_NAME);
+ assertStatus(status, 1, 0, 0);
+ }
+
+ @Test
+ public void testReusingOldInstance() throws Exception {
+ createInstance();
+ final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
+ assertBeanCount(1, FACTORY_NAME);
+ final CommitStatus status = transaction.commit();
+ assertBeanCount(1, FACTORY_NAME);
+ assertStatus(status, 0, 0, 1);
+ }
+
+ @Test
+ public void testReconfigure() throws Exception {
+ createInstance();
+ final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
+ assertBeanCount(1, FACTORY_NAME);
+ transaction.newMXBeanProxy(transaction.lookupConfigBean(FACTORY_NAME, INSTANCE_NAME), PCEPSegmentRoutingCapabilityModuleMXBean.class);
+ final CommitStatus status = transaction.commit();
+ assertBeanCount(1, FACTORY_NAME);
+ assertStatus(status, 0, 0, 1);
+ }
+
+ private CommitStatus createInstance() throws Exception {
+ return createInstance(true);
+ }
+
+ private CommitStatus createInstance(final Boolean srCapable) throws Exception {
+ final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
+ createInstance(transaction, srCapable);
+ return transaction.commit();
+ }
+
+ private ObjectName createInstance(final ConfigTransactionJMXClient transaction, final Boolean srCapable) throws InstanceAlreadyExistsException {
+ final ObjectName nameCreated = transaction.createModule(FACTORY_NAME, INSTANCE_NAME);
+ final PCEPSegmentRoutingCapabilityModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, PCEPSegmentRoutingCapabilityModuleMXBean.class);
+ mxBean.setSrCapable(srCapable);
+ return nameCreated;
+ }
+}
+++ /dev/null
-/*
- * 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.config.yang.pcep.sr.cfg;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.ObjectName;
-import org.junit.Before;
-import org.junit.Test;
-import org.opendaylight.controller.config.api.ValidationException;
-import org.opendaylight.controller.config.api.jmx.CommitStatus;
-import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
-import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
-import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
-import org.opendaylight.controller.config.yang.pcep.stateful07.cfg.Stateful07PCEPSessionProposalFactoryModuleMXBean;
-
-public class SrPCEPSessionProposalFactoryModuleTest extends AbstractConfigTest {
-
- private static final String INSTANCE_NAME = "sr02-session-proposal";
- private static final String FACTORY_NAME = SrPCEPSessionProposalFactoryModuleFactory.NAME;
-
- @Before
- public void setUp() throws Exception {
- super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(this.mockedContext, new SrPCEPSessionProposalFactoryModuleFactory()));
- }
-
- @Test
- public void testValidationExceptionDeadTimerValueNotSet() throws Exception {
- try {
- createInstance(null, (short) 100, true, true, true, true, true, true, true, true);
- fail();
- } catch (final ValidationException e) {
- assertTrue(e.getMessage().contains("DeadTimerValue value is not set"));
- }
- }
-
- @Test
- public void testValidationExceptionKeepAliveTimerNotSet() throws Exception {
- try {
- createInstance((short) 200, null, true, true, true, true, true, true, true, true);
- fail();
- } catch (final ValidationException e) {
- assertTrue(e.getMessage().contains("KeepAliveTimerValue value is not set"));
- }
- }
-
- @Test
- public void testValidationExceptionStatefulNotSet() throws Exception {
- try {
- createInstance((short) 200, (short) 100, null, false, false, false, false, false, false, false);
- fail();
- } catch (final ValidationException e) {
- assertTrue(e.getMessage().contains("Stateful value is not set"));
- }
- }
-
- @Test
- public void testValidationExceptionActiveNotSet() throws Exception {
- try {
- createInstance((short) 200, (short) 100, true, null, true, true, true, true, true, true);
- fail();
- } catch (final ValidationException e) {
- assertTrue(e.getMessage().contains("Active value is not set"));
- }
- }
-
- @Test
- public void testValidationExceptionInstantiatedNotSet() throws Exception {
- try {
- createInstance((short) 200, (short) 100, true, true, null, true, true, true, true, true);
- fail();
- } catch (final ValidationException e) {
- assertTrue(e.getMessage().contains("Initiated value is not set"));
- }
- }
-
- @Test
- public void testValidationExceptionKeepAliveTimerMinValue() throws Exception {
- try {
- createInstance((short) 200, (short) -10, true, true, true, true, true, true, true, true);
- fail();
- } catch (final ValidationException e) {
- assertTrue(e.getMessage().contains("minimum value is 1."));
- }
- }
-
- @Test
- public void testStatefulAfterCommitted() throws Exception {
- createInstance((short) 200, (short) 100, false, true, true, true, true, true, true, true);
- final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
- final Stateful07PCEPSessionProposalFactoryModuleMXBean mxBean = transaction.newMXBeanProxy(transaction.lookupConfigBean(
- FACTORY_NAME, INSTANCE_NAME), Stateful07PCEPSessionProposalFactoryModuleMXBean.class);
- assertTrue(mxBean.getStateful());
- }
-
- @Test
- public void testNotStatefulAfterCommitted() throws Exception {
- createInstance((short) 200, (short) 100, false, false, false, false, false, false, false, false);
- final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
- final Stateful07PCEPSessionProposalFactoryModuleMXBean mxBean = transaction.newMXBeanProxy(transaction.lookupConfigBean(
- FACTORY_NAME, INSTANCE_NAME), Stateful07PCEPSessionProposalFactoryModuleMXBean.class);
- assertFalse(mxBean.getStateful());
- }
-
- @Test
- public void testIncludeDbVersionAfterCommitted() throws Exception {
- createInstance((short) 200, (short) 100, false, false, false, false, false, false, true, false);
- final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
- final Stateful07PCEPSessionProposalFactoryModuleMXBean mxBean = transaction.newMXBeanProxy(transaction.lookupConfigBean(
- FACTORY_NAME, INSTANCE_NAME), Stateful07PCEPSessionProposalFactoryModuleMXBean.class);
- assertTrue(mxBean.getIncludeDbVersion());
- }
-
- @Test
- public void testNotIncludeDbVersionAfterCommitted() throws Exception {
- createInstance((short) 200, (short) 100, false, false, false, false, false, false, false, false);
- final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
- final Stateful07PCEPSessionProposalFactoryModuleMXBean mxBean = transaction.newMXBeanProxy(transaction.lookupConfigBean(
- FACTORY_NAME, INSTANCE_NAME), Stateful07PCEPSessionProposalFactoryModuleMXBean.class);
- assertFalse(mxBean.getIncludeDbVersion());
- }
-
- @Test
- public void testValidationExceptionSrCapableValueNotSet() throws Exception {
- try {
- createInstance((short) 200, (short) 100, true, true, true, null, false, false, false, false);
- fail();
- } catch (final ValidationException e) {
- assertTrue(e.getMessage().contains("SrCapable value is not set"));
- }
- }
-
- @Test
- public void testValidationExceptionTriggeredSyncNotSet() throws Exception {
- try {
- createInstance((short) 200, (short) 100, true, true, true, true, null, true, true, true);
- fail();
- } catch (final ValidationException e) {
- assertTrue(e.getMessage().contains("TriggeredInitialSync value is not set"));
- }
- }
-
- @Test
- public void testValidationExceptionTriggeredResyncNotSet() throws Exception {
- try {
- createInstance((short) 200, (short) 100, true, true, true, true, true, null, true, true);
- fail();
- } catch (final ValidationException e) {
- assertTrue(e.getMessage().contains("TriggeredResync value is not set"));
- }
- }
-
- @Test
- public void testValidationExceptionDeltaLspSyncNotSet() throws Exception {
- try {
- createInstance((short) 200, (short) 100, true, true, true, true, true, true, null, true);
- fail();
- } catch (final ValidationException e) {
- assertTrue(e.getMessage().contains("DeltaLspSyncCapability value is not set"));
- }
- }
-
- @Test
- public void testValidationExceptionIncludeDBVersionNotSet() throws Exception {
- try {
- createInstance((short) 200, (short) 100, true, true, true, true, true, true, true, null);
- fail();
- } catch (final ValidationException e) {
- assertTrue(e.getMessage().contains("IncludeDbVersion value is not set"));
- }
- }
-
- @Test
- public void testCreateBean() throws Exception {
- final CommitStatus status = createInstance();
- assertBeanCount(1, FACTORY_NAME);
- assertStatus(status, 1, 0, 0);
- }
-
- @Test
- public void testReusingOldInstance() throws Exception {
- createInstance();
- final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
- assertBeanCount(1, FACTORY_NAME);
- final CommitStatus status = transaction.commit();
- assertBeanCount(1, FACTORY_NAME);
- assertStatus(status, 0, 0, 1);
- }
-
- @Test
- public void testReconfigure() throws Exception {
- createInstance();
- final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
- assertBeanCount(1, FACTORY_NAME);
- transaction.newMXBeanProxy(transaction.lookupConfigBean(FACTORY_NAME, INSTANCE_NAME),
- Stateful07PCEPSessionProposalFactoryModuleMXBean.class);
- final CommitStatus status = transaction.commit();
- assertBeanCount(1, FACTORY_NAME);
- assertStatus(status, 0, 0, 1);
- }
-
- private CommitStatus createInstance() throws Exception {
- return createInstance((short) 200, (short) 100, true, true, true, true, true, true, true, true);
- }
-
- private CommitStatus createInstance(final Short deadTimer, final Short keepAlive,
- final Boolean stateful, final Boolean active, final Boolean instant, final Boolean srCapable,
- final Boolean triggeredInitialSync, final Boolean triggeredResync, final Boolean deltaLspSyncCapability, final Boolean includeDbVersion) throws Exception {
- final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
- createInstance(transaction, deadTimer, keepAlive, stateful, active, instant, srCapable, triggeredInitialSync, triggeredResync, deltaLspSyncCapability, includeDbVersion);
- return transaction.commit();
- }
-
- private ObjectName createInstance(final ConfigTransactionJMXClient transaction, final Short deadTimer, final Short keepAlive,
- final Boolean stateful, final Boolean active, final Boolean instant, final Boolean srCapable,
- final Boolean triggeredInitialSync, final Boolean triggeredResync, final Boolean deltaLspSyncCapability, final Boolean includeDbVersion) throws InstanceAlreadyExistsException {
- final ObjectName nameCreated = transaction.createModule(FACTORY_NAME, INSTANCE_NAME);
- final SrPCEPSessionProposalFactoryModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated,
- SrPCEPSessionProposalFactoryModuleMXBean.class);
- mxBean.setActive(active);
- mxBean.setDeadTimerValue(deadTimer);
- mxBean.setInitiated(instant);
- mxBean.setKeepAliveTimerValue(keepAlive);
- mxBean.setStateful(stateful);
- mxBean.setSrCapable(srCapable);
- mxBean.setTriggeredInitialSync(triggeredInitialSync);
- mxBean.setTriggeredResync(triggeredResync);
- mxBean.setDeltaLspSyncCapability(deltaLspSyncCapability);
- mxBean.setIncludeDbVersion(includeDbVersion);
- return nameCreated;
- }
-}
--- /dev/null
+/*
+ * 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.protocol.pcep.segment.routing;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.sr.pce.capability.tlv.SrPceCapabilityBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.Tlvs;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder;
+
+public class PCEPSegmentRoutingCapabilityTest {
+
+ private static final Tlvs EXPECTED_TLVS =
+ new TlvsBuilder()
+ .addAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.Tlvs1.class,
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.Tlvs1Builder()
+ .setSrPceCapability(new SrPceCapabilityBuilder().setMsd((short) 0).build()).build())
+ .build();
+
+ @Test
+ public void testSegmentRoutingCapability() {
+ final PCEPSegmentRoutingCapability sspf = new PCEPSegmentRoutingCapability(true);
+ Assert.assertTrue(sspf.isSegmentRoutingCapable());
+ final TlvsBuilder builder = new TlvsBuilder();
+ sspf.setCapabilityProposal(null, builder);
+ Assert.assertEquals(EXPECTED_TLVS, builder.build());
+ }
+}
+++ /dev/null
-/*
- * 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.protocol.pcep.segment.routing;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Stateful1;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Stateful1Builder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1Builder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.StatefulBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.sr.pce.capability.tlv.SrPceCapabilityBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder;
-
-public class SegmentRouting02SessionProposalTest {
-
- private static final int DEAD_TIMER = 4;
- private static final int KEEP_ALIVE = 1;
- private static final int SESSION_ID = 1;
- private static final Open OPEN_MSG = new OpenBuilder()
- .setDeadTimer((short) DEAD_TIMER)
- .setKeepalive((short) KEEP_ALIVE)
- .setSessionId((short) SESSION_ID)
- .setTlvs(new TlvsBuilder()
- .addAugmentation(Tlvs1.class, new Tlvs1Builder().setStateful(new StatefulBuilder()
- .addAugmentation(Stateful1.class, new Stateful1Builder().setInitiation(true).build())
- .addAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Stateful1.class, new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Stateful1Builder()
- .setTriggeredInitialSync(true)
- .setTriggeredResync(false)
- .setDeltaLspSyncCapability(true)
- .setIncludeDbVersion(false)
- .build())
- .setLspUpdateCapability(true).build()).build())
- .addAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.Tlvs1.class,
- new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.Tlvs1Builder()
- .setSrPceCapability(new SrPceCapabilityBuilder().setMsd((short) 0).build()).build())
- .build())
- .build();
-
- @Test
- public void testSegmentRouting02SessionProposalFactory() {
- final SegmentRoutingSessionProposalFactory sspf = new SegmentRoutingSessionProposalFactory(DEAD_TIMER, KEEP_ALIVE, true, true, true, true, true, false, true, false);
- Assert.assertEquals(DEAD_TIMER, sspf.getDeadTimer());
- Assert.assertEquals(KEEP_ALIVE, sspf.getKeepAlive());
- Assert.assertTrue(sspf.isActive());
- Assert.assertTrue(sspf.isInstant());
- Assert.assertTrue(sspf.isStateful());
- Assert.assertTrue(sspf.isSegmentRoutingCapable());
- Assert.assertFalse(sspf.isTriggeredResync());
- Assert.assertTrue(sspf.isTriggeredSync());
- Assert.assertTrue(sspf.isDeltaLspSync());
- Assert.assertFalse(sspf.isIncludeDbVersion());
- Assert.assertEquals(OPEN_MSG, sspf.getSessionProposal(null, SESSION_ID));
- }
-}
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.ExecutionException;
+import org.opendaylight.protocol.pcep.PCEPCapability;
import org.opendaylight.protocol.pcep.PCEPSessionProposalFactory;
-import org.opendaylight.protocol.pcep.ietf.initiated00.Stateful07SessionProposalFactory;
+import org.opendaylight.protocol.pcep.ietf.stateful07.PCEPStatefulCapability;
import org.opendaylight.protocol.pcep.ietf.stateful07.StatefulActivator;
+import org.opendaylight.protocol.pcep.impl.BasePCEPSessionProposalFactory;
import org.opendaylight.protocol.pcep.impl.DefaultPCEPSessionNegotiatorFactory;
import org.opendaylight.protocol.pcep.impl.PCEPDispatcherImpl;
import org.opendaylight.protocol.pcep.spi.pojo.ServiceLoaderPCEPExtensionProviderContext;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
deadTimerValue = keepAliveValue * KA_TO_DEADTIMER_RATIO;
}
- final PCEPSessionProposalFactory spf = new Stateful07SessionProposalFactory(deadTimerValue, keepAliveValue, stateful, active, instant, false, false, false, false);
-
- final Open prefs = spf.getSessionProposal(address, 0);
+ final List<PCEPCapability> caps = new ArrayList<>();
+ caps.add(new PCEPStatefulCapability(stateful, active, instant, false, false, false, false));
+ final PCEPSessionProposalFactory spf = new BasePCEPSessionProposalFactory(deadTimerValue, keepAliveValue, caps);
try (final StatefulActivator activator07 = new StatefulActivator()) {
activator07.start(ServiceLoaderPCEPExtensionProviderContext.getSingletonInstance());
- try (final PCEPDispatcherImpl dispatcher = new PCEPDispatcherImpl(ServiceLoaderPCEPExtensionProviderContext.getSingletonInstance().getMessageHandlerRegistry(), new DefaultPCEPSessionNegotiatorFactory(prefs, MAX_UNKNOWN_MESSAGES), new NioEventLoopGroup(), new NioEventLoopGroup())) {
- dispatcher.createServer(address, new TestingSessionListenerFactory()).get();
+ try (final PCEPDispatcherImpl dispatcher = new PCEPDispatcherImpl(ServiceLoaderPCEPExtensionProviderContext.getSingletonInstance().getMessageHandlerRegistry(), new DefaultPCEPSessionNegotiatorFactory(spf, MAX_UNKNOWN_MESSAGES), new NioEventLoopGroup(), new NioEventLoopGroup())) {
+ dispatcher.createServer(address, new TestingSessionListenerFactory(), null).get();
}
}
}
import io.netty.util.concurrent.GlobalEventExecutor;
import io.netty.util.concurrent.Promise;
import java.net.InetSocketAddress;
+import java.util.ArrayList;
+import java.util.List;
import org.opendaylight.protocol.framework.NeverReconnectStrategy;
import org.opendaylight.protocol.framework.ReconnectStrategy;
+import org.opendaylight.protocol.pcep.PCEPCapability;
import org.opendaylight.protocol.pcep.PCEPSessionListener;
import org.opendaylight.protocol.pcep.PCEPSessionListenerFactory;
import org.opendaylight.protocol.pcep.PCEPSessionNegotiatorFactory;
+import org.opendaylight.protocol.pcep.PCEPSessionProposalFactory;
+import org.opendaylight.protocol.pcep.impl.BasePCEPSessionProposalFactory;
import org.opendaylight.protocol.pcep.impl.DefaultPCEPSessionNegotiatorFactory;
import org.opendaylight.protocol.pcep.impl.PCEPHandlerFactory;
import org.opendaylight.protocol.pcep.impl.PCEPSessionImpl;
import org.opendaylight.protocol.pcep.pcc.mock.AbstractPCCDispatcher;
import org.opendaylight.protocol.pcep.spi.pojo.ServiceLoaderPCEPExtensionProviderContext;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder;
public class PCCMock extends AbstractPCCDispatcher {
@Override
public void initializeChannel(final SocketChannel ch, final Promise<PCEPSessionImpl> promise) {
ch.pipeline().addLast(PCCMock.this.factory.getDecoders());
- ch.pipeline().addLast("negotiator", PCCMock.this.negotiatorFactory.getSessionNegotiator(listenerFactory, ch, promise));
+ ch.pipeline().addLast("negotiator", PCCMock.this.negotiatorFactory.getSessionNegotiator(listenerFactory, ch, promise, null));
ch.pipeline().addLast(PCCMock.this.factory.getEncoders());
}
});
}
public static void main(final String[] args) throws Exception {
- final PCEPSessionNegotiatorFactory snf = new DefaultPCEPSessionNegotiatorFactory(new OpenBuilder().setKeepalive(
- (short) 30).setDeadTimer((short) 120).setSessionId((short) 0).build(), 0);
+ final List<PCEPCapability> caps = new ArrayList<>();
+ final PCEPSessionProposalFactory proposal = new BasePCEPSessionProposalFactory((short) 120, (short) 30, caps);
+ final PCEPSessionNegotiatorFactory snf = new DefaultPCEPSessionNegotiatorFactory(proposal, 0);
final PCCMock pcc = new PCCMock(snf, new PCEPHandlerFactory(ServiceLoaderPCEPExtensionProviderContext.getSingletonInstance().getMessageHandlerRegistry()), new DefaultPromise<PCEPSessionImpl>(GlobalEventExecutor.INSTANCE));
if (runtimeRootRegistrator.isPresent()) {
manager.registerRuntimeRootRegistartion(runtimeRootRegistrator.get());
}
- final ChannelFuture f = dispatcher.createServer(address, keys, manager);
+ final ChannelFuture f = dispatcher.createServer(address, keys, manager, null);
f.get();
final BindingAwareBroker.RoutedRpcRegistration<NetworkTopologyPcepService> element = rpcRegistry.addRoutedRpcImplementation(
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.opendaylight.controller.config.yang.pcep.impl.PCEPDispatcherImplModuleTest.createDispatcherInstance;
-
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import org.opendaylight.controller.config.yang.pcep.impl.PCEPDispatcherImplModuleMXBean;
import org.opendaylight.controller.config.yang.pcep.impl.PCEPSessionProposalFactoryImplModuleFactory;
import org.opendaylight.controller.config.yang.pcep.spi.SimplePCEPExtensionProviderContextModuleFactory;
-import org.opendaylight.controller.config.yang.pcep.stateful07.cfg.Stateful07PCEPSessionProposalFactoryModuleFactory;
+import org.opendaylight.controller.config.yang.pcep.stateful07.cfg.PCEPStatefulCapabilityModuleFactory;
import org.opendaylight.controller.config.yang.programming.impl.AbstractInstructionSchedulerTest;
import org.opendaylight.controller.config.yang.tcpmd5.jni.cfg.NativeKeyAccessFactoryModuleFactory;
import org.opendaylight.controller.config.yang.tcpmd5.netty.cfg.MD5ServerChannelFactoryModuleFactory;
}
private CommitStatus createInstance(final String listenAddress, final PortNumber listenPort,
- final TopologyId topologyId, boolean addMD5)
+ final TopologyId topologyId, final boolean addMD5)
throws Exception {
- ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+ final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
createPCEPTopologyProviderModuleInstance(transaction, listenAddress, listenPort, topologyId, addMD5);
return transaction.commit();
}
moduleFactories.add(new NettyThreadgroupModuleFactory());
moduleFactories.add(new SimplePCEPExtensionProviderContextModuleFactory());
moduleFactories.add(new Stateful07TopologySessionListenerModuleFactory());
- moduleFactories.add(new Stateful07PCEPSessionProposalFactoryModuleFactory());
+ moduleFactories.add(new PCEPStatefulCapabilityModuleFactory());
moduleFactories.add(new NativeKeyAccessFactoryModuleFactory());
moduleFactories.add(new MD5ServerChannelFactoryModuleFactory());
return moduleFactories;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-
import java.util.List;
import javax.management.ObjectName;
import org.junit.Test;
import org.opendaylight.controller.config.yang.pcep.impl.PCEPDispatcherImplModuleFactory;
import org.opendaylight.controller.config.yang.pcep.impl.PCEPSessionProposalFactoryImplModuleFactory;
import org.opendaylight.controller.config.yang.pcep.spi.SimplePCEPExtensionProviderContextModuleFactory;
-import org.opendaylight.controller.config.yang.pcep.stateful07.cfg.Stateful07PCEPSessionProposalFactoryModuleFactory;
+import org.opendaylight.controller.config.yang.pcep.stateful07.cfg.PCEPStatefulCapabilityModuleFactory;
import org.opendaylight.controller.config.yang.pcep.topology.provider.PCEPTopologyProviderModuleFactory;
import org.opendaylight.controller.config.yang.pcep.topology.provider.PCEPTopologyProviderModuleMXBean;
import org.opendaylight.controller.config.yang.pcep.topology.provider.PCEPTopologyProviderModuleTest;
moduleFactories.add(new NettyThreadgroupModuleFactory());
moduleFactories.add(new SimplePCEPExtensionProviderContextModuleFactory());
moduleFactories.add(new Stateful07TopologySessionListenerModuleFactory());
- moduleFactories.add(new Stateful07PCEPSessionProposalFactoryModuleFactory());
+ moduleFactories.add(new PCEPStatefulCapabilityModuleFactory());
return moduleFactories;
}