ca1a8ff513c3c864d48d3b2b5efdde06b1c6954f
[bgpcep.git] / bgp / rib-impl / src / main / java / org / opendaylight / protocol / bgp / rib / impl / BGPSessionProposalImpl.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.protocol.bgp.rib.impl;
9
10 import java.util.List;
11
12 import org.opendaylight.protocol.bgp.rib.impl.spi.BGPSessionPreferences;
13 import org.opendaylight.protocol.bgp.rib.impl.spi.BGPSessionProposal;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.LinkstateAddressFamily;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.LinkstateSubsequentAddressFamily;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.open.BgpParameters;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.open.bgp.parameters.c.parameters.CAs4BytesBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.open.bgp.parameters.c.parameters.c.as4.bytes.As4BytesCapabilityBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.open.bgp.parameters.c.parameters.CMultiprotocolBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.open.bgp.parameters.c.parameters.c.multiprotocol.MultiprotocolCapabilityBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv4AddressFamily;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.UnicastSubsequentAddressFamily;
25
26 import com.google.common.collect.Lists;
27
28 /**
29  * Basic implementation of BGP Session Proposal. The values are taken from conf-bgp.
30  */
31 public final class BGPSessionProposalImpl implements BGPSessionProposal {
32
33         private final short holdTimer;
34
35         private final int as;
36
37         private final Ipv4Address bgpId;
38
39         private final BGPSessionPreferences prefs;
40
41         public BGPSessionProposalImpl(final short holdTimer, final int as, final Ipv4Address bgpId) {
42                 this.holdTimer = holdTimer;
43                 this.as = as;
44                 this.bgpId = bgpId;
45
46                 final List<BgpParameters> tlvs = Lists.newArrayList();
47                 tlvs.add((BgpParameters) new CMultiprotocolBuilder().setMultiprotocolCapability(new MultiprotocolCapabilityBuilder().setAfi(
48                                 Ipv4AddressFamily.class).setSafi(UnicastSubsequentAddressFamily.class).build()));
49                 tlvs.add((BgpParameters) new CMultiprotocolBuilder().setMultiprotocolCapability(new MultiprotocolCapabilityBuilder().setAfi(
50                                 LinkstateAddressFamily.class).setSafi(LinkstateSubsequentAddressFamily.class).build()));
51                 // final Map<BGPTableType, Boolean> tableTypes = Maps.newHashMap();
52                 // tableTypes.put(ipv4, true);
53                 // tableTypes.put(linkstate,true);
54                 // tlvs.add(new GracefulCapability(true, 0, tableTypes));
55                 tlvs.add((BgpParameters) new CAs4BytesBuilder().setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber(
56                                 new AsNumber((long) as)).build()));
57                 this.prefs = new BGPSessionPreferences(as, holdTimer, bgpId, tlvs);
58         }
59
60         @Override
61         public BGPSessionPreferences getProposal() {
62                 return this.prefs;
63         }
64
65         /**
66          * @return the holdTimer
67          */
68         public short getHoldTimer() {
69                 return this.holdTimer;
70         }
71
72         /**
73          * @return the as
74          */
75         public int getAs() {
76                 return this.as;
77         }
78
79         /**
80          * @return the bgpId
81          */
82         public Ipv4Address getBgpId() {
83                 return this.bgpId;
84         }
85 }