2 Documentation Basic tests for odl-bgpcep-bgp-all feature.
4 ... Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
6 ... This program and the accompanying materials are made available under the
7 ... terms of the Eclipse Public License v1.0 which accompanies this distribution,
8 ... and is available at http://www.eclipse.org/legal/epl-v10.html
10 ... Test suite performs basic BGP functional test cases:
11 ... BGP peer initiated connection
12 ... - introduce and check 3 prefixes in one update message
13 ... ODL controller initiated connection:
14 ... - introduce and check 3 prefixes in one update message
15 ... - introduce 2 prefixes in first update message and then additional 2 prefixes
16 ... in another update while the very first prefix is withdrawn
17 ... - introduce 3 prefixes and try to withdraw the first one
18 ... (to be ignored by controller) in a single update message
20 ... TC_R (test case reset) tests session-reset functionality.
21 ... Resets the session, and than verifies that example-ipv4-topology is empty again.
23 ... TC_LA (test case local address) tests configuration of internal peer
24 ... with local-address configured
25 ... - configure peer with local-address and connect bgp-speaker to it
26 ... with tools_system_ip
27 ... - check filled topology
29 ... TC_PG (test case peer group) tests configuration and reconfiguration
30 ... of peer-groups and neighbors configured by them.
31 ... - configure peer-group, and assign neighbor to this peer-group
32 ... - check filled topology
33 ... - reconfigure peer-group without ipv4 unicast afi-safi
34 ... - check empty topology
35 ... - reconfigre neighbor without peer-group, delete peer-group
37 ... Brief description how to perform BGP functional test:
38 ... https://wiki.opendaylight.org/view/BGP_LS_PCEP:Lithium_Feature_Tests#How_to_test_2
39 Suite Setup Setup_Everything
40 Suite Teardown Teardown_Everything
41 Test Setup SetupUtils.Setup_Test_With_Logging_And_Fast_Failing
42 Test Teardown FailFast.Start_Failing_Fast_If_This_Failed
43 Library OperatingSystem
44 Library SSHLibrary timeout=10s
45 Library RequestsLibrary
46 Resource ../../../libraries/BGPcliKeywords.robot
47 Resource ../../../libraries/BGPSpeaker.robot
48 Resource ../../../libraries/CompareStream.robot
49 Resource ../../../libraries/FailFast.robot
50 Resource ../../../libraries/KarafKeywords.robot
51 Resource ../../../libraries/KillPythonTool.robot
52 Resource ../../../libraries/SetupUtils.robot
53 Resource ../../../libraries/SSHKeywords.robot
54 Resource ../../../libraries/TemplatedRequests.robot
55 Resource ../../../variables/Variables.robot
56 Resource ../../../libraries/WaitForFailure.robot
59 ${BGP_PEER_NAME} example-bgp-peer
60 ${BGP_TOOL_LOG_LEVEL} info
61 ${BGP_VARIABLES_FOLDER} ${CURDIR}/../../../variables/bgpuser/
62 ${CONFIG_SESSION} session
63 ${DEVICE_NAME} controller-config
65 ${ODL_BGP_LOG_LEVEL} DEFAULT
67 ${PEER_GROUP} internal-neighbors
68 ${RIB_NAME} example-bgp-rib
69 ${TOOLS_SYSTEM_PROMPT} ${DEFAULT_LINUX_PROMPT}
72 Check_For_Empty_Topology_Before_Talking
73 [Documentation] Sanity check example-ipv4-topology is up but empty.
75 Wait_For_Topology_To_Change_To empty_topology timeout=180s
77 TC_LA_Reconfigure_Odl_To_Initiate_Connection
78 [Documentation] Configure ibgp peer with local-address.
79 &{mapping} Create Dictionary IP=${TOOLS_SYSTEM_IP} HOLDTIME=${HOLDTIME} PEER_PORT=${BGP_TOOL_PORT} PASSIVE_MODE=false BGP_RIB_OPENCONFIG=${RIB_NAME}
80 ... LOCAL=${ODL_SYSTEM_IP}
81 TemplatedRequests.Put_As_Xml_Templated ${BGP_VARIABLES_FOLDER}${/}ibgp_local_address mapping=${mapping} session=${CONFIG_SESSION}
82 [Teardown] SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
84 TC_LA_Start_Bgp_Speaker_And_Verify_Connected
85 [Documentation] Verify that peer is present in odl's rib under local-address ip.
87 ${speaker_args} BuiltIn.Set_Variable --amount 3 --listen --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --debug
88 ${output} BGPSpeaker.Start_BGP_Speaker_And_Verify_Connected ${speaker_args} session=${CONFIG_SESSION} speaker_ip=${TOOLS_SYSTEM_IP}
91 TC_LA_Kill_Bgp_Speaker
92 [Documentation] Abort the Python speaker. Also, attempt to stop failing fast.
94 [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
95 BGPSpeaker.Kill_BGP_Speaker
96 FailFast.Do_Not_Fail_Fast_From_Now_On
97 # NOTE: It is still possible to remain failing fast, if both previous and this test have failed.
98 [Teardown] FailFast.Do_Not_Start_Failing_If_This_Failed
100 TC_LA_Delete_Bgp_Peer_Configuration
101 [Documentation] Delete peer configuration.
102 &{mapping} Create Dictionary IP=${TOOLS_SYSTEM_IP} BGP_RIB_OPENCONFIG=${RIB_NAME}
103 TemplatedRequests.Delete_Templated ${BGP_VARIABLES_FOLDER}${/}ibgp_local_address mapping=${mapping} session=${CONFIG_SESSION}
105 Reconfigure_ODL_To_Accept_Connection
106 [Documentation] Configure BGP peer module with initiate-connection set to false.
107 &{mapping} Create Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} IP=${TOOLS_SYSTEM_IP} HOLDTIME=${HOLDTIME} PEER_PORT=${BGP_TOOL_PORT}
108 ... INITIATE=false BGP_RIB=${RIB_NAME} PASSIVE_MODE=true BGP_RIB_OPENCONFIG=${RIB_NAME}
109 TemplatedRequests.Put_As_Xml_Templated ${BGP_VARIABLES_FOLDER}${/}bgp_peer mapping=${mapping} session=${CONFIG_SESSION}
110 [Teardown] SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
112 Start_Talking_BGP_speaker
113 [Documentation] Start Python speaker to connect to ODL, verify that the tool does not promptly exit.
114 # Myport value is needed for checking whether connection at precise port was established.
115 BGPSpeaker.Start_BGP_Speaker --amount 3 --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --peerport=${ODL_BGP_PORT} --${BGP_TOOL_LOG_LEVEL}
116 Read_And_Fail_If_Prompt_Is_Seen
118 Check_Talking_Connection_Is_Established
119 [Documentation] See TCP (BGP) connection in established state.
120 # This case is separate from the previous one, to resemble structure of the second half of this suite more closely.
121 Check_Speaker_Is_Connected
123 Check_Talking_Topology_Is_Filled
124 [Documentation] See new routes in example-ipv4-topology as a proof that synchronization was correct.
126 Wait_For_Topology_To_Change_To filled_topology
128 TC_R_Reset_Bgp_Peer_Session
129 [Documentation] Reset Peer Session
131 &{mapping} Create Dictionary IP=${TOOLS_SYSTEM_IP} RIB_INSTANCE_NAME=${RIB_NAME}
132 TemplatedRequests.Post_As_Xml_Templated folder=${BGP_VARIABLES_FOLDER}${/}peer_session/restart mapping=${mapping} session=${CONFIG_SESSION}
134 TC_R_Check_For_Empty_Topology_After_Resetting
135 [Documentation] See example-ipv4-topology empty after resetting session
137 Wait_For_Topology_To_Change_To empty_topology
139 TC_PG_Reconfigure_ODL_With_Peer_Group_To_Accept_Connection
140 [Documentation] Configure BGP peer module with initiate-connection set to false.
141 &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} IP=${TOOLS_SYSTEM_IP} BGP_RIB_OPENCONFIG=${RIB_NAME}
142 TemplatedRequests.Delete_Templated ${BGP_VARIABLES_FOLDER}${/}bgp_peer mapping=${mapping} session=${CONFIG_SESSION}
144 &{mapping} Create Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} IP=${TOOLS_SYSTEM_IP} HOLDTIME=${HOLDTIME} PEER_PORT=${BGP_TOOL_PORT}
145 ... PEER_GROUP_NAME=${PEER_GROUP} INITIATE=false BGP_RIB=${RIB_NAME} PASSIVE_MODE=true BGP_RIB_OPENCONFIG=${RIB_NAME}
146 TemplatedRequests.Put_As_Xml_Templated ${BGP_VARIABLES_FOLDER}${/}bgp_peer_group mapping=${mapping} session=${CONFIG_SESSION}
147 [Teardown] SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
149 TC_PG_Restart_Talking_BGP_Speaker
150 [Documentation] Abort the Python speaker. Also, attempt to stop failing fast.
152 [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
153 Restart_Talking_BGP_Speaker
154 [Teardown] FailFast.Do_Not_Start_Failing_If_This_Failed
156 TC_PG_Check_Talking_Topology_Is_Filled
157 [Documentation] See new routes in example-ipv4-topology as a proof that synchronization was correct.
159 Wait_For_Topology_To_Change_To filled_topology
161 TC_PG_Reconfigure_ODL_With_Peer_Group_Without_Ipv4_Unicast
162 [Documentation] Configure BGP peer module with initiate-connection set to false.
163 Configure_Peer_Group peer_group_folder=peer_group_without_ipv4
164 [Teardown] SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
166 TC_PG_Check_For_Empty_Topology_After_Deconfiguration
167 [Documentation] See example-ipv4-topology empty after resetting session.
169 Wait_For_Topology_To_Change_To empty_topology
171 TC_PG_Reconfigure_ODL_To_Accept_Connection
172 [Documentation] Configure BGP peer module with initiate-connection set to false.
173 &{mapping} Create Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} IP=${TOOLS_SYSTEM_IP} HOLDTIME=${HOLDTIME} PEER_PORT=${BGP_TOOL_PORT}
174 ... PEER_GROUP_NAME=${PEER_GROUP} INITIATE=false BGP_RIB=${RIB_NAME} PASSIVE_MODE=true BGP_RIB_OPENCONFIG=${RIB_NAME}
175 TemplatedRequests.Delete_Templated ${BGP_VARIABLES_FOLDER}${/}bgp_peer_group mapping=${mapping} session=${CONFIG_SESSION}
176 TemplatedRequests.Put_As_Xml_Templated ${BGP_VARIABLES_FOLDER}${/}bgp_peer mapping=${mapping} session=${CONFIG_SESSION}
177 Deconfigure_Peer_Group
178 [Teardown] SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
180 Kill_Talking_BGP_Speaker
181 [Documentation] Abort the Python speaker. Also, attempt to stop failing fast.
183 [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
184 BGPSpeaker.Kill_BGP_Speaker
185 FailFast.Do_Not_Fail_Fast_From_Now_On
186 # NOTE: It is still possible to remain failing fast, if both previous and this test have failed.
187 [Teardown] FailFast.Do_Not_Start_Failing_If_This_Failed
189 Check_For_Empty_Topology_After_Talking
190 [Documentation] See example-ipv4-topology empty again.
192 Wait_For_Topology_To_Change_To empty_topology
194 Start_Listening_BGP_Speaker
195 [Documentation] Start Python speaker in listening mode, verify that the tool does not exit quickly.
196 BGPSpeaker.Start_BGP_Speaker --amount 3 --listen --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --${BGP_TOOL_LOG_LEVEL}
197 Read_And_Fail_If_Prompt_Is_Seen
199 Check_Listening_Connection_Is_Not_Established_Yet
200 [Documentation] See no TCP connection, as both ODL and tool are in listening mode.
201 Check_Speaker_Is_Not_Connected
203 Check_For_Empty_Topology_Before_Listening
204 [Documentation] Sanity check example-ipv4-topology is still empty.
206 Verify_That_Topology_Does_Not_Change_From empty_topology
208 Reconfigure_ODL_To_Initiate_Connection
209 [Documentation] Replace BGP peer config module, now with initiate-connection set to true.
210 &{mapping} Create Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} IP=${TOOLS_SYSTEM_IP} HOLDTIME=${HOLDTIME} PEER_PORT=${BGP_TOOL_PORT}
211 ... INITIATE=true BGP_RIB=${RIB_NAME} PASSIVE_MODE=false BGP_RIB_OPENCONFIG=${RIB_NAME}
212 TemplatedRequests.Put_As_Xml_Templated ${BGP_VARIABLES_FOLDER}${/}bgp_peer mapping=${mapping} session=${CONFIG_SESSION}
214 Check_Listening_Connection_Is_Established
215 [Documentation] See TCP (BGP) connection in established state.
216 Check_Speaker_Is_Connected
218 Check_Listening_Topology_Is_Filled
219 [Documentation] See new routes in example-ipv4-topology as a proof that synchronization was correct.
221 Wait_For_Topology_To_Change_To filled_topology
223 Kill_Listening_BGP_Speaker
224 [Documentation] Abort the Python speaker. Also, attempt to stop failing fast.
226 [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
227 BGPSpeaker.Kill_BGP_Speaker
228 FailFast.Do_Not_Fail_Fast_From_Now_On
229 # NOTE: It is still possible to remain failing fast, if both previous and this test have failed.
230 [Teardown] FailFast.Do_Not_Start_Failing_If_This_Failed
232 Check_For_Empty_Topology_After_Listening
233 [Documentation] Post-condition: Check example-ipv4-topology is empty again.
235 Wait_For_Topology_To_Change_To empty_topology
237 Start_Listening_BGP_Speaker_Case_2
238 [Documentation] BGP Speaker introduces 2 prefixes in the first update & another 2 prefixes while the very first is withdrawn in 2nd update
239 BGPSpeaker.Start_BGP_Speaker --amount 3 --listen --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --prefill=2 --insert=2 --withdraw=1 --updates=single --firstprefix=8.0.0.240 --${BGP_TOOL_LOG_LEVEL}
240 Read_And_Fail_If_Prompt_Is_Seen
242 Check_Listening_Connection_Is_Established_Case_2
243 [Documentation] See TCP (BGP) connection in established state.
244 Check_Speaker_Is_Connected
246 Check_Listening_Topology_Is_Filled_Case_2
247 [Documentation] See new routes in example-ipv4-topology as a proof that synchronization was correct.
249 Wait_For_Topology_To_Change_To filled_topology
251 Kill_Listening_BGP_Speaker_Case_2
252 [Documentation] Abort the Python speaker. Also, attempt to stop failing fast.
254 [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
255 BGPSpeaker.Kill_BGP_Speaker
256 FailFast.Do_Not_Fail_Fast_From_Now_On
257 # NOTE: It is still possible to remain failing fast, if both previous and this test have failed.
258 [Teardown] FailFast.Do_Not_Start_Failing_If_This_Failed
260 Check_For_Empty_Topology_After_Listening_Case_2
261 [Documentation] Post-condition: Check example-ipv4-topology is empty again.
263 Wait_For_Topology_To_Change_To empty_topology
265 Start_Listening_BGP_Speaker_Case_3
266 [Documentation] BGP Speaker introduces 3 prefixes while the first one occures again in the withdrawn list (to be ignored by controller)
267 BGPSpeaker.Start_BGP_Speaker --amount 2 --listen --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --prefill=0 --insert=3 --withdraw=1 --updates=single --${BGP_TOOL_LOG_LEVEL}
268 Read_And_Fail_If_Prompt_Is_Seen
270 Check_Listening_Connection_Is_Established_Case_3
271 [Documentation] See TCP (BGP) connection in established state.
272 Check_Speaker_Is_Connected
274 Check_Listening_Topology_Is_Filled_Case_3
275 [Documentation] See new routes in example-ipv4-topology as a proof that synchronization was correct.
277 Wait_For_Topology_To_Change_To filled_topology
279 Kill_Listening_BGP_Speaker_Case_3
280 [Documentation] Abort the Python speaker. Also, attempt to stop failing fast.
282 [Setup] SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
283 BGPSpeaker.Kill_BGP_Speaker
284 FailFast.Do_Not_Fail_Fast_From_Now_On
285 # NOTE: It is still possible to remain failing fast, if both previous and this test have failed.
286 [Teardown] FailFast.Do_Not_Start_Failing_If_This_Failed
288 Check_For_Empty_Topology_After_Listening_Case_3
289 [Documentation] Post-condition: Check example-ipv4-topology is empty again.
291 Wait_For_Topology_To_Change_To empty_topology
293 Delete_Bgp_Peer_Configuration
294 [Documentation] Revert the BGP configuration to the original state: without any configured peers.
295 &{mapping} BuiltIn.Create_Dictionary DEVICE_NAME=${DEVICE_NAME} BGP_NAME=${BGP_PEER_NAME} IP=${TOOLS_SYSTEM_IP} BGP_RIB_OPENCONFIG=${RIB_NAME}
296 TemplatedRequests.Delete_Templated ${BGP_VARIABLES_FOLDER}${/}bgp_peer mapping=${mapping} session=${CONFIG_SESSION}
300 [Documentation] Initialize SetupUtils. SSH-login to mininet machine, create HTTP session,
301 ... put Python tool to mininet machine, setup imported resources.
302 SetupUtils.Setup_Utils_For_Setup_And_Teardown
303 SSHLibrary.Set_Default_Configuration prompt=${TOOLS_SYSTEM_PROMPT}
304 SSHLibrary.Open_Connection ${TOOLS_SYSTEM_IP}
305 SSHKeywords.Flexible_Mininet_Login
306 SSHKeywords.Require_Python
307 SSHKeywords.Assure_Library_Ipaddr target_dir=.
308 SSHLibrary.Put_File ${CURDIR}/../../../../tools/fastbgp/play.py
309 RequestsLibrary.Create_Session ${CONFIG_SESSION} http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH}
310 KarafKeywords.Execute_Controller_Karaf_Command_On_Background log:set ${ODL_LOG_LEVEL}
311 KarafKeywords.Execute_Controller_Karaf_Command_On_Background log:set ${ODL_BGP_LOG_LEVEL} org.opendaylight.bgpcep
312 KarafKeywords.Execute_Controller_Karaf_Command_On_Background log:set ${ODL_BGP_LOG_LEVEL} org.opendaylight.protocol
315 [Documentation] Make sure Python tool was killed, delete all sessions, tear down imported Resources.
316 KillPythonTool.Search_And_Kill_Remote_Python 'play\.py'
317 RequestsLibrary.Delete_All_Sessions
318 SSHLibrary.Close_All_Connections
320 Wait_For_Topology_To_Change_To
321 [Arguments] ${folder_name} ${timeout}=10s ${refresh}=1s
322 [Documentation] Wait until Compare_Topology matches expected result.
323 BuiltIn.Wait_Until_Keyword_Succeeds ${timeout} ${refresh} Compare_Topology ${folder_name}
325 Verify_That_Topology_Does_Not_Change_From
326 [Arguments] ${folder_name} ${timeout}=10s ${refresh}=1s
327 [Documentation] Verify that Compare_Topology keeps passing, it will hold its last result.
328 WaitForFailure.Verify_Keyword_Does_Not_Fail_Within_Timeout ${timeout} ${refresh} Compare_Topology ${folder_name}
331 [Arguments] ${folder_name}
332 [Documentation] Get current example-ipv4-topology as json, and compare it to expected result.
333 TemplatedRequests.Get_As_Json_Templated ${BGP_VARIABLES_FOLDER}${/}${folder_name} session=${CONFIG_SESSION} verify=True
335 Check_Speaker_Is_Not_Connected
336 [Documentation] Give it a few tries to see zero established connections.
337 BuiltIn.Wait_Until_Keyword_Succeeds 3s 1s Check_Number_Of_Speaker_Connections 0
339 Check_Speaker_Is_Connected
340 [Documentation] Give it several tries to see exactly one established connection.
341 BuiltIn.Wait_Until_Keyword_Succeeds 5s 1s Check_Number_Of_Speaker_Connections 1
343 Check_Number_Of_Speaker_Connections
344 [Arguments] ${howmany}
345 [Documentation] Run netstat in mininet machine and parse it for number of established connections. Check it is ${howmany}.
346 ${output}= SSHKeywords.Count_Port_Occurences 17900 ESTABLISHED python
347 BuiltIn.Should_Be_Equal_As_Strings ${output} ${howmany}
350 [Arguments] ${peer_group_folder}=peer_group
351 [Documentation] Configures peer group which is template for all the neighbors which are going
352 ... to be configured. Also after PUT, this case verifies presence of peer group within
354 &{mapping} Create Dictionary DEVICE_NAME=${DEVICE_NAME} HOLDTIME=${HOLDTIME} PEER_PORT=${BGP_TOOL_PORT} INITIATE=false BGP_RIB=${RIB_NAME}
355 ... PASSIVE_MODE=true BGP_RIB_OPENCONFIG=${RIB_NAME} PEER_GROUP_NAME=${PEER_GROUP} RR_CLIENT=false
356 ${verify_peer_group_folder} CompareStream.Run_Keyword_If_At_Least_Else sulfur BuiltIn.Set Variable verify_${peer_group_folder}.sulfur
357 ... ELSE BuiltIn.Set Variable verify_${peer_group_folder}
358 TemplatedRequests.Put_As_Xml_Templated ${BGP_VARIABLES_FOLDER}${/}${peer_group_folder} mapping=${mapping} session=${CONFIG_SESSION}
359 TemplatedRequests.Get_As_Json_Templated ${BGP_VARIABLES_FOLDER}${/}${verify_peer_group_folder} mapping=${mapping} session=${CONFIG_SESSION} verify=True
361 Deconfigure_Peer_Group
362 [Documentation] Deconfigures peer group which is template for all the neighbors
363 &{mapping} Create Dictionary DEVICE_NAME=${DEVICE_NAME} HOLDTIME=${HOLDTIME} PEER_PORT=${BGP_TOOL_PORT} INITIATE=false BGP_RIB=${RIB_NAME}
364 ... PASSIVE_MODE=true BGP_RIB_OPENCONFIG=${RIB_NAME} PEER_GROUP_NAME=${PEER_GROUP} RR_CLIENT=false
365 TemplatedRequests.Delete_Templated ${BGP_VARIABLES_FOLDER}${/}peer_group mapping=${mapping} session=${CONFIG_SESSION}
367 Restart_Talking_BGP_Speaker
368 [Documentation] Abort the Python speaker. Also, attempt to stop failing fast. And Start it again.
369 ... We have to restart it this way because we reset session before
370 BGPSpeaker.Kill_BGP_Speaker
371 FailFast.Do_Not_Fail_Fast_From_Now_On
372 BGPSpeaker.Start_BGP_Speaker --amount 3 --myip=${TOOLS_SYSTEM_IP} --myport=${BGP_TOOL_PORT} --peerip=${ODL_SYSTEM_IP} --peerport=${ODL_BGP_PORT} --${BGP_TOOL_LOG_LEVEL}
373 Read_And_Fail_If_Prompt_Is_Seen