import java.net.InetSocketAddress;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.opendaylight.protocol.concepts.KeyMapping;
/**
*/
@Nonnull
KeyMapping getKeys();
+
+ /**
+ * PCEP Speaker Id mapping.
+ *
+ * @return map containing Keys
+ */
+ @Nonnull
+ SpeakerIdMapping getSpeakerIdMapping();
}
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.LocalPref;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.Messages;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.PeerPref;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open;
/**
* Exposes Session state.
* @return peer preferences
*/
@Nonnull PeerPref getPeerPref();
+
+ /**
+ * The local (PCE) Open Message.
+ *
+ * @return Open
+ */
+ @Nonnull Open getLocalOpen();
}
--- /dev/null
+/*
+ * Copyright (c) 2017 AT&T Intellectual Property. 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.InetAddress;
+import java.util.HashMap;
+
+public final class SpeakerIdMapping extends HashMap<InetAddress, byte[]> {
+ private static final long serialVersionUID = 1L;
+
+ private SpeakerIdMapping() {
+ super();
+ }
+
+ public static SpeakerIdMapping getSpeakerIdMap() {
+ return new SpeakerIdMapping();
+ }
+}
\ No newline at end of file
<node-id>43.43.43.43</node-id>
<session-config xmlns="urn:opendaylight:params:xml:ns:yang:topology:pcep:config">
<password>topsecret</password>
+ <speaker-entity-id-value xmlns="urn:opendaylight:params:xml:ns:yang:topology:pcep:sync:optimizations:config">AQIDBA==</speaker-entity-id-value>
</session-config>
</node>
</topology>
import io.netty.channel.Channel;
import io.netty.util.concurrent.Promise;
-import javax.annotation.Nonnull;
-import org.opendaylight.protocol.pcep.PCEPPeerProposal;
-import org.opendaylight.protocol.pcep.PCEPSessionListener;
import org.opendaylight.protocol.pcep.PCEPSessionNegotiatorFactory;
import org.opendaylight.protocol.pcep.PCEPSessionNegotiatorFactoryDependencies;
import org.opendaylight.protocol.pcep.SessionNegotiator;
/**
* Create a new negotiator. This method needs to be implemented by subclasses to actually provide a negotiator.
*
+ * @param snd PCEP Session Negotiator dependencies
* @param promise Session promise to be completed by the negotiator
* @param channel Associated channel
* @param sessionId Session ID assigned to the resulting session
* @return a PCEP session negotiator
*/
protected abstract AbstractPCEPSessionNegotiator createNegotiator(
- @Nonnull PCEPSessionNegotiatorFactoryDependencies sessionNegotiatorDependencies,
+ PCEPSessionNegotiatorFactoryDependencies snd,
Promise<PCEPSessionImpl> promise,
Channel channel, short sessionId);
/**
* System.nanoTime value about when was sent the last message Protected to be updated also in tests.
*/
- @VisibleForTesting
- protected volatile long lastMessageSentAt;
+ private volatile long lastMessageSentAt;
/**
* System.nanoTime value about when was received the last message
* session DOWN event.
*/
close();
- this.listener.onSessionTerminated(this, new PCEPCloseTermination(TerminationReason.forValue(((CloseMessage) msg).getCCloseMessage().getCClose().getReason())));
+ this.listener.onSessionTerminated(this, new PCEPCloseTermination(TerminationReason
+ .forValue(((CloseMessage) msg).getCCloseMessage().getCClose().getReason())));
} else {
// This message needs to be handled by the user
if (msg instanceof PcerrMessage) {
return this.sessionState.getPeerPref();
}
+ @Override
+ public Open getLocalOpen() {
+ return this.sessionState.getLocalOpen();
+ }
+
@Override
public final void channelInactive(final ChannelHandlerContext ctx) {
LOG.debug("Channel {} inactive.", ctx.channel());
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.ErrorObject;
final class PCEPSessionState {
+ private final Open localOpen;
private long sentMsgCount = 0;
private long receivedMsgCount = 0;
private long sentErrMsgCount = 0;
requireNonNull(remoteOpen);
requireNonNull(localOpen);
requireNonNull(channel);
+ this.localOpen = localOpen;
this.peerPref = getRemotePref(remoteOpen, channel);
this.localPref = getLocalPref(localOpen, channel);
this.lastReceivedErrorBuilder = new LastReceivedErrorBuilder();
peerBuilder.setSessionId(open.getSessionId().intValue());
return peerBuilder.build();
}
+
+ public Open getLocalOpen() {
+ return localOpen;
+ }
}
import org.opendaylight.protocol.pcep.PCEPSession;
import org.opendaylight.protocol.pcep.PCEPSessionListenerFactory;
import org.opendaylight.protocol.pcep.PCEPSessionNegotiatorFactory;
+import org.opendaylight.protocol.pcep.SpeakerIdMapping;
import org.opendaylight.protocol.pcep.ietf.stateful07.StatefulActivator;
import org.opendaylight.protocol.pcep.impl.BasePCEPSessionProposalFactory;
import org.opendaylight.protocol.pcep.impl.DefaultPCEPSessionNegotiatorFactory;
private class DispatcherDependencies implements PCEPDispatcherDependencies {
final KeyMapping keys = KeyMapping.getKeyMapping();
+ final SpeakerIdMapping ids = SpeakerIdMapping.getSpeakerIdMap();
private final InetSocketAddress address;
private final TestingSessionListenerFactory listenerFactory;
private final PCEPPeerProposal peerProposal;
return keys;
}
+ @Override
+ public SpeakerIdMapping getSpeakerIdMapping() {
+ return ids;
+ }
+
@Override
public PCEPSessionListenerFactory getListenerFactory() {
return this.listenerFactory;
import org.opendaylight.protocol.concepts.KeyMapping;
import org.opendaylight.protocol.pcep.PCEPDispatcherDependencies;
import org.opendaylight.protocol.pcep.PCEPSessionListenerFactory;
+import org.opendaylight.protocol.pcep.SpeakerIdMapping;
public final class TestToolPCEPDispatcherDependencies implements PCEPDispatcherDependencies {
private final PCEPSessionListenerFactory listenerFactory = new TestingSessionListenerFactory();
private final InetSocketAddress address;
private final KeyMapping keys = KeyMapping.getKeyMapping();
+ private final SpeakerIdMapping speakerIds = SpeakerIdMapping.getSpeakerIdMap();
TestToolPCEPDispatcherDependencies(@Nonnull final InetSocketAddress address) {
this.address = address;
return this.keys;
}
+ @Override
+ public SpeakerIdMapping getSpeakerIdMapping() {
+ return this.speakerIds;
+ }
+
@Override
public PCEPSessionListenerFactory getListenerFactory() {
return this.listenerFactory;
package org.opendaylight.protocol.pcep.cli.utils;
import java.io.PrintStream;
+import java.util.Arrays;
import java.util.concurrent.ExecutionException;
import org.apache.karaf.shell.table.ShellTable;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev171113.PcepEntityIdStatsAug;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev171113.StatefulCapabilitiesStatsAug;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev171113.StatefulMessagesStatsAug;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.Error;
addHeader(table, "Local preferences");
final LocalPref localPref = pcepSessionState.getLocalPref();
showPreferences(table, localPref);
+ final PcepEntityIdStatsAug entAug = localPref.getAugmentation(PcepEntityIdStatsAug.class);
+ if (entAug != null) {
+ table.addRow().addContent("Speaker Entity Identifier",
+ Arrays.toString(entAug.getSpeakerEntityIdValue()));
+ }
addHeader(table, "Peer preferences");
final PeerPref peerPref = pcepSessionState.getPeerPref();
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.binding.test.AbstractConcurrentDataBrokerTest;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev171113.PcepEntityIdStatsAug;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev171113.PcepEntityIdStatsAugBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev171113.StatefulCapabilitiesStatsAug;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev171113.StatefulCapabilitiesStatsAugBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev171113.StatefulMessagesStatsAug;
private static final String RIB_NOT_FOUND = "Node [pcc://" + IP_ADDRESS + "] not found\n";
private static final String NODE_ID = "pcc://127.0.0.1";
private static final String UTF8 = "UTF-8";
+ private static final byte[] SPEAKER_ID = {0x01, 0x02, 0x03, 0x04};
private final ByteArrayOutputStream output = new ByteArrayOutputStream();
private final PrintStream stream = new PrintStream(this.output);
.setDeadtimer((short) 120)
.setIpAddress(IP_ADDRESS)
.setSessionId(0)
+ .addAugmentation(PcepEntityIdStatsAug.class, new PcepEntityIdStatsAugBuilder()
+ .setSpeakerEntityIdValue(SPEAKER_ID).build())
.build();
final PeerCapabilities capa = new PeerCapabilitiesBuilder()
Ip Address | 127.0.0.1
Dead Timer | 120
Keep Alive | 30
+Speaker Entity Identifier | [1, 2, 3, 4]
|
Peer preferences |
====================== |
import org.opendaylight.protocol.pcep.PCEPDispatcherDependencies;
import org.opendaylight.protocol.pcep.PCEPPeerProposal;
import org.opendaylight.protocol.pcep.PCEPSessionListenerFactory;
+import org.opendaylight.protocol.pcep.SpeakerIdMapping;
public final class PCEPDispatcherDependenciesImpl implements PCEPDispatcherDependencies {
private final ServerSessionManager manager;
return this.topologyConfigDependencies.getKeys();
}
+ @Override
+ public SpeakerIdMapping getSpeakerIdMapping() {
+ return this.topologyConfigDependencies.getSpeakerIds();
+ }
+
@Override
public PCEPSessionListenerFactory getListenerFactory() {
return this.manager;
import static java.util.Objects.requireNonNull;
import com.google.common.base.Optional;
-import com.google.common.util.concurrent.FutureCallback;
-import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.MoreExecutors;
+import java.util.concurrent.ExecutionException;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev171025.Tlvs3;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev171025.Tlvs3Builder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev171025.lsp.db.version.tlv.LspDbVersion;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev171025.speaker.entity.id.tlv.SpeakerEntityIdBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.Tlvs1;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev171025.Node1;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public final class PCEPStatefulPeerProposal {
+final class PCEPStatefulPeerProposal {
private static final Logger LOG = LoggerFactory.getLogger(PCEPStatefulPeerProposal.class);
return new PCEPStatefulPeerProposal(dataBroker, topologyId);
}
- void setPeerProposal(final NodeId nodeId, final TlvsBuilder openTlvsBuilder) {
+ void setPeerProposal(final NodeId nodeId, final TlvsBuilder openTlvsBuilder, final byte[] speakerId) {
if (isSynOptimizationEnabled(openTlvsBuilder)) {
+ Optional<LspDbVersion> result = Optional.absent();
try (final ReadOnlyTransaction rTx = this.dataBroker.newReadOnlyTransaction()) {
final ListenableFuture<Optional<LspDbVersion>> future = rTx.read(
- LogicalDatastoreType.OPERATIONAL,
- this.topologyId.child(Node.class, new NodeKey(nodeId)).augmentation(Node1.class)
- .child(PathComputationClient.class).augmentation(PathComputationClient1.class)
- .child(LspDbVersion.class));
- Futures.addCallback(future, new FutureCallback<Optional<LspDbVersion>>() {
- @Override
- public void onSuccess(final Optional<LspDbVersion> result) {
- if (result.isPresent()) {
- openTlvsBuilder.addAugmentation(Tlvs3.class,
- new Tlvs3Builder().setLspDbVersion(result.get()).build());
- }
- }
+ LogicalDatastoreType.OPERATIONAL,
+ this.topologyId.child(Node.class, new NodeKey(nodeId)).augmentation(Node1.class)
+ .child(PathComputationClient.class).augmentation(PathComputationClient1.class)
+ .child(LspDbVersion.class));
+ try {
+ result = future.get();
+ } catch (final InterruptedException | ExecutionException e) {
+ LOG.warn("Failed to read toplogy {}.", InstanceIdentifier.keyOf(
+ PCEPStatefulPeerProposal.this.topologyId), e);
- @Override
- public void onFailure(final Throwable t) {
- LOG.warn("Failed to read toplogy {}.", InstanceIdentifier.keyOf(
- PCEPStatefulPeerProposal.this.topologyId), t);
- }
- }, MoreExecutors.directExecutor());
+ }
}
+ if (speakerId == null && !result.isPresent()) {
+ return;
+ }
+ final Tlvs3Builder syncBuilder = new Tlvs3Builder();
+
+ if (result.isPresent()) {
+ syncBuilder.setLspDbVersion(result.get());
+ }
+ if (speakerId != null) {
+ syncBuilder.setSpeakerEntityId(new SpeakerEntityIdBuilder().setSpeakerEntityIdValue(speakerId).build());
+ }
+ openTlvsBuilder.addAugmentation(Tlvs3.class, syncBuilder.build()).build();
}
}
}
return false;
}
-
}
@Override
public void setPeerSpecificProposal(final InetSocketAddress address, final TlvsBuilder openBuilder) {
requireNonNull(address);
- this.peerProposal.setPeerProposal(createNodeId(address.getAddress()), openBuilder);
+ final byte[] speakerId = this.pcepDispatcherDependencies.getSpeakerIdMapping().get(address.getAddress());
+ this.peerProposal.setPeerProposal(createNodeId(address.getAddress()), openBuilder, speakerId);
}
short getRpcTimeout() {
import javax.annotation.Nonnull;
import org.opendaylight.bgpcep.programming.spi.InstructionScheduler;
import org.opendaylight.protocol.concepts.KeyMapping;
+import org.opendaylight.protocol.pcep.SpeakerIdMapping;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
private final InstructionScheduler scheduler;
private final TopologyId topologyId;
private final short rpcTimeout;
+ private final SpeakerIdMapping speakerIds;
private final InstanceIdentifier<Topology> topology;
public PCEPTopologyConfiguration(
@Nonnull final InetSocketAddress address,
@Nonnull final KeyMapping keys,
+ @Nonnull final SpeakerIdMapping speakerIds,
@Nonnull final InstructionScheduler scheduler,
@Nonnull final TopologyId topologyId,
final short rpcTimeout) {
this.address = checkNotNull(address);
this.keys = checkNotNull(keys);
+ this.speakerIds = checkNotNull(speakerIds);
this.scheduler = checkNotNull(scheduler);
this.topologyId = checkNotNull(topologyId);
this.rpcTimeout = rpcTimeout;
public KeyMapping getKeys() {
return this.keys;
}
+
+ @Nonnull
+ public SpeakerIdMapping getSpeakerIds() {
+ return this.speakerIds;
+ }
}
import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
import org.opendaylight.protocol.concepts.KeyMapping;
+import org.opendaylight.protocol.pcep.SpeakerIdMapping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.config.rev171025.pcep.config.SessionConfig;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.config.rev171025.PcepTopologyTypeConfig;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
.getInetSocketAddress(config.getListenAddress(), config.getListenPort());
final KeyMapping keys = PCEPTopologyProviderUtil.contructKeys(topology);
+ final SpeakerIdMapping speakerIds = PCEPTopologyProviderUtil.contructSpeakersId(topology);
final PCEPTopologyConfiguration dependencies = new PCEPTopologyConfiguration(
- inetAddress, keys, instructionScheduler, topology.getTopologyId(),
+ inetAddress, keys, speakerIds, instructionScheduler, topology.getTopologyId(),
config.getRpcTimeout());
final PCEPTopologyProviderBean pcepTopologyProviderBean = (PCEPTopologyProviderBean) this.container
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.opendaylight.protocol.concepts.KeyMapping;
+import org.opendaylight.protocol.pcep.SpeakerIdMapping;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.rfc2385.cfg.rev160324.Rfc2385Key;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.config.rev171025.PcepNodeConfig;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev171025.TopologyTypes1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.sync.optimizations.config.rev171025.PcepNodeSyncConfig;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.TopologyTypes;
topology.close();
}
}
+
+ static SpeakerIdMapping contructSpeakersId(final Topology topology) {
+ final SpeakerIdMapping ret = SpeakerIdMapping.getSpeakerIdMap();
+ topology.getNode().stream()
+ .filter(Objects::nonNull)
+ .filter(node -> node.getAugmentation(PcepNodeConfig.class) != null)
+ .filter(node -> node.getAugmentation(PcepNodeConfig.class).getSessionConfig() != null)
+ .filter(node -> node.getAugmentation(PcepNodeConfig.class).getSessionConfig()
+ .getAugmentation(PcepNodeSyncConfig.class) != null)
+ .forEach(node -> {
+ final PcepNodeConfig config = node.getAugmentation(PcepNodeConfig.class);
+ final PcepNodeSyncConfig nodeSyncConfig = config.getSessionConfig()
+ .getAugmentation(PcepNodeSyncConfig.class);
+ final InetAddress address = InetAddresses.forString(node.getNodeId().getValue());
+ ret.put(address, nodeSyncConfig.getSpeakerEntityIdValue());
+ });
+
+ return ret;
+ }
}
import java.util.concurrent.atomic.LongAdder;
import org.opendaylight.protocol.pcep.PCEPSessionState;
import org.opendaylight.protocol.util.StatisticsUtil;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev171025.Tlvs3;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev171025.speaker.entity.id.tlv.SpeakerEntityId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev171025.Pcinitiate;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.Pcupd;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev171113.PcepEntityIdStatsAug;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev171113.PcepEntityIdStatsAugBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev171113.StatefulCapabilitiesStatsAug;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev171113.StatefulCapabilitiesStatsAugBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev171113.StatefulMessagesStatsAug;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev171113.StatefulMessagesStatsAugBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.PcepSessionState;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.LocalPref;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.LocalPrefBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.Messages;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.MessagesBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.PeerCapabilities;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.reply.time.grouping.ReplyTime;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.reply.time.grouping.ReplyTimeBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open;
import org.opendaylight.yangtools.yang.binding.DataContainer;
public final class SessionStateImpl implements PcepSessionState {
public synchronized void init(final PCEPSessionState session) {
requireNonNull(session);
this.pcepSessionState = session;
- this.localPref = session.getLocalPref();
+ final Open localOpen = session.getLocalOpen();
+
+ if (localOpen.getTlvs() != null && localOpen.getTlvs().getAugmentation(Tlvs3.class) != null) {
+ final SpeakerEntityId entityId = localOpen.getTlvs().getAugmentation(Tlvs3.class).getSpeakerEntityId();
+ if (entityId != null) {
+ this.localPref = new LocalPrefBuilder(session.getLocalPref())
+ .addAugmentation(PcepEntityIdStatsAug.class,
+ new PcepEntityIdStatsAugBuilder(entityId).build()).build();
+ }
+ } else {
+ this.localPref = session.getLocalPref();
+ }
+
this.peerPref = session.getPeerPref();
this.sessionUpDuration.start();
}
import org.opendaylight.controller.md.sal.binding.test.AbstractConcurrentDataBrokerTest;
import org.opendaylight.protocol.concepts.KeyMapping;
import org.opendaylight.protocol.pcep.PCEPSessionListener;
+import org.opendaylight.protocol.pcep.SpeakerIdMapping;
import org.opendaylight.protocol.pcep.impl.DefaultPCEPSessionNegotiator;
import org.opendaylight.protocol.pcep.impl.PCEPSessionImpl;
import org.opendaylight.protocol.util.InetSocketAddressUtil;
.getActualTypeArguments()[0]).newInstance();
final PCEPTopologyConfiguration configDep = new PCEPTopologyConfiguration(ra, KeyMapping.getKeyMapping(),
- this.scheduler, TEST_TOPOLOGY_ID, RPC_TIMEOUT);
+ SpeakerIdMapping.getSpeakerIdMap(), this.scheduler, TEST_TOPOLOGY_ID, RPC_TIMEOUT);
this.manager = new ServerSessionManager(this.topologyDependencies, listenerFactory, configDep);
startSessionManager();
this.neg = new DefaultPCEPSessionNegotiator(this.promise, this.clientListener,
package org.opendaylight.bgpcep.pcep.topology.provider;
+import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.mockito.Matchers.any;
private static final NodeId NODE_ID = new NodeId("node");
private static final LspDbVersion LSP_DB_VERSION = new LspDbVersionBuilder().setLspDbVersionValue(
BigInteger.ONE).build();
+ private static final byte[] SPEAKER_ID = {0x01, 0x02, 0x03, 0x04};
@Mock
private DataBroker dataBroker;
@Test
public void testSetPeerProposalSuccess() throws InterruptedException, ExecutionException {
doReturn(Optional.of(LSP_DB_VERSION)).when(this.listenableFutureMock).get();
- final PCEPStatefulPeerProposal peerProposal = PCEPStatefulPeerProposal.createStatefulPeerProposal(this.dataBroker,
- TOPOLOGY_IID);
- peerProposal.setPeerProposal(NODE_ID, this.tlvsBuilder);
+ final PCEPStatefulPeerProposal peerProposal = PCEPStatefulPeerProposal
+ .createStatefulPeerProposal(this.dataBroker, TOPOLOGY_IID);
+ peerProposal.setPeerProposal(NODE_ID, this.tlvsBuilder, null);
assertEquals(LSP_DB_VERSION, this.tlvsBuilder.getAugmentation(Tlvs3.class).getLspDbVersion());
}
+ @Test
+ public void testSetPeerProposalWithEntityIdSuccess() throws InterruptedException, ExecutionException {
+ doReturn(Optional.of(LSP_DB_VERSION)).when(this.listenableFutureMock).get();
+ final PCEPStatefulPeerProposal peerProposal = PCEPStatefulPeerProposal
+ .createStatefulPeerProposal(this.dataBroker, TOPOLOGY_IID);
+ peerProposal.setPeerProposal(NODE_ID, this.tlvsBuilder, SPEAKER_ID);
+ final Tlvs3 aug = this.tlvsBuilder.getAugmentation(Tlvs3.class);
+ assertEquals(LSP_DB_VERSION, aug.getLspDbVersion());
+ assertArrayEquals(SPEAKER_ID, aug.getSpeakerEntityId().getSpeakerEntityIdValue());
+ }
+
@Test
public void testSetPeerProposalAbsent() throws InterruptedException, ExecutionException {
doReturn(Optional.absent()).when(this.listenableFutureMock).get();
- final PCEPStatefulPeerProposal peerProposal = PCEPStatefulPeerProposal.createStatefulPeerProposal(this.dataBroker,
- TOPOLOGY_IID);
- peerProposal.setPeerProposal(NODE_ID, this.tlvsBuilder);
+ final PCEPStatefulPeerProposal peerProposal = PCEPStatefulPeerProposal
+ .createStatefulPeerProposal(this.dataBroker, TOPOLOGY_IID);
+ peerProposal.setPeerProposal(NODE_ID, this.tlvsBuilder, null);
assertNull(this.tlvsBuilder.getAugmentation(Tlvs3.class));
}
@Test
public void testSetPeerProposalFailure() throws InterruptedException, ExecutionException {
- doThrow(new RuntimeException()).when(this.listenableFutureMock).get();
- final PCEPStatefulPeerProposal peerProposal = PCEPStatefulPeerProposal.createStatefulPeerProposal(this.dataBroker,
- TOPOLOGY_IID);
- peerProposal.setPeerProposal(NODE_ID, this.tlvsBuilder);
+ doThrow(new InterruptedException()).when(this.listenableFutureMock).get();
+ final PCEPStatefulPeerProposal peerProposal = PCEPStatefulPeerProposal
+ .createStatefulPeerProposal(this.dataBroker, TOPOLOGY_IID);
+ peerProposal.setPeerProposal(NODE_ID, this.tlvsBuilder, null);
assertNull(this.tlvsBuilder.getAugmentation(Tlvs3.class));
}