Satish K
Committed by Gerrit Code Review

[Emu][ONOS-2593, ONOS-2594] BGP SBI controller and session handler

Change-Id: Ia95717ff173b2e3e1198bdd0fafef7cb0aa8f734
Showing 20 changed files with 1526 additions and 96 deletions
...@@ -47,288 +47,251 @@ public interface BGPCfg { ...@@ -47,288 +47,251 @@ public interface BGPCfg {
47 /** 47 /**
48 * Returns the status of the configuration based on this state certain operations like connection is handled. 48 * Returns the status of the configuration based on this state certain operations like connection is handled.
49 * 49 *
50 - * @return 50 + * @return State of the configuration
51 - * State of the configuration
52 */ 51 */
53 State getState(); 52 State getState();
54 53
55 /** 54 /**
56 * To set the current state of the configuration. 55 * To set the current state of the configuration.
57 * 56 *
58 - * @param state 57 + * @param state Configuration State enum
59 - * Configuration State enum
60 */ 58 */
61 void setState(State state); 59 void setState(State state);
62 60
63 /** 61 /**
64 * 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.
65 * 63 *
66 - * @return 64 + * @return true if the link state is supported else false
67 - * true if the link state is supported else false
68 */ 65 */
69 boolean getLsCapability(); 66 boolean getLsCapability();
70 67
71 /** 68 /**
72 * Set the link state support to this BGP speaker. 69 * Set the link state support to this BGP speaker.
73 * 70 *
74 - * @param lscapability 71 + * @param lscapability true value if link state is supported else false
75 - * true value if link state is supported else false
76 */ 72 */
77 void setLsCapability(boolean lscapability); 73 void setLsCapability(boolean lscapability);
78 74
79 /** 75 /**
80 * 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.
81 * 77 *
82 - * @return 78 + * @return true if the 32 bit AS number is supported else false
83 - * true if the 32 bit AS number is supported else false
84 */ 79 */
85 boolean getLargeASCapability(); 80 boolean getLargeASCapability();
86 81
87 /** 82 /**
88 * Set the 32 bit AS support capability to this BGP speaker. 83 * Set the 32 bit AS support capability to this BGP speaker.
89 * 84 *
90 - * @param largeAs 85 + * @param largeAs true value if the 32 bit AS is supported else false
91 - * true value if the 32 bit AS is supported else false
92 */ 86 */
93 void setLargeASCapability(boolean largeAs); 87 void setLargeASCapability(boolean largeAs);
94 88
95 /** 89 /**
96 * Set the AS number to which this BGP speaker belongs. 90 * Set the AS number to which this BGP speaker belongs.
97 * 91 *
98 - * @param localAs 92 + * @param localAs 16 or 32 bit AS number, length is dependent on the capability
99 - * 16 or 32 bit AS number, length is dependent on the capability
100 */ 93 */
101 void setAsNumber(int localAs); 94 void setAsNumber(int localAs);
102 95
103 /** 96 /**
104 * Get the AS number to which this BGP speaker belongs. 97 * Get the AS number to which this BGP speaker belongs.
105 * 98 *
106 - * @return 99 + * @return 16 or 32 bit AS number, length is dependent on the capability
107 - * 16 or 32 bit AS number, length is dependent on the capability
108 */ 100 */
109 int getAsNumber(); 101 int getAsNumber();
110 102
111 /** 103 /**
112 * Get the connection retry count number. 104 * Get the connection retry count number.
113 * 105 *
114 - * @return 106 + * @return connection retry count if there is a connection error
115 - * connection retry count if there is a connection error
116 */ 107 */
117 int getMaxConnRetryCount(); 108 int getMaxConnRetryCount();
118 109
119 /** 110 /**
120 * Set the connection retry count. 111 * Set the connection retry count.
121 * 112 *
122 - * @param retryCount 113 + * @param retryCount number of times to try to connect if there is any error
123 - * number of times to try to connect if there is any error
124 */ 114 */
125 void setMaxConnRetryCout(int retryCount); 115 void setMaxConnRetryCout(int retryCount);
126 116
127 /** 117 /**
128 * Get the connection retry time in seconds. 118 * Get the connection retry time in seconds.
129 * 119 *
130 - * @return 120 + * @return connection retry time in seconds
131 - * connection retry time in seconds
132 */ 121 */
133 int getMaxConnRetryTime(); 122 int getMaxConnRetryTime();
134 123
135 /** 124 /**
136 * Set the connection retry time in seconds. 125 * Set the connection retry time in seconds.
137 * 126 *
138 - * @param retryTime 127 + * @param retryTime connection retry times in seconds
139 - * connection retry times in seconds
140 */ 128 */
141 void setMaxConnRetryTime(int retryTime); 129 void setMaxConnRetryTime(int retryTime);
142 130
143 /** 131 /**
144 * Set the keep alive timer for the connection. 132 * Set the keep alive timer for the connection.
145 * 133 *
146 - * @param holdTime 134 + * @param holdTime connection hold timer in seconds
147 - * connection hold timer in seconds
148 */ 135 */
149 void setHoldTime(short holdTime); 136 void setHoldTime(short holdTime);
150 137
151 /** 138 /**
152 * Returns the connection hold timer in seconds. 139 * Returns the connection hold timer in seconds.
153 * 140 *
154 - * @return 141 + * @return connection hold timer in seconds
155 - * connection hold timer in seconds
156 */ 142 */
157 short getHoldTime(); 143 short getHoldTime();
158 144
159 /** 145 /**
160 * Returns the maximum number of session supported. 146 * Returns the maximum number of session supported.
161 * 147 *
162 - * @return 148 + * @return maximum number of session supported
163 - * maximum number of session supported
164 */ 149 */
165 int getMaxSession(); 150 int getMaxSession();
166 151
167 /** 152 /**
168 * Set the maximum number of sessions to support. 153 * Set the maximum number of sessions to support.
169 * 154 *
170 - * @param maxsession 155 + * @param maxsession maximum number of session
171 - * maximum number of session
172 */ 156 */
173 void setMaxSession(int maxsession); 157 void setMaxSession(int maxsession);
174 158
175 /** 159 /**
176 * Returns the Router ID of this BGP speaker. 160 * Returns the Router ID of this BGP speaker.
177 * 161 *
178 - * @return 162 + * @return IP address in string format
179 - * IP address in string format
180 */ 163 */
181 String getRouterId(); 164 String getRouterId();
182 165
183 /** 166 /**
184 * Set the Router ID of this BGP speaker. 167 * Set the Router ID of this BGP speaker.
185 * 168 *
186 - * @param routerid 169 + * @param routerid IP address in string format
187 - * IP address in string format
188 */ 170 */
189 void setRouterId(String routerid); 171 void setRouterId(String routerid);
190 172
191 /** 173 /**
192 * Add the BGP peer IP address and the AS number to which it belongs. 174 * Add the BGP peer IP address and the AS number to which it belongs.
193 * 175 *
194 - * @param routerid 176 + * @param routerid IP address in string format
195 - * IP address in string format 177 + * @param remoteAs AS number to which it belongs
196 - * @param remoteAs 178 + *
197 - * AS number to which it belongs 179 + * @return true if added successfully else false
198 - * @return
199 - * true if added successfully else false
200 */ 180 */
201 boolean addPeer(String routerid, int remoteAs); 181 boolean addPeer(String routerid, int remoteAs);
202 182
203 /** 183 /**
204 * Add the BGP peer IP address and the keep alive time. 184 * Add the BGP peer IP address and the keep alive time.
205 * 185 *
206 - * @param routerid 186 + * @param routerid IP address in string format
207 - * IP address in string format 187 + * @param holdTime keep alive time for the connection
208 - * @param holdTime 188 + *
209 - * keep alive time for the connection 189 + * @return true if added successfully else false
210 - * @return
211 - * true if added successfully else false
212 */ 190 */
213 boolean addPeer(String routerid, short holdTime); 191 boolean addPeer(String routerid, short holdTime);
214 192
215 /** 193 /**
216 * Add the BGP peer IP address, the AS number to which it belongs and keep alive time. 194 * Add the BGP peer IP address, the AS number to which it belongs and keep alive time.
217 * 195 *
218 - * @param routerid 196 + * @param routerid IP address in string format
219 - * IP address in string format 197 + * @param remoteAs AS number to which it belongs
220 - * @param remoteAs 198 + * @param holdTime keep alive time for the connection
221 - * AS number to which it belongs 199 + *
222 - * @param holdTime 200 + * @return true if added successfully else false
223 - * keep alive time for the connection
224 - * @return
225 - * true if added successfully else false
226 */ 201 */
227 boolean addPeer(String routerid, int remoteAs, short holdTime); 202 boolean addPeer(String routerid, int remoteAs, short holdTime);
228 203
229 /** 204 /**
230 * Remove the BGP peer with this IP address. 205 * Remove the BGP peer with this IP address.
231 * 206 *
232 - * @param routerid 207 + * @param routerid router IP address
233 - * router IP address 208 + *
234 - * @return 209 + * @return true if removed successfully else false
235 - * true if removed successfully else false
236 */ 210 */
237 boolean removePeer(String routerid); 211 boolean removePeer(String routerid);
238 212
239 /** 213 /**
240 * Connect to BGP peer with this IP address. 214 * Connect to BGP peer with this IP address.
241 * 215 *
242 - * @param routerid 216 + * @param routerid router IP address
243 - * router IP address 217 + *
244 - * @return 218 + * @return true of the configuration is found and able to connect else false
245 - * true of the configuration is found and able to connect else false
246 */ 219 */
247 boolean connectPeer(String routerid); 220 boolean connectPeer(String routerid);
248 221
249 /** 222 /**
250 * Disconnect this BGP peer with this IP address. 223 * Disconnect this BGP peer with this IP address.
251 * 224 *
252 - * @param routerid 225 + * @param routerid router IP address in string format
253 - * router IP address in string format 226 + *
254 - * @return 227 + * @return true if the configuration is found and able to disconnect else false
255 - * true if the configuration is found and able to disconnect else false
256 */ 228 */
257 boolean disconnectPeer(String routerid); 229 boolean disconnectPeer(String routerid);
258 230
259 /** 231 /**
260 * Returns the peer tree information. 232 * Returns the peer tree information.
261 * 233 *
262 - * @return 234 + * @return return the tree map with IP as key and BGPPeerCfg as object
263 - * return the tree map with IP as key and BGPPeerCfg as object
264 */ 235 */
265 TreeMap<String, BGPPeerCfg> displayPeers(); 236 TreeMap<String, BGPPeerCfg> displayPeers();
266 237
267 /** 238 /**
268 * Return the BGP Peer information with this matching IP. 239 * Return the BGP Peer information with this matching IP.
269 * 240 *
270 - * @param routerid 241 + * @param routerid router IP address in string format
271 - * router IP address in string format 242 + *
272 - * @return 243 + * @return BGPPeerCfg object
273 - * BGPPeerCfg object
274 */ 244 */
275 BGPPeerCfg displayPeers(String routerid); 245 BGPPeerCfg displayPeers(String routerid);
276 246
277 /** 247 /**
278 * Check if this BGP peer is configured. 248 * Check if this BGP peer is configured.
279 * 249 *
280 - * @param routerid 250 + * @param routerid router IP address in string format
281 - * router IP address in string format 251 + *
282 - * @return 252 + * @return true if configured exists else false
283 - * true if configured exists else false
284 */ 253 */
285 boolean isPeerConfigured(String routerid); 254 boolean isPeerConfigured(String routerid);
286 255
287 /** 256 /**
288 * Check if this BGP speaker is having connection with the peer. 257 * Check if this BGP speaker is having connection with the peer.
289 * 258 *
290 - * @param routerid 259 + * @param routerid router IP address in string format
291 - * router IP address in string format 260 + *
292 - * @return 261 + * @return true if the connection exists else false
293 - * true if the connection exists else false
294 */ 262 */
295 boolean isPeerConnected(String routerid); 263 boolean isPeerConnected(String routerid);
296 264
297 /** 265 /**
298 * Return the peer tree map. 266 * Return the peer tree map.
299 * 267 *
300 - * @return 268 + * @return return the tree map with IP as key and BGPPeerCfg as object
301 - * return the tree map with IP as key and BGPPeerCfg as object
302 */ 269 */
303 TreeMap<String, BGPPeerCfg> getPeerTree(); 270 TreeMap<String, BGPPeerCfg> getPeerTree();
304 271
305 /** 272 /**
306 * Set the current connection state information. 273 * Set the current connection state information.
307 * 274 *
308 - * @param routerid 275 + * @param routerid router IP address in string format
309 - * router IP address in string format 276 + * @param state state information
310 - * @param state
311 - * state information
312 */ 277 */
313 void setPeerConnState(String routerid, BGPPeerCfg.State state); 278 void setPeerConnState(String routerid, BGPPeerCfg.State state);
314 279
315 /** 280 /**
316 * Check if the peer can be connected or not. 281 * Check if the peer can be connected or not.
317 * 282 *
318 - * @param routerid 283 + * @param routerid router IP address in string format
319 - * router IP address in string format 284 + *
320 - * @return 285 + * @return true if the peer can be connected else false
321 - * true if the peer can be connected else false
322 */ 286 */
323 boolean isPeerConnectable(String routerid); 287 boolean isPeerConnectable(String routerid);
324 288
325 /** 289 /**
326 * Get the current peer connection state information. 290 * Get the current peer connection state information.
327 * 291 *
328 - * @param routerid 292 + * @param routerid router IP address in string format
329 - * router IP address in string format 293 + *
330 - * @return 294 + * @return state information
331 - * state information
332 */ 295 */
333 BGPPeerCfg.State getPeerConnState(String routerid); 296 BGPPeerCfg.State getPeerConnState(String routerid);
334 } 297 }
......
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.bgp.controller;
18 +
19 +import org.onosproject.bgpio.protocol.BGPMessage;
20 +
21 +/**
22 + * Abstraction of an BGP controller. Serves as a one stop shop for obtaining BGP devices and (un)register listeners
23 + * on bgp events
24 + */
25 +public interface BGPController {
26 +
27 + /**
28 + * Send a message to a particular bgp peer.
29 + *
30 + * @param bgpId the id of the peer to send message.
31 + * @param msg the message to send
32 + */
33 + void writeMsg(BGPId bgpId, BGPMessage msg);
34 +
35 + /**
36 + * Process a message and notify the appropriate listeners.
37 + *
38 + * @param bgpId id of the peer the message arrived on
39 + * @param msg the message to process.
40 + */
41 + void processBGPPacket(BGPId bgpId, BGPMessage msg);
42 +
43 + /**
44 + * Get the BGPConfig class to the caller.
45 + *
46 + * @return configuration object
47 + */
48 + BGPCfg getConfig();
49 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.bgp.controller;
18 +
19 +import org.onlab.packet.IpAddress;
20 +import java.net.URI;
21 +import java.net.URISyntaxException;
22 +import java.util.Objects;
23 +
24 +import static com.google.common.base.Preconditions.checkArgument;
25 +
26 +/**
27 + * The class representing a network peer bgp ip.
28 + * This class is immutable.
29 + */
30 +public final class BGPId {
31 +
32 + private static final String SCHEME = "bgp";
33 + private static final long UNKNOWN = 0;
34 + private final IpAddress ipAddress;
35 +
36 + /**
37 + * Private constructor.
38 + */
39 + private BGPId(IpAddress ipAddress) {
40 + this.ipAddress = ipAddress;
41 + }
42 +
43 + /**
44 + * Create a BGPId from ip address.
45 + *
46 + * @param ipAddress IP address
47 + * @return object of BGPId
48 + */
49 + public static BGPId bgpId(IpAddress ipAddress) {
50 + return new BGPId(ipAddress);
51 + }
52 +
53 + /**
54 + * Returns the ip address.
55 + *
56 + * @return ipAddress
57 + */
58 + public IpAddress ipAddress() {
59 + return ipAddress;
60 + }
61 +
62 + /**
63 + * Convert the BGPId value to a ':' separated hexadecimal string.
64 + *
65 + * @return the BGPId value as a ':' separated hexadecimal string.
66 + */
67 + @Override
68 + public String toString() {
69 + return ipAddress.toString();
70 + }
71 +
72 + @Override
73 + public boolean equals(Object other) {
74 + if (!(other instanceof BGPId)) {
75 + return false;
76 + }
77 +
78 + BGPId otherBGPid = (BGPId) other;
79 + return Objects.equals(ipAddress, otherBGPid.ipAddress);
80 + }
81 +
82 + @Override
83 + public int hashCode() {
84 + return Objects.hash(ipAddress);
85 + }
86 +
87 + /**
88 + * Returns BGPId created from the given device URI.
89 + *
90 + * @param uri device URI
91 + * @return object of BGPId
92 + */
93 + public static BGPId bgpId(URI uri) {
94 + checkArgument(uri.getScheme().equals(SCHEME), "Unsupported URI scheme");
95 + return new BGPId(IpAddress.valueOf(uri.getSchemeSpecificPart()));
96 + }
97 +
98 + /**
99 + * Produces device URI from the given DPID.
100 + *
101 + * @param bgpId device bgpId
102 + * @return device URI
103 + */
104 + public static URI uri(BGPId bgpId) {
105 + return uri(bgpId.ipAddress());
106 + }
107 +
108 + /**
109 + * Produces device URI from the given DPID long.
110 + *
111 + * @param ipAddress device ip address
112 + * @return device URI
113 + */
114 + public static URI uri(IpAddress ipAddress) {
115 + try {
116 + return new URI(SCHEME, ipAddress.toString(), null);
117 + } catch (URISyntaxException e) {
118 + return null;
119 + }
120 + }
121 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.bgp.controller;
18 +
19 +/**
20 + * A representation of a packet context which allows any provider to view a packet in event, but may block the response
21 + * to the event if blocked has been called. This packet context can be used to react to the packet in event with a
22 + * packet out.
23 + */
24 +public interface BGPPacketStats {
25 + /**
26 + * Returns the count for no of packets sent out.
27 + *
28 + * @return int value of no of packets sent
29 + */
30 + int outPacketCount();
31 +
32 + /**
33 + * Returns the count for no of packets received.
34 + *
35 + * @return int value of no of packets sent
36 + */
37 + int inPacketCount();
38 +
39 + /**
40 + * Returns the count for no of wrong packets received.
41 + *
42 + * @return int value of no of wrong packets received
43 + */
44 + int wrongPacketCount();
45 +
46 + /**
47 + * Returns the time.
48 + *
49 + * @return the time
50 + */
51 + long getTime();
52 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.bgpio.exceptions;
18 +
19 +import org.jboss.netty.buffer.ChannelBuffer;
20 +
21 +/**
22 + * Custom Exception for BGP IO.
23 + */
24 +public class BGPParseException extends Exception {
25 +
26 + private static final long serialVersionUID = 1L;
27 + private byte errorCode;
28 + private byte errorSubCode;
29 + private ChannelBuffer data;
30 +
31 + /**
32 + * Default constructor to create a new exception.
33 + */
34 + public BGPParseException() {
35 + super();
36 + }
37 +
38 + /**
39 + * Constructor to create exception from message and cause.
40 + *
41 + * @param message the detail of exception in string
42 + * @param cause underlying cause of the error
43 + */
44 + public BGPParseException(final String message, final Throwable cause) {
45 + super(message, cause);
46 + }
47 +
48 + /**
49 + * Constructor to create exception from message.
50 + *
51 + * @param message the detail of exception in string
52 + */
53 + public BGPParseException(final String message) {
54 + super(message);
55 + }
56 +
57 + /**
58 + * Constructor to create exception from cause.
59 + *
60 + * @param cause underlying cause of the error
61 + */
62 + public BGPParseException(final Throwable cause) {
63 + super(cause);
64 + }
65 +
66 + /**
67 + * Constructor to create exception from error code and error subcode.
68 + *
69 + * @param errorCode error code of BGP message
70 + * @param errorSubCode error subcode of BGP message
71 + * @param data error data of BGP message
72 + */
73 + public BGPParseException(final byte errorCode, final byte errorSubCode, final ChannelBuffer data) {
74 + super();
75 + this.errorCode = errorCode;
76 + this.errorSubCode = errorSubCode;
77 + this.data = data;
78 + }
79 +
80 + /**
81 + * Returns errorcode for this exception.
82 + *
83 + * @return errorcode for this exception
84 + */
85 + public byte getErrorCode() {
86 + return this.errorCode;
87 + }
88 +
89 + /**
90 + * Returns error Subcode for this exception.
91 + *
92 + * @return error Subcode for this exception
93 + */
94 + public byte getErrorSubCode() {
95 + return this.errorSubCode;
96 + }
97 +
98 + /**
99 + * Returns error data for this exception.
100 + *
101 + * @return error data for this exception
102 + */
103 + public ChannelBuffer getData() {
104 + return this.data;
105 + }
106 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.bgpio.protocol;
18 +
19 +import org.jboss.netty.buffer.ChannelBuffer;
20 +import org.onosproject.bgpio.exceptions.BGPParseException;
21 +import org.onosproject.bgpio.types.BGPHeader;
22 +
23 +/**
24 + * Abstraction of an entity providing BGP Messages.
25 + */
26 +public interface BGPMessage extends Writeable {
27 + /**
28 + * Returns BGP Header of BGP Message.
29 + *
30 + * @return BGP Header of BGP Message
31 + */
32 + BGPHeader getHeader();
33 +
34 + /**
35 + * Returns version of BGP Message.
36 + *
37 + * @return version of BGP Message
38 + */
39 + BGPVersion getVersion();
40 +
41 + /**
42 + * Returns BGP Type of BGP Message.
43 + *
44 + * @return BGP Type of BGP Message
45 + */
46 + BGPType getType();
47 +
48 + @Override
49 + void writeTo(ChannelBuffer cb) throws BGPParseException;
50 +
51 + /**
52 + * Builder interface with get and set functions to build BGP Message.
53 + */
54 + interface Builder {
55 + /**
56 + * Builds BGP Message.
57 + *
58 + * @return BGP Message
59 + * @throws BGPParseException while building bgp message
60 + */
61 + BGPMessage build() throws BGPParseException;
62 +
63 + /**
64 + * Returns BGP Version of BGP Message.
65 + *
66 + * @return BGP Version of BGP Message
67 + */
68 + BGPVersion getVersion();
69 +
70 + /**
71 + * Returns BGP Type of BGP Message.
72 + *
73 + * @return BGP Type of BGP Message
74 + */
75 + BGPType getType();
76 +
77 + /**
78 + * Returns BGP Header of BGP Message.
79 + *
80 + * @return BGP Header of BGP Message
81 + */
82 + BGPHeader getHeader();
83 +
84 + /**
85 + * Sets BgpHeader and return its builder.
86 + *
87 + * @param bgpMsgHeader BGP Message Header
88 + * @return builder by setting BGP message header
89 + */
90 + Builder setHeader(BGPHeader bgpMsgHeader);
91 + }
92 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onosproject.bgpio.protocol;
17 +
18 +import org.jboss.netty.buffer.ChannelBuffer;
19 +import org.onosproject.bgpio.exceptions.BGPParseException;
20 +import org.onosproject.bgpio.types.BGPHeader;
21 +
22 +/**
23 + * Abstraction of an entity providing BGP Message Reader.
24 + */
25 +public interface BGPMessageReader<T> {
26 +
27 + /**
28 + * Reads the Objects in the BGP Message and Returns BGP Message.
29 + *
30 + * @param cb Channel Buffer
31 + * @param bgpHeader BGP message header
32 + * @return BGP Message
33 + * @throws BGPParseException while parsing BGP message.
34 + */
35 + T readFrom(ChannelBuffer cb, BGPHeader bgpHeader) throws BGPParseException;
36 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.bgpio.protocol;
18 +
19 +/**
20 + * Enum to Provide the Different types of BGP messages.
21 + */
22 +public enum BGPType {
23 +
24 + NONE(0), OPEN(1), UPDATE(2), NOTIFICATION(3), KEEP_ALIVE(4);
25 +
26 + int value;
27 +
28 + /**
29 + * Assign value with the value val as the types of BGP message.
30 + *
31 + * @param val type of BGP message
32 + */
33 + BGPType(int val) {
34 + value = val;
35 + }
36 +
37 + /**
38 + * Returns value as type of BGP message.
39 + *
40 + * @return value type of BGP message
41 + */
42 + public byte getType() {
43 + return (byte) value;
44 + }
45 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.bgpio.protocol;
18 +
19 +/**
20 + * Enum to provide BGP Message Version.
21 + */
22 +public enum BGPVersion {
23 +
24 + BGP_4(4);
25 +
26 + public final int packetVersion;
27 +
28 + /**
29 + * Assign BGP PacketVersion with specified packetVersion.
30 + *
31 + * @param packetVersion version of BGP
32 + */
33 + BGPVersion(final int packetVersion) {
34 + this.packetVersion = packetVersion;
35 + }
36 +
37 + /**
38 + * Returns Packet version of BGP Message.
39 + *
40 + * @return packetVersion
41 + */
42 + public int getPacketVersion() {
43 + return packetVersion;
44 + }
45 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.bgpio.protocol;
18 +
19 +import org.jboss.netty.buffer.ChannelBuffer;
20 +import org.onosproject.bgpio.exceptions.BGPParseException;
21 +
22 +/**
23 + * Abstraction of an entity providing functionality to write byte streams of
24 + * Messages to channel buffer.
25 + */
26 +public interface Writeable {
27 +
28 + /**
29 + * Writes byte streams of messages to channel buffer.
30 + *
31 + * @param cb channelBuffer
32 + * @throws BGPParseException when error occurs while writing BGP message to channel buffer
33 + */
34 + void writeTo(ChannelBuffer cb) throws BGPParseException;
35 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onosproject.bgpio.types;
17 +
18 +import org.jboss.netty.buffer.ChannelBuffer;
19 +import org.slf4j.Logger;
20 +import org.slf4j.LoggerFactory;
21 +
22 +/**
23 + * Provides BGP Message Header which is common for all the Messages.
24 + */
25 +
26 +public class BGPHeader {
27 +
28 + /* 0 1 2 3
29 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
30 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
31 + | |
32 + + +
33 + | |
34 + + +
35 + | Marker |
36 + + +
37 + | |
38 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
39 + | Length | Type |
40 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
41 + */
42 +
43 + protected static final Logger log = LoggerFactory.getLogger(BGPHeader.class);
44 +
45 + public static final int MARKER_LENGTH = 16;
46 + public static final short DEFAULT_HEADER_LENGTH = 19;
47 +
48 + private byte[] marker;
49 + private byte type;
50 + private short length;
51 +
52 + /**
53 + * Reset fields.
54 + */
55 + public BGPHeader() {
56 + this.marker = null;
57 + this.length = 0;
58 + this.type = 0;
59 + }
60 +
61 + /**
62 + * Constructors to initialize parameters.
63 + *
64 + * @param marker field in BGP header
65 + * @param length message length
66 + * @param type message type
67 + */
68 + public BGPHeader(byte[] marker, short length, byte type) {
69 + this.marker = marker;
70 + this.length = length;
71 + this.type = type;
72 + }
73 +
74 + /**
75 + * Sets marker field.
76 + *
77 + * @param value marker field
78 + */
79 + public void setMarker(byte[] value) {
80 + this.marker = value;
81 + }
82 +
83 + /**
84 + * Sets message type.
85 + *
86 + * @param value message type
87 + */
88 + public void setType(byte value) {
89 + this.type = value;
90 + }
91 +
92 + /**
93 + * Sets message length.
94 + *
95 + * @param value message length
96 + */
97 + public void setLength(short value) {
98 + this.length = value;
99 + }
100 +
101 + /**
102 + * Returns message length.
103 + *
104 + * @return message length
105 + */
106 + public short getLength() {
107 + return this.length;
108 + }
109 +
110 + /**
111 + * Returns message marker.
112 + *
113 + * @return message marker
114 + */
115 + public byte[] getMarker() {
116 + return this.marker;
117 + }
118 +
119 + /**
120 + * Returns message type.
121 + *
122 + * @return message type
123 + */
124 + public byte getType() {
125 + return this.type;
126 + }
127 +
128 + /**
129 + * Writes Byte stream of BGP header to channel buffer.
130 + *
131 + * @param cb ChannelBuffer
132 + * @return length index of message header
133 + */
134 + public int write(ChannelBuffer cb) {
135 +
136 + cb.writeBytes(getMarker(), 0, MARKER_LENGTH);
137 +
138 + int headerLenIndex = cb.writerIndex();
139 + cb.writeShort((short) 0);
140 + cb.writeByte(type);
141 +
142 + return headerLenIndex;
143 + }
144 +
145 + /**
146 + * Read from channel buffer and Returns BGP header.
147 + *
148 + * @param cb ChannelBuffer
149 + * @return object of BGPHeader
150 + */
151 + public static BGPHeader read(ChannelBuffer cb) {
152 +
153 + byte[] marker = new byte[MARKER_LENGTH];
154 + byte type;
155 + short length;
156 + cb.readBytes(marker, 0, MARKER_LENGTH);
157 + length = cb.readShort();
158 + type = cb.readByte();
159 + return new BGPHeader(marker, length, type);
160 + }
161 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.bgpio.types;
18 +
19 +import org.jboss.netty.buffer.ChannelBuffer;
20 +
21 +/**
22 + * Abstraction which Provides the BGP of TLV format.
23 + */
24 +public interface BGPValueType {
25 + /**
26 + * Returns the Type of BGP Message.
27 + *
28 + * @return short value of type
29 + */
30 + short getType();
31 +
32 + /**
33 + * Writes the byte Stream of BGP Message to channel buffer.
34 + *
35 + * @param cb channel buffer
36 + * @return length written to channel buffer
37 + */
38 + int write(ChannelBuffer cb);
39 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.bgp.controller.impl;
18 +
19 +import org.jboss.netty.handler.timeout.IdleStateAwareChannelHandler;
20 +
21 +/**
22 + * Channel handler deals with the bgp peer connection and dispatches messages from peer to the appropriate locations.
23 + */
24 +class BGPChannelHandler extends IdleStateAwareChannelHandler {
25 +
26 + // TODO: implement FSM and session handling mechanism
27 + /**
28 + * Create a new unconnected BGPChannelHandler.
29 + *
30 + * @param bgpCtrlImpl bgp controller implementation object
31 + */
32 + BGPChannelHandler(BGPControllerImpl bgpCtrlImpl) {
33 + }
34 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.bgp.controller.impl;
18 +
19 +import static org.onlab.util.Tools.groupedThreads;
20 +import java.util.concurrent.ExecutorService;
21 +import java.util.concurrent.Executors;
22 +import org.apache.felix.scr.annotations.Activate;
23 +import org.apache.felix.scr.annotations.Component;
24 +import org.apache.felix.scr.annotations.Deactivate;
25 +import org.apache.felix.scr.annotations.Service;
26 +import org.onosproject.bgp.controller.BGPCfg;
27 +import org.onosproject.bgp.controller.BGPController;
28 +import org.onosproject.bgp.controller.BGPId;
29 +import org.onosproject.bgpio.protocol.BGPMessage;
30 +import org.slf4j.Logger;
31 +import org.slf4j.LoggerFactory;
32 +
33 +@Component(immediate = true)
34 +@Service
35 +public class BGPControllerImpl implements BGPController {
36 +
37 + private static final Logger log = LoggerFactory.getLogger(BGPControllerImpl.class);
38 +
39 + private final ExecutorService executorMsgs = Executors.newFixedThreadPool(32,
40 + groupedThreads("onos/bgp",
41 + "event-stats-%d"));
42 +
43 + private final ExecutorService executorBarrier = Executors.newFixedThreadPool(4,
44 + groupedThreads("onos/bgp",
45 + "event-barrier-%d"));
46 +
47 + final Controller ctrl = new Controller(this);
48 +
49 + private BGPConfig bgpconfig = new BGPConfig();
50 +
51 + @Activate
52 + public void activate() {
53 + this.ctrl.start();
54 + log.info("Started");
55 + }
56 +
57 + @Deactivate
58 + public void deactivate() {
59 + // Close all connected peers
60 + this.ctrl.stop();
61 + log.info("Stopped");
62 + }
63 +
64 + @Override
65 + public void writeMsg(BGPId bgpId, BGPMessage msg) {
66 + // TODO: Send message
67 + }
68 +
69 + @Override
70 + public void processBGPPacket(BGPId bgpId, BGPMessage msg) {
71 +
72 + switch (msg.getType()) {
73 + case OPEN:
74 + // TODO: Process Open message
75 + break;
76 + case KEEP_ALIVE:
77 + // TODO: Process keepalive message
78 + break;
79 + case NOTIFICATION:
80 + // TODO: Process notificatoin message
81 + break;
82 + case UPDATE:
83 + // TODO: Process update message
84 + break;
85 + default:
86 + // TODO: Process other message
87 + break;
88 + }
89 + }
90 +
91 + /**
92 + * Get controller instance.
93 + *
94 + * @return ctrl the controller.
95 + */
96 + public Controller getController() {
97 + return ctrl;
98 + }
99 +
100 + @Override
101 + public BGPCfg getConfig() {
102 + return this.bgpconfig;
103 + }
104 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onosproject.bgp.controller.impl;
17 +
18 +import java.util.LinkedList;
19 +import java.util.List;
20 +
21 +import org.jboss.netty.buffer.ChannelBuffer;
22 +import org.jboss.netty.channel.Channel;
23 +import org.jboss.netty.channel.ChannelHandlerContext;
24 +import org.jboss.netty.handler.codec.frame.FrameDecoder;
25 +import org.onosproject.bgpio.protocol.BGPMessage;
26 +import org.onlab.util.HexDump;
27 +import org.slf4j.Logger;
28 +import org.slf4j.LoggerFactory;
29 +
30 +/**
31 + * Decode an bgp message from a Channel, for use in a netty pipeline.
32 + */
33 +public class BGPMessageDecoder extends FrameDecoder {
34 +
35 + protected static final Logger log = LoggerFactory.getLogger(BGPMessageDecoder.class);
36 +
37 + @Override
38 + protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer) throws Exception {
39 +
40 + List<BGPMessage> msgList = new LinkedList<BGPMessage>();
41 +
42 + log.debug("MESSAGE IS RECEIVED.");
43 + if (!channel.isConnected()) {
44 + log.info("Channel is not connected.");
45 + return null;
46 + }
47 +
48 + HexDump.dump(buffer);
49 +
50 + // TODO: decode bgp messages
51 + return msgList;
52 + }
53 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onosproject.bgp.controller.impl;
17 +
18 +import java.util.List;
19 +
20 +import org.jboss.netty.buffer.ChannelBuffer;
21 +import org.jboss.netty.buffer.ChannelBuffers;
22 +import org.jboss.netty.channel.Channel;
23 +import org.jboss.netty.channel.ChannelHandlerContext;
24 +import org.jboss.netty.handler.codec.oneone.OneToOneEncoder;
25 +import org.onosproject.bgpio.protocol.BGPMessage;
26 +import org.onlab.util.HexDump;
27 +
28 +import org.slf4j.Logger;
29 +import org.slf4j.LoggerFactory;
30 +
31 +/**
32 + * Encode an bgp message for output into a ChannelBuffer, for use in a
33 + * netty pipeline.
34 + */
35 +public class BGPMessageEncoder extends OneToOneEncoder {
36 + protected static final Logger log = LoggerFactory.getLogger(BGPMessageEncoder.class);
37 +
38 + @Override
39 + protected Object encode(ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception {
40 + log.debug("BGPMessageEncoder::encode");
41 + if (!(msg instanceof List)) {
42 + log.debug("Invalid msg.");
43 + return msg;
44 + }
45 +
46 + @SuppressWarnings("unchecked")
47 + List<BGPMessage> msglist = (List<BGPMessage>) msg;
48 +
49 + ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
50 +
51 + log.debug("SENDING MESSAGE");
52 + for (BGPMessage pm : msglist) {
53 + pm.writeTo(buf);
54 + }
55 +
56 + HexDump.dump(buf);
57 +
58 + return buf;
59 + }
60 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onosproject.bgp.controller.impl;
17 +
18 +import org.onosproject.bgp.controller.BGPPacketStats;
19 +
20 +/**
21 + * A representation of a packet context which allows any provider
22 + * to view a packet in event, but may block the response to the
23 + * event if blocked has been called. This packet context can be used
24 + * to react to the packet in event with a packet out.
25 + */
26 +public class BGPPacketStatsImpl implements BGPPacketStats {
27 +
28 + private int inPacketCount;
29 + private int outPacketCount;
30 + private int wrongPacketCount;
31 + private long time;
32 +
33 + /**
34 + * Resets parameter.
35 + */
36 + public BGPPacketStatsImpl() {
37 + this.inPacketCount = 0;
38 + this.outPacketCount = 0;
39 + this.wrongPacketCount = 0;
40 + this.time = 0;
41 + }
42 +
43 + /**
44 + * Get the outgoing packet count number.
45 + *
46 + * @return
47 + * packet count
48 + */
49 + public int outPacketCount() {
50 + return outPacketCount;
51 + }
52 +
53 + /**
54 + * Get the incoming packet count number.
55 + *
56 + * @return
57 + * packet count
58 + */
59 + public int inPacketCount() {
60 + return inPacketCount;
61 + }
62 +
63 + /**
64 + * Get the wrong packet count number.
65 + *
66 + * @return
67 + * packet count
68 + */
69 + public int wrongPacketCount() {
70 + return wrongPacketCount;
71 + }
72 +
73 + /**
74 + * Increments the received packet counter.
75 + */
76 + public void addInPacket() {
77 + this.inPacketCount++;
78 + }
79 +
80 + /**
81 + * Increments the sent packet counter.
82 + */
83 + public void addOutPacket() {
84 + this.outPacketCount++;
85 + }
86 +
87 + /**
88 + * Increments the sent packet counter by specified value.
89 + *
90 + * @param value of no of packets sent
91 + */
92 + public void addOutPacket(int value) {
93 + this.outPacketCount = this.outPacketCount + value;
94 + }
95 +
96 + /**
97 + * Increments the wrong packet counter.
98 + */
99 + public void addWrongPacket() {
100 + this.wrongPacketCount++;
101 + }
102 +
103 + /**
104 + * Resets wrong packet count.
105 + */
106 + public void resetWrongPacket() {
107 + this.wrongPacketCount = 0;
108 + }
109 +
110 + /**
111 + * Get the time.
112 + *
113 + * @return
114 + * time
115 + */
116 + public long getTime() {
117 + return this.time;
118 + }
119 +
120 + /**
121 + * Sets the time.
122 + *
123 + * @param time value to set
124 + */
125 + public void setTime(long time) {
126 + this.time = time;
127 + }
128 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.bgp.controller.impl;
18 +
19 +import org.jboss.netty.channel.ChannelPipeline;
20 +import org.jboss.netty.channel.ChannelPipelineFactory;
21 +import org.jboss.netty.channel.Channels;
22 +import org.jboss.netty.handler.timeout.ReadTimeoutHandler;
23 +import org.jboss.netty.util.ExternalResourceReleasable;
24 +import org.jboss.netty.util.HashedWheelTimer;
25 +import org.jboss.netty.util.Timer;
26 +
27 +/**
28 + * Creates a ChannelPipeline for a server-side bgp channel.
29 + */
30 +public class BGPPipelineFactory
31 + implements ChannelPipelineFactory, ExternalResourceReleasable {
32 +
33 + static final Timer TIMER = new HashedWheelTimer();
34 + protected ReadTimeoutHandler readTimeoutHandler;
35 + BGPControllerImpl bgpCtrlImpl;
36 +
37 + /**
38 + * Constructor to initialize the values.
39 + *
40 + * @param ctrlImpl parent ctrlImpl
41 + * @param isServBgp if it is a server or not
42 + */
43 + public BGPPipelineFactory(BGPControllerImpl ctrlImpl, boolean isServBgp) {
44 + super();
45 + bgpCtrlImpl = ctrlImpl;
46 + /* hold time*/
47 + readTimeoutHandler = new ReadTimeoutHandler(TIMER, bgpCtrlImpl.getConfig().getHoldTime());
48 + }
49 +
50 + @Override
51 + public ChannelPipeline getPipeline() throws Exception {
52 + BGPChannelHandler handler = new BGPChannelHandler(bgpCtrlImpl);
53 +
54 + ChannelPipeline pipeline = Channels.pipeline();
55 + pipeline.addLast("bgpmessagedecoder", new BGPMessageDecoder());
56 + pipeline.addLast("bgpmessageencoder", new BGPMessageEncoder());
57 + pipeline.addLast("holdTime", readTimeoutHandler);
58 + pipeline.addLast("PassiveHandler", handler);
59 +
60 + return pipeline;
61 + }
62 +
63 + @Override
64 + public void releaseExternalResources() {
65 + TIMER.stop();
66 + }
67 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onosproject.bgp.controller.impl;
17 +
18 +import static org.onlab.util.Tools.groupedThreads;
19 +
20 +import java.lang.management.ManagementFactory;
21 +import java.lang.management.RuntimeMXBean;
22 +import java.net.InetSocketAddress;
23 +import java.util.HashMap;
24 +import java.util.Map;
25 +import java.util.concurrent.Executors;
26 +
27 +import org.jboss.netty.bootstrap.ServerBootstrap;
28 +import org.jboss.netty.channel.ChannelPipelineFactory;
29 +import org.jboss.netty.channel.group.ChannelGroup;
30 +import org.jboss.netty.channel.group.DefaultChannelGroup;
31 +import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
32 +import org.slf4j.Logger;
33 +import org.slf4j.LoggerFactory;
34 +
35 +/**
36 + * The main controller class. Handles all setup and network listeners - Distributed ownership control of bgp peer
37 + * through IControllerRegistryService
38 + */
39 +public class Controller {
40 +
41 + protected static final Logger log = LoggerFactory.getLogger(Controller.class);
42 +
43 + private ChannelGroup cg;
44 +
45 + // Configuration options
46 + private static final short BGP_PORT_NUM = 179;
47 + private int workerThreads = 16;
48 +
49 + // Start time of the controller
50 + protected long systemStartTime;
51 +
52 + private NioServerSocketChannelFactory serverExecFactory;
53 +
54 + // Perf. related configuration
55 + protected static final int SEND_BUFFER_SIZE = 4 * 1024 * 1024;
56 +
57 + BGPControllerImpl bgpCtrlImpl;
58 +
59 + /**
60 + * Constructor to initialize parameter.
61 + *
62 + * @param bgpCtrlImpl BGP controller Impl instance
63 + */
64 + public Controller(BGPControllerImpl bgpCtrlImpl) {
65 + this.bgpCtrlImpl = bgpCtrlImpl;
66 + }
67 +
68 + // ***************
69 + // Getters/Setters
70 + // ***************
71 +
72 + /**
73 + * To get system start time.
74 + *
75 + * @return system start time in milliseconds
76 + */
77 + public long getSystemStartTime() {
78 + return (this.systemStartTime);
79 + }
80 +
81 + // **************
82 + // Initialization
83 + // **************
84 +
85 + /**
86 + * Tell controller that we're ready to accept bgp peer connections.
87 + */
88 + public void run() {
89 +
90 + try {
91 + final ServerBootstrap bootstrap = createServerBootStrap();
92 +
93 + bootstrap.setOption("reuseAddr", true);
94 + bootstrap.setOption("child.keepAlive", true);
95 + bootstrap.setOption("child.tcpNoDelay", true);
96 + bootstrap.setOption("child.sendBufferSize", Controller.SEND_BUFFER_SIZE);
97 +
98 + ChannelPipelineFactory pfact = new BGPPipelineFactory(bgpCtrlImpl, true);
99 +
100 + bootstrap.setPipelineFactory(pfact);
101 + InetSocketAddress sa = new InetSocketAddress(getBgpPortNum());
102 + cg = new DefaultChannelGroup();
103 + cg.add(bootstrap.bind(sa));
104 + log.info("Listening for Peer connection on {}", sa);
105 + } catch (Exception e) {
106 + throw new RuntimeException(e);
107 + }
108 + }
109 +
110 + /**
111 + * Creates server boot strap.
112 + *
113 + * @return ServerBootStrap
114 + */
115 + private ServerBootstrap createServerBootStrap() {
116 +
117 + if (workerThreads == 0) {
118 + serverExecFactory = new NioServerSocketChannelFactory(
119 + Executors.newCachedThreadPool(groupedThreads("onos/bgp", "boss-%d")),
120 + Executors.newCachedThreadPool(groupedThreads("onos/bgp", "worker-%d")));
121 + return new ServerBootstrap(serverExecFactory);
122 + } else {
123 + serverExecFactory = new NioServerSocketChannelFactory(
124 + Executors.newCachedThreadPool(groupedThreads("onos/bgp", "boss-%d")),
125 + Executors.newCachedThreadPool(groupedThreads("onos/bgp", "worker-%d")),
126 + workerThreads);
127 + return new ServerBootstrap(serverExecFactory);
128 + }
129 + }
130 +
131 + /**
132 + * Initialize internal data structures.
133 + */
134 + public void init() {
135 + // These data structures are initialized here because other
136 + // module's startUp() might be called before ours
137 + this.systemStartTime = System.currentTimeMillis();
138 + }
139 +
140 + // **************
141 + // Utility methods
142 + // **************
143 +
144 + public Map<String, Long> getMemory() {
145 + Map<String, Long> m = new HashMap<>();
146 + Runtime runtime = Runtime.getRuntime();
147 + m.put("total", runtime.totalMemory());
148 + m.put("free", runtime.freeMemory());
149 + return m;
150 + }
151 +
152 + public Long getUptime() {
153 + RuntimeMXBean rb = ManagementFactory.getRuntimeMXBean();
154 + return rb.getUptime();
155 + }
156 +
157 + /**
158 + * Starts the BGP controller.
159 + */
160 + public void start() {
161 + log.info("Started");
162 + this.init();
163 + this.run();
164 + }
165 +
166 + /**
167 + * Stops the BGP controller.
168 + */
169 + public void stop() {
170 + log.info("Stopped");
171 + serverExecFactory.shutdown();
172 + cg.close();
173 + }
174 +
175 + /**
176 + * Returns port number.
177 + *
178 + * @return port number
179 + */
180 + public static short getBgpPortNum() {
181 + return BGP_PORT_NUM;
182 + }
183 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onlab.util;
17 +
18 +import org.jboss.netty.buffer.ChannelBuffer;
19 +import org.slf4j.Logger;
20 +import org.slf4j.LoggerFactory;
21 +
22 +/**
23 + * HexDump class an utility to dump buffer in hex format.
24 + */
25 +public final class HexDump {
26 + protected static final Logger log = LoggerFactory.getLogger(HexDump.class);
27 +
28 + private HexDump() {
29 + }
30 +
31 + /**
32 + * Dump the buffer content in hex format.
33 + *
34 + * @param buff buffer content to dump in hex format
35 + */
36 + public static void dump(ChannelBuffer buff) {
37 + try {
38 + byte[] yTemp;
39 + yTemp = buff.array();
40 +
41 + int iStartIndex = buff.readerIndex();
42 + int iEndIndex = buff.writerIndex();
43 + do {
44 + StringBuilder sb = new StringBuilder();
45 + for (int k = 0; (k < 16) && (iStartIndex < iEndIndex); ++k) {
46 + if (0 == k % 4) {
47 + sb.append(String.format(" ")); // blank after 4 bytes
48 + }
49 + sb.append(String.format("%02X ", yTemp[iStartIndex++]));
50 + }
51 + log.debug(sb.toString());
52 + } while (iStartIndex < iEndIndex);
53 + } catch (Exception e) {
54 + log.error("[HexDump] Invalid buffer: " + e.toString());
55 + }
56 + }
57 +}