Shashikanth VH
Committed by Gerrit Code Review

[ONOS-3845] BGP FlowSpec capability handling.

Change-Id: I5368dea5a0d959399550737ccf6eb6742a7510b9
...@@ -61,7 +61,7 @@ public interface BgpCfg { ...@@ -61,7 +61,7 @@ public interface BgpCfg {
61 /** 61 /**
62 * Get the status of the link state support for this BGP speaker. 62 * Get the status of the link state support for this BGP speaker.
63 * 63 *
64 - * @return true if the link state is supported else false 64 + * @return true if the link state is supported else false
65 */ 65 */
66 boolean getLsCapability(); 66 boolean getLsCapability();
67 67
...@@ -73,6 +73,20 @@ public interface BgpCfg { ...@@ -73,6 +73,20 @@ public interface BgpCfg {
73 void setLsCapability(boolean lscapability); 73 void setLsCapability(boolean lscapability);
74 74
75 /** 75 /**
76 + * Get the status of the flow specification support for this BGP speaker.
77 + *
78 + * @return true if the flow specification is supported otherwise false
79 + */
80 + boolean flowSpecCapability();
81 +
82 + /**
83 + * Set the flow specification support to this BGP speaker.
84 + *
85 + * @param flowSpecCapability BGP flow specification capability support
86 + */
87 + void setFlowSpecCapability(boolean flowSpecCapability);
88 +
89 + /**
76 * Get the status of the 32 bit AS support for this BGP speaker. 90 * Get the status of the 32 bit AS support for this BGP speaker.
77 * 91 *
78 * @return true if the 32 bit AS number is supported else false 92 * @return true if the 32 bit AS number is supported else false
...@@ -82,7 +96,7 @@ public interface BgpCfg { ...@@ -82,7 +96,7 @@ public interface BgpCfg {
82 /** 96 /**
83 * Set the 32 bit AS support capability to this BGP speaker. 97 * Set the 32 bit AS support capability to this BGP speaker.
84 * 98 *
85 - * @param largeAs true value if the 32 bit AS is supported else false 99 + * @param largeAs true value if the 32 bit AS is supported else false
86 */ 100 */
87 void setLargeASCapability(boolean largeAs); 101 void setLargeASCapability(boolean largeAs);
88 102
...@@ -166,7 +180,7 @@ public interface BgpCfg { ...@@ -166,7 +180,7 @@ public interface BgpCfg {
166 /** 180 /**
167 * Set the Router ID of this BGP speaker. 181 * Set the Router ID of this BGP speaker.
168 * 182 *
169 - * @param routerid IP address in string format 183 + * @param routerid IP address in string format
170 */ 184 */
171 void setRouterId(String routerid); 185 void setRouterId(String routerid);
172 186
...@@ -174,7 +188,7 @@ public interface BgpCfg { ...@@ -174,7 +188,7 @@ public interface BgpCfg {
174 * Add the BGP peer IP address and the AS number to which it belongs. 188 * Add the BGP peer IP address and the AS number to which it belongs.
175 * 189 *
176 * @param routerid IP address in string format 190 * @param routerid IP address in string format
177 - * @param remoteAs AS number to which it belongs 191 + * @param remoteAs AS number to which it belongs
178 * 192 *
179 * @return true if added successfully else false 193 * @return true if added successfully else false
180 */ 194 */
...@@ -197,7 +211,7 @@ public interface BgpCfg { ...@@ -197,7 +211,7 @@ public interface BgpCfg {
197 * @param remoteAs AS number to which it belongs 211 * @param remoteAs AS number to which it belongs
198 * @param holdTime keep alive time for the connection 212 * @param holdTime keep alive time for the connection
199 * 213 *
200 - * @return true if added successfully else false 214 + * @return true if added successfully else false
201 */ 215 */
202 boolean addPeer(String routerid, int remoteAs, short holdTime); 216 boolean addPeer(String routerid, int remoteAs, short holdTime);
203 217
...@@ -215,14 +229,14 @@ public interface BgpCfg { ...@@ -215,14 +229,14 @@ public interface BgpCfg {
215 * 229 *
216 * @param routerid router IP address 230 * @param routerid router IP address
217 * 231 *
218 - * @return true of the configuration is found and able to connect else false 232 + * @return true of the configuration is found and able to connect else false
219 */ 233 */
220 boolean connectPeer(String routerid); 234 boolean connectPeer(String routerid);
221 235
222 /** 236 /**
223 * Disconnect this BGP peer with this IP address. 237 * Disconnect this BGP peer with this IP address.
224 * 238 *
225 - * @param routerid router IP address in string format 239 + * @param routerid router IP address in string format
226 * 240 *
227 * @return true if the configuration is found and able to disconnect else false 241 * @return true if the configuration is found and able to disconnect else false
228 */ 242 */
...@@ -247,9 +261,9 @@ public interface BgpCfg { ...@@ -247,9 +261,9 @@ public interface BgpCfg {
247 /** 261 /**
248 * Check if this BGP peer is configured. 262 * Check if this BGP peer is configured.
249 * 263 *
250 - * @param routerid router IP address in string format 264 + * @param routerid router IP address in string format
251 * 265 *
252 - * @return true if configured exists else false 266 + * @return true if configured exists else false
253 */ 267 */
254 boolean isPeerConfigured(String routerid); 268 boolean isPeerConfigured(String routerid);
255 269
...@@ -272,7 +286,7 @@ public interface BgpCfg { ...@@ -272,7 +286,7 @@ public interface BgpCfg {
272 /** 286 /**
273 * Set the current connection state information. 287 * Set the current connection state information.
274 * 288 *
275 - * @param routerid router IP address in string format 289 + * @param routerid router IP address in string format
276 * @param state state information 290 * @param state state information
277 */ 291 */
278 void setPeerConnState(String routerid, BgpPeerCfg.State state); 292 void setPeerConnState(String routerid, BgpPeerCfg.State state);
...@@ -280,9 +294,9 @@ public interface BgpCfg { ...@@ -280,9 +294,9 @@ public interface BgpCfg {
280 /** 294 /**
281 * Check if the peer can be connected or not. 295 * Check if the peer can be connected or not.
282 * 296 *
283 - * @param routerid router IP address in string format 297 + * @param routerid router IP address in string format
284 * 298 *
285 - * @return true if the peer can be connected else false 299 + * @return true if the peer can be connected else false
286 */ 300 */
287 boolean isPeerConnectable(String routerid); 301 boolean isPeerConnectable(String routerid);
288 302
......
...@@ -13,7 +13,10 @@ ...@@ -13,7 +13,10 @@
13 13
14 package org.onosproject.bgp.controller; 14 package org.onosproject.bgp.controller;
15 15
16 +import java.util.List;
17 +
16 import org.onosproject.bgpio.protocol.BgpVersion; 18 import org.onosproject.bgpio.protocol.BgpVersion;
19 +import org.onosproject.bgpio.types.BgpValueType;
17 20
18 /** 21 /**
19 * Abstraction of an BGP session info. Maintian session parameters obtained during session creation. 22 * Abstraction of an BGP session info. Maintian session parameters obtained during session creation.
...@@ -67,4 +70,11 @@ public interface BgpSessionInfo { ...@@ -67,4 +70,11 @@ public interface BgpSessionInfo {
67 * @return bgp identifier. 70 * @return bgp identifier.
68 */ 71 */
69 int remoteBgpIdentifier(); 72 int remoteBgpIdentifier();
73 +
74 + /**
75 + * Gets the BGP capabilities for this BGP peer.
76 + *
77 + * @return BGP peer capabilities.
78 + */
79 + List<BgpValueType> remoteBgpCapability();
70 } 80 }
......
...@@ -34,6 +34,11 @@ public final class Constants { ...@@ -34,6 +34,11 @@ public final class Constants {
34 public static final short AFI_VALUE = 16388; 34 public static final short AFI_VALUE = 16388;
35 public static final byte VPN_SAFI_VALUE = (byte) 0x80; 35 public static final byte VPN_SAFI_VALUE = (byte) 0x80;
36 public static final byte SAFI_VALUE = 71; 36 public static final byte SAFI_VALUE = 71;
37 +
38 + public static final short AFI_FLOWSPEC_VALUE = 1;
39 + public static final byte SAFI_FLOWSPEC_VALUE = (byte) 133;
40 + public static final byte VPN_SAFI_FLOWSPEC_VALUE = (byte) 134;
41 +
37 public static final int EXTRA_TRAFFIC = 0x01; 42 public static final int EXTRA_TRAFFIC = 0x01;
38 public static final int UNPROTECTED = 0x02; 43 public static final int UNPROTECTED = 0x02;
39 public static final int SHARED = 0x04; 44 public static final int SHARED = 0x04;
...@@ -41,4 +46,23 @@ public final class Constants { ...@@ -41,4 +46,23 @@ public final class Constants {
41 public static final int DEDICATED_ONE_PLUS_ONE = 0x10; 46 public static final int DEDICATED_ONE_PLUS_ONE = 0x10;
42 public static final int ENHANCED = 0x20; 47 public static final int ENHANCED = 0x20;
43 public static final int RESERVED = 0x40; 48 public static final int RESERVED = 0x40;
49 +
50 + public static final byte BGP_FLOWSPEC_DST_PREFIX = 0x01;
51 + public static final byte BGP_FLOWSPEC_SRC_PREFIX = 0x02;
52 + public static final byte BGP_FLOWSPEC_IP_PROTO = 0x03;
53 + public static final byte BGP_FLOWSPEC_PORT = 0x04;
54 + public static final byte BGP_FLOWSPEC_DST_PORT = 0x05;
55 + public static final byte BGP_FLOWSPEC_SRC_PORT = 0x06;
56 + public static final byte BGP_FLOWSPEC_ICMP_TP = 0x07;
57 + public static final byte BGP_FLOWSPEC_ICMP_CD = 0x08;
58 + public static final byte BGP_FLOWSPEC_TCP_FLAGS = 0x09;
59 + public static final byte BGP_FLOWSPEC_PCK_LEN = 0x10;
60 + public static final byte BGP_FLOWSPEC_DSCP = 0x11;
61 + public static final byte BGP_FLOWSPEC_FRAGMENT = 0x12;
62 +
63 + public static final short BGP_FLOWSPEC_ACTION_TRAFFIC_RATE = (short) 0x8006;
64 + public static final short BGP_FLOWSPEC_ACTION_TRAFFIC_ACTION = (short) 0x8007;
65 + public static final short BGP_FLOWSPEC_ACTION_TRAFFIC_REDIRECT = (short) 0x8008;
66 + public static final short BGP_FLOWSPEC_ACTION_TRAFFIC_MARKING = (short) 0x8009;
67 +
44 } 68 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -44,6 +44,7 @@ import org.onosproject.bgpio.types.BgpErrorType; ...@@ -44,6 +44,7 @@ import org.onosproject.bgpio.types.BgpErrorType;
44 import org.onosproject.bgpio.types.BgpValueType; 44 import org.onosproject.bgpio.types.BgpValueType;
45 import org.onosproject.bgpio.types.FourOctetAsNumCapabilityTlv; 45 import org.onosproject.bgpio.types.FourOctetAsNumCapabilityTlv;
46 import org.onosproject.bgpio.types.MultiProtocolExtnCapabilityTlv; 46 import org.onosproject.bgpio.types.MultiProtocolExtnCapabilityTlv;
47 +import org.onosproject.bgpio.util.Constants;
47 import org.slf4j.Logger; 48 import org.slf4j.Logger;
48 import org.slf4j.LoggerFactory; 49 import org.slf4j.LoggerFactory;
49 50
...@@ -108,6 +109,7 @@ class BgpChannelHandler extends IdleStateAwareChannelHandler { ...@@ -108,6 +109,7 @@ class BgpChannelHandler extends IdleStateAwareChannelHandler {
108 private SocketAddress address; 109 private SocketAddress address;
109 private String peerAddr; 110 private String peerAddr;
110 private BgpCfg bgpconfig; 111 private BgpCfg bgpconfig;
112 + List<BgpValueType> remoteBgpCapability;
111 113
112 /** 114 /**
113 * Create a new unconnected BGPChannelHandler. 115 * Create a new unconnected BGPChannelHandler.
...@@ -171,6 +173,7 @@ class BgpChannelHandler extends IdleStateAwareChannelHandler { ...@@ -171,6 +173,7 @@ class BgpChannelHandler extends IdleStateAwareChannelHandler {
171 return; 173 return;
172 } 174 }
173 log.debug("Sending handshake OPEN message"); 175 log.debug("Sending handshake OPEN message");
176 + h.remoteBgpCapability = pOpenmsg.getCapabilityTlv();
174 177
175 /* 178 /*
176 * RFC 4271, section 4.2: Upon receipt of an OPEN message, a BGP speaker MUST calculate the 179 * RFC 4271, section 4.2: Upon receipt of an OPEN message, a BGP speaker MUST calculate the
...@@ -225,6 +228,7 @@ class BgpChannelHandler extends IdleStateAwareChannelHandler { ...@@ -225,6 +228,7 @@ class BgpChannelHandler extends IdleStateAwareChannelHandler {
225 return; 228 return;
226 } 229 }
227 log.debug("Sending handshake OPEN message"); 230 log.debug("Sending handshake OPEN message");
231 + h.remoteBgpCapability = pOpenmsg.getCapabilityTlv();
228 232
229 /* 233 /*
230 * RFC 4271, section 4.2: Upon receipt of an OPEN message, a BGP speaker MUST calculate the 234 * RFC 4271, section 4.2: Upon receipt of an OPEN message, a BGP speaker MUST calculate the
...@@ -277,7 +281,8 @@ class BgpChannelHandler extends IdleStateAwareChannelHandler { ...@@ -277,7 +281,8 @@ class BgpChannelHandler extends IdleStateAwareChannelHandler {
277 h.negotiatedHoldTime = (h.peerHoldTime < h.bgpconfig.getHoldTime()) ? h.peerHoldTime 281 h.negotiatedHoldTime = (h.peerHoldTime < h.bgpconfig.getHoldTime()) ? h.peerHoldTime
278 : h.bgpconfig.getHoldTime(); 282 : h.bgpconfig.getHoldTime();
279 h.sessionInfo = new BgpSessionInfoImpl(h.thisbgpId, h.bgpVersion, h.peerAsNum, h.peerHoldTime, 283 h.sessionInfo = new BgpSessionInfoImpl(h.thisbgpId, h.bgpVersion, h.peerAsNum, h.peerHoldTime,
280 - h.peerIdentifier, h.negotiatedHoldTime, h.isIbgpSession); 284 + h.peerIdentifier, h.negotiatedHoldTime, h.isIbgpSession,
285 + h.remoteBgpCapability);
281 286
282 h.bgpPeer = h.peerManager.getBgpPeerInstance(h.bgpController, h.sessionInfo, h.bgpPacketStats); 287 h.bgpPeer = h.peerManager.getBgpPeerInstance(h.bgpController, h.sessionInfo, h.bgpPacketStats);
283 // set the status of bgp as connected 288 // set the status of bgp as connected
...@@ -760,7 +765,6 @@ class BgpChannelHandler extends IdleStateAwareChannelHandler { ...@@ -760,7 +765,6 @@ class BgpChannelHandler extends IdleStateAwareChannelHandler {
760 private boolean capabilityValidation(BgpChannelHandler h, BgpOpenMsg openmsg) throws BgpParseException { 765 private boolean capabilityValidation(BgpChannelHandler h, BgpOpenMsg openmsg) throws BgpParseException {
761 log.debug("capabilityValidation"); 766 log.debug("capabilityValidation");
762 767
763 - boolean isMultiProtocolcapabilityExists = false;
764 boolean isFourOctetCapabilityExits = false; 768 boolean isFourOctetCapabilityExits = false;
765 int capAsNum = 0; 769 int capAsNum = 0;
766 770
...@@ -771,11 +775,27 @@ class BgpChannelHandler extends IdleStateAwareChannelHandler { ...@@ -771,11 +775,27 @@ class BgpChannelHandler extends IdleStateAwareChannelHandler {
771 BgpValueType tempTlv; 775 BgpValueType tempTlv;
772 boolean isLargeAsCapabilityCfg = h.bgpconfig.getLargeASCapability(); 776 boolean isLargeAsCapabilityCfg = h.bgpconfig.getLargeASCapability();
773 boolean isLsCapabilityCfg = h.bgpconfig.getLsCapability(); 777 boolean isLsCapabilityCfg = h.bgpconfig.getLsCapability();
778 + boolean isFlowSpecCapabilityCfg = h.bgpconfig.flowSpecCapability();
779 + MultiProtocolExtnCapabilityTlv tempCapability;
780 + boolean isMultiProtocolLsCapability = false;
781 + boolean isMultiProtocolFlowSpecCapability = false;
782 + boolean isMultiProtocolVpnFlowSpecCapability = false;
774 783
775 while (listIterator.hasNext()) { 784 while (listIterator.hasNext()) {
776 BgpValueType tlv = listIterator.next(); 785 BgpValueType tlv = listIterator.next();
777 if (tlv.getType() == MULTI_PROTOCOL_EXTN_CAPA_TYPE) { 786 if (tlv.getType() == MULTI_PROTOCOL_EXTN_CAPA_TYPE) {
778 - isMultiProtocolcapabilityExists = true; 787 + tempCapability = (MultiProtocolExtnCapabilityTlv) tlv;
788 + if (Constants.SAFI_FLOWSPEC_VALUE == tempCapability.getSafi()) {
789 + isMultiProtocolFlowSpecCapability = true;
790 + }
791 +
792 + if (Constants.VPN_SAFI_FLOWSPEC_VALUE == tempCapability.getSafi()) {
793 + isMultiProtocolVpnFlowSpecCapability = true;
794 + }
795 +
796 + if (SAFI == tempCapability.getSafi()) {
797 + isMultiProtocolLsCapability = true;
798 + }
779 } 799 }
780 if (tlv.getType() == FOUR_OCTET_AS_NUM_CAPA_TYPE) { 800 if (tlv.getType() == FOUR_OCTET_AS_NUM_CAPA_TYPE) {
781 isFourOctetCapabilityExits = true; 801 isFourOctetCapabilityExits = true;
...@@ -796,12 +816,26 @@ class BgpChannelHandler extends IdleStateAwareChannelHandler { ...@@ -796,12 +816,26 @@ class BgpChannelHandler extends IdleStateAwareChannelHandler {
796 } 816 }
797 817
798 if ((isLsCapabilityCfg)) { 818 if ((isLsCapabilityCfg)) {
799 - if (!isMultiProtocolcapabilityExists) { 819 + if (!isMultiProtocolLsCapability) {
800 tempTlv = new MultiProtocolExtnCapabilityTlv(AFI, RES, SAFI); 820 tempTlv = new MultiProtocolExtnCapabilityTlv(AFI, RES, SAFI);
801 unSupportedCapabilityTlv.add(tempTlv); 821 unSupportedCapabilityTlv.add(tempTlv);
802 } 822 }
803 } 823 }
804 824
825 + if ((isFlowSpecCapabilityCfg)) {
826 + if (!isMultiProtocolFlowSpecCapability) {
827 + tempTlv = new MultiProtocolExtnCapabilityTlv(Constants.AFI_FLOWSPEC_VALUE,
828 + RES, Constants.SAFI_FLOWSPEC_VALUE);
829 + unSupportedCapabilityTlv.add(tempTlv);
830 + }
831 +
832 + if (!isMultiProtocolVpnFlowSpecCapability) {
833 + tempTlv = new MultiProtocolExtnCapabilityTlv(Constants.AFI_FLOWSPEC_VALUE,
834 + RES, Constants.VPN_SAFI_FLOWSPEC_VALUE);
835 + unSupportedCapabilityTlv.add(tempTlv);
836 + }
837 + }
838 +
805 if ((isLargeAsCapabilityCfg)) { 839 if ((isLargeAsCapabilityCfg)) {
806 if (!isFourOctetCapabilityExits) { 840 if (!isFourOctetCapabilityExits) {
807 tempTlv = new FourOctetAsNumCapabilityTlv(h.bgpconfig.getAsNumber()); 841 tempTlv = new FourOctetAsNumCapabilityTlv(h.bgpconfig.getAsNumber());
...@@ -809,7 +843,7 @@ class BgpChannelHandler extends IdleStateAwareChannelHandler { ...@@ -809,7 +843,7 @@ class BgpChannelHandler extends IdleStateAwareChannelHandler {
809 } 843 }
810 } 844 }
811 845
812 - if (unSupportedCaplistIterator.hasNext()) { 846 + if (unSupportedCapabilityTlv.size() == 3) {
813 ChannelBuffer buffer = ChannelBuffers.dynamicBuffer(); 847 ChannelBuffer buffer = ChannelBuffers.dynamicBuffer();
814 while (unSupportedCaplistIterator.hasNext()) { 848 while (unSupportedCaplistIterator.hasNext()) {
815 BgpValueType tlv = unSupportedCaplistIterator.next(); 849 BgpValueType tlv = unSupportedCaplistIterator.next();
......
...@@ -47,6 +47,7 @@ public class BgpConfig implements BgpCfg { ...@@ -47,6 +47,7 @@ public class BgpConfig implements BgpCfg {
47 private int localAs; 47 private int localAs;
48 private int maxSession; 48 private int maxSession;
49 private boolean lsCapability; 49 private boolean lsCapability;
50 + private boolean flowSpecCapability;
50 private short holdTime; 51 private short holdTime;
51 private boolean largeAs = false; 52 private boolean largeAs = false;
52 private int maxConnRetryTime; 53 private int maxConnRetryTime;
...@@ -119,6 +120,16 @@ public class BgpConfig implements BgpCfg { ...@@ -119,6 +120,16 @@ public class BgpConfig implements BgpCfg {
119 } 120 }
120 121
121 @Override 122 @Override
123 + public boolean flowSpecCapability() {
124 + return this.flowSpecCapability;
125 + }
126 +
127 + @Override
128 + public void setFlowSpecCapability(boolean vpnFlowSpecCapability) {
129 + this.flowSpecCapability = flowSpecCapability;
130 + }
131 +
132 + @Override
122 public String getRouterId() { 133 public String getRouterId() {
123 if (this.routerId != null) { 134 if (this.routerId != null) {
124 return this.routerId.toString(); 135 return this.routerId.toString();
......
...@@ -13,9 +13,12 @@ ...@@ -13,9 +13,12 @@
13 13
14 package org.onosproject.bgp.controller.impl; 14 package org.onosproject.bgp.controller.impl;
15 15
16 +import java.util.List;
17 +
16 import org.onosproject.bgp.controller.BgpId; 18 import org.onosproject.bgp.controller.BgpId;
17 import org.onosproject.bgp.controller.BgpSessionInfo; 19 import org.onosproject.bgp.controller.BgpSessionInfo;
18 import org.onosproject.bgpio.protocol.BgpVersion; 20 import org.onosproject.bgpio.protocol.BgpVersion;
21 +import org.onosproject.bgpio.types.BgpValueType;
19 import org.slf4j.Logger; 22 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory; 23 import org.slf4j.LoggerFactory;
21 24
...@@ -32,6 +35,7 @@ public class BgpSessionInfoImpl implements BgpSessionInfo { ...@@ -32,6 +35,7 @@ public class BgpSessionInfoImpl implements BgpSessionInfo {
32 private int remoteBgpIdentifier; 35 private int remoteBgpIdentifier;
33 private short negotiatedholdTime; 36 private short negotiatedholdTime;
34 private boolean isIbgpSession; 37 private boolean isIbgpSession;
38 + List<BgpValueType> remoteBgpCapability;
35 39
36 /** 40 /**
37 * Initialize session info. 41 * Initialize session info.
...@@ -43,10 +47,11 @@ public class BgpSessionInfoImpl implements BgpSessionInfo { ...@@ -43,10 +47,11 @@ public class BgpSessionInfoImpl implements BgpSessionInfo {
43 *@param remoteBgpIdentifier remote peer identifier 47 *@param remoteBgpIdentifier remote peer identifier
44 *@param negotiatedholdTime negotiated hold time 48 *@param negotiatedholdTime negotiated hold time
45 *@param isIbgpSession session type ibgp/ebgp 49 *@param isIbgpSession session type ibgp/ebgp
50 + *@param remoteBgpCapability remote peer capabilities
46 */ 51 */
47 public BgpSessionInfoImpl(BgpId remoteBgpId, BgpVersion remoteBgpVersion, long remoteBgpASNum, 52 public BgpSessionInfoImpl(BgpId remoteBgpId, BgpVersion remoteBgpVersion, long remoteBgpASNum,
48 short remoteBgpholdTime, int remoteBgpIdentifier, short negotiatedholdTime, 53 short remoteBgpholdTime, int remoteBgpIdentifier, short negotiatedholdTime,
49 - boolean isIbgpSession) { 54 + boolean isIbgpSession, List<BgpValueType> remoteBgpCapability) {
50 this.remoteBgpId = remoteBgpId; 55 this.remoteBgpId = remoteBgpId;
51 this.remoteBgpVersion = remoteBgpVersion; 56 this.remoteBgpVersion = remoteBgpVersion;
52 this.remoteBgpASNum = remoteBgpASNum; 57 this.remoteBgpASNum = remoteBgpASNum;
...@@ -54,6 +59,12 @@ public class BgpSessionInfoImpl implements BgpSessionInfo { ...@@ -54,6 +59,12 @@ public class BgpSessionInfoImpl implements BgpSessionInfo {
54 this.remoteBgpIdentifier = remoteBgpIdentifier; 59 this.remoteBgpIdentifier = remoteBgpIdentifier;
55 this.negotiatedholdTime = negotiatedholdTime; 60 this.negotiatedholdTime = negotiatedholdTime;
56 this.isIbgpSession = isIbgpSession; 61 this.isIbgpSession = isIbgpSession;
62 + this.remoteBgpCapability = remoteBgpCapability;
63 + }
64 +
65 + @Override
66 + public List<BgpValueType> remoteBgpCapability() {
67 + return remoteBgpCapability;
57 } 68 }
58 69
59 @Override 70 @Override
......