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);
             }