BUG-3823 : fixed sonar issues in linkstate 81/24281/2
authorDana Kutenicsova <dkutenic@cisco.com>
Mon, 20 Jul 2015 11:41:31 +0000 (13:41 +0200)
committerDana Kutenicsova <dkutenic@cisco.com>
Mon, 20 Jul 2015 11:45:15 +0000 (11:45 +0000)
Mostly reduced method complexity.

Change-Id: I215f6b1c65ba8f3d29bbcfe4fef99f0df59990cc
Signed-off-by: Dana Kutenicsova <dkutenic@cisco.com>
bgp/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/attribute/LinkAttributesParser.java
bgp/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/attribute/NodeAttributesParser.java
bgp/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/attribute/PrefixAttributesParser.java
bgp/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/nlri/NodeNlriParser.java
bgp/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/nlri/PrefixNlriParser.java

index df551647aa89692e6a3623c1b7f838a3abe7b36b..8eb3231767623e0c6b0379ee6cf90a9375f2d276 100644 (file)
@@ -14,7 +14,6 @@ import io.netty.buffer.ByteBuf;
 import io.netty.buffer.ByteBufUtil;
 import io.netty.buffer.Unpooled;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Map.Entry;
 import org.opendaylight.protocol.bgp.linkstate.attribute.sr.SrLinkAttributesParser;
