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