2 Documentation This library contains keywords related to the BGP functionality.
5 Resource ../variables/Variables.robot
6 Resource TemplatedRequests.robot
7 Resource KillPythonTool.robot
10 ${VAR_BASE_BGP} ${CURDIR}/../variables/bgpfunctional
11 ${BGP_BMP_DIR} ${CURDIR}/../variables/bgpfunctional/bmp_basic/filled_structure
12 ${BGP_BMP_FEAT_DIR} ${CURDIR}/../variables/bgpfunctional/bmp_basic/empty_structure
15 Start Quagga Processes On ODL
17 [Documentation] To start the zrpcd processes on ODL VM
18 ${conn_id}= Open_Connection_To_ODL_System ip_address=${odl_ip}
19 Switch Connection ${conn_id}
20 Write Commands Until Expected Prompt cd /opt/quagga/etc/ ${DEFAULT_LINUX_PROMPT_STRICT}
21 Write Commands Until Expected Prompt sudo cp zebra.conf.sample zebra.conf ${DEFAULT_LINUX_PROMPT_STRICT}
22 Write Commands Until Expected Prompt sudo /opt/quagga/etc/init.d/zrpcd start ${DEFAULT_LINUX_PROMPT_STRICT}
23 Write Commands Until Expected Prompt ps -ef | grep zrpcd ${DEFAULT_LINUX_PROMPT_STRICT}
24 Write Commands Until Expected Prompt netstat -nap | grep 7644 ${DEFAULT_LINUX_PROMPT_STRICT}
27 Start Quagga Processes On DCGW
28 [Arguments] ${dcgw_ip}
29 [Documentation] To start the zrpcd, bgpd,and zebra processes on DCGW
30 ${dcgw_conn_id} = Open_Connection_To_Tools_System ip_address=${dcgw_ip}
31 Switch Connection ${dcgw_conn_id}
32 Write Commands Until Expected Prompt cd /opt/quagga/etc/ ${DEFAULT_LINUX_PROMPT_STRICT}
33 Write Commands Until Expected Prompt sudo cp zebra.conf.sample zebra.conf ${DEFAULT_LINUX_PROMPT_STRICT}
34 Write Commands Until Expected Prompt sudo /opt/quagga/etc/init.d/zrpcd start ${DEFAULT_LINUX_PROMPT_STRICT}
35 Write Commands Until Expected Prompt ps -ef | grep zrpcd ${DEFAULT_LINUX_PROMPT_STRICT}
36 Write Commands Until Expected Prompt cd /opt/quagga/sbin/ ${DEFAULT_LINUX_PROMPT_STRICT}
37 ${output} = Write sudo ./bgpd &
38 ${output} = Read Until pid
40 ${output} = Write sudo ./zebra &
43 Write Commands Until Expected Prompt ps -ef | grep bgpd ${DEFAULT_LINUX_PROMPT_STRICT}
44 Write Commands Until Expected Prompt ps -ef | grep zebra ${DEFAULT_LINUX_PROMPT_STRICT}
45 Write Commands Until Expected Prompt netstat -nap | grep 7644 ${DEFAULT_LINUX_PROMPT_STRICT}
47 Show Quagga Configuration On ODL
48 [Arguments] ${odl_ip} ${rd}
49 [Documentation] Show quagga config from ODL
50 Create Quagga Telnet Session ${odl_ip} bgpd sdncbgpc
51 Execute Command On Quagga Telnet Session show running-config
52 Execute Command On Quagga Telnet Session show bgp neighbors
53 Execute Command On Quagga Telnet Session show ip bgp vrf ${rd}
54 Execute Command On Quagga Telnet Session exit
57 Create Quagga Telnet Session
58 [Arguments] ${ip} ${user} ${password}
59 [Documentation] Create telnet session for Quagga
60 ${conn_id}= Open_Connection_To_Tools_System ip_address=${ip}
61 Switch Connection ${conn_id}
62 ${output} = Write telnet localhost ${user}
63 ${output} = Read Until Password:
64 ${output} = Write ${password}
66 ${output} = Write terminal length 512
69 Execute Command On Quagga Telnet Session
70 [Arguments] ${command}
71 [Documentation] Execute command on Quagga telnet session(session should exist) and returns the output.
72 SSHLibrary.Write ${command}
73 ${output} = SSHLibrary.Read
77 Configure BGP And Add Neighbor On DCGW
78 [Arguments] ${dcgw_ip} ${as_id} ${router_id} ${neighbor_ip} ${vrf_name} ${rd}
80 [Documentation] Configure BGP and add neighbor on the dcgw
81 Create Quagga Telnet Session ${dcgw_ip} bgpd sdncbgpc
82 Execute Command On Quagga Telnet Session configure terminal
83 Execute Command On Quagga Telnet Session router bgp ${as_id}
84 Execute Command On Quagga Telnet Session bgp router-id ${router_id}
85 Execute Command On Quagga Telnet Session redistribute static
86 Execute Command On Quagga Telnet Session redistribute connected
87 Execute Command On Quagga Telnet Session neighbor ${neighbor_ip} send-remote-as ${as_id}
88 Execute Command On Quagga Telnet Session vrf ${vrf_name}
89 Execute Command On Quagga Telnet Session rd ${rd}
90 Execute Command On Quagga Telnet Session rt import ${rd}
91 Execute Command On Quagga Telnet Session rt export ${rd}
92 Execute Command On Quagga Telnet Session exit
93 Execute Command On Quagga Telnet Session address-family vpnv4 unicast
94 Execute Command On Quagga Telnet Session network ${loopback_ip}/32 rd ${rd} tag ${as_id}
95 Execute Command On Quagga Telnet Session neighbor ${neighbor_ip} activate
96 Execute Command On Quagga Telnet Session end
97 Execute Command On Quagga Telnet Session show running-config
98 Execute Command On Quagga Telnet Session exit
100 Add Loopback Interface On DCGW
101 [Arguments] ${dcgw_ip} ${loopback_name} ${loopback_ip} ${user}=zebra ${password}=zebra
102 [Documentation] Add loopback interface on DCGW
103 Create Quagga Telnet Session ${dcgw_ip} ${user} ${password}
104 Execute Command On Quagga Telnet Session enable
105 Execute Command On Quagga Telnet Session ${password}
106 Execute Command On Quagga Telnet Session configure terminal
107 Execute Command On Quagga Telnet Session interface ${loopback_name}
108 Execute Command On Quagga Telnet Session ip address ${loopback_ip}/32
109 Execute Command On Quagga Telnet Session exit
110 Execute Command On Quagga Telnet Session end
111 Execute Command On Quagga Telnet Session show running-config
112 Execute Command On Quagga Telnet Session exit
114 Execute Show Command On Quagga
115 [Arguments] ${dcgw_ip} ${cmd} ${user}=bgpd ${password}=sdncbgpc
116 [Documentation] Execute command on quagga and returns the ouput.
117 Create Quagga Telnet Session ${dcgw_ip} ${user} ${password}
118 ${output} = Execute Command On Quagga Telnet Session ${cmd}
120 Execute Command On quagga Telnet Session exit
123 Verify BGP Neighbor Status On Quagga
124 [Arguments] ${dcgw_ip} ${neighbor_ip}
125 [Documentation] Verify bgp neighbor status on quagga
126 ${output} = Execute Show Command On quagga ${dcgw_ip} show bgp neighbors ${neighbor_ip}
128 Should Contain ${output} BGP state = Established
130 Verify Routes On Quagga
131 [Arguments] ${dcgw_ip} ${rd} ${ip_list}
132 [Documentation] Verify routes on quagga
133 ${output} = Execute Show Command On quagga ${dcgw_ip} show ip bgp vrf ${rd}
135 : FOR ${ip} IN @{ip_list}
136 \ Should Contain ${output} ${ip}
138 Delete BGP Config On Quagga
139 [Arguments] ${dcgw_ip} ${bgp_id} ${user}=bgpd ${password}=sdncbgpc
140 [Documentation] Delete BGP Config on Quagga
141 Create Quagga Telnet Session ${dcgw_ip} ${user} ${password}
142 Execute Command On Quagga Telnet Session configure terminal
143 Execute Command On Quagga Telnet Session no router bgp ${bgp_id}
144 Execute Command On Quagga Telnet Session end
145 ${output} = Execute Command On Quagga Telnet Session show running-config
146 Execute Command On Quagga Telnet Session exit
149 Create BGP Configuration On ODL
150 [Arguments] &{Kwargs}
151 [Documentation] Associate the created L3VPN to a network-id received as dictionary argument
152 TemplatedRequests.Post_As_Json_Templated folder=${VAR_BASE_BGP}/create_bgp mapping=${Kwargs} session=session
154 AddNeighbor To BGP Configuration On ODL
155 [Arguments] &{Kwargs}
156 [Documentation] Associate the created L3VPN to a network-id received as dictionary argument
157 TemplatedRequests.Post_As_Json_Templated folder=${VAR_BASE_BGP}/addNeighbor_bgp mapping=${Kwargs} session=session
159 Get BGP Configuration On ODL
160 [Arguments] ${odl_session}
161 [Documentation] Get bgp configuration
162 ${resp} = RequestsLibrary.Get Request ${odl_session} ${CONFIG_API}/ebgp:bgp/
164 [Return] ${resp.content}
166 Delete BGP Configuration On ODL
167 [Arguments] ${odl_session}
168 [Documentation] Delete BGP
169 ${resp} = RequestsLibrary.Delete Request ${odl_session} ${CONFIG_API}/ebgp:bgp/
171 Should Be Equal As Strings ${resp.status_code} 200
172 [Return] ${resp.content}
174 Create External Tunnel Endpoint Configuration
175 [Arguments] &{Kwargs}
176 [Documentation] Create Tunnel End point
177 TemplatedRequests.Post_As_Json_Templated folder=${VAR_BASE_BGP}/create_etep mapping=${Kwargs} session=session
179 Delete External Tunnel Endpoint Configuration
180 [Arguments] &{Kwargs}
181 [Documentation] Delete Tunnel End point
182 TemplatedRequests.Post_As_Json_Templated folder=${VAR_BASE_BGP}/delete_etep mapping=${Kwargs} session=session
184 Get External Tunnel Endpoint Configuration
186 [Documentation] Get bgp configuration
187 ${resp} = RequestsLibrary.Get Request session ${CONFIG_API}/itm:dc-gateway-ip-list/dc-gateway-ip/${ip}/
189 [Return] ${resp.content}
192 [Documentation] Create and Log the diff between expected and actual responses, make sure Python tool was killed.
193 ... Tear down imported Resources.
194 KillPythonTool.Search_And_Kill_Remote_Python 'play\.py'
195 RequestsLibrary.Delete_All_Sessions
196 SSHLibrary.Close_All_Connections
198 Check_Example_Bgp_Rib_Content
199 [Arguments] ${substr} ${error_message}=${JSONKEYSTR} not found, but expected.
200 [Documentation] Check the example-bgp-rib content for string
201 ${response}= RequestsLibrary.Get Request operational bgp-rib:bgp-rib/rib/example-bgp-rib
202 BuiltIn.Log ${response.status_code}
203 BuiltIn.Log ${response.text}
204 BuiltIn.Should_Contain ${response.text} ${substr} ${error_message} values=False
206 Check_Example_Bgp_Rib_Does_Not_Contain
207 [Arguments] ${substr} ${error_message}=${JSONKEYSTR} found, but not expected.
208 [Documentation] Check the example-bgp-rib does not contain the string
209 ${response}= RequestsLibrary.Get Request operational bgp-rib:bgp-rib/rib/example-bgp-rib
210 BuiltIn.Log ${response.status_code}
211 BuiltIn.Log ${response.text}
212 BuiltIn.Should_Not_Contain ${response.text} ${substr} ${error_message} values=False
214 Check_Example_IPv4_Topology_Content
215 [Arguments] ${string_to_check}=${EMPTY}
216 [Documentation] Check the example-ipv4-topology content for string
217 ${response}= RequestsLibrary.Get Request operational topology/example-ipv4-topology
218 BuiltIn.Log ${response.status_code}
219 BuiltIn.Log ${response.text}
220 BuiltIn.Should_Contain ${response.text} ${string_to_check}
222 Check_Example_IPv4_Topology_Does_Not_Contain
223 [Arguments] ${string_to_check}
224 [Documentation] Check the example-ipv4-topology does not contain the string
225 ${response}= RequestsLibrary.Get Request operational topology/example-ipv4-topology
226 BuiltIn.Log ${response.status_code}
227 BuiltIn.Log ${response.text}
228 BuiltIn.Should_Not_Contain ${response.text} ${string_to_check}
230 Bmp_Monitor_Precondition
231 [Arguments] ${session}
232 [Documentation] Verify example-bmp-monitor presence in bmp-monitors
233 &{mapping} BuiltIn.Create_Dictionary TOOL_IP=${TOOLS_SYSTEM_IP}
234 BuiltIn.Wait_Until_Keyword_Succeeds 6x 10s TemplatedRequests.Get_As_Json_Templated folder=${BGP_BMP_FEAT_DIR} mapping=${mapping} verify=True
235 ... session=${session}
237 Bmp_Monitor_Postcondition
238 [Arguments] ${session}
239 [Documentation] Verifies if example-bmp-monitor data contains one peer.
240 &{mapping} BuiltIn.Create_Dictionary TOOL_IP=${TOOLS_SYSTEM_IP}
241 ${output} BuiltIn.Wait_Until_Keyword_Succeeds 10x 5s TemplatedRequests.Get_As_Json_Templated folder=${BGP_BMP_DIR} mapping=${mapping}
242 ... session=${session} verify=True
243 BuiltIn.Log ${output}