2 Documentation This library contains keywords related to the BGP functionality.
5 Library BgpRpcClient.py ${TOOLS_SYSTEM_IP}
6 Resource ../variables/Variables.robot
8 Resource KillPythonTool.robot
9 Resource TemplatedRequests.robot
12 ${BGP_BMP_DIR} ${CURDIR}/../variables/bgpfunctional/bmp_basic/filled_structure
13 ${BGP_BMP_FEAT_DIR} ${CURDIR}/../variables/bgpfunctional/bmp_basic/empty_structure
14 ${BGP_RIB_URI} ${OPERATIONAL_API}/bgp-rib:bgp-rib/rib/example-bgp-rib
15 ${BGP_TOPOLOGY_URI} ${OPERATIONAL_TOPO_API}/topology/example-ipv4-topology
16 ${VAR_BASE_BGP} ${CURDIR}/../variables/bgpfunctional
17 ${RIB_NAME} example-bgp-rib
18 &{ADJ_RIB_IN} PATH=peer/bgp:%2F%2F${TOOLS_SYSTEM_IP}/adj-rib-in BGP_RIB=${RIB_NAME}
19 &{APP_PEER} IP=${ODL_SYSTEM_IP} BGP_RIB=${RIB_NAME}
20 &{EFFECTIVE_RIB_IN} PATH=peer/bgp:%2F%2F${TOOLS_SYSTEM_IP}/effective-rib-in BGP_RIB=${RIB_NAME}
21 &{LOC_RIB} PATH=loc-rib BGP_RIB=${RIB_NAME}
24 Start Quagga Processes On ODL
26 [Documentation] To start the zrpcd processes on ODL VM
27 ${conn_id}= Open_Connection_To_ODL_System ip_address=${odl_ip}
28 Switch Connection ${conn_id}
29 Write Commands Until Expected Prompt cd /opt/quagga/etc/ ${DEFAULT_LINUX_PROMPT_STRICT}
30 Write Commands Until Expected Prompt sudo cp zebra.conf.sample zebra.conf ${DEFAULT_LINUX_PROMPT_STRICT}
31 Write Commands Until Expected Prompt sudo /opt/quagga/etc/init.d/zrpcd start ${DEFAULT_LINUX_PROMPT_STRICT}
32 Write Commands Until Expected Prompt ps -ef | grep zrpcd ${DEFAULT_LINUX_PROMPT_STRICT}
33 Write Commands Until Expected Prompt netstat -nap | grep 7644 ${DEFAULT_LINUX_PROMPT_STRICT}
36 Restart BGP Processes On ODL
38 [Documentation] To restart the bgpd , qthriftd processes on ODL VM
39 ${conn_id} = Open_Connection_To_ODL_System ip_address=${odl_ip}
40 Switch Connection ${conn_id}
41 Write Commands Until Expected Prompt sudo pkill -f bgpd ${DEFAULT_LINUX_PROMPT_STRICT}
42 Start Quagga Processes On ODL ${odl_ip}
44 Start Quagga Processes On DCGW
45 [Arguments] ${dcgw_ip}
46 [Documentation] To start the zrpcd, bgpd,and zebra processes on DCGW
47 ${dcgw_conn_id} = Open_Connection_To_Tools_System ip_address=${dcgw_ip}
48 Switch Connection ${dcgw_conn_id}
49 Write Commands Until Expected Prompt cd /opt/quagga/etc/ ${DEFAULT_LINUX_PROMPT_STRICT}
50 Write Commands Until Expected Prompt sudo cp zebra.conf.sample zebra.conf ${DEFAULT_LINUX_PROMPT_STRICT}
51 Write Commands Until Expected Prompt sudo /opt/quagga/etc/init.d/zrpcd start ${DEFAULT_LINUX_PROMPT_STRICT}
52 Write Commands Until Expected Prompt ps -ef | grep zrpcd ${DEFAULT_LINUX_PROMPT_STRICT}
53 Write Commands Until Expected Prompt cd /opt/quagga/sbin/ ${DEFAULT_LINUX_PROMPT_STRICT}
54 ${output} = Write sudo ./bgpd &
55 ${output} = Read Until pid
57 ${output} = Write sudo ./zebra &
60 Write Commands Until Expected Prompt ps -ef | grep bgpd ${DEFAULT_LINUX_PROMPT_STRICT}
61 Write Commands Until Expected Prompt ps -ef | grep zebra ${DEFAULT_LINUX_PROMPT_STRICT}
62 Write Commands Until Expected Prompt netstat -nap | grep 7644 ${DEFAULT_LINUX_PROMPT_STRICT}
64 Restart BGP Processes On DCGW
65 [Arguments] ${dcgw_ip}
66 [Documentation] To Restart the zrpcd, bgpd,and zebra processes on DCGW
67 ${dcgw_conn_id} = Open_Connection_To_Tools_System ip_address=${dcgw_ip}
68 Switch Connection ${dcgw_conn_id}
69 Write Commands Until Expected Prompt sudo pkill -f bgpd ${DEFAULT_LINUX_PROMPT_STRICT}
70 Start Quagga Processes On DCGW ${dcgw_ip}
72 Show Quagga Configuration On ODL
73 [Arguments] ${odl_ip} ${rd}
74 [Documentation] Show quagga config from ODL
75 Create Quagga Telnet Session ${odl_ip} bgpd sdncbgpc
76 Execute Command On Quagga Telnet Session show running-config
77 Execute Command On Quagga Telnet Session show bgp neighbors
78 Execute Command On Quagga Telnet Session show ip bgp vrf ${rd}
79 Execute Command On Quagga Telnet Session exit
82 Create Quagga Telnet Session
83 [Arguments] ${ip} ${user} ${password}
84 [Documentation] Create telnet session for Quagga
85 ${conn_id}= Open_Connection_To_Tools_System ip_address=${ip}
86 Switch Connection ${conn_id}
87 ${output} = Write telnet localhost ${user}
88 ${output} = Read Until Password:
89 ${output} = Write ${password}
91 ${output} = Write terminal length 512
94 Execute Command On Quagga Telnet Session
95 [Arguments] ${command}
96 [Documentation] Execute command on Quagga telnet session(session should exist) and returns the output.
97 SSHLibrary.Write ${command}
98 ${output} = SSHLibrary.Read
102 Configure BGP And Add Neighbor On DCGW
103 [Arguments] ${dcgw_ip} ${as_id} ${router_id} ${neighbor_ip} ${vrf_name} ${rd}
105 [Documentation] Configure BGP and add neighbor on the dcgw
106 Create Quagga Telnet Session ${dcgw_ip} bgpd sdncbgpc
107 Execute Command On Quagga Telnet Session configure terminal
108 Execute Command On Quagga Telnet Session router bgp ${as_id}
109 Execute Command On Quagga Telnet Session bgp router-id ${router_id}
110 Execute Command On Quagga Telnet Session redistribute static
111 Execute Command On Quagga Telnet Session redistribute connected
112 Execute Command On Quagga Telnet Session neighbor ${neighbor_ip} send-remote-as ${as_id}
113 Execute Command On Quagga Telnet Session vrf ${vrf_name}
114 Execute Command On Quagga Telnet Session rd ${rd}
115 Execute Command On Quagga Telnet Session rt import ${rd}
116 Execute Command On Quagga Telnet Session rt export ${rd}
117 Execute Command On Quagga Telnet Session exit
118 Execute Command On Quagga Telnet Session address-family vpnv4 unicast
119 Execute Command On Quagga Telnet Session network ${loopback_ip}/32 rd ${rd} tag ${as_id}
120 Execute Command On Quagga Telnet Session neighbor ${neighbor_ip} activate
121 Execute Command On Quagga Telnet Session end
122 Execute Command On Quagga Telnet Session show running-config
123 Execute Command On Quagga Telnet Session exit
125 Add Loopback Interface On DCGW
126 [Arguments] ${dcgw_ip} ${loopback_name} ${loopback_ip} ${user}=zebra ${password}=zebra
127 [Documentation] Add loopback interface on DCGW
128 Create Quagga Telnet Session ${dcgw_ip} ${user} ${password}
129 Execute Command On Quagga Telnet Session enable
130 Execute Command On Quagga Telnet Session ${password}
131 Execute Command On Quagga Telnet Session configure terminal
132 Execute Command On Quagga Telnet Session interface ${loopback_name}
133 Execute Command On Quagga Telnet Session ip address ${loopback_ip}/32
134 Execute Command On Quagga Telnet Session exit
135 Execute Command On Quagga Telnet Session end
136 Execute Command On Quagga Telnet Session show running-config
137 Execute Command On Quagga Telnet Session exit
139 Execute Show Command On Quagga
140 [Arguments] ${dcgw_ip} ${cmd} ${user}=bgpd ${password}=sdncbgpc
141 [Documentation] Execute command on quagga and returns the ouput.
142 Create Quagga Telnet Session ${dcgw_ip} ${user} ${password}
143 ${output} = Execute Command On Quagga Telnet Session ${cmd}
145 Execute Command On quagga Telnet Session exit
148 Verify BGP Neighbor Status On Quagga
149 [Arguments] ${dcgw_ip} ${neighbor_ip}
150 [Documentation] Verify bgp neighbor status on quagga
151 ${output} = Execute Show Command On quagga ${dcgw_ip} show bgp neighbors ${neighbor_ip}
153 Should Contain ${output} BGP state = Established
155 Verify Routes On Quagga
156 [Arguments] ${dcgw_ip} ${rd} ${ip_list}
157 [Documentation] Verify routes on quagga
158 ${output} = Execute Show Command On quagga ${dcgw_ip} show ip bgp vrf ${rd}
160 : FOR ${ip} IN @{ip_list}
161 \ Should Contain ${output} ${ip}
163 Delete BGP Config On Quagga
164 [Arguments] ${dcgw_ip} ${bgp_id} ${user}=bgpd ${password}=sdncbgpc
165 [Documentation] Delete BGP Config on Quagga
166 Create Quagga Telnet Session ${dcgw_ip} ${user} ${password}
167 Execute Command On Quagga Telnet Session configure terminal
168 Execute Command On Quagga Telnet Session no router bgp ${bgp_id}
169 Execute Command On Quagga Telnet Session end
170 ${output} = Execute Command On Quagga Telnet Session show running-config
171 Execute Command On Quagga Telnet Session exit
175 [Arguments] ${dcgw_ip} ${as_id} ${vpn_name} ${rd}
176 [Documentation] Creating L3VPN on DCGW
177 BgpOperations.Create Quagga Telnet Session ${dcgw_ip} bgpd sdncbgpc
178 BgpOperations.Execute Command On Quagga Telnet Session configure terminal
179 BgpOperations.Execute Command On Quagga Telnet Session router bgp ${as_id}
180 BgpOperations.Execute Command On Quagga Telnet Session vrf ${vpn_name}
181 BgpOperations.Execute Command On Quagga Telnet Session rd ${rd}
182 BgpOperations.Execute Command On Quagga Telnet Session rt export ${rd}
183 BgpOperations.Execute Command On Quagga Telnet Session rt import ${rd}
184 BgpOperations.Execute Command On Quagga Telnet Session end
187 [Arguments] ${dcgw_ip} ${as_id} @{vpns}
188 [Documentation] Deleting L3VPN on DCGW
189 BgpOperations.Create Quagga Telnet Session ${dcgw_ip} bgpd sdncbgpc
190 BgpOperations.Execute Command On Quagga Telnet Session configure terminal
191 BgpOperations.Execute Command On Quagga Telnet Session router bgp ${as_id}
192 : FOR ${vpn} IN @{vpns}
193 \ BgpOperations.Execute Command On Quagga Telnet Session no vrf ${vpn}
194 BgpOperations.Execute Command On Quagga Telnet Session end
197 [Arguments] ${dcgw_ip} ${vpn_name} ${rd}
198 [Documentation] Verify L3VPN vrf name and rd value on DCGW
199 ${output} = BgpOperations.Execute Show Command On Quagga ${dcgw_ip} show running-config
200 BuiltIn.Should Contain ${output} vrf ${vpn_name}
201 BuiltIn.Should Contain ${output} rd ${rd}
204 [Arguments] ${dcgw_ip} ${rd} ${network_ip} ${label}
205 [Documentation] Add routes on DCGW
206 BgpOperations.Create Quagga Telnet Session ${dcgw_ip} bgpd sdncbgpc
207 BgpOperations.Execute Command On Quagga Telnet Session configure terminal
208 BgpOperations.Execute Command On Quagga Telnet Session router bgp ${AS_ID}
209 BgpOperations.Execute Command On Quagga Telnet Session address-family vpnv4 unicast
210 BgpOperations.Execute Command On Quagga Telnet Session network ${network_ip}/32 rd ${rd} tag ${label}
211 BgpOperations.Execute Command On Quagga Telnet Session end
213 Create BGP Configuration On ODL
214 [Arguments] &{Kwargs}
215 [Documentation] Associate the created L3VPN to a network-id received as dictionary argument
216 TemplatedRequests.Post_As_Json_Templated folder=${VAR_BASE_BGP}/create_bgp mapping=${Kwargs} session=session
218 AddNeighbor To BGP Configuration On ODL
219 [Arguments] &{Kwargs}
220 [Documentation] Associate the created L3VPN to a network-id received as dictionary argument
221 TemplatedRequests.Post_As_Json_Templated folder=${VAR_BASE_BGP}/addNeighbor_bgp mapping=${Kwargs} session=session
223 Get BGP Configuration On ODL
224 [Arguments] ${odl_session}
225 [Documentation] Get bgp configuration
226 ${resp} = RequestsLibrary.Get Request ${odl_session} ${CONFIG_API}/ebgp:bgp/
228 [Return] ${resp.content}
230 Delete BGP Configuration On ODL
231 [Arguments] ${odl_session}
232 [Documentation] Delete BGP
233 ${resp} = RequestsLibrary.Delete Request ${odl_session} ${CONFIG_API}/ebgp:bgp/
235 Should Be Equal As Strings ${resp.status_code} 200
236 [Return] ${resp.content}
238 Create External Tunnel Endpoint Configuration
239 [Arguments] &{Kwargs}
240 [Documentation] Create Tunnel End point
241 TemplatedRequests.Post_As_Json_Templated folder=${VAR_BASE_BGP}/create_etep mapping=${Kwargs} session=session
243 Delete External Tunnel Endpoint Configuration
244 [Arguments] &{Kwargs}
245 [Documentation] Delete Tunnel End point
246 TemplatedRequests.Post_As_Json_Templated folder=${VAR_BASE_BGP}/delete_etep mapping=${Kwargs} session=session
248 Get External Tunnel Endpoint Configuration
250 [Documentation] Get bgp configuration
251 ${resp} = RequestsLibrary.Get Request session ${CONFIG_API}/itm:dc-gateway-ip-list/dc-gateway-ip/${ip}/
253 [Return] ${resp.content}
256 [Documentation] Create and Log the diff between expected and actual responses, make sure Python tool was killed.
257 ... Tear down imported Resources.
258 KillPythonTool.Search_And_Kill_Remote_Python 'play\.py'
259 RequestsLibrary.Delete_All_Sessions
260 SSHLibrary.Close_All_Connections
262 Check_Example_Bgp_Rib_Content
263 [Arguments] ${session} ${substr} ${error_message}=${JSONKEYSTR} not found, but expected.
264 [Documentation] Check the example-bgp-rib content for string
265 ${response}= RequestsLibrary.Get Request ${session} ${BGP_RIB_URI}
266 BuiltIn.Log ${response.status_code}
267 BuiltIn.Log ${response.text}
268 BuiltIn.Should_Contain ${response.text} ${substr} ${error_message} values=False
270 Check_Example_Bgp_Rib_Does_Not_Contain
271 [Arguments] ${session} ${substr} ${error_message}=${JSONKEYSTR} found, but not expected.
272 [Documentation] Check the example-bgp-rib does not contain the string
273 ${response}= RequestsLibrary.Get Request ${session} ${BGP_RIB_URI}
274 BuiltIn.Log ${response.status_code}
275 BuiltIn.Log ${response.text}
276 BuiltIn.Should_Not_Contain ${response.text} ${substr} ${error_message} values=False
278 Check_Example_IPv4_Topology_Content
279 [Arguments] ${session} ${string_to_check}=${EMPTY}
280 [Documentation] Check the example-ipv4-topology content for string
281 ${response}= RequestsLibrary.Get Request ${session} ${BGP_TOPOLOGY_URI}
282 BuiltIn.Log ${response.status_code}
283 BuiltIn.Log ${response.text}
284 BuiltIn.Should_Contain ${response.text} ${string_to_check}
286 Check_Example_IPv4_Topology_Does_Not_Contain
287 [Arguments] ${session} ${string_to_check}
288 [Documentation] Check the example-ipv4-topology does not contain the string
289 ${response}= RequestsLibrary.Get Request ${session} ${BGP_TOPOLOGY_URI}
290 BuiltIn.Log ${response.status_code}
291 BuiltIn.Log ${response.text}
292 BuiltIn.Should_Not_Contain ${response.text} ${string_to_check}
294 Bmp_Monitor_Precondition
295 [Arguments] ${session}
296 [Documentation] Verify example-bmp-monitor presence in bmp-monitors
297 &{mapping} BuiltIn.Create_Dictionary TOOL_IP=${TOOLS_SYSTEM_IP}
298 BuiltIn.Wait_Until_Keyword_Succeeds 6x 10s TemplatedRequests.Get_As_Json_Templated folder=${BGP_BMP_FEAT_DIR} mapping=${mapping} verify=True
299 ... session=${session}
301 Bmp_Monitor_Postcondition
302 [Arguments] ${session}
303 [Documentation] Verifies if example-bmp-monitor data contains one peer.
304 &{mapping} BuiltIn.Create_Dictionary TOOL_IP=${TOOLS_SYSTEM_IP}
305 ${output} BuiltIn.Wait_Until_Keyword_Succeeds 10x 5s TemplatedRequests.Get_As_Json_Templated folder=${BGP_BMP_DIR} mapping=${mapping}
306 ... session=${session} verify=True
307 BuiltIn.Log ${output}
310 [Arguments] ${totest} ${dir} ${remove}=True
311 ${announce_hex} = OperatingSystem.Get_File ${dir}/${totest}/announce_${totest}.hex
312 ${announce_hex} = String.Remove_String ${announce_hex} \n
313 ${withdraw_hex} = OperatingSystem.Get_File ${dir}/${totest}/withdraw_${totest}.hex
314 ${withdraw_hex} = String.Remove_String ${withdraw_hex} \n
315 BuiltIn.Run_Keyword_If '${remove}' == 'True' BgpRpcClient.play_clean
316 TemplatedRequests.Post_As_Xml_Templated ${dir}/${totest}/app mapping=${APP_PEER} session=${CONFIG_SESSION}
317 ${update} BuiltIn.Wait_Until_Keyword_Succeeds 3x 2s Get_Update_Message
318 BuiltIn.Should_Be_Equal_As_Strings ${update} ${announce_hex}
319 BgpRpcClient.play_clean
320 Remove_Configured_Routes ${totest} ${dir}
321 ${update} BuiltIn.Wait_Until_Keyword_Succeeds 3x 2s Get_Update_Message
322 BuiltIn.Should_Be_Equal_As_Strings ${update} ${withdraw_hex}
323 [Teardown] Remove_Configured_Routes ${totest} ${dir}
326 [Arguments] ${totest} ${dir} ${ipv}=ipv4
327 ${announce_hex}= OperatingSystem.Get_File ${dir}/${totest}/announce_${totest}.hex
328 ${withdraw_hex}= OperatingSystem.Get_File ${dir}/${totest}/withdraw_${totest}.hex
329 BgpRpcClient.play_clean
330 BgpRpcClient.play_send ${announce_hex}
331 BuiltIn.Wait_Until_Keyword_Succeeds 3x 2s TemplatedRequests.Get_As_Json_Templated ${dir}/${totest}/rib mapping=${ADJ_RIB_IN} session=${CONFIG_SESSION}
333 BuiltIn.Wait_Until_Keyword_Succeeds 3x 2s TemplatedRequests.Get_As_Json_Templated ${dir}/${totest}/rib mapping=${EFFECTIVE_RIB_IN} session=${CONFIG_SESSION}
335 BuiltIn.Wait_Until_Keyword_Succeeds 3x 2s TemplatedRequests.Get_As_Json_Templated ${dir}/${totest}/rib mapping=${LOC_RIB} session=${CONFIG_SESSION}
337 BgpRpcClient.play_send ${withdraw_hex}
338 BuiltIn.Wait_Until_Keyword_Succeeds 3x 2s TemplatedRequests.Get_As_Json_Templated ${dir}/empty_routes/${ipv} mapping=${LOC_RIB} session=${CONFIG_SESSION}
340 [Teardown] BgpRpcClient.play_send ${withdraw_hex}
342 Play_To_Odl_Non_Removal_Template
343 [Arguments] ${totest} ${dir} ${ipv}=ipv4
344 ${announce_hex}= OperatingSystem.Get_File ${dir}/${totest}/announce_${totest}.hex
345 BgpRpcClient.play_clean
346 BgpRpcClient.play_send ${announce_hex}
347 BuiltIn.Wait_Until_Keyword_Succeeds 3x 2s TemplatedRequests.Get_As_Json_Templated ${dir}/${totest}/rib mapping=${LOC_RIB} session=${CONFIG_SESSION}
351 [Documentation] Returns hex update message.
352 ${update} = BgpRpcClient.play_get
353 BuiltIn.Should_Not_Be_Equal ${update} ${Empty}
356 Remove_Configured_Routes
357 [Arguments] ${totest} ${dir}
358 [Documentation] Removes the route if present.
359 BuiltIn.Run_Keyword_And_Ignore_Error TemplatedRequests.Delete_Templated ${dir}/${totest}/app mapping=${APP_PEER} session=${CONFIG_SESSION}