@@ -28,13 +27,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.link
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.Ipv6RouterIdentifier;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.LinkProtectionType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.MplsProtocolMask;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.PeerSetSid;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.PeerSetSidBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.PeerSid;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.PeerSidBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.SrAdjId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.SrAdjIdBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.SrLanAdjId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.UnreservedBandwidth;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.UnreservedBandwidthBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.linkstate.path.attribute.LinkStateAttribute;
@@ -101,24 +96,20 @@ public final class LinkAttributesParser {
             final ByteBuf value = entry.getValue();
             switch (key) {
             case TlvUtil.LOCAL_IPV4_ROUTER_ID:
-                final Ipv4RouterIdentifier lipv4 = new Ipv4RouterIdentifier(Ipv4Util.addressForByteBuf(value));
-                builder.setLocalIpv4RouterId(lipv4);
-                LOG.debug("Parsed IPv4 Router-ID of local node: {}", lipv4);
+                builder.setLocalIpv4RouterId(new Ipv4RouterIdentifier(Ipv4Util.addressForByteBuf(value)));
+                LOG.debug("Parsed IPv4 Router-ID of local node: {}", builder.getLocalIpv4RouterId());
                 break;
             case TlvUtil.LOCAL_IPV6_ROUTER_ID:
-                final Ipv6RouterIdentifier lipv6 = new Ipv6RouterIdentifier(Ipv6Util.addressForByteBuf(value));
-                builder.setLocalIpv6RouterId(lipv6);
-                LOG.debug("Parsed IPv6 Router-ID of local node: {}", lipv6);
+                builder.setLocalIpv6RouterId(new Ipv6RouterIdentifier(Ipv6Util.addressForByteBuf(value)));
+                LOG.debug("Parsed IPv6 Router-ID of local node: {}", builder.getLocalIpv6RouterId());
                 break;
             case REMOTE_IPV4_ROUTER_ID:
-                final Ipv4RouterIdentifier ripv4 = new Ipv4RouterIdentifier(Ipv4Util.addressForByteBuf(value));
-                builder.setRemoteIpv4RouterId(ripv4);
-                LOG.debug("Parsed IPv4 Router-ID of remote node: {}", ripv4);
+                builder.setRemoteIpv4RouterId(new Ipv4RouterIdentifier(Ipv4Util.addressForByteBuf(value)));
+                LOG.debug("Parsed IPv4 Router-ID of remote node: {}", builder.getRemoteIpv4RouterId());
                 break;
             case REMOTE_IPV6_ROUTER_ID:
-                final Ipv6RouterIdentifier ripv6 = new Ipv6RouterIdentifier(Ipv6Util.addressForByteBuf(value));
-                builder.setRemoteIpv6RouterId(ripv6);
-                LOG.debug("Parsed IPv6 Router-ID of remote node: {}", ripv6);
+                builder.setRemoteIpv6RouterId(new Ipv6RouterIdentifier(Ipv6Util.addressForByteBuf(value)));
+                LOG.debug("Parsed IPv6 Router-ID of remote node: {}", builder.getRemoteIpv6RouterId());
                 break;
             case ADMIN_GROUP:
                 builder.setAdminGroup(new AdministrativeGroup(value.readUnsignedInt()));
@@ -133,27 +124,15 @@ public final class LinkAttributesParser {
                 LOG.debug("Parsed Max Reservable Bandwidth {}", builder.getMaxReservableBandwidth());
                 break;
             case UNRESERVED_BANDWIDTH:
-                final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.UnreservedBandwidth> unreservedBandwidth = new ArrayList<>(UNRESERVED_BW_COUNT);
-                for (int i = 0; i < UNRESERVED_BW_COUNT; i++) {
-                    final ByteBuf v = value.readSlice(BANDWIDTH_LENGTH);
-                    unreservedBandwidth.add(new UnreservedBandwidthBuilder().setBandwidth(new Bandwidth(ByteArray.readAllBytes(v))).setPriority((short) i).build());
-                }
-                builder.setUnreservedBandwidth(unreservedBandwidth);
-                LOG.debug("Parsed Unreserved Bandwidth {}", builder.getUnreservedBandwidth());
+                parseUnreservedBandwidth(value, builder);
                 break;
             case TE_METRIC:
                 builder.setTeMetric(new TeMetric(ByteArray.bytesToLong(ByteArray.readAllBytes(value))));
                 LOG.debug("Parsed Metric {}", builder.getTeMetric());
                 break;
             case LINK_PROTECTION_TYPE:
-                final int l = value.readShort();
-                final LinkProtectionType lpt = LinkProtectionType.forValue(l);
-                if (lpt == null) {
-                    LOG.warn("Link Protection Type not recognized: {}", l);
-                    break;
-                }
-                builder.setLinkProtection(lpt);
-                LOG.debug("Parsed Link Protection Type {}", lpt);
+                builder.setLinkProtection(LinkProtectionType.forValue(value.readShort()));
+                LOG.debug("Parsed Link Protection Type {}", builder.getLinkProtection());
                 break;
             case MPLS_PROTOCOL:
                 final BitArray bits = BitArray.valueOf(value, FLAGS_SIZE);
@@ -166,40 +145,30 @@ public final class LinkAttributesParser {
                 LOG.debug("Parsed Metric {}", builder.getMetric());
                 break;
             case SHARED_RISK_LINK_GROUP:
-                final List<SrlgId> sharedRiskLinkGroups = new ArrayList<>();
-                while (value.isReadable()) {
-                    sharedRiskLinkGroups.add(new SrlgId(value.readUnsignedInt()));
-                }
-                builder.setSharedRiskLinkGroups(sharedRiskLinkGroups);
-                LOG.debug("Parsed Shared Risk Link Groups {}", Arrays.toString(sharedRiskLinkGroups.toArray()));
+                parseSrlg(value, builder);
                 break;
             case LINK_OPAQUE:
                 LOG.debug("Parsed Opaque value : {}", ByteBufUtil.hexDump(value));
                 break;
             case LINK_NAME:
-                final String name = new String(ByteArray.readAllBytes(value), Charsets.US_ASCII);
-                builder.setLinkName(name);
-                LOG.debug("Parsed Link Name : {}", name);
+                builder.setLinkName(new String(ByteArray.readAllBytes(value), Charsets.US_ASCII));
+                LOG.debug("Parsed Link Name : {}", builder.getLinkName());
                 break;
             case SR_ADJ_ID:
-                final SrAdjId srAdjId = new SrAdjIdBuilder(SrLinkAttributesParser.parseAdjacencySegmentIdentifier(value)).build();
-                builder.setSrAdjId(srAdjId);
-                LOG.debug("Parsed Adjacency Segment Identifier :{}", srAdjId);
+                builder.setSrAdjId(new SrAdjIdBuilder(SrLinkAttributesParser.parseAdjacencySegmentIdentifier(value)).build());
+                LOG.debug("Parsed Adjacency Segment Identifier :{}", builder.getSrAdjId());
                 break;
             case SR_LAN_ADJ_ID:
-                final SrLanAdjId srLanAdjId = SrLinkAttributesParser.parseLanAdjacencySegmentIdentifier(value);
-                builder.setSrLanAdjId(srLanAdjId);
-                LOG.debug("Parsed Adjacency Segment Identifier :{}", srLanAdjId);
+                builder.setSrLanAdjId(SrLinkAttributesParser.parseLanAdjacencySegmentIdentifier(value));
+                LOG.debug("Parsed Adjacency Segment Identifier :{}", builder.getSrLanAdjId());
                 break;
             case PEER_SID_CODE:
-                final PeerSid peerSid = new PeerSidBuilder(SrLinkAttributesParser.parseAdjacencySegmentIdentifier(value)).build();
-                builder.setPeerSid(peerSid);
-                LOG.debug("Parsed Peer Segment Identifier :{}", peerSid);
+                builder.setPeerSid(new PeerSidBuilder(SrLinkAttributesParser.parseAdjacencySegmentIdentifier(value)).build());
+                LOG.debug("Parsed Peer Segment Identifier :{}", builder.getPeerSid());
                 break;
             case PEER_SET_SID_CODE:
-                final PeerSetSid peerSetSid = new PeerSetSidBuilder(SrLinkAttributesParser.parseAdjacencySegmentIdentifier(value)).build();
-                builder.setPeerSetSid(peerSetSid);
-                LOG.debug("Parsed Peer Set Sid :{}", peerSetSid);
+                builder.setPeerSetSid(new PeerSetSidBuilder(SrLinkAttributesParser.parseAdjacencySegmentIdentifier(value)).build());
+                LOG.debug("Parsed Peer Set Sid :{}", builder.getPeerSetSid());
                 break;
             default:
                 LOG.warn("TLV {} is not a valid link attribute, ignoring it", key);
@@ -209,6 +178,25 @@ public final class LinkAttributesParser {
         return new LinkAttributesCaseBuilder().setLinkAttributes(builder.build()).build();
     }
 
+    private static void parseUnreservedBandwidth(final ByteBuf value, final LinkAttributesBuilder builder) {
+        final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.link.state.UnreservedBandwidth> unreservedBandwidth = new ArrayList<>(UNRESERVED_BW_COUNT);
+        for (int i = 0; i < UNRESERVED_BW_COUNT; i++) {
+            final ByteBuf v = value.readSlice(BANDWIDTH_LENGTH);
+            unreservedBandwidth.add(new UnreservedBandwidthBuilder().setBandwidth(new Bandwidth(ByteArray.readAllBytes(v))).setPriority((short) i).build());
+        }
+        builder.setUnreservedBandwidth(unreservedBandwidth);
+        LOG.debug("Parsed Unreserved Bandwidth {}", builder.getUnreservedBandwidth());
+    }
+
+    private static void parseSrlg(final ByteBuf value, final LinkAttributesBuilder builder) {
+        final List<SrlgId> sharedRiskLinkGroups = new ArrayList<>();
+        while (value.isReadable()) {
+            sharedRiskLinkGroups.add(new SrlgId(value.readUnsignedInt()));
+        }
+        builder.setSharedRiskLinkGroups(sharedRiskLinkGroups);
+        LOG.debug("Parsed Shared Risk Link Groups {}", builder.getSharedRiskLinkGroups());
+    }
+
     static void serializeLinkAttributes(final LinkAttributesCase linkAttributesCase, final ByteBuf byteAggregator) {
         final LinkAttributes linkAttributes = linkAttributesCase.getLinkAttributes();
         LOG.trace("Started serializing Link Attributes");
@@ -233,15 +221,7 @@ public final class LinkAttributesParser {
         if (linkAttributes.getMaxReservableBandwidth() != null) {
             TlvUtil.writeTLV(MAX_RESERVABLE_BANDWIDTH, Unpooled.wrappedBuffer(linkAttributes.getMaxReservableBandwidth().getValue()), byteAggregator);
         }
-        // this sub-TLV contains eight 32-bit IEEE floating point numbers
-        final List<UnreservedBandwidth> ubList = linkAttributes.getUnreservedBandwidth();
-        if (ubList != null) {
-            final ByteBuf unreservedBandwithBuf = Unpooled.buffer();
-            for (final UnreservedBandwidth unreservedBandwidth : ubList) {
-                unreservedBandwithBuf.writeBytes(unreservedBandwidth.getBandwidth().getValue());
-            }
-            TlvUtil.writeTLV(UNRESERVED_BANDWIDTH, unreservedBandwithBuf, byteAggregator);
-        }
+        serializeUnreservedBw(linkAttributes.getUnreservedBandwidth(), byteAggregator);
         if (linkAttributes.getTeMetric() != null) {
             TlvUtil.writeTLV(TE_METRIC, Unpooled.copyLong(linkAttributes.getTeMetric().getValue().longValue()), byteAggregator);
         }
@@ -253,14 +233,7 @@ public final class LinkAttributesParser {
             // size of metric can be 1,2 or 3 depending on the protocol
             TlvUtil.writeTLV(METRIC, Unpooled.copyMedium(linkAttributes.getMetric().getValue().intValue()), byteAggregator);
         }
-        final List<SrlgId> srlgList = linkAttributes.getSharedRiskLinkGroups();
-        if (srlgList != null) {
-            final ByteBuf sharedRLGBuf = Unpooled.buffer();
-            for (final SrlgId srlgId : srlgList) {
-                sharedRLGBuf.writeInt(srlgId.getValue().intValue());
-            }
-            TlvUtil.writeTLV(SHARED_RISK_LINK_GROUP, sharedRLGBuf, byteAggregator);
-        }
+        serializeSrlg(linkAttributes.getSharedRiskLinkGroups(), byteAggregator);
         if (linkAttributes.getLinkName() != null) {
             TlvUtil.writeTLV(LINK_NAME, Unpooled.wrappedBuffer(Charsets.UTF_8.encode(linkAttributes.getLinkName())), byteAggregator);
         }
@@ -279,6 +252,27 @@ public final class LinkAttributesParser {
         LOG.trace("Finished serializing Link Attributes");
     }
 
+    private static void serializeUnreservedBw(final List<UnreservedBandwidth> ubList, final ByteBuf byteAggregator) {
+        // this sub-TLV contains eight 32-bit IEEE floating point numbers
+        if (ubList != null) {
+            final ByteBuf unreservedBandwithBuf = Unpooled.buffer();
+            for (final UnreservedBandwidth unreservedBandwidth : ubList) {
+                unreservedBandwithBuf.writeBytes(unreservedBandwidth.getBandwidth().getValue());
+            }
+            TlvUtil.writeTLV(UNRESERVED_BANDWIDTH, unreservedBandwithBuf, byteAggregator);
+        }
+    }
+
+    private static void serializeSrlg(final List<SrlgId> srlgList, final ByteBuf byteAggregator) {
+        if (srlgList != null) {
+            final ByteBuf sharedRLGBuf = Unpooled.buffer();
+            for (final SrlgId srlgId : srlgList) {
+                sharedRLGBuf.writeInt(srlgId.getValue().intValue());
+            }
+            TlvUtil.writeTLV(SHARED_RISK_LINK_GROUP, sharedRLGBuf, byteAggregator);
+        }
+    }
+
     private static void serializeMplsProtocolMask(final MplsProtocolMask mplsProtocolMask, final ByteBuf byteAggregator ) {
         if (mplsProtocolMask != null) {
             final ByteBuf mplsProtocolMaskBuf = Unpooled.buffer(1);
index 36b4e1446dcf33bd886d2b4c81d1ad0d3c7ed82b..bef35d2979e03ff61f4c6c5ff1237bc07059f3d5 100644 (file)
@@ -82,11 +82,7 @@ public final class NodeAttributesParser {
             LOG.trace("Node attribute TLV {}", key);
             switch (key) {
             case TlvUtil.MULTI_TOPOLOGY_ID:
-                while (value.isReadable()) {
-                    final TopologyIdentifier topId = new TopologyIdentifier(value.readUnsignedShort() & TlvUtil.TOPOLOGY_ID_OFFSET);
-                    topologyMembership.add(topId);
-                    LOG.debug("Parsed Topology Identifier: {}", topId);
-                }
+                parseTopologyId(topologyMembership, value);
                 break;
             case NODE_FLAG_BITS:
                 final BitArray flags = BitArray.valueOf(value, FLAGS_SIZE);
@@ -143,17 +139,18 @@ public final class NodeAttributesParser {
         return new NodeAttributesCaseBuilder().setNodeAttributes(builder.build()).build();
     }
 
+    private static void parseTopologyId(final List<TopologyIdentifier> topologyMembership, final ByteBuf value) {
+        while (value.isReadable()) {
+            final TopologyIdentifier topId = new TopologyIdentifier(value.readUnsignedShort() & TlvUtil.TOPOLOGY_ID_OFFSET);
+            topologyMembership.add(topId);
+            LOG.debug("Parsed Topology Identifier: {}", topId);
+        }
+    }
+
     static void serializeNodeAttributes(final NodeAttributesCase nodeAttributesCase, final ByteBuf byteAggregator) {
         LOG.trace("Started serializing Node Attributes");
         final NodeAttributes nodeAttributes = nodeAttributesCase.getNodeAttributes();
-        final List<TopologyIdentifier> topList = nodeAttributes.getTopologyIdentifier();
-        if (topList != null) {
-            final ByteBuf mpIdBuf = Unpooled.buffer();
-            for (final TopologyIdentifier topologyIdentifier : topList) {
-                mpIdBuf.writeShort(topologyIdentifier.getValue());
-            }
-            TlvUtil.writeTLV(TlvUtil.MULTI_TOPOLOGY_ID, mpIdBuf, byteAggregator);
-        }
+        serializeTopologyId(nodeAttributes.getTopologyIdentifier(), byteAggregator);
         serializeNodeFlagBits(nodeAttributes.getNodeFlags(), byteAggregator);
         if (nodeAttributes.getDynamicHostname() != null) {
             TlvUtil.writeTLV(DYNAMIC_HOSTNAME, Unpooled.wrappedBuffer(Charsets.UTF_8.encode(nodeAttributes.getDynamicHostname())), byteAggregator);
@@ -188,6 +185,16 @@ public final class NodeAttributesParser {
         LOG.trace("Finished serializing Node Attributes");
     }
 
+    private static void serializeTopologyId(final List<TopologyIdentifier> topList, final ByteBuf byteAggregator) {
+        if (topList != null) {
+            final ByteBuf mpIdBuf = Unpooled.buffer();
+            for (final TopologyIdentifier topologyIdentifier : topList) {
+                mpIdBuf.writeShort(topologyIdentifier.getValue());
+            }
+            TlvUtil.writeTLV(TlvUtil.MULTI_TOPOLOGY_ID, mpIdBuf, byteAggregator);
+        }
+    }
+
     private static void serializeNodeFlagBits(final NodeFlagBits nodeFlagBits, final ByteBuf byteAggregator) {
         if (nodeFlagBits != null) {
             final ByteBuf nodeFlagBuf = Unpooled.buffer(1);
index 30905e683894cfdf268ff5a25c13bfe0b2fd41f0..e5643e48fad616f9d8dbacf5eeea5237ae50dc90 100644 (file)
@@ -84,18 +84,10 @@ public final class PrefixAttributesParser {
                 LOG.debug("Parsed IGP flag (up/down bit) : {}", upDownBit);
                 break;
             case ROUTE_TAG:
-                while (value.isReadable()) {
-                    final RouteTag routeTag = new RouteTag(ByteArray.readBytes(value, ROUTE_TAG_LENGTH));
-                    routeTags.add(routeTag);
-                    LOG.debug("Parsed Route Tag: {}", routeTag);
-                }
+                parseRouteTags(routeTags, value);
                 break;
             case EXTENDED_ROUTE_TAG:
-                while (value.isReadable()) {
-                    final ExtendedRouteTag exRouteTag = new ExtendedRouteTag(ByteArray.readBytes(value, EXTENDED_ROUTE_TAG_LENGTH));
-                    exRouteTags.add(exRouteTag);
-                    LOG.debug("Parsed Extended Route Tag: {}", exRouteTag);
-                }
+                parseExtendedRouteTags(exRouteTags, value);
                 break;
             case PREFIX_METRIC:
                 final IgpMetric metric = new IgpMetric(value.readUnsignedInt());
@@ -108,7 +100,9 @@ public final class PrefixAttributesParser {
                 LOG.debug("Parsed FWD Address: {}", fwdAddress);
                 break;
             case PREFIX_OPAQUE:
-                LOG.debug("Parsed Opaque value: {}, not preserving it", ByteBufUtil.hexDump(value));
+                if (LOG.isDebugEnabled()) {
+                    LOG.debug("Parsed Opaque value: {}, not preserving it", ByteBufUtil.hexDump(value));
+                }
                 break;
             case PREFIX_SID:
                 final SrPrefix prefix = SrPrefixAttributesParser.parseSrPrefix(value);
@@ -125,6 +119,22 @@ public final class PrefixAttributesParser {
         return new PrefixAttributesCaseBuilder().setPrefixAttributes(builder.build()).build();
     }
 
+    private static void parseRouteTags(final List<RouteTag> routeTags, final ByteBuf value) {
+        while (value.isReadable()) {
+            final RouteTag routeTag = new RouteTag(ByteArray.readBytes(value, ROUTE_TAG_LENGTH));
+            routeTags.add(routeTag);
+            LOG.debug("Parsed Route Tag: {}", routeTag);
+        }
+    }
+
+    private static void parseExtendedRouteTags(final List<ExtendedRouteTag> exRouteTags, final ByteBuf value) {
+        while (value.isReadable()) {
+            final ExtendedRouteTag exRouteTag = new ExtendedRouteTag(ByteArray.readBytes(value, EXTENDED_ROUTE_TAG_LENGTH));
+            exRouteTags.add(exRouteTag);
+            LOG.debug("Parsed Extended Route Tag: {}", exRouteTag);
+        }
+    }
+
     private static IpAddress parseForwardingAddress(final ByteBuf value) {
         IpAddress fwdAddress = null;
         switch (value.readableBytes()) {
@@ -147,21 +157,8 @@ public final class PrefixAttributesParser {
             igpBit.set(UP_DOWN_BIT, prefixAtrributes.getIgpBits().getUpDown().isUpDown());
             TlvUtil.writeTLV(IGP_FLAGS, Unpooled.wrappedBuffer(igpBit.array()), byteAggregator);
         }
-        if (prefixAtrributes.getRouteTags() != null) {
-            final ByteBuf routeTagsBuf = Unpooled.buffer();
-            for (final RouteTag routeTag : prefixAtrributes.getRouteTags()) {
-                routeTagsBuf.writeBytes(routeTag.getValue());
-            }
-            TlvUtil.writeTLV(ROUTE_TAG, routeTagsBuf, byteAggregator);
-        }
-        final List<ExtendedRouteTag> routeTagList = prefixAtrributes.getExtendedTags();
-        if (routeTagList != null) {
-            final ByteBuf extendedBuf = Unpooled.buffer();
-            for (final ExtendedRouteTag extendedRouteTag : routeTagList) {
-                extendedBuf.writeBytes(extendedRouteTag.getValue());
-            }
-            TlvUtil.writeTLV(EXTENDED_ROUTE_TAG, extendedBuf, byteAggregator);
-        }
+        serializeRouteTags(prefixAtrributes.getRouteTags(), byteAggregator);
+        serializeExtendedRouteTags(prefixAtrributes.getExtendedTags(), byteAggregator);
         if (prefixAtrributes.getPrefixMetric() != null) {
             TlvUtil.writeTLV(PREFIX_METRIC, Unpooled.copyInt(prefixAtrributes.getPrefixMetric().getValue().intValue()), byteAggregator);
         }
@@ -174,6 +171,26 @@ public final class PrefixAttributesParser {
 
     }
 
+    private static void serializeRouteTags(final List<RouteTag> routeTags, final ByteBuf byteAggregator) {
+        if (routeTags != null) {
+            final ByteBuf routeTagsBuf = Unpooled.buffer();
+            for (final RouteTag routeTag : routeTags) {
+                routeTagsBuf.writeBytes(routeTag.getValue());
+            }
+            TlvUtil.writeTLV(ROUTE_TAG, routeTagsBuf, byteAggregator);
+        }
+    }
+
+    private static void serializeExtendedRouteTags(final List<ExtendedRouteTag> exRouteTags, final ByteBuf byteAggregator) {
+        if (exRouteTags != null) {
+            final ByteBuf extendedBuf = Unpooled.buffer();
+            for (final ExtendedRouteTag exRouteTag : exRouteTags) {
+                extendedBuf.writeBytes(exRouteTag.getValue());
+            }
+            TlvUtil.writeTLV(EXTENDED_ROUTE_TAG, extendedBuf, byteAggregator);
+        }
+    }
+
     private static void serializeForwardingAddress(final IpAddress forwardingAddress, final ByteBuf byteAggregator) {
         if (forwardingAddress != null) {
             final ByteBuf ospfBuf = Unpooled.buffer();
index 636ca2a7cdd085705382a70207215be1c1ed30d3..a17f224c9ac931251c6319a3aff4ce3a2d33a062 100644 (file)
@@ -158,6 +158,10 @@ public final class NodeNlriParser {
             }
         }
         LOG.trace("Finished parsing Node descriptors.");
+        return correctType(nlriType, local, asnumber, ai, routerId, bgpId, bgpRouterId, memberAsn);
+    }
+
+    private static org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.NodeIdentifier correctType(final NlriType nlriType, final boolean local, final AsNumber asnumber, final AreaIdentifier ai, final CRouterIdentifier routerId, final DomainIdentifier bgpId, final Ipv4Address bgpRouterId, final AsNumber memberAsn) {
         switch (nlriType) {
         case Link:
             if (local) {
index 4b66f2b6dd18bf1a621dc657499e646fbb7597f4..e27b3e235e8157728ea1843eadab7009c9c6bbe8 100644 (file)
@@ -15,7 +15,6 @@ import io.netty.buffer.ByteBufUtil;
 import io.netty.buffer.Unpooled;
 import org.opendaylight.protocol.bgp.linkstate.spi.TlvUtil;
 import org.opendaylight.protocol.bgp.parser.BGPParsingException;
-import org.opendaylight.protocol.util.ByteArray;
 import org.opendaylight.protocol.util.Ipv4Util;
 import org.opendaylight.protocol.util.Ipv6Util;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
@@ -77,15 +76,7 @@ public final class PrefixNlriParser {
                 LOG.trace("Parser RouteType: {}", routeType);
                 break;
             case IP_REACHABILITY:
-                IpPrefix prefix = null;
-                final int prefixLength = value.readByte();
-                final int size = prefixLength / Byte.SIZE + ((prefixLength % Byte.SIZE == 0) ? 0 : 1);
-                if (size != value.readableBytes()) {
-                    LOG.debug("Expected length {}, actual length {}.", size, value.readableBytes());
-                    throw new BGPParsingException("Illegal length of IP reachability TLV: " + (value.readableBytes()));
-                }
-                prefix = (ipv4) ? new IpPrefix(Ipv4Util.prefixForBytes(ByteArray.readBytes(value, size), prefixLength)) :
-                    new IpPrefix(Ipv6Util.prefixForBytes(ByteArray.readBytes(value, size), prefixLength));
+                final IpPrefix prefix = (ipv4) ? new IpPrefix(Ipv4Util.prefixForByteBuf(value)) : new IpPrefix(Ipv6Util.prefixForByteBuf(value));
                 builder.setIpReachabilityInformation(prefix);
                 LOG.trace("Parsed IP reachability info: {}", prefix);
                 break;