Optimize uint interactions in bgp-linkstate 69/96969/2
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 21 Jul 2021 08:28:48 +0000 (10:28 +0200)
committerRobert Varga <nite@hq.sk>
Wed, 21 Jul 2021 10:27:50 +0000 (10:27 +0000)
Use writeUint{8,16,32} instead of manual conversions. Also protect
a hexDump() call. Also add obvious ByteBuf sizing hints.

Change-Id: I462b9d3d566efc2bee020df15ac08ed6c89dea8d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
bgp/extensions/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/impl/attribute/LinkAttributesParser.java
bgp/extensions/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/impl/attribute/NodeAttributesParser.java
bgp/extensions/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/impl/attribute/sr/BindingSidLabelParser.java
bgp/extensions/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/impl/attribute/sr/RangeTlvParser.java
bgp/extensions/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/impl/attribute/sr/SrLinkAttributesParser.java
bgp/extensions/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/impl/attribute/sr/binding/sid/sub/tlvs/EroMetricParser.java
bgp/extensions/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/impl/attribute/sr/binding/sid/sub/tlvs/UnnumberedEroParser.java

index 0c904b0c754a0074e51ca18e2ce6f110fc017e0c..5ba5f2020129ed32b6ecc60cb9ff5e894feacb04 100644 (file)
@@ -7,6 +7,9 @@
  */
 package org.opendaylight.protocol.bgp.linkstate.impl.attribute;
 
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint32;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.writeUint32;
+
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.Multimap;
 import io.netty.buffer.ByteBuf;
@@ -58,7 +61,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev
 import org.opendaylight.yangtools.yang.binding.util.BindingMap;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.common.Uint8;
