2 Documentation Mininet library. This library is useful for tests using mininet tool to simulate devices.
6 Resource ClusterManagement.robot
7 Variables ../variables/Variables.py
10 Start Mininet Single Controller
11 [Arguments] ${mininet}=${TOOLS_SYSTEM_IP} ${controller}=${ODL_SYSTEM_IP} ${options}=--topo tree,1 --switch ovsk,protocols=OpenFlow13 ${custom}=${EMPTY} ${ofport}=${ODL_OF_PORT} ${timeout}=${DEFAULT_TIMEOUT}
12 [Documentation] Start Mininet with custom topology and connect to controller.
13 Log Clear any existing mininet
14 Utils.Clean Mininet System ${mininet}
15 ${mininet_conn_id}= SSHLibrary.Open Connection ${mininet} prompt=${TOOLS_SYSTEM_PROMPT} timeout=${timeout}
16 Set Suite Variable ${mininet_conn_id}
17 Utils.Flexible Mininet Login
18 Run Keyword If '${custom}' != '${EMPTY}' Put File ${custom}
19 Log Start mininet ${options} to ${controller}
20 SSHLibrary.Write sudo mn --controller 'remote,ip=${controller},port=${ofport}' ${options}
21 SSHLibrary.Read Until mininet>
22 Log Check OVS configuratiom
23 SSHLibrary.Write sh ovs-vsctl show
24 SSHLibrary.Read Until mininet>
25 [Return] ${mininet_conn_id}
27 Start Mininet Multiple Controllers
28 [Arguments] ${mininet} ${controller_index_list}=${EMPTY} ${options}=--topo tree,1 --switch ovsk,protocols=OpenFlow13 ${custom}=${EMPTY} ${ofport}=${ODL_OF_PORT} ${timeout}=${DEFAULT_TIMEOUT}
29 [Documentation] Start Mininet with custom topology and connect to list of controllers in ${controller_index_list} or all if no list is provided.
30 ${index_list} = ClusterManagement__Given_Or_Internal_Index_List given_list=${controller_index_list}
31 Log Clear any existing mininet
32 Utils.Clean Mininet System ${mininet}
33 ${mininet_conn_id}= SSHLibrary.Open Connection ${mininet} prompt=${TOOLS_SYSTEM_PROMPT} timeout=${timeout}
34 Set Suite Variable ${mininet_conn_id}
35 Utils.Flexible Mininet Login
36 Run Keyword If '${custom}' != '${EMPTY}' Put File ${custom}
37 Log Start mininet ${options}
38 SSHLibrary.Write sudo mn ${options}
39 SSHLibrary.Read Until mininet>
40 Log Create controller configuration
41 ${controller_opt}= Set Variable
42 : FOR ${index} IN @{index_list}
43 \ ${controller_opt}= Catenate ${controller_opt} ${SPACE}tcp:${ODL_SYSTEM_${index}_IP}:${ofport}
44 \ Log ${controller_opt}
45 Log Find Number of OVS bridges
46 ${num_bridges} Utils.Run Command On Mininet ${mininet} sudo ovs-vsctl show | grep Bridge | wc -l
47 ${num_bridges}= Convert To Integer ${num_bridges}
48 Log Configure OVS controllers ${controller_opt} in all bridges
49 : FOR ${i} IN RANGE 1 ${num_bridges+1}
50 \ ${bridge}= Utils.Run Command On Mininet ${mininet} sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1
51 \ OVSDB.Set Controller In OVS Bridge ${mininet} ${bridge} ${controller_opt}
52 Log Check OVS configuratiom
53 SSHLibrary.Write sh ovs-vsctl show
54 SSHLibrary.Read Until mininet>
55 [Return] ${mininet_conn_id}
58 [Arguments] ${mininet_conn}=${EMPTY} ${cmd}=help
59 [Documentation] Sends Command ${cmd} to Mininet session ${mininet_conn} and returns read buffer response.
60 Run Keyword If """${mininet_conn}""" != "" SSHLibrary.Switch Connection ${mininet_conn}
61 SSHLibrary.Write ${cmd}
62 ${output}= SSHLibrary.Read Until mininet>
65 Send Mininet Command Multiple Sessions
66 [Arguments] ${mininet_conn_list} ${cmd}=help
67 [Documentation] Sends Command ${cmd} to Mininet sessions in ${mininet_conn_list} and returns list of read buffer responses.
68 ${output_list}= Create List
69 : FOR ${mininet_conn} IN @{mininet_conn_list}
70 \ ${output}= Utils.Send Mininet Command ${mininet_conn} ${cmd}
71 \ Append To List ${output_list} ${output}
72 [Return] ${output_list}
75 [Arguments] ${mininet_conn}=${EMPTY}
76 [Documentation] Stops Mininet and exits session ${mininet_conn}
77 Run Keyword If """${mininet_conn}""" != "" SSHLibrary.Switch Connection ${mininet_conn}
79 SSHLibrary.Read Until ${TOOLS_SYSTEM_PROMPT}
80 SSHLibrary.Close Connection
82 Stop Mininet And Exit Multiple Sessions
83 [Arguments] ${mininet_conn_list}
84 [Documentation] Stops Mininet and exits sessions in ${mininet_conn_list}.
85 : FOR ${mininet_conn} IN @{mininet_conn_list}
86 \ MininetKeywords.Stop Mininet And Exit ${mininet_conn}
88 Verify Aggregate Flow From Mininet Session
89 [Arguments] ${mininet_conn}=${EMPTY} ${flow_count}=0 ${time_out}=0s
90 [Documentation] Verify flow count per switch
91 Wait Until Keyword Succeeds ${time_out} 2s MininetKeywords.Mininet Sync Status ${mininet_conn} ${flow_count}
94 [Arguments] ${mininet_conn}=${EMPTY} ${flow_count}=0
95 [Documentation] Sync with mininet to match exact number of flows
96 ${cmd} = Set Variable dpctl dump-aggregate -O OpenFlow13
97 ${output}= MininetKeywords.Send Mininet Command ${mininet_conn} ${cmd}
98 ${flows}= String.Get RegExp Matches ${output} (?<=flow_count\=).*?(?=\r)
99 ${total_flows}= BuiltIn.Evaluate sum(map(int, ${flows}))
100 Should Be Equal As Numbers ${total_flows} ${flow_count}