-def buildLibvirtDefaultNetConfig(dom):
-
- # create the <network> element
- networkElem = dom.createElement("network")
- # create <name> element
- nameElem = dom.createElement("name")
- textName = dom.createTextNode("default")
- nameElem.appendChild(textName)
- # create <uuid> element
- uuidElem = dom.createElement("uuid")
- textUUID = dom.createTextNode(str(uuid.uuid1()))
- uuidElem.appendChild(textUUID)
- # create <forward> element
- forwardElem = dom.createElement("forward")
- forwardElem.setAttribute("mode", "nat")
- # create <nat> element
- natElem = dom.createElement("nat")
- # create <port> element
- portElem = dom.createElement("port")
- portElem.setAttribute("end", "65535")
- portElem.setAttribute("start", "1024")
- # create the ipv4 <ip> element
- ipElem0 = dom.createElement("ip")
- ipElem0.setAttribute("address", "192.168.122.1")
- ipElem0.setAttribute("netmask", "255.255.255.0")
- # create the <dhcp> element
- dhcpElem = dom.createElement("dhcp")
- # create the <range> element
- rangeElem = dom.createElement("range")
- rangeElem.setAttribute("end", "192.168.122.254")
- rangeElem.setAttribute("start", "192.168.122.2")
- # create the <bridge> element
- bridgeElem = dom.createElement("bridge")
- bridgeElem.setAttribute("delay", "0")
- bridgeElem.setAttribute("name", "virbr0")
- bridgeElem.setAttribute("stp", "on")
-
- # build the whole thing
- natElem.appendChild(portElem)
- forwardElem.appendChild(natElem)
-
- dhcpElem.appendChild(rangeElem)
- ipElem0.appendChild(dhcpElem)
- networkElem.appendChild(nameElem)
- networkElem.appendChild(uuidElem)
- networkElem.appendChild(forwardElem)
- networkElem.appendChild(bridgeElem)
- networkElem.appendChild(ipElem0)
- return networkElem
-
-def checkForIPv6(defaultNetworkConfig):
- netnodes = defaultNetworkConfig.getElementsByTagName('network')
- hasIPv6 = False
- for netnode in netnodes:
- ips = netnode.getElementsByTagName('ip')
- for ip in ips:
- if ip.getAttribute('family')=='ipv6':
- logger.log("ipv6: the configuration already have an IPv6 address/prefix set for the slivers! %s/%s" % (ip.getAttribute('address'), ip.getAttribute('prefix')) )
- hasIPv6 = True
- return hasIPv6
-
-
-
-def addIPv6(defaultNetworkConfig, ipv6addr, prefix):
-
- netnodes = defaultNetworkConfig.getElementsByTagName('network')
- for netnode in netnodes:
- # create the ipv6 <ip> element 1
- ipElem1 = defaultNetworkConfig.createElement("ip")
- ipElem1.setAttribute("family", "ipv6")
- ipElem1.setAttribute("address", ipv6addr)
- ipElem1.setAttribute("prefix", prefix)
- # create the ipv6 <ip> element 2
- # it's ugly, I know, but we need a link-local address on the interface!
- ipElem2 = defaultNetworkConfig.createElement("ip")
- ipElem2.setAttribute("family", "ipv6")
- ipElem2.setAttribute("address", "fe80:1234::1")
- ipElem2.setAttribute("prefix", "64")
- # adding to the 'defaultNetworkConfig'
- netnode.appendChild(ipElem1)
- netnode.appendChild(ipElem2)
- return defaultNetworkConfig
-
-def changeIPv6(dom, ipv6addr, prefix):
- ips = dom.getElementsByTagName('ip')
- for ip in ips:
- if ip.getAttribute("family")=='ipv6' and not(re.match(r'fe80(.*)', ip.getAttribute("address"), re.I)):
- ip.setAttribute("address", ipv6addr)
- ip.setAttribute("prefix", prefix)
- return dom
-
-
-def removeIPv6(dom):
- networks = dom.getElementsByTagName('network')
- for network in networks:
- ips = network.getElementsByTagName('ip')
- for ip in ips:
- if ip.getAttribute("family")=='ipv6':
- network.removeChild(ip)
- return dom
-
-
-def checkIfIPv6IsDifferent(dom, ipv6addr, prefix):
- netnodes = dom.getElementsByTagName('network')
- for netnode in netnodes:
- ips = netnode.getElementsByTagName('ip')
- for ip in ips:
- if ip.getAttribute('family')=='ipv6' and not( re.match(r'fe80(.*)', ip.getAttribute("address"), re.I) ) and (ip.getAttribute('address')!=ipv6addr or ip.getAttribute('prefix')!=prefix):
- logger.log("ipv6: the IPv6 address or prefix are different. Change detected!")
- return True
-
- return False
-
-
-def setAutostart(network):
- try:
- network.setAutostart(1)
- except:
- logger.log("ipv6: network could not set to autostart")
-
-
-def setUp(networkLibvirt, connLibvirt, networkElem, ipv6addr, prefix):
- newXml = networkElem.toxml()
- #logger.log(networkElem.toxml())
- #ret = dir(conn)
- #for method in ret:
- # logger.log(repr(method))
- networkLibvirt.undefine()
- networkLibvirt.destroy()
- connLibvirt.networkCreateXML(newXml)
- networkDefault = connLibvirt.networkDefineXML(newXml)
- setAutostart(networkDefault)
- commandForwarding = ['sysctl', '-w', 'net.ipv6.conf.all.forwarding=1']
- logger.log_call(commandForwarding, timeout=15*60)
- configRadvd = """
+def build_libvirt_default_net_config(dom):
+
+ # create the <network> element
+ networkElem = dom.createElement("network")
+ # create <name> element
+ nameElem = dom.createElement("name")
+ textName = dom.createTextNode("default")
+ nameElem.appendChild(textName)
+ # create <uuid> element
+ uuidElem = dom.createElement("uuid")
+ textUUID = dom.createTextNode(str(uuid.uuid1()))
+ uuidElem.appendChild(textUUID)
+ # create <forward> element
+ forwardElem = dom.createElement("forward")
+ forwardElem.setAttribute("mode", "nat")
+ # create <nat> element
+ natElem = dom.createElement("nat")
+ # create <port> element
+ portElem = dom.createElement("port")
+ portElem.setAttribute("end", "65535")
+ portElem.setAttribute("start", "1024")
+ # create the ipv4 <ip> element
+ ipElem0 = dom.createElement("ip")
+ ipElem0.setAttribute("address", "192.168.122.1")
+ ipElem0.setAttribute("netmask", "255.255.255.0")
+ # create the <dhcp> element
+ dhcpElem = dom.createElement("dhcp")
+ # create the <range> element
+ rangeElem = dom.createElement("range")
+ rangeElem.setAttribute("end", "192.168.122.254")
+ rangeElem.setAttribute("start", "192.168.122.2")
+ # create the <bridge> element
+ bridgeElem = dom.createElement("bridge")
+ bridgeElem.setAttribute("delay", "0")
+ bridgeElem.setAttribute("name", "virbr0")
+ bridgeElem.setAttribute("stp", "on")
+
+ # build the whole thing
+ natElem.appendChild(portElem)
+ forwardElem.appendChild(natElem)
+
+ dhcpElem.appendChild(rangeElem)
+ ipElem0.appendChild(dhcpElem)
+ networkElem.appendChild(nameElem)
+ networkElem.appendChild(uuidElem)
+ networkElem.appendChild(forwardElem)
+ networkElem.appendChild(bridgeElem)
+ networkElem.appendChild(ipElem0)
+ return networkElem
+
+def check_for_ipv6(defaultNetworkConfig):
+ netnodes = defaultNetworkConfig.getElementsByTagName('network')
+ hasIPv6 = False
+ for netnode in netnodes:
+ ips = netnode.getElementsByTagName('ip')
+ for ip in ips:
+ if ip.getAttribute('family')=='ipv6':
+ logger.log("ipv6: IPv6 address/prefix already set for slivers! %s/%s" % \
+ (ip.getAttribute('address'), ip.getAttribute('prefix')) )
+ hasIPv6 = True
+ return hasIPv6
+
+
+def add_ipv6(defaultNetworkConfig, ipv6addr, prefix):
+
+ netnodes = defaultNetworkConfig.getElementsByTagName('network')
+ for netnode in netnodes:
+ # create the ipv6 <ip> element 1
+ ipElem1 = defaultNetworkConfig.createElement("ip")
+ ipElem1.setAttribute("family", "ipv6")
+ ipElem1.setAttribute("address", ipv6addr)
+ ipElem1.setAttribute("prefix", prefix)
+ # create the ipv6 <ip> element 2
+ # it's ugly, I know, but we need a link-local address on the interface!
+ ipElem2 = defaultNetworkConfig.createElement("ip")
+ ipElem2.setAttribute("family", "ipv6")
+ ipElem2.setAttribute("address", "fe80:1234::1")
+ ipElem2.setAttribute("prefix", "64")
+ # adding to the 'defaultNetworkConfig'
+ netnode.appendChild(ipElem1)
+ netnode.appendChild(ipElem2)
+ return defaultNetworkConfig
+
+def change_ipv6(dom, ipv6addr, prefix):
+ ips = dom.getElementsByTagName('ip')
+ for ip in ips:
+ if ip.getAttribute("family")=='ipv6' and not(re.match(r'fe80(.*)', ip.getAttribute("address"), re.I)):
+ ip.setAttribute("address", ipv6addr)
+ ip.setAttribute("prefix", prefix)
+ return dom
+
+
+def remove_ipv6(dom):
+ networks = dom.getElementsByTagName('network')
+ for network in networks:
+ ips = network.getElementsByTagName('ip')
+ for ip in ips:
+ if ip.getAttribute("family")=='ipv6':
+ network.removeChild(ip)
+ return dom
+
+
+def check_if_ipv6_is_different(dom, ipv6addr, prefix):
+ netnodes = dom.getElementsByTagName('network')
+ for netnode in netnodes:
+ ips = netnode.getElementsByTagName('ip')
+ for ip in ips:
+ if ip.getAttribute('family')=='ipv6' and \
+ not ( re.match(r'fe80(.*)', ip.getAttribute("address"), re.I) ) and \
+ (ip.getAttribute('address')!=ipv6addr or ip.getAttribute('prefix')!=prefix) :
+ logger.log("ipv6: the IPv6 address or prefix are different. Change detected!")
+ return True
+ return False
+
+
+def set_autostart(network):
+ try:
+ network.setAutostart(1)
+ except:
+ logger.log("ipv6: network could not set to autostart")
+
+
+def set_up(networkLibvirt, connLibvirt, networkElem, ipv6addr, prefix):
+ newXml = networkElem.toxml()
+ #logger.log(networkElem.toxml())
+ #ret = dir(conn)
+ #for method in ret:
+ # logger.log(repr(method))
+ networkLibvirt.undefine()
+ networkLibvirt.destroy()
+ connLibvirt.networkCreateXML(newXml)
+ networkDefault = connLibvirt.networkDefineXML(newXml)
+ set_autostart(networkDefault)
+ commandForwarding = ['sysctl', '-w', 'net.ipv6.conf.all.forwarding=1']
+ logger.log_call(commandForwarding, timeout=15*60)
+ configRadvd = """