+ \ Add Bindings ${node}0 10.10.10.${node}0/32 127.0.0.${node}
+ \ Add Bindings ${node}0 10.10.${node}0.0/24 127.0.0.${node}
+ \ Add Bindings ${node}0 10.${node}0.0.0/16 127.0.0.${node}
+ \ Add Bindings ${node}0 ${node}0.0.0.0/8 127.0.0.${node}
+ Add Bindings 10 10.10.10.10/32 127.0.0.1
+ Add Bindings 10 10.10.10.0/24 127.0.0.1
+ Add Bindings 10 10.10.0.0/16 127.0.0.1
+ Add Bindings 10 10.0.0.0/8 127.0.0.1
+
+Verify Snapshot Was Pushed
+ [Arguments] ${snapshot_string}=22-sxp-controller-one-node.xml
+ [Documentation] Will succeed if the ${snapshot_string} is found in the karaf logs
+ ${output} = Utils.Run Command On Controller ${ODL_SYSTEM_IP} cat ${WORKSPACE}/${BUNDLEFOLDER}/data/log/karaf.log* | grep -c 'Successfully pushed configuration snapshot.*${snapshot_string}'
+ BuiltIn.Should Not Be Equal As Strings ${output} 0
+
+Clean SXP Session
+ [Documentation] Destroy created sessions
+ RequestsLibrary.Delete All Sessions
+
+Add Domain
+ [Arguments] ${domain_name} ${sgt}=None ${prefixes}=None ${origin}=LOCAL ${node}=127.0.0.1 ${session}=session
+ [Documentation] Based on ODL version decide if domain's bindings will be added with or without origin type (introduced in Fluorine)
+ CompareStream.Run_Keyword_If_At_Least_Fluorine Add Domain Fluorine ${domain_name} ${sgt} ${prefixes} ${origin} ${node}
+ ... ${session}
+ CompareStream.Run_Keyword_If_At_Most_Oxygen Add Domain Oxygen ${domain_name} ${sgt} ${prefixes} ${node} ${session}
+
+Add Domain Fluorine
+ [Arguments] ${domain_name} ${sgt} ${prefixes} ${origin} ${node} ${session}
+ [Documentation] Add Domain with bindings (with origin) via RPC
+ ${data} = Sxp.Add Domain Xml Fluorine ${node} ${domain_name} ${sgt} ${prefixes} ${origin}
+ Post To Controller ${session} add-domain ${data}
+
+Add Domain Oxygen
+ [Arguments] ${domain_name} ${sgt} ${prefixes} ${node} ${session}
+ [Documentation] Add Domain with bindings (without origin) via RPC
+ ${data} = Sxp.Add Domain Xml Oxygen ${node} ${domain_name} ${sgt} ${prefixes}
+ Post To Controller ${session} add-domain ${data}
+
+Delete Domain
+ [Arguments] ${domain_name} ${node}=127.0.0.1 ${session}=session
+ [Documentation] Delete Domain via RPC
+ ${data} = Sxp.Delete Domain Xml ${node} ${domain_name}
+ Post To Controller ${session} delete-domain ${data}
+
+Add Bindings Range
+ [Arguments] ${sgt} ${start} ${size} ${node}=127.0.0.1
+ [Documentation] Add Bindings to Node specified by range
+ ${prefixes} = Sxp.Prefix Range ${start} ${size}
+ Add Bindings ${sgt} ${prefixes} ${node}
+
+Delete Bindings Range
+ [Arguments] ${sgt} ${start} ${size} ${node}=127.0.0.1
+ [Documentation] Delete Bindings to Node specified by range
+ ${prefixes} = Sxp.Prefix Range ${start} ${size}
+ Delete Bindings ${sgt} ${prefixes} ${node}
+
+Check Binding Range
+ [Arguments] ${sgt} ${start} ${end} ${node}=127.0.0.1
+ [Documentation] Check if Node contains Bindings specified by range
+ ${resp} = Get Bindings ${node}
+ : FOR ${num} IN RANGE ${start} ${end}
+ \ ${ip} = Sxp.Get Ip From Number ${num}
+ \ Should Contain Binding ${resp} ${sgt} ${ip}/32
+
+Check Binding Range Negative
+ [Arguments] ${sgt} ${start} ${end} ${node}=127.0.0.1
+ [Documentation] Check if Node does not contains Bindings specified by range
+ ${resp} = Get Bindings ${node}
+ : FOR ${num} IN RANGE ${start} ${end}
+ \ ${ip} = Sxp.Get Ip From Number ${num}
+ \ Should Not Contain Binding ${resp} ${sgt} ${ip}/32