BUG-2383 : split ipv4/6 to separate model
[bgpcep.git] / bgp / rib-impl / src / main / java / org / opendaylight / protocol / bgp / rib / impl / BGPSessionProposalImpl.java
index e6b304917a7f1d08949ef1aaee932c18c8a5145f..cbae35b5164e29c4ee3aef4ddf8ec619d2580194 100644 (file)
@@ -7,75 +7,83 @@
  */
 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.BGPAddressFamily;
-import org.opendaylight.protocol.bgp.concepts.BGPSubsequentAddressFamily;
-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 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;
+    }
 }