BUG-635: implement MD5 auth option for BGP peers
[bgpcep.git] / bgp / rib-impl / src / main / java / org / opendaylight / protocol / bgp / rib / impl / BGPSessionProposalImpl.java
index b679368f03c1a5c2ec586eaf1795da9ef440b6b7..fe65b8ca02dfc5afd5f2de438a459f64738e02cb 100644 (file)
@@ -8,21 +8,21 @@
 package org.opendaylight.protocol.bgp.rib.impl;
 
 import java.util.List;
+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.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.linkstate.rev131125.LinkstateAddressFamily;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.LinkstateSubsequentAddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.BgpParameters;
 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.c.parameters.CAs4BytesBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.c.parameters.c.as4.bytes.As4BytesCapabilityBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.c.parameters.CMultiprotocolBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.c.parameters.c.multiprotocol.MultiprotocolCapabilityBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv4AddressFamily;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.UnicastSubsequentAddressFamily;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.c.parameters.As4BytesCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.c.parameters.as4.bytes._case.As4BytesCapabilityBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.c.parameters.MultiprotocolCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.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;
 
 import com.google.common.collect.Lists;
 
@@ -33,28 +33,26 @@ public final class BGPSessionProposalImpl implements BGPSessionProposal {
 
        private final short holdTimer;
 
-       private final int as;
+       private final AsNumber as;
 
        private final Ipv4Address bgpId;
 
        private final BGPSessionPreferences prefs;
 
-       public BGPSessionProposalImpl(final short holdTimer, final int as, final Ipv4Address 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;
 
-               // FIXME: the reference to linkstate should be moved to config subsystem!
                final List<BgpParameters> tlvs = Lists.newArrayList();
+               for (final Entry<Class<? extends AddressFamily>, Class<? extends SubsequentAddressFamily>> e : tables.entrySet()) {
+                       tlvs.add(new BgpParametersBuilder().setCParameters(
+                                       new MultiprotocolCaseBuilder().setMultiprotocolCapability(
+                                                       new MultiprotocolCapabilityBuilder().setAfi(e.getKey()).setSafi(e.getValue()).build()).build()).build());
+               }
                tlvs.add(new BgpParametersBuilder().setCParameters(
-                               new CMultiprotocolBuilder().setMultiprotocolCapability(
-                                               new MultiprotocolCapabilityBuilder().setAfi(Ipv4AddressFamily.class).setSafi(UnicastSubsequentAddressFamily.class).build()).build()).build());
-               tlvs.add(new BgpParametersBuilder().setCParameters(
-                               new CMultiprotocolBuilder().setMultiprotocolCapability(
-                                               new MultiprotocolCapabilityBuilder().setAfi(LinkstateAddressFamily.class).setSafi(
-                                                               LinkstateSubsequentAddressFamily.class).build()).build()).build());
-               tlvs.add(new BgpParametersBuilder().setCParameters(
-                               new CAs4BytesBuilder().setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber(new AsNumber((long) as)).build()).build()).build());
+                               new As4BytesCaseBuilder().setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber(as).build()).build()).build());
                this.prefs = new BGPSessionPreferences(as, holdTimer, bgpId, tlvs);
        }
 
@@ -73,7 +71,7 @@ public final class BGPSessionProposalImpl implements BGPSessionProposal {
        /**
         * @return the as
         */
-       public int getAs() {
+       public AsNumber getAs() {
                return this.as;
        }