if '/' in component:
addr, mask = component.split('/',1)
else:
- addr, mask = component, 32
+ addr, mask = component, '32'
if mask is not None and not (mask and mask.isdigit()):
# No empty or nonnumeric masks
return False
- if not validation.is_ip4_address(attribute, value):
+ if not validation.is_ip4_address(attribute, addr):
# Address part must be ipv4
return False
# add constraint on number of (real) interfaces
# by counting connected devices
- dev_guids = testbed_instance.get_connected(guid, "node", "devs")
+ dev_guids = testbed_instance.get_connected(guid, "devs", "node")
num_open_ifaces = sum( # count True values
NODEIFACE == testbed_instance._get_factory_id(guid)
for guid in dev_guids )
element.min_num_external_ifaces = num_open_ifaces
+ # require vroute vsys if we have routes to set up
+ routes = testbed_instance._add_route.get(guid)
+ if routes:
+ element.required_vsys.add("vroute")
+
testbed_instance.elements[guid] = element
def create_nodeiface(testbed_instance, guid):
app.node.wait_dependencies()
# Install stuff
- app.setup()
+ app.async_setup()
def configure_dependency(testbed_instance, guid):
dep = testbed_instance._elements[guid]
dep.node.wait_dependencies()
# Install stuff
- dep.setup()
+ dep.async_setup()
def configure_netpipe(testbed_instance, guid):
netpipe = testbed_instance._elements[guid]
configure_order = [ INTERNET, NODE, NODEIFACE, TAPIFACE, TUNIFACE, NETPIPE, NEPIDEPENDENCY, NS3DEPENDENCY, DEPENDENCY, APPLICATION ]
-# Start node after ifaces, because the node needs the ifaces in order to set up routes
+# Start (and prestart) node after ifaces, because the node needs the ifaces in order to set up routes
start_order = [ INTERNET, NODEIFACE, TAPIFACE, TUNIFACE, NODE, NETPIPE, NEPIDEPENDENCY, NS3DEPENDENCY, DEPENDENCY, APPLICATION ]
factories_info = dict({
"category": "topology",
"create_function": create_node,
"preconfigure_function": configure_node,
- "start_function": configure_node_routes,
+ "prestart_function": configure_node_routes,
"box_attributes": [
"forward_X11",
"hostname",
"create_function": create_tuniface,
"preconfigure_function": preconfigure_tuniface,
"configure_function": postconfigure_tuniface,
- "start_function": wait_tuniface,
+ "prestart_function": wait_tuniface,
"box_attributes": [
"up", "device_name", "mtu", "snat", "pointopoint",
"txqueuelen",
"create_function": create_tapiface,
"preconfigure_function": preconfigure_tuniface,
"configure_function": postconfigure_tuniface,
- "start_function": wait_tuniface,
+ "prestart_function": wait_tuniface,
"box_attributes": [
"up", "device_name", "mtu", "snat", "pointopoint",
"txqueuelen",
def configure_order(self):
return configure_order
+ @property
+ def prestart_order(self):
+ return start_order
+
@property
def start_order(self):
return start_order