Committed by
Gerrit Code Review
[ONOS-3845] BGP support flow specification capability on peer basis.
Change-Id: Iae0f617f72213a4f1664dcf6e904b01ac7460816
Showing
5 changed files
with
63 additions
and
28 deletions
... | @@ -73,20 +73,6 @@ public interface BgpCfg { | ... | @@ -73,20 +73,6 @@ 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 | - /** | ||
90 | * Get the status of the 32 bit AS support for this BGP speaker. | 76 | * Get the status of the 32 bit AS support for this BGP speaker. |
91 | * | 77 | * |
92 | * @return true if the 32 bit AS number is supported else false | 78 | * @return true if the 32 bit AS number is supported else false | ... | ... |
... | @@ -58,6 +58,24 @@ public interface BgpPeerCfg { | ... | @@ -58,6 +58,24 @@ public interface BgpPeerCfg { |
58 | INVALID | 58 | INVALID |
59 | } | 59 | } |
60 | 60 | ||
61 | + enum FlowSpec { | ||
62 | + | ||
63 | + /** | ||
64 | + * Signifies that peer support IPV4 flow specification. | ||
65 | + */ | ||
66 | + IPV4, | ||
67 | + | ||
68 | + /** | ||
69 | + * Signifies that peer support VPNV4 flow specification. | ||
70 | + */ | ||
71 | + VPNV4, | ||
72 | + | ||
73 | + /** | ||
74 | + * Signifies that peer flow specification support disabled. | ||
75 | + */ | ||
76 | + NONE | ||
77 | + } | ||
78 | + | ||
61 | /** | 79 | /** |
62 | * Returns the connection State information of the peer. | 80 | * Returns the connection State information of the peer. |
63 | * | 81 | * |
... | @@ -177,4 +195,18 @@ public interface BgpPeerCfg { | ... | @@ -177,4 +195,18 @@ public interface BgpPeerCfg { |
177 | * @return peer connect instance | 195 | * @return peer connect instance |
178 | */ | 196 | */ |
179 | BgpConnectPeer connectPeer(); | 197 | BgpConnectPeer connectPeer(); |
198 | + | ||
199 | + /** | ||
200 | + * Gets the flow specification capability. | ||
201 | + * | ||
202 | + * @return flow specification status | ||
203 | + */ | ||
204 | + public FlowSpec flowSpecStatus(); | ||
205 | + | ||
206 | + /** | ||
207 | + * sets the flow specification capability. | ||
208 | + * | ||
209 | + * @param flowSpecStatus flow specification status | ||
210 | + */ | ||
211 | + public void setFlowSpecStatus(FlowSpec flowSpecStatus); | ||
180 | } | 212 | } | ... | ... |
... | @@ -665,11 +665,23 @@ class BgpChannelHandler extends IdleStateAwareChannelHandler { | ... | @@ -665,11 +665,23 @@ class BgpChannelHandler extends IdleStateAwareChannelHandler { |
665 | */ | 665 | */ |
666 | private void sendHandshakeOpenMessage() throws IOException, BgpParseException { | 666 | private void sendHandshakeOpenMessage() throws IOException, BgpParseException { |
667 | int bgpId; | 667 | int bgpId; |
668 | + boolean flowSpecStatus = false; | ||
669 | + boolean vpnFlowSpecStatus = false; | ||
668 | 670 | ||
669 | bgpId = Ip4Address.valueOf(bgpconfig.getRouterId()).toInt(); | 671 | bgpId = Ip4Address.valueOf(bgpconfig.getRouterId()).toInt(); |
672 | + BgpPeerConfig peerConfig = (BgpPeerConfig) bgpconfig.displayPeers(peerAddr); | ||
673 | + if (peerConfig.flowSpecStatus() == BgpPeerCfg.FlowSpec.IPV4) { | ||
674 | + flowSpecStatus = true; | ||
675 | + } else if (peerConfig.flowSpecStatus() == BgpPeerCfg.FlowSpec.VPNV4) { | ||
676 | + vpnFlowSpecStatus = true; | ||
677 | + } | ||
678 | + | ||
670 | BgpMessage msg = factory4.openMessageBuilder().setAsNumber((short) bgpconfig.getAsNumber()) | 679 | BgpMessage msg = factory4.openMessageBuilder().setAsNumber((short) bgpconfig.getAsNumber()) |
671 | - .setHoldTime(bgpconfig.getHoldTime()).setBgpId(bgpId).setLsCapabilityTlv(bgpconfig.getLsCapability()) | 680 | + .setHoldTime(bgpconfig.getHoldTime()).setBgpId(bgpId) |
672 | - .setLargeAsCapabilityTlv(bgpconfig.getLargeASCapability()).build(); | 681 | + .setLsCapabilityTlv(bgpconfig.getLsCapability()) |
682 | + .setLargeAsCapabilityTlv(bgpconfig.getLargeASCapability()) | ||
683 | + .setFlowSpecCapabilityTlv(flowSpecStatus) | ||
684 | + .setVpnFlowSpecCapabilityTlv(vpnFlowSpecStatus).build(); | ||
673 | log.debug("Sending open message to {}", channel.getRemoteAddress()); | 685 | log.debug("Sending open message to {}", channel.getRemoteAddress()); |
674 | channel.write(Collections.singletonList(msg)); | 686 | channel.write(Collections.singletonList(msg)); |
675 | 687 | ||
... | @@ -775,12 +787,17 @@ class BgpChannelHandler extends IdleStateAwareChannelHandler { | ... | @@ -775,12 +787,17 @@ class BgpChannelHandler extends IdleStateAwareChannelHandler { |
775 | BgpValueType tempTlv; | 787 | BgpValueType tempTlv; |
776 | boolean isLargeAsCapabilityCfg = h.bgpconfig.getLargeASCapability(); | 788 | boolean isLargeAsCapabilityCfg = h.bgpconfig.getLargeASCapability(); |
777 | boolean isLsCapabilityCfg = h.bgpconfig.getLsCapability(); | 789 | boolean isLsCapabilityCfg = h.bgpconfig.getLsCapability(); |
778 | - boolean isFlowSpecCapabilityCfg = h.bgpconfig.flowSpecCapability(); | 790 | + boolean isFlowSpecCapabilityCfg = false; |
779 | MultiProtocolExtnCapabilityTlv tempCapability; | 791 | MultiProtocolExtnCapabilityTlv tempCapability; |
780 | boolean isMultiProtocolLsCapability = false; | 792 | boolean isMultiProtocolLsCapability = false; |
781 | boolean isMultiProtocolFlowSpecCapability = false; | 793 | boolean isMultiProtocolFlowSpecCapability = false; |
782 | boolean isMultiProtocolVpnFlowSpecCapability = false; | 794 | boolean isMultiProtocolVpnFlowSpecCapability = false; |
783 | 795 | ||
796 | + BgpPeerConfig peerConfig = (BgpPeerConfig) h.bgpconfig.displayPeers(peerAddr); | ||
797 | + if (peerConfig.flowSpecStatus() != BgpPeerCfg.FlowSpec.NONE) { | ||
798 | + isFlowSpecCapabilityCfg = true; | ||
799 | + } | ||
800 | + | ||
784 | while (listIterator.hasNext()) { | 801 | while (listIterator.hasNext()) { |
785 | BgpValueType tlv = listIterator.next(); | 802 | BgpValueType tlv = listIterator.next(); |
786 | if (tlv.getType() == MULTI_PROTOCOL_EXTN_CAPA_TYPE) { | 803 | if (tlv.getType() == MULTI_PROTOCOL_EXTN_CAPA_TYPE) { | ... | ... |
... | @@ -47,7 +47,6 @@ public class BgpConfig implements BgpCfg { | ... | @@ -47,7 +47,6 @@ 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; | ||
51 | private short holdTime; | 50 | private short holdTime; |
52 | private boolean largeAs = false; | 51 | private boolean largeAs = false; |
53 | private int maxConnRetryTime; | 52 | private int maxConnRetryTime; |
... | @@ -120,16 +119,6 @@ public class BgpConfig implements BgpCfg { | ... | @@ -120,16 +119,6 @@ public class BgpConfig implements BgpCfg { |
120 | } | 119 | } |
121 | 120 | ||
122 | @Override | 121 | @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 | ||
133 | public String getRouterId() { | 122 | public String getRouterId() { |
134 | if (this.routerId != null) { | 123 | if (this.routerId != null) { |
135 | return this.routerId.toString(); | 124 | return this.routerId.toString(); | ... | ... |
... | @@ -30,6 +30,7 @@ public class BgpPeerConfig implements BgpPeerCfg { | ... | @@ -30,6 +30,7 @@ public class BgpPeerConfig implements BgpPeerCfg { |
30 | private State state; | 30 | private State state; |
31 | private boolean selfInitiated; | 31 | private boolean selfInitiated; |
32 | private BgpConnectPeer connectPeer; | 32 | private BgpConnectPeer connectPeer; |
33 | + private FlowSpec flowSpecStatus = FlowSpec.NONE; | ||
33 | 34 | ||
34 | /** | 35 | /** |
35 | * Constructor to initialize the values. | 36 | * Constructor to initialize the values. |
... | @@ -118,4 +119,14 @@ public class BgpPeerConfig implements BgpPeerCfg { | ... | @@ -118,4 +119,14 @@ public class BgpPeerConfig implements BgpPeerCfg { |
118 | public void setConnectPeer(BgpConnectPeer connectPeer) { | 119 | public void setConnectPeer(BgpConnectPeer connectPeer) { |
119 | this.connectPeer = connectPeer; | 120 | this.connectPeer = connectPeer; |
120 | } | 121 | } |
122 | + | ||
123 | + @Override | ||
124 | + public FlowSpec flowSpecStatus() { | ||
125 | + return flowSpecStatus; | ||
126 | + } | ||
127 | + | ||
128 | + @Override | ||
129 | + public void setFlowSpecStatus(FlowSpec flowSpecStatus) { | ||
130 | + this.flowSpecStatus = flowSpecStatus; | ||
131 | + } | ||
121 | } | 132 | } | ... | ... |
-
Please register or login to post a comment