+
+
+def route_definition_xml(virtual_ip, net_mask, interface):
+ """Generate xml for Add Bindings request
+
+ :param interface: Network interface name
+ :type interface: str
+ :param net_mask: NetMask of virtual ip
+ :type net_mask: str
+ :param virtual_ip: Virtual ip
+ :type virtual_ip: str
+ :returns: String containing xml data for request
+
+ """
+ templ = Template('''
+ <routing-definition>
+ <ip-address>$vip</ip-address>
+ <interface>$interface</interface>
+ <netmask>$mask</netmask>
+ </routing-definition>
+ ''')
+ data = templ.substitute({'mask': net_mask, 'vip': virtual_ip, 'interface': interface})
+ return data
+
+
+def route_definitions_xml(routes, old_routes=None):
+ """Generate xml for Add Bindings request
+
+ :param routes: XML formatted data containing RouteDefinitions
+ :type routes: str
+ :param old_routes: Routes add to request that needs to persist
+ :type old_routes: str
+ :returns: String containing xml data for request
+
+ """
+ if old_routes and "</sxp-cluster-route>" in old_routes:
+ templ = Template(old_routes.replace("</sxp-cluster-route>", "$routes</sxp-cluster-route>"))
+ else:
+ templ = Template('''<sxp-cluster-route xmlns="urn:opendaylight:sxp:cluster:route">
+ $routes
+</sxp-cluster-route>
+ ''')
+ data = templ.substitute({'routes': routes})
+ return data
+
+
+def add_binding_origin_xml(origin, priority):
+ """Generate xml for Add Binding Origin request
+
+ :param origin: Origin type
+ :type origin: str
+ :param priority: Origin priority
+ :type priority: str
+ :returns: String containing xml data for request
+
+ """
+ templ = Template('''<input xmlns="urn:opendaylight:sxp:config:controller">
+ <origin>$origin</origin>
+ <priority>$priority</priority>
+</input>''')
+ data = templ.substitute({'origin': origin, 'priority': priority})
+ return data
+
+
+def update_binding_origin_xml(origin, priority):
+ """Generate xml for Update Binding Origin request
+
+ :param origin: Origin type
+ :type origin: str
+ :param priority: Origin priority
+ :type priority: str
+ :returns: String containing xml data for request
+
+ """
+ templ = Template('''<input xmlns="urn:opendaylight:sxp:config:controller">
+ <origin>$origin</origin>
+ <priority>$priority</priority>
+</input>''')
+ data = templ.substitute({'origin': origin, 'priority': priority})
+ return data
+
+
+def delete_binding_origin_xml(origin):
+ """Generate xml for Delete Binding Origin request
+
+ :param origin: Origin type
+ :type origin: str
+ :returns: String containing xml data for request
+
+ """
+ templ = Template('''<input xmlns="urn:opendaylight:sxp:config:controller">
+ <origin>$origin</origin>
+</input>''')
+ data = templ.substitute({'origin': origin})
+ return data
+
+
+def find_binding_origin(origins_json, origin):
+ """Test if Binding origin of specified value is contained in JSON
+
+ :param origins_json: JSON containing Binding origins
+ :type origins_json: str
+ :param origin: Origin to be found
+ :type origin: str
+ :returns: True if Binding origin of specified origin type was found, otherwise False.
+
+ """
+ for json_origin in parse_binding_origins(origins_json):
+ if json_origin['origin'] == origin:
+ return True
+ return False
+
+
+def find_binding_origin_with_priority(origins_json, origin, priority):
+ """Test if Binding origin of specified value and priority is contained in JSON
+
+ :param origins_json: JSON containing Binding origins
+ :type origins_json: str
+ :param origin: Origin to be found
+ :type origin: str
+ :param priority: desired priority of origin
+ :type priority: str
+ :returns: True if Binding origin of specified origin type with desired priority was found, otherwise False.
+
+ """
+ for json_origin in parse_binding_origins(origins_json):
+ if json_origin['origin'] == origin:
+ if json_origin['priority'] == int(priority):
+ return True
+ return False
+
+
+def parse_binding_origins(origins_json):
+ """Parse JSON string into Array of Binding origins
+
+ :param origins_json: JSON containing Binding origins
+ :type origins_json: str
+ :returns: Array containing Binding origins.
+
+ """
+ output = []
+ for origins in origins_json['binding-origins'].values():
+ for origin in origins:
+ output.append(origin)
+ return output