4 Octet AS Path Capability is sent to neighbor.
4 Octet AS in AS_PATH is parsed.
Now BGP can establish 4 Octet AS Path enabled peering with neighbor.
Change-Id: Ibb72e8037554928584ccafe6a14b82ffaca7e2cd
diff --git a/apps/sdnip/src/main/java/org/onosproject/sdnip/bgp/BgpUpdate.java b/apps/sdnip/src/main/java/org/onosproject/sdnip/bgp/BgpUpdate.java
index 67b47ef..f7bfa32 100644
--- a/apps/sdnip/src/main/java/org/onosproject/sdnip/bgp/BgpUpdate.java
+++ b/apps/sdnip/src/main/java/org/onosproject/sdnip/bgp/BgpUpdate.java
@@ -26,6 +26,7 @@
import org.jboss.netty.channel.ChannelHandlerContext;
import org.onlab.packet.Ip4Address;
import org.onlab.packet.Ip4Prefix;
+import org.onosproject.sdnip.bgp.BgpConstants.Update.AsPath;
import org.onosproject.sdnip.bgp.BgpConstants.Notifications.UpdateMessageError;
import org.onosproject.sdnip.bgp.BgpMessage.BgpParseException;
import org.slf4j.Logger;
@@ -610,17 +611,30 @@
throw new BgpParseException(errorMsg);
}
+ // 4-octet AS number handling.
+ int asPathLen;
+ if (bgpSession.isAs4OctetCapable()) {
+ asPathLen = AsPath.AS_4OCTET_LENGTH;
+ } else {
+ asPathLen = AsPath.AS_LENGTH;
+ }
+
// Parse the AS numbers
- if (2 * pathSegmentLength > attrLen) {
+ if (asPathLen * pathSegmentLength > attrLen) {
// ERROR: Malformed AS_PATH
actionsBgpUpdateMalformedAsPath(bgpSession, ctx);
String errorMsg = "Malformed AS Path";
throw new BgpParseException(errorMsg);
}
- attrLen -= (2 * pathSegmentLength);
+ attrLen -= (asPathLen * pathSegmentLength);
ArrayList<Long> segmentAsNumbers = new ArrayList<>();
while (pathSegmentLength-- > 0) {
- long asNumber = message.readUnsignedShort();
+ long asNumber;
+ if (asPathLen == AsPath.AS_4OCTET_LENGTH) {
+ asNumber = message.readUnsignedInt();
+ } else {
+ asNumber = message.readUnsignedShort();
+ }
segmentAsNumbers.add(asNumber);
}