2 # -*- coding: utf-8 -*-
3 from nepi.core import description
4 from nepi.core.attributes import Attribute
5 from nepi.util import validation
9 factories_metadata = dict({
15 "node": dict({ #TODO: RoutingTable
16 "display_name": "Node",
17 "help": "Node element",
18 "category": "topology",
21 "Connector from node to applications",
23 ["netns_application_node"]),
25 "Connector from node to network interfaces",
28 "netns_nodeiface_node",
29 "netns_tapiface_node",
33 "element_attributes": [
35 "Forward x11 from main namespace to the node",
37 False, None, None, False,
41 "p2piface": dict({ #TODO: Addresses!
42 "display_name": "P2PInterface",
43 "help": "Point to point network interface",
44 "category": "devices",
46 ("netns_p2piface_node",
47 "Connector from P2PInterface to Node",
50 ("netns_p2pinterface_p2p",
51 "Connector to another P2PInterface",
53 ["netns_p2piface_p2p"])
55 "element_attributes": [
56 ("lladdr", "Mac address", Attribute.STRING,
57 None, None, None, False,
58 validation.is_mac_address),
59 ("up", "Link up", Attribute.BOOL,
60 False, None, None, False,
62 ("name", "Device name", Attribute.STRING,
63 None, None, None, False,
64 validation.is_string),
65 ("mtu", "Maximmum transmition unit for device",
67 None, None, None, False,
68 validation.is_integer),
69 ("broadcast", "Broadcast address",
71 None, None, None, False,
72 validation.is_string),
73 ("multicast", "Is multicast enabled",
75 False, None, None, False,
77 ("arp", "Is ARP enabled", Attribute.BOOL,
78 True, None, None, False,
82 "tapiface": dict({ #TODO: Addresses!
83 "display_name": "TapNodeInterface",
84 "help": "Tap device network interface",
85 "category": "devices",
87 ("netns_tapiface_node",
88 "Connector to a Node",
92 "Connector to a network interface that can receive a file descriptor",
94 # TODO: Doesn't exist yet!
97 "element_attributes": [
98 ("lladdr", "Mac address", Attribute.STRING,
99 None, None, None, False,
100 validation.is_mac_address),
101 ("up", "Link up", Attribute.BOOL,
102 False, None, None, False,
104 ("name", "Device name", Attribute.STRING,
105 None, None, None, False,
106 validation.is_string),
107 ("mtu", "Maximmum transmition unit for device",
109 None, None, None, False,
110 validation.is_integer),
111 ("broadcast", "Broadcast address",
113 None, None, None, False,
114 validation.is_string),
115 ("multicast", "Is multicast enabled",
117 False, None, None, False,
119 ("arp", "Is ARP enabled", Attribute.BOOL,
120 True, None, None, False,
124 "nodeiface": dict({ #TODO: Addresses!
125 "display_name": "NodeInterface",
126 "help": "Node network interface",
127 "category": "devices",
129 ("netns_nodeiface_node", "Connector to a node",
131 ["netns_node_devs"]),
132 ("netns_nodeiface_switch", "Connector to a switch",
134 ["netns_switch_devs"])
136 "element_attributes": [
137 ("lladdr", "Mac address", Attribute.STRING,
138 None, None, None, False,
139 validation.is_mac_address),
140 ("up", "Link up", Attribute.BOOL,
141 False, None, None, False,
143 ("name", "Device name", Attribute.STRING,
144 None, None, None, False,
145 validation.is_string),
146 ("mtu", "Maximmum transmition unit for device",
148 None, None, None, False,
149 validation.is_integer),
150 ("broadcast", "Broadcast address",
152 None, None, None, False,
153 validation.is_string),
154 ("multicast", "Is multicast enabled",
156 False, None, None, False,
158 ("arp", "Is ARP enabled", Attribute.BOOL,
159 True, None, None, False,
164 "display_name": "Switch",
165 "help": "Switch interface",
166 "category": "devices",
168 ("netns_switch_devs", "Connector to network interfaces",
170 ["netns_nodeiface_switch"])
172 "element_attributes": [
173 ("Up", "Link up", Attribute.BOOL,
174 False, None, None, False,
176 ("Name", "Device name", Attribute.STRING,
177 None, None, None, False,
178 validation,is_string),
179 ("Mtu", "Maximmum transmition unit for device",
181 None, None, None, False,
182 validation.is_integer),
183 ("Multicast", "Is multicast enabled",
185 None, None, None, False,
187 #TODO:("Stp", help, type, value, range, allowed, readonly, validation_function),
188 #TODO:("ForwarddDelay", help, type, value, range, allowed, readonly, validation_function),
189 #TODO:("HelloTime", help, type, value, range, allowed, readonly, validation_function),
190 #TODO:("AgeingTime", help, type, value, range, allowed, readonly, validation_function),
191 #TODO:("MaxAge", help, type, value, range, allowed, readonly, validation_function)
194 "application": dict({
195 "display_name": "Application",
196 "help": "Generic executable command line application",
197 "category": "applications",
199 ("netns_application_node", "Connector to a node",
204 ("StdoutTrace", "Standard output"),
205 ("StderrTrace", "Standard error")
207 "element_attributes": [
208 ("Command", "Command line",
210 None, None, None, False,
211 validation.is_string)
212 ("User", "System user",
214 None, None, None, False,
215 validation.is_string)
216 ("Stdin", "Standard input",
218 None, None, None, False,
219 validation.is_string)
225 def create_factories(version):
227 metadata = factories_metadata[version]()
229 for factory_id, info in metadata.iteritems():
231 category = info["category"]
232 display_name = info["display_name"]
233 factory = Factory(factory_id, display_name, help, category)
235 for (connector_type_id, help, name, max, min,
236 allowed_connector_type_ids) in info["connector_types"]:
237 factory.add_connector_type(connector_type_id, help, name, max,
238 min, allowed_connector_type_ids)
240 factory.add_trace(name, help)
242 factory.add_attribute(name, help, type, value, range, allowed,
243 readonly, validation_function)
245 factory.add_element_attribute(name, help, type, value, range,
246 allowed, readonly, validation_function)
247 factories.append(factory)
250 def create_provider(version):
251 provider = description.FactoriesProvider()
252 for factory in create_factories(version):
253 provider.add_factory(factory)
256 def create_description_instance(guid_generator, version, provider):
257 return description.TestbedDescription(guid_generator, TESTBED_ID, version, provider)