*/
package org.opendaylight.protocol.bgp.rib.impl;
+import com.google.common.collect.Lists;
+import java.util.ArrayList;
import java.util.List;
-
-import org.opendaylight.protocol.bgp.concepts.BGPTableType;
-import org.opendaylight.protocol.bgp.parser.BGPParameter;
-import org.opendaylight.protocol.bgp.parser.parameter.AS4BytesCapability;
-import org.opendaylight.protocol.bgp.parser.parameter.MultiprotocolCapability;
+import java.util.Map;
+import java.util.Map.Entry;
import org.opendaylight.protocol.bgp.rib.impl.spi.BGPSessionPreferences;
import org.opendaylight.protocol.bgp.rib.impl.spi.BGPSessionProposal;
-import org.opendaylight.protocol.concepts.ASNumber;
-import org.opendaylight.protocol.concepts.IPv4Address;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.BgpAddressFamily;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.BgpSubsequentAddressFamily;
-
-import com.google.common.collect.Lists;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.BgpParametersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilities;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilitiesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.as4.bytes._case.As4BytesCapabilityBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.GracefulRestartCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.graceful.restart._case.GracefulRestartCapabilityBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.multiprotocol._case.MultiprotocolCapabilityBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.AddressFamily;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.SubsequentAddressFamily;
/**
* Basic implementation of BGP Session Proposal. The values are taken from conf-bgp.
*/
public final class BGPSessionProposalImpl implements BGPSessionProposal {
- private final short holdTimer;
+ private final short holdTimer;
- private final ASNumber as;
+ private final AsNumber as;
- private final IPv4Address bgpId;
+ private final Ipv4Address bgpId;
- private final BGPSessionPreferences prefs;
+ private final BGPSessionPreferences prefs;
- public BGPSessionProposalImpl(final short holdTimer, final ASNumber as, final IPv4Address bgpId) {
- this.holdTimer = holdTimer;
- this.as = as;
- this.bgpId = bgpId;
+ public BGPSessionProposalImpl(final short holdTimer, final AsNumber as, final Ipv4Address bgpId,
+ final Map<Class<? extends AddressFamily>, Class<? extends SubsequentAddressFamily>> tables) {
+ this.holdTimer = holdTimer;
+ this.as = as;
+ this.bgpId = bgpId;
+ final List<OptionalCapabilities> caps = new ArrayList<>();
- final BGPTableType ipv4 = new BGPTableType(BgpAddressFamily.Ipv4, BgpSubsequentAddressFamily.Unicast);
- final BGPTableType linkstate = new BGPTableType(BgpAddressFamily.Linkstate, BgpSubsequentAddressFamily.Linkstate);
- final List<BGPParameter> tlvs = Lists.newArrayList();
- tlvs.add(new MultiprotocolCapability(ipv4));
- tlvs.add(new MultiprotocolCapability(linkstate));
- // final Map<BGPTableType, Boolean> tableTypes = Maps.newHashMap();
- // tableTypes.put(ipv4, true);
- // tableTypes.put(linkstate,true);
- // tlvs.add(new GracefulCapability(true, 0, tableTypes));
- tlvs.add(new AS4BytesCapability(as));
- this.prefs = new BGPSessionPreferences(as, holdTimer, bgpId, tlvs);
- }
+ for (final Entry<Class<? extends AddressFamily>, Class<? extends SubsequentAddressFamily>> e : tables.entrySet()) {
+ caps.add(new OptionalCapabilitiesBuilder().setCParameters(
+ new MultiprotocolCaseBuilder().setMultiprotocolCapability(
+ new MultiprotocolCapabilityBuilder().setAfi(e.getKey()).setSafi(e.getValue()).build()).build()).build());
+ }
+ caps.add(new OptionalCapabilitiesBuilder().setCParameters(
+ new As4BytesCaseBuilder().setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber(as).build()).build()).build());
+ caps.add(new OptionalCapabilitiesBuilder().setCParameters(
+ new GracefulRestartCaseBuilder().setGracefulRestartCapability(
+ new GracefulRestartCapabilityBuilder().build()).build()).build());
+ this.prefs = new BGPSessionPreferences(as, holdTimer, bgpId, Lists.newArrayList(new BgpParametersBuilder().setOptionalCapabilities(caps).build()));
+ }
- @Override
- public BGPSessionPreferences getProposal() {
- return this.prefs;
- }
+ @Override
+ public BGPSessionPreferences getProposal() {
+ return this.prefs;
+ }
- /**
- * @return the holdTimer
- */
- public short getHoldTimer() {
- return this.holdTimer;
- }
+ /**
+ * @return the holdTimer
+ */
+ public short getHoldTimer() {
+ return this.holdTimer;
+ }
- /**
- * @return the as
- */
- public ASNumber getAs() {
- return this.as;
- }
+ /**
+ * @return the as
+ */
+ public AsNumber getAs() {
+ return this.as;
+ }
- /**
- * @return the bgpId
- */
- public IPv4Address getBgpId() {
- return this.bgpId;
- }
+ /**
+ * @return the bgpId
+ */
+ public Ipv4Address getBgpId() {
+ return this.bgpId;
+ }
}