--- /dev/null
+/*
+ * Copyright (c) 2023 PANTHEON.tech, s.r.o. 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 static java.util.Objects.requireNonNull;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.config.rev230112.PcepSessionTimers;
+import org.opendaylight.yangtools.yang.common.Uint8;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A curated {@link #keepAlive()} and {@link #deadTimer()} timer proposal.
+ */
+public record PCEPTimerProposal(@NonNull Uint8 keepAlive, @NonNull Uint8 deadTimer) {
+ private static final Logger LOG = LoggerFactory.getLogger(PCEPTimerProposal.class);
+ private static final int KA_TO_DEADTIMER_RATIO = 4;
+
+ public PCEPTimerProposal {
+ requireNonNull(keepAlive);
+
+ if (!Uint8.ZERO.equals(keepAlive)) {
+ requireNonNull(deadTimer);
+ if (!Uint8.ZERO.equals(deadTimer) && deadTimer.toJava() / keepAlive.toJava() != KA_TO_DEADTIMER_RATIO) {
+ LOG.warn("dead-timer-value ({}) should be {} times greater than keep-alive-timer-value ({}}",
+ deadTimer, KA_TO_DEADTIMER_RATIO, keepAlive);
+ }
+ } else {
+ deadTimer = Uint8.ZERO;
+ }
+ }
+
+ public PCEPTimerProposal(final PcepSessionTimers timers) {
+ this(timers.requireKeepAliveTimerValue(), timers.requireDeadTimerValue());
+ }
+}
import org.opendaylight.protocol.pcep.PCEPCapability;
import org.opendaylight.protocol.pcep.PCEPPeerProposal;
import org.opendaylight.protocol.pcep.PCEPSessionProposalFactory;
+import org.opendaylight.protocol.pcep.PCEPTimerProposal;
+import org.opendaylight.protocol.pcep.impl.spi.Util;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.config.rev230112.PcepSessionTimers;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.Open;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.OpenBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.open.TlvsBuilder;
import org.opendaylight.yangtools.yang.common.Uint8;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
public final class BasePCEPSessionProposalFactory implements PCEPSessionProposalFactory {
- private static final Logger LOG = LoggerFactory.getLogger(BasePCEPSessionProposalFactory.class);
- private static final int KA_TO_DEADTIMER_RATIO = 4;
-
private final @NonNull List<PCEPCapability> capabilities;
- private final @NonNull Uint8 keepAlive;
- private final @NonNull Uint8 deadTimer;
+ private final @NonNull PCEPTimerProposal timers;
+
+ public BasePCEPSessionProposalFactory(final PCEPTimerProposal timers, final List<PCEPCapability> capabilities) {
+ this.timers = requireNonNull(timers);
+ this.capabilities = requireNonNull(capabilities);
+ }
public BasePCEPSessionProposalFactory(final PcepSessionTimers timers, final List<PCEPCapability> capabilities) {
- this(timers.getDeadTimerValue(), timers.getKeepAliveTimerValue(), capabilities);
+ this(new PCEPTimerProposal(timers), capabilities);
}
public BasePCEPSessionProposalFactory(final Uint8 deadTimer, final Uint8 keepAlive,
final List<PCEPCapability> capabilities) {
- this.keepAlive = requireNonNull(keepAlive);
- this.capabilities = requireNonNull(capabilities);
-
- if (!Uint8.ZERO.equals(keepAlive)) {
- this.deadTimer = requireNonNull(deadTimer);
- if (!Uint8.ZERO.equals(deadTimer) && deadTimer.toJava() / keepAlive.toJava() != KA_TO_DEADTIMER_RATIO) {
- LOG.warn("dead-timer-value ({}) should be {} times greater than keep-alive-timer-value ({}}",
- deadTimer, KA_TO_DEADTIMER_RATIO, keepAlive);
- }
- } else {
- this.deadTimer = Uint8.ZERO;
- }
+ this(new PCEPTimerProposal(keepAlive, deadTimer), capabilities);
}
@Override
public Open getSessionProposal(final InetSocketAddress address, final Uint8 sessionId,
final PCEPPeerProposal peerProposal) {
- final var builder = new TlvsBuilder();
- for (final var capability : capabilities) {
- capability.setCapabilityProposal(address, builder);
- }
-
- if (peerProposal != null) {
- peerProposal.setPeerSpecificProposal(address, builder);
- }
-
- return new OpenBuilder()
- .setSessionId(sessionId)
- .setKeepalive(keepAlive)
- .setDeadTimer(deadTimer)
- .setTlvs(builder.build())
- .build();
+ return Util.createOpenObject(address, sessionId, timers, capabilities, peerProposal);
}
@Override
*/
package org.opendaylight.protocol.pcep.impl.spi;
+import java.net.InetSocketAddress;
import java.util.Collections;
+import java.util.List;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.protocol.pcep.PCEPCapability;
+import org.opendaylight.protocol.pcep.PCEPPeerProposal;
+import org.opendaylight.protocol.pcep.PCEPTimerProposal;
import org.opendaylight.protocol.pcep.spi.PCEPErrors;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.Pcerr;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.PcerrBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.Open;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.OpenBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.open.TlvsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcep.error.object.ErrorObject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcep.error.object.ErrorObjectBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.PcerrMessageBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.ErrorsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.SessionCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.session._case.SessionBuilder;
+import org.opendaylight.yangtools.yang.common.Uint8;
/**
* Utilities used in pcep-impl.
.setErrorType(type).build())
.build();
}
+
+ public static Open createOpenObject(final InetSocketAddress address, final Uint8 sessionId,
+ final PCEPTimerProposal timers, final List<PCEPCapability> capabilities,
+ final @Nullable PCEPPeerProposal peerProposal) {
+ final var builder = new TlvsBuilder();
+ for (final var capability : capabilities) {
+ capability.setCapabilityProposal(address, builder);
+ }
+
+ if (peerProposal != null) {
+ peerProposal.setPeerSpecificProposal(address, builder);
+ }
+
+ return new OpenBuilder()
+ .setSessionId(sessionId)
+ .setKeepalive(timers.keepAlive())
+ .setDeadTimer(timers.deadTimer())
+ .setTlvs(builder.build())
+ .build();
+ }
}