-import org.opendaylight.yangtools.yang.common.netty.ByteBufUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -148,7 +150,7 @@ public final class LinkAttributesParser {
                     LOG.debug("Parsed IPv6 Router-ID of remote node: {}", builder.getRemoteIpv6RouterId());
                     break;
                 case ADMIN_GROUP:
-                    builder.setAdminGroup(new AdministrativeGroup(ByteBufUtils.readUint32(value)));
+                    builder.setAdminGroup(new AdministrativeGroup(readUint32(value)));
                     LOG.debug("Parsed Administrative Group {}", builder.getAdminGroup());
                     break;
                 case MAX_BANDWIDTH:
@@ -163,7 +165,7 @@ public final class LinkAttributesParser {
                     parseUnreservedBandwidth(value, builder);
                     break;
                 case TE_METRIC:
-                    builder.setTeMetric(new TeMetric(ByteBufUtils.readUint32(value)));
+                    builder.setTeMetric(new TeMetric(readUint32(value)));
                     LOG.debug("Parsed Metric {}", builder.getTeMetric());
                     break;
                 case LINK_PROTECTION_TYPE:
@@ -184,7 +186,9 @@ public final class LinkAttributesParser {
                     parseSrlg(value, builder);
                     break;
                 case LINK_OPAQUE:
-                    LOG.debug("Parsed Opaque value : {}", ByteBufUtil.hexDump(value));
+                    if (LOG.isDebugEnabled()) {
+                        LOG.debug("Parsed Opaque value : {}", ByteBufUtil.hexDump(value));
+                    }
                     break;
                 case LINK_NAME:
                     builder.setLinkName(new String(ByteArray.readAllBytes(value), StandardCharsets.US_ASCII));
@@ -215,22 +219,22 @@ public final class LinkAttributesParser {
                     break;
                     // Performance Metrics
                 case LINK_DELAY:
-                    builder.setLinkDelay(new Delay(ByteBufUtils.readUint32(value)));
+                    builder.setLinkDelay(new Delay(readUint32(value)));
                     LOG.debug("Parsed Link Delay {}", builder.getLinkDelay());
                     break;
                 case LINK_MIN_MAX_DELAY:
                     builder.setLinkMinMaxDelay(new LinkMinMaxDelayBuilder()
-                        .setMinDelay(new Delay(ByteBufUtils.readUint32(value)))
-                        .setMaxDelay(new Delay(ByteBufUtils.readUint32(value)))
+                        .setMinDelay(new Delay(readUint32(value)))
+                        .setMaxDelay(new Delay(readUint32(value)))
                         .build());
                     LOG.debug("Parsed Link Min/Max Delay {}", builder.getLinkMinMaxDelay());
                     break;
                 case DELAY_VARIATION:
-                    builder.setDelayVariation(new Delay(ByteBufUtils.readUint32(value)));
+                    builder.setDelayVariation(new Delay(readUint32(value)));
                     LOG.debug("Parsed Delay Variation {}", builder.getDelayVariation());
                     break;
                 case LINK_LOSS:
-                    builder.setLinkLoss(new Loss(ByteBufUtils.readUint32(value)));
+                    builder.setLinkLoss(new Loss(readUint32(value)));
                     LOG.debug("Parsed Link Loss {}", builder.getLinkLoss());
                     break;
                 case RESIDUAL_BANDWIDTH:
@@ -279,7 +283,7 @@ public final class LinkAttributesParser {
     private static void parseSrlg(final ByteBuf value, final LinkAttributesBuilder builder) {
         final List<SrlgId> sharedRiskLinkGroups = new ArrayList<>();
         while (value.isReadable()) {
-            sharedRiskLinkGroups.add(new SrlgId(ByteBufUtils.readUint32(value)));
+            sharedRiskLinkGroups.add(new SrlgId(readUint32(value)));
         }
         builder.setSharedRiskLinkGroups(sharedRiskLinkGroups);
         LOG.debug("Parsed Shared Risk Link Groups {}", builder.getSharedRiskLinkGroups());
@@ -365,7 +369,7 @@ public final class LinkAttributesParser {
         if (srlgList != null) {
             final ByteBuf sharedRLGBuf = Unpooled.buffer();
             for (final SrlgId srlgId : srlgList) {
-                sharedRLGBuf.writeInt(srlgId.getValue().intValue());
+                writeUint32(sharedRLGBuf, srlgId.getValue());
             }
             TlvUtil.writeTLV(SHARED_RISK_LINK_GROUP, sharedRLGBuf, byteAggregator);
         }
@@ -385,9 +389,9 @@ public final class LinkAttributesParser {
 
     private static void serializeLinkMinMaxDelay(final LinkMinMaxDelay linkMinMaxDelay, final ByteBuf byteAggregator) {
         if (linkMinMaxDelay != null) {
-            final ByteBuf linkMinMaxDelayBuf = Unpooled.buffer();
-            linkMinMaxDelayBuf.writeInt(linkMinMaxDelay.getMinDelay().getValue().intValue());
-            linkMinMaxDelayBuf.writeInt(linkMinMaxDelay.getMaxDelay().getValue().intValue());
+            final ByteBuf linkMinMaxDelayBuf = Unpooled.buffer(8);
+            writeUint32(linkMinMaxDelayBuf, linkMinMaxDelay.getMinDelay().getValue());
+            writeUint32(linkMinMaxDelayBuf, linkMinMaxDelay.getMaxDelay().getValue());
             TlvUtil.writeTLV(LINK_MIN_MAX_DELAY, linkMinMaxDelayBuf, byteAggregator);
         }
     }
index 1aeea0b704f4011168796124c000a8815d82534a..79e3948961b603808747488cc4a9e2ed6c9d8802 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.protocol.bgp.linkstate.impl.attribute;
 
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.writeUint16;
+
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.Multimap;
 import io.netty.buffer.ByteBuf;
@@ -189,7 +191,7 @@ public final class NodeAttributesParser {
         if (topList != null) {
             final ByteBuf mpIdBuf = Unpooled.buffer();
             for (final TopologyIdentifier topologyIdentifier : topList) {
-                mpIdBuf.writeShort(topologyIdentifier.getValue().toJava());
+                writeUint16(mpIdBuf, topologyIdentifier.getValue());
             }
             TlvUtil.writeTLV(TlvUtil.MULTI_TOPOLOGY_ID, mpIdBuf, byteAggregator);
         }
index 7dac77b088839ba6cb26791159217ac8c0a05982..b6a916a416169598b6f6900294bf4fae78dc80c4 100644 (file)
@@ -7,6 +7,9 @@
  */
 package org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr;
 
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint8;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.writeUint8;
+
 import io.netty.buffer.ByteBuf;
 import java.util.List;
 import org.opendaylight.protocol.bgp.linkstate.spi.pojo.SimpleBindingSubTlvsRegistry;
@@ -21,7 +24,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segm
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.binding.sid.tlv.flags.IsisBindingFlagsCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.binding.sid.tlv.flags.OspfBindingFlagsCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.binding.sid.tlv.flags.OspfBindingFlagsCaseBuilder;
-import org.opendaylight.yangtools.yang.common.netty.ByteBufUtils;
 
 public final class BindingSidLabelParser {
     /* Flags */
@@ -42,7 +44,7 @@ public final class BindingSidLabelParser {
 
     public static SrBindingSidLabels parseBindingSidLabel(final ByteBuf buffer, final ProtocolId protocolId) {
         final SrBindingSidLabelsBuilder bindingSid = new SrBindingSidLabelsBuilder();
-        bindingSid.setWeight(new Weight(ByteBufUtils.readUint8(buffer)));
+        bindingSid.setWeight(new Weight(readUint8(buffer)));
         final BitArray flags = BitArray.valueOf(buffer, FLAGS_SIZE);
         bindingSid.setFlags(parseBindingSidFlags(flags, protocolId));
         buffer.skipBytes(RESERVED_BINDING_SID);
@@ -69,7 +71,7 @@ public final class BindingSidLabelParser {
 
     public static void serializeBindingSidAttributes(final Weight weight, final Flags flags,
             final List<BindingSubTlvs> bindingSubTlvs, final ByteBuf aggregator) {
-        aggregator.writeByte(weight.getValue().toJava());
+        writeUint8(aggregator, weight.getValue());
         final BitArray bitFlags = serializeBindingSidFlags(flags);
         bitFlags.toByteBuf(aggregator);
         aggregator.writeZero(RESERVED_BINDING_SID);
index 00c417e2c686874132950d0b142e020913440b34..7a06a0adf78117ea5e898354d4ed63b9b90133ea 100644 (file)
@@ -11,6 +11,8 @@ import static org.opendaylight.protocol.bgp.linkstate.impl.attribute.PrefixAttri
 import static org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.Ipv4PrefixSidParser.PREFIX_SID;
 import static org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.Ipv6PrefixSidParser.IPV6_PREFIX_SID;
 import static org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.SIDParser.SID_TYPE;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint16;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.writeUint16;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
@@ -37,7 +39,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segm
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.range.sub.tlvs.range.sub.tlv.prefix.sid.tlv._case.PrefixSidTlvBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.range.tlv.SubTlvs;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.range.tlv.SubTlvsBuilder;
-import org.opendaylight.yangtools.yang.common.netty.ByteBufUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -61,7 +62,7 @@ public final class RangeTlvParser {
             range.setInterArea(Boolean.FALSE);
         }
         buffer.skipBytes(RESERVED);
-        range.setRangeSize(ByteBufUtils.readUint16(buffer));
+        range.setRangeSize(readUint16(buffer));
         range.setSubTlvs(parseRangeSubTlvs(buffer, protocolId));
         return range.build();
     }
@@ -105,7 +106,7 @@ public final class RangeTlvParser {
         flags.set(INNER_AREA, srRange.getInterArea());
         flags.toByteBuf(aggregator);
         aggregator.writeZero(RESERVED);
-        aggregator.writeShort(srRange.getRangeSize().toJava());
+        writeUint16(aggregator, srRange.getRangeSize());
         serializeSubTlvs(aggregator, srRange.getSubTlvs());
     }
 
index b58189c06ef1cc20e86386a28be0fb5d98cde586..ff082ea05a2842fac34c118bcf7e86cad9673be6 100644 (file)
@@ -8,6 +8,8 @@
 package org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr;
 
 import static org.opendaylight.protocol.bgp.linkstate.impl.attribute.LinkAttributesParser.SR_LAN_ADJ_ID;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint8;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.writeUint8;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
@@ -35,7 +37,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segm
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.adj.flags.flags.ospf.adj.flags._case.OspfAdjFlagsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.sid.label.index.SidLabelIndex;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.IsoSystemIdentifier;
-import org.opendaylight.yangtools.yang.common.netty.ByteBufUtils;
 
 public final class SrLinkAttributesParser {
     private static final int ISO_SYSTEM_ID_SIZE = 6;
@@ -81,7 +82,7 @@ public final class SrLinkAttributesParser {
         if (buffer.isReadable()) {
             final BitArray flags = BitArray.valueOf(buffer, FLAGS_BITS_SIZE);
             adjFlags = parseFlags(flags, protocolId);
-            weight = new Weight(ByteBufUtils.readUint8(buffer));
+            weight = new Weight(readUint8(buffer));
             buffer.skipBytes(RESERVED);
             final boolean isValue;
             final boolean isLocal;
@@ -114,7 +115,7 @@ public final class SrLinkAttributesParser {
         final SidLabelIndex sidValue;
         if (buffer.isReadable()) {
             final BitArray flags = BitArray.valueOf(buffer, FLAGS_BITS_SIZE);
-            weight = new Weight(ByteBufUtils.readUint8(buffer));
+            weight = new Weight(readUint8(buffer));
             buffer.skipBytes(RESERVED);
             sidValue = SidLabelIndexParser.parseSidLabelIndexByFlags(Size.forValue(buffer.readableBytes()), buffer,
                     flags.get(VALUE_EPE), flags.get(LOCAL_EPE));
@@ -147,7 +148,7 @@ public final class SrLinkAttributesParser {
         final SrLanAdjIdsBuilder srLanAdjIdBuilder = new SrLanAdjIdsBuilder();
         final BitArray flags = BitArray.valueOf(buffer, FLAGS_BITS_SIZE);
         srLanAdjIdBuilder.setFlags(parseFlags(flags, protocolId));
-        srLanAdjIdBuilder.setWeight(new Weight(ByteBufUtils.readUint8(buffer)));
+        srLanAdjIdBuilder.setWeight(new Weight(readUint8(buffer)));
         buffer.skipBytes(RESERVED);
         final boolean isValue;
         final boolean isLocal;
@@ -214,7 +215,7 @@ public final class SrLinkAttributesParser {
         } else {
             value.writeZero(FLAGS_BYTE_SIZE);
         }
-        value.writeByte(adjSid.getWeight().getValue().toJava());
+        writeUint8(value, adjSid.getWeight().getValue());
         value.writeZero(RESERVED);
         value.writeBytes(SidLabelIndexParser.serializeSidValue(adjSid.getSidLabelIndex()));
         return value;
@@ -231,7 +232,7 @@ public final class SrLinkAttributesParser {
         final ByteBuf value = Unpooled.buffer();
         final BitArray flags = serializeAdjFlags(srLanAdjId.getFlags(), srLanAdjId.getSidLabelIndex());
         flags.toByteBuf(value);
-        value.writeByte(srLanAdjId.getWeight().getValue().toJava());
+        writeUint8(value, srLanAdjId.getWeight().getValue());
         value.writeZero(RESERVED);
         if (srLanAdjId.getIsoSystemId() != null) {
             value.writeBytes(srLanAdjId.getIsoSystemId().getValue());
index dfb9c3ef7f04c50acbaa0da58e172e70f3ed98b1..5ea2a5faaf216cae65719da9c4e7df3d5662fb97 100644 (file)
@@ -8,6 +8,8 @@
 package org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs;
 
 import static com.google.common.base.Preconditions.checkArgument;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint32;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.writeUint32;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
@@ -19,14 +21,13 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segm
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.binding.sub.tlvs.binding.sub.tlv.EroMetricCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.binding.sub.tlvs.binding.sub.tlv.EroMetricCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.TeMetric;
-import org.opendaylight.yangtools.yang.common.netty.ByteBufUtils;
 
 public final class EroMetricParser implements BindingSubTlvsParser, BindingSubTlvsSerializer {
     private static final int ERO_METRIC = 1162;
 
     @Override
     public BindingSubTlv parseSubTlv(final ByteBuf slice, final ProtocolId protocolId) {
-        return new EroMetricCaseBuilder().setEroMetric(new TeMetric(ByteBufUtils.readUint32(slice))).build();
+        return new EroMetricCaseBuilder().setEroMetric(new TeMetric(readUint32(slice))).build();
     }
 
     @Override
@@ -38,8 +39,8 @@ public final class EroMetricParser implements BindingSubTlvsParser, BindingSubTl
     public void serializeSubTlv(final BindingSubTlv bindingSubTlv, final ByteBuf aggregator) {
         checkArgument(bindingSubTlv instanceof EroMetricCase, "Wrong BindingSubTlv instance expected",
             bindingSubTlv);
-        final ByteBuf buffer = Unpooled.buffer();
-        buffer.writeInt(((EroMetricCase) bindingSubTlv).getEroMetric().getValue().intValue());
+        final ByteBuf buffer = Unpooled.buffer(4);
+        writeUint32(buffer, ((EroMetricCase) bindingSubTlv).getEroMetric().getValue());
         TlvUtil.writeTLV(getType(), buffer, aggregator);
     }
 }
index d97a27b47b7b9b26882031b926986beefaa33dda..e1dfaed4cf1f87494c8246457a3aa4724c2f8688 100644 (file)
@@ -8,6 +8,8 @@
 package org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs;
 
 import static com.google.common.base.Preconditions.checkArgument;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint32;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.writeUint32;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
@@ -25,7 +27,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segm
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.binding.sub.tlvs.binding.sub.tlv.unnumbered._interface.id.ero._case.UnnumberedInterfaceIdEro;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.binding.sub.tlvs.binding.sub.tlv.unnumbered._interface.id.ero._case.UnnumberedInterfaceIdEroBuilder;
 import org.opendaylight.yangtools.yang.common.Uint32;
-import org.opendaylight.yangtools.yang.common.netty.ByteBufUtils;
 
 public final class UnnumberedEroParser implements BindingSubTlvsParser, BindingSubTlvsSerializer {
     private static final int UNNUMBERED_ERO = 1165;
@@ -55,8 +56,8 @@ public final class UnnumberedEroParser implements BindingSubTlvsParser, BindingS
         final BitArray flags = BitArray.valueOf(buffer, Ipv4EroParser.FLAGS_SIZE);
         builder.setLoose(flags.get(Ipv4EroParser.LOOSE));
         buffer.skipBytes(Ipv4EroParser.RESERVED_ERO);
-        builder.setRouterId(ByteBufUtils.readUint32(buffer));
-        builder.setInterfaceId(ByteBufUtils.readUint32(buffer));
+        builder.setRouterId(readUint32(buffer));
+        builder.setInterfaceId(readUint32(buffer));
         return new UnnumberedInterfaceIdEroCaseBuilder().setUnnumberedInterfaceIdEro(builder.build()).build();
     }
 
@@ -65,8 +66,8 @@ public final class UnnumberedEroParser implements BindingSubTlvsParser, BindingS
         final BitArray flags = BitArray.valueOf(buffer, Ipv4EroParser.FLAGS_SIZE);
         builder.setLoose(flags.get(Ipv4EroParser.LOOSE));
         buffer.skipBytes(Ipv4EroParser.RESERVED_ERO);
-        builder.setRouterId(ByteBufUtils.readUint32(buffer));
-        builder.setInterfaceId(ByteBufUtils.readUint32(buffer));
+        builder.setRouterId(readUint32(buffer));
+        builder.setInterfaceId(readUint32(buffer));
         return new UnnumberedInterfaceIdBackupEroCaseBuilder().setUnnumberedInterfaceIdBackupEro(builder.build())
                 .build();
     }
@@ -74,8 +75,8 @@ public final class UnnumberedEroParser implements BindingSubTlvsParser, BindingS
     static ByteBuf serializeUnnumberedIdEro(final Boolean loose, final Uint32 routerId, final Uint32 interfaceId) {
         final ByteBuf buffer = Unpooled.buffer();
         Ipv4EroParser.serializeEroFlags(buffer, loose);
-        buffer.writeInt(routerId.intValue());
-        buffer.writeInt(interfaceId.intValue());
+        writeUint32(buffer, routerId);
+        writeUint32(buffer, interfaceId);
         return buffer;
     }
 }