2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.protocol.pcep.impl;
10 import static java.util.Objects.requireNonNull;
12 import com.google.common.base.Preconditions;
13 import java.net.InetSocketAddress;
14 import java.util.List;
15 import org.opendaylight.protocol.pcep.PCEPCapability;
16 import org.opendaylight.protocol.pcep.PCEPPeerProposal;
17 import org.opendaylight.protocol.pcep.PCEPSessionProposalFactory;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.Open;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.OpenBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.open.TlvsBuilder;
21 import org.opendaylight.yangtools.yang.common.Uint8;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
25 public final class BasePCEPSessionProposalFactory implements PCEPSessionProposalFactory {
26 private static final Logger LOG = LoggerFactory.getLogger(BasePCEPSessionProposalFactory.class);
27 private static final int KA_TO_DEADTIMER_RATIO = 4;
29 private final int keepAlive;
30 private final int deadTimer;
31 private final List<PCEPCapability> capabilities;
33 public BasePCEPSessionProposalFactory(final int deadTimer, final int keepAlive,
34 final List<PCEPCapability> capabilities) {
36 Preconditions.checkArgument(keepAlive >= 1, "Minimum value for keep-alive-timer-value is 1");
37 if (deadTimer != 0 && deadTimer / keepAlive != KA_TO_DEADTIMER_RATIO) {
38 LOG.warn("dead-timer-value should be {} times greater than keep-alive-timer-value",
39 KA_TO_DEADTIMER_RATIO);
43 this.deadTimer = deadTimer;
44 this.keepAlive = keepAlive;
45 this.capabilities = requireNonNull(capabilities);
48 private void addTlvs(final InetSocketAddress address, final TlvsBuilder builder) {
49 for (final PCEPCapability capability : this.capabilities) {
50 capability.setCapabilityProposal(address, builder);
55 public Open getSessionProposal(final InetSocketAddress address, final int sessionId,
56 final PCEPPeerProposal peerProposal) {
57 final OpenBuilder oBuilder = new OpenBuilder();
58 oBuilder.setSessionId((short) sessionId);
59 oBuilder.setKeepalive((short) BasePCEPSessionProposalFactory.this.keepAlive);
60 if (BasePCEPSessionProposalFactory.this.keepAlive == 0) {
61 oBuilder.setDeadTimer(Uint8.ZERO);
63 oBuilder.setDeadTimer((short) BasePCEPSessionProposalFactory.this.deadTimer);
66 final TlvsBuilder builder = new TlvsBuilder();
67 addTlvs(address, builder);
69 if (peerProposal != null) {
70 peerProposal.setPeerSpecificProposal(address, builder);
72 return oBuilder.setTlvs(builder.build()).build();
76 public List<PCEPCapability> getCapabilities() {
77 return this.capabilities;