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