X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=bgp%2Fparser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fprotocol%2Fbgp%2Fparser%2Fimpl%2Fmessage%2Fupdate%2FClusterIdAttributeParser.java;h=495c1d1c5f6958171bcfb5fed3083be600cee5b4;hb=3c135df98a164d4207775de96a5217a392d1949e;hp=99c0f5834d69fa662794cfcb44e54c37d0618e06;hpb=5321f0235aa629aafaf39b358281c796759ac863;p=bgpcep.git diff --git a/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/update/ClusterIdAttributeParser.java b/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/update/ClusterIdAttributeParser.java index 99c0f5834d..495c1d1c5f 100644 --- a/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/update/ClusterIdAttributeParser.java +++ b/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/update/ClusterIdAttributeParser.java @@ -7,17 +7,19 @@ */ package org.opendaylight.protocol.bgp.parser.impl.message.update; +import com.google.common.base.Preconditions; import com.google.common.collect.Lists; - import io.netty.buffer.ByteBuf; - +import io.netty.buffer.Unpooled; import java.util.List; - import org.opendaylight.protocol.bgp.parser.spi.AttributeParser; import org.opendaylight.protocol.bgp.parser.spi.AttributeSerializer; -import org.opendaylight.protocol.concepts.Ipv4Util; -import org.opendaylight.protocol.util.ByteArray; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.update.PathAttributesBuilder; +import org.opendaylight.protocol.bgp.parser.spi.AttributeUtil; +import org.opendaylight.protocol.util.Ipv4Util; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.Attributes; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.AttributesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.ClusterId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.ClusterIdBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.ClusterIdentifier; import org.opendaylight.yangtools.yang.binding.DataObject; @@ -25,19 +27,26 @@ public final class ClusterIdAttributeParser implements AttributeParser, Attribut public static final int TYPE = 10; - private static final int CLUSTER_LENGTH = 4; - @Override - public void parseAttribute(final ByteBuf buffer, final PathAttributesBuilder builder) { + public void parseAttribute(final ByteBuf buffer, final AttributesBuilder builder) { final List list = Lists.newArrayList(); while (buffer.isReadable()) { - list.add(new ClusterIdentifier(Ipv4Util.addressForBytes(ByteArray.readBytes(buffer, CLUSTER_LENGTH)))); + list.add(new ClusterIdentifier(Ipv4Util.addressForByteBuf(buffer))); } - builder.setClusterId(list); + builder.setClusterId(new ClusterIdBuilder().setCluster(list).build()); } @Override - public void serializeAttribute(DataObject attribute, ByteBuf byteAggregator) { - //TODO implement this + public void serializeAttribute(final DataObject attribute, final ByteBuf byteAggregator) { + Preconditions.checkArgument(attribute instanceof Attributes, "Attribute parameter is not a PathAttribute object."); + final ClusterId cid = ((Attributes) attribute).getClusterId(); + if (cid == null) { + return; + } + final ByteBuf clusterIdBuffer = Unpooled.buffer(); + for (final ClusterIdentifier clusterIdentifier : cid.getCluster()) { + clusterIdBuffer.writeBytes(Ipv4Util.bytesForAddress(clusterIdentifier)); + } + AttributeUtil.formatAttribute(AttributeUtil.OPTIONAL, TYPE, clusterIdBuffer, byteAggregator); } }