def test_two_tier(self): topology = fnss.two_tier_topology(10, 20, 30) self.assertEqual(len(topology), 10 + 20 + 20 * 30) self.assertEqual(topology.number_of_hosts(), 20 * 30) self.assertEqual(topology.number_of_switches(), 10 + 20)
""" Datacenter topology =================== This example shows how to generate a datacenter topology, assign capacities and save everything to an XML file """ import fnss import networkx as nx # create a topology with 10 core switches, 20 edge switches and 10 hosts # per switch (i.e. 200 hosts in total) topology = fnss.two_tier_topology(n_core=10, n_edge=20, n_hosts=10) # assign capacities # let's set links connecting servers to edge switches to 1 Gbps # and links connecting core and edge switches to 10 Gbps. # get list of core_edge links and edge_leaf links link_types = nx.get_edge_attributes(topology, 'type') core_edge_links = [ link for link in link_types if link_types[link] == 'core_edge' ] edge_leaf_links = [ link for link in link_types if link_types[link] == 'edge_leaf' ] # assign capacities fnss.set_capacities_constant(topology, 1, 'Gbps', edge_leaf_links) fnss.set_capacities_constant(topology, 10, 'Gbps', core_edge_links)
""" Datacenter topology =================== This example shows how to generate a datacenter topology, assign capacities and save everything to an XML file """ import fnss import networkx as nx # create a topology with 10 core switches, 20 edge switches and 10 hosts # per switch (i.e. 200 hosts in total) topology = fnss.two_tier_topology(n_core=10, n_edge=20, n_hosts=10) # assign capacities # let's set links connecting servers to edge switches to 1 Gbps # and links connecting core and edge switches to 10 Gbps. # get list of core_edge links and edge_leaf links link_types = nx.get_edge_attributes(topology, 'type') core_edge_links = [link for link in link_types if link_types[link] == 'core_edge'] edge_leaf_links = [link for link in link_types if link_types[link] == 'edge_leaf'] # assign capacities fnss.set_capacities_constant(topology, 1, 'Gbps', edge_leaf_links) fnss.set_capacities_constant(topology, 10, 'Gbps', core_edge_links) # assign weight 1 to all links fnss.set_weights_constant(topology, 1)
import fnss from mininet.topo import Topo from mininet.net import Mininet from mininet.link import TCLink from mininet.util import dumpNodeConnections from mininet.log import setLogLevel from mininet.node import OVSController # Create FNSS topology. Let's create a simple datacenter topology # This topology does not contain loops. If you want to use a topology with # loops or multiple paths in Mininet you need to use a custom controller. # More info here: # https://github.com/mininet/mininet/wiki/Introduction-to-Mininet#multipath-routing fnss_topo = fnss.two_tier_topology(n_core=1, n_edge=2, n_hosts=2) # Set link attributes fnss.set_capacities_constant(fnss_topo, 10, 'Mbps') fnss.set_delays_constant(fnss_topo, 2, 'ms') fnss.set_buffer_sizes_constant(fnss_topo, 50, 'packets') # Convert FNSS topology to Mininet # If argument relabel_nodes is set to False, node labels are not changed when # converting an FNSS topology to a Mininet one, except converting the type to # string (e.g. 1 -> '1'). If relabel_nodes is set to True (default option) # then nodes are label according to Mininet conventions, e.g. hosts are # prepended an h (e.g. 1 -> 'h1') and switches are prepended an s # (e.g. 2 -> 's2') mn_topo = fnss.to_mininet(fnss_topo, relabel_nodes=True)
# FNSS NETWORK EXAMPLE import fnss import random import networkx as nx # drones = 50, edge_nodes = 5, cloud=1 topology = fnss.two_tier_topology(n_core=1, n_edge=5, n_hosts=5) # assign capacities # let's set links connecting servers to edge switches to 5 Mbps. # and links connecting core and edge switches to 5 Mbps. # get list of core_edge links and edge_leaf links link_types = nx.get_edge_attributes(topology, 'type') core_edge_links = [ link for link in link_types if link_types[link] == 'core_edge' ] edge_leaf_links = [ link for link in link_types if link_types[link] == 'edge_leaf' ] # assign capacities fnss.set_capacities_constant(topology, 5, 'Mbps', edge_leaf_links) fnss.set_capacities_constant(topology, 5, 'Mbps', core_edge_links) # add traffic traffic_matrix = fnss.static_traffic_matrix(topology, mean=2, stddev=0.2, max_u=0.5)
import fnss from mininet.topo import Topo from mininet.net import Mininet from mininet.link import TCLink from mininet.util import dumpNodeConnections from mininet.log import setLogLevel from mininet.node import RemoteController from mininet.cli import CLI # Create FNSS topology. Let's create a simple datacenter topology # This topology does not contain loops. If you want to use a topology with # loops or multiple paths in Mininet you need to use a custom controller. # More info here: # https://github.com/mininet/mininet/wiki/Introduction-to-Mininet#multipath-routing fnss_topo = fnss.two_tier_topology(n_core=1, n_edge=2, n_hosts=2) # Set link attributes fnss.set_capacities_constant(fnss_topo, 10, 'Mbps') fnss.set_delays_constant(fnss_topo, 2, 'ms') fnss.set_buffer_sizes_constant(fnss_topo, 50, 'packets') # Convert FNSS topology to Mininet # If argument relabel_nodes is set to False, node labels are not changed when # converting an FNSS topology to a Mininet one, except converting the type to # string (e.g. 1 -> '1'). If relabel_nodes is set to True (default option) # then nodes are label according to Mininet conventions, e.g. hosts are # prepended an h (e.g. 1 -> 'h1') and switches are prepended an s # (e.g. 2 -> 's2') mn_topo = fnss.to_mininet(fnss_topo, relabel_nodes=True)