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/BgpOpen.java b/apps/sdnip/src/main/java/org/onosproject/sdnip/bgp/BgpOpen.java
index 5b9ac25..31471a3 100644
--- a/apps/sdnip/src/main/java/org/onosproject/sdnip/bgp/BgpOpen.java
+++ b/apps/sdnip/src/main/java/org/onosproject/sdnip/bgp/BgpOpen.java
@@ -23,6 +23,7 @@
 import org.onosproject.sdnip.bgp.BgpConstants.Notifications.OpenMessageError;
 import org.onosproject.sdnip.bgp.BgpConstants.Open.Capabilities;
 import org.onosproject.sdnip.bgp.BgpConstants.Open.Capabilities.MultiprotocolExtensions;
+import org.onosproject.sdnip.bgp.BgpConstants.Open.Capabilities.As4Octet;
 import org.onosproject.sdnip.bgp.BgpMessage.BgpParseException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -334,8 +335,14 @@
                         throw new BgpParseException(errorMsg);
                     }
                     long as4Number = message.readUnsignedInt();
-                    // TODO: Implement support for 4-octet AS Numbers
+
+                    bgpSession.setRemoteAs4OctetCapability();
                     bgpSession.setRemoteAs4Octet(as4Number);
+
+                    // Copy remote 4-octet AS Number Capabilities and AS Number.
+                    // This is temporary setting until local AS number configuration is supported.
+                    bgpSession.setLocalAs4OctetCapability();
+                    bgpSession.setRemoteAs(as4Number);
                     log.debug("BGP RX OPEN Capability:  AS4 Number = {}",
                               as4Number);
                     break;
@@ -420,6 +427,15 @@
             message.writeByte(MultiprotocolExtensions.SAFI_MULTICAST);
         }
 
+        // 4 octet AS path capability
+        if (bgpSession.getLocalAs4OctetCapability()) {
+            message.writeByte(Capabilities.TYPE);               // Param type
+            message.writeByte(Capabilities.MIN_LENGTH +
+                              As4Octet.LENGTH);                 // Param len
+            message.writeByte(As4Octet.CODE);                   // Capab, code
+            message.writeByte(As4Octet.LENGTH);                 // Capab, len
+            message.writeInt((int) bgpSession.getLocalAs());
+        }
         return message;
     }
 }