Bug 611 - serialization of path attributes
[bgpcep.git] / bgp / parser-impl / src / main / java / org / opendaylight / protocol / bgp / parser / impl / message / update / CommunitiesAttributeParser.java
index fd0347339850156ba6659073c4c74d2ef2f6b3a2..a233ca96e8e2d7b379132e92d1d74047ba3675b1 100644 (file)
@@ -9,11 +9,10 @@ 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.AttributeFlags;
 import org.opendaylight.protocol.bgp.parser.BGPDocumentedException;
 import org.opendaylight.protocol.bgp.parser.spi.AttributeParser;
 import org.opendaylight.protocol.bgp.parser.spi.AttributeSerializer;
@@ -27,6 +26,7 @@ import org.opendaylight.yangtools.yang.binding.DataObject;
 public final class CommunitiesAttributeParser implements AttributeParser, AttributeSerializer {
 
     public static final int TYPE = 8;
+    public static final int ATTR_LENGTH = 4;
 
     private final ReferenceCache refCache;
 
@@ -52,8 +52,14 @@ public final class CommunitiesAttributeParser implements AttributeParser, Attrib
         if (communities == null) {
             return;
         }
+        ByteBuf communitiesBuffer = Unpooled.buffer();
         for (Community community : communities) {
-            byteAggregator.writeInt(community.getAsNumber().getValue().intValue());
+            communitiesBuffer.writeShort(community.getAsNumber().getValue().shortValue());
+            communitiesBuffer.writeShort(community.getSemantics().shortValue());
         }
+        byteAggregator.writeByte(AttributeFlags.TRANSITIVE | AttributeFlags.PARTIAL);
+        byteAggregator.writeByte(CommunitiesAttributeParser.TYPE);
+        byteAggregator.writeByte(communitiesBuffer.writerIndex());
+        byteAggregator.writeBytes(communitiesBuffer);
     }
 }