- net_object = IPv4NetworkGenerator(networks)
-
- network = {}
- interface_count_per_node = 2
-
- for subnet_num in range(len(networks)):
- net, net_str = net_object.next_network()
- key = 'NET{}'.format(subnet_num + 1)
- network[key] = {
- 'subnet': net_str,
- 'prefix': net.prefixlen,
- }
- hosts = net.hosts()
- for port_num in range(interface_count_per_node):
- port = 'port{}'.format(port_num + 1)
- network[key][port] = {
- 'addr': str(next(hosts)),
- }
-
- return {'DICT__nodes_ipv4_addr': network}
+ topo = Topology()
+ links = topo.get_links(nodes)
+
+ if len(links) > len(networks):
+ raise Exception('Not enough available IPv4 networks for topology.')
+
+ ip4_n = IPv4NetworkGenerator(networks)
+
+ nets = {}
+
+ for link in links:
+ ip4_net = ip4_n.next_network()
+ net_hosts = ip4_net.hosts()
+ port_idx = 0
+ ports = {}
+ for node in nodes.values():
+ if_key = topo.get_interface_by_link_name(node, link)
+ if_name = topo.get_interface_name(node, if_key)
+ if if_name is not None:
+ port = {'addr': str(next(net_hosts)),
+ 'node': node['host'],
+ 'if': if_name}
+ port_idx += 1
+ port_id = 'port{0}'.format(port_idx)
+ ports.update({port_id: port})
+ nets.update({link: {'net_addr': str(ip4_net.network_address),
+ 'prefix': ip4_net.prefixlen,
+ 'ports': ports}})
+
+ return {'DICT__nodes_ipv4_addr': nets}