28 | | The two keys to an effective interface for local resource allocation guided by the global event controller are a representation of credentials and authorization and a representation of the resources being requested. This section deals with the resource description for sub-experiments at differing levels of abstraction depending on the testbed. |
29 | | |
30 | | We introduce topdl (topology description language) as the language for topology description. An [source:wsdl/topdl.xsd XSD representation] and [source:fedd/deter/topdl.py sample manipulation library] are available from the source tree. The goal of the language is to represent experimental topologies at sufficient detail so that local testbeds can allocate resource configured appropriately for the experiment. |
31 | | |
32 | | There are two primitives in topdl: |
33 | | |
34 | | '''Elements''':: |
35 | | Active resources in the experiment: computers, routers, devices that are programmable. These are subclassed for common kinds of elements |
36 | | '''Substrate''':: |
37 | | A communications medium to which elements have access. This may be a wired LAN, a shared communication frequency, or may represent the fact that the elements share a line of sight. |
38 | | |
39 | | The point of contact between these primitives is: |
40 | | |
41 | | '''Interface''':: |
42 | | An indication that a particular element can communicate on one or more substrates. An interface appears on exactly one element. |
43 | | |
44 | | These are deliberately unconstrained, but are an attempt to capture the idea that most network experiments are about things that can talk to other things in constrained ways. |
45 | | |
46 | | Each subclass and substrate has parameters which set the specifics of that object. For example, the computer subclass of elements can be parameterized by the operating system, the CPU information, the required software, and the storage (memory, disk, etc) that are required. Additional attribute/value pairs (strings) can be attached to the computer (and to some of the parameters) to specialize it for specific access controllers or other applications. |
47 | | |
48 | | Substrates and interfaces can also have attributes attached, but are characterized by the communication capacity and latency of the substrate, though neither needs to be specified if unimportant. |
49 | | |
50 | | By specializing these primitives, topdl can represent many network topologies. A traditional enterprise configuration can be represented as computer elements for each desktop connected by substrates that represent the LANs that are also interfaces to routers and firewalls that model the system. A system of nodes sharing the same wireless infrastructure share interfaces on the same wireless substrate. Machines that can talk on more than one substrate using the same interface - for example a multi-frequency radio - are specified with one interface on several substrates, one for each frequency of interest. |
51 | | |
52 | | While limits will certainly be found, this simple elements in substrates model covers a broad range of useful topologies. |
53 | | |
54 | | By binding specific attributes to the elements of an experiment, the description can be customized to constrain the details of interest to a researcher and that are useful to a particular testbed technology. Researchers studying worm propagation may be more interested in the interconnection of computers and the installed software than in the particular CPU models on the computers. Other researchers may be very concerned with the particular hardware or transmission technology of, say, the wireless interfaces. Attaching attributes provides a mechanism to communicate these preferences. |
55 | | |
56 | | Of course, not every federant/access controller will understand each attribute, which is why some attributes and requirements are codified now and all access controllers are expected to respect them. The semantics of unformalized attributes can represent agreements between researchers and resource providers, and widely supported attributes will become formalized parameters. If the changes in element behavior are sufficient, a subclass may be created. |
57 | | |
58 | | === Current Element Classes and Attributes === |
59 | | |
60 | | These are the current supported standard classes and some attributes that are in use by the current fedd code. |
61 | | |
62 | | ==== Substrate ==== |
63 | | |
64 | | Substrates are parameterized by: |
65 | | |
66 | | '''Name''':: |
67 | | A unique name to tie interfaces to this substrate. |
68 | | '''Capacity''':: |
69 | | The rate of information exchange on this substrate. May be given as an average or peak rate. |
70 | | '''Latency''':: |
71 | | The time required for information to cross this substrate. May be an average or a peak. |
72 | | |
73 | | An interface may also have those parameters, in which case the element to which the interface is attached is limited by the lower of the interface or substrate values. Corner cases, such as a maximum less than an average are dealt with as errors by the system taking the topology as input. |
74 | | |
75 | | ==== Elements ==== |
76 | | |
77 | | There are several subclasses in use. The generic element class has no specific parameters, only unstandardized attributes. |
78 | | |
79 | | Current subclasses include: |
80 | | |
81 | | ===== Computer ===== |
82 | | |
83 | | In addition to unstandardized attributes, computers are parameterized by: |
84 | | |
85 | | '''Name''':: |
86 | | An identifier for the computer, primarilty useful to researchers directly. |
87 | | '''CPU''':: |
88 | | They type and number of CPUs required |
89 | | '''Operating System''':: |
90 | | Including version, distribution, and patchlevel |
91 | | '''Storage''':: |
92 | | Amount of persistent and transient storage - usually disk and memory, but new technologues are possible. |
93 | | '''Software''':: |
94 | | The software to install and the location in the file system. A URI may be given for the software distribution. |
95 | | '''Interfaces''':: |
96 | | Parameterized as above |
97 | | |
98 | | ===== Segment ===== |
99 | | |
100 | | A sgement is an allocation (or future allocation) of resources to a federated experiment. They are useful placeholders in establishing connectivity across a federant that acts as a transit network provider between federants. The optional parameters include: |
101 | | |
102 | | '''Name''':: |
103 | | Name of the segment. Primarily useful to reserachers or debuggers. |
104 | | '''Type''':: |
105 | | Access controller type, e.g., emulab. |
106 | | '''URI''':: |
107 | | The URI at which the access controller can be found. |
108 | | '''Interfaces''':: |
109 | | The parameterized as above |
| 28 | DETER's topology description language, topdl, [TopDl is described in more detail elsewhere]. This section mentions some of the topdl attributes used internally by the federation system. |
152 | | |
153 | | |
154 | | |
155 | | === Example === |
156 | | |
157 | | As an example, here is the experiment description from the [FeddAbout#FederatedExperimentCreation architecture discussion,] rendered in topdl. |
158 | | |
159 | | {{{ |
160 | | <experiment> |
161 | | <substrates> |
162 | | <name>link0</name> |
163 | | <capacity> |
164 | | <rate>100000</rate> |
165 | | <kind>max</kind> |
166 | | </capacity> |
167 | | </substrates> |
168 | | <substrates> |
169 | | <name>lan0</name> |
170 | | <capacity> |
171 | | <rate>100000</rate> |
172 | | <kind>max</kind> |
173 | | </capacity> |
174 | | </substrates> |
175 | | <substrates> |
176 | | <name>link1</name> |
177 | | <capacity> |
178 | | <rate>100000</rate> |
179 | | <kind>max</kind> |
180 | | </capacity> |
181 | | </substrates> |
182 | | <elements> |
183 | | <computer> |
184 | | <name>d</name> |
185 | | <attribute> |
186 | | <attribute>type</attribute> |
187 | | <value>bvx2200</value> |
188 | | </attribute> |
189 | | <os> |
190 | | <attribute> |
191 | | <attribute>osid</attribute> |
192 | | <value>FC6-SMB</value> |
193 | | </attribute> |
194 | | </os> |
195 | | <interface> |
196 | | <substrate>lan0</substrate> |
197 | | <capacity> |
198 | | <rate>100000</rate> |
199 | | <kind>max</kind> |
200 | | </capacity> |
201 | | </interface> |
202 | | <attribute> |
203 | | <attribute>testbed</attribute> |
204 | | <value>ucb</value> |
205 | | </attribute> |
206 | | <attribute> |
207 | | <attribute>failureaction</attribute> |
208 | | <value>fatal</value> |
209 | | </attribute> |
210 | | </computer> |
211 | | </elements> |
212 | | <elements> |
213 | | <computer> |
214 | | <name>e</name> |
215 | | <attribute> |
216 | | <attribute>type</attribute> |
217 | | <value>bvx2200</value> |
218 | | </attribute> |
219 | | <os> |
220 | | <attribute> |
221 | | <attribute>osid</attribute> |
222 | | <value>FC6-SMB</value> |
223 | | </attribute> |
224 | | </os> |
225 | | <interface> |
226 | | <substrate>lan0</substrate> |
227 | | <capacity> |
228 | | <rate>100000</rate> |
229 | | <kind>max</kind> |
230 | | </capacity> |
231 | | </interface> |
232 | | <attribute> |
233 | | <attribute>testbed</attribute> |
234 | | <value>ucb</value> |
235 | | </attribute> |
236 | | <attribute> |
237 | | <attribute>failureaction</attribute> |
238 | | <value>fatal</value> |
239 | | </attribute> |
240 | | </computer> |
241 | | </elements> |
242 | | <elements> |
243 | | <computer> |
244 | | <name>a</name> |
245 | | <attribute> |
246 | | <attribute>type</attribute> |
247 | | <value>pc</value> |
248 | | </attribute> |
249 | | <os> |
250 | | <attribute> |
251 | | <attribute>osid</attribute> |
252 | | <value>FC6-STD</value> |
253 | | </attribute> |
254 | | </os> |
255 | | <interface> |
256 | | <substrate>link0</substrate> |
257 | | <capacity> |
258 | | <rate>100000</rate> |
259 | | <kind>max</kind> |
260 | | </capacity> |
261 | | </interface> |
262 | | <attribute> |
263 | | <attribute>testbed</attribute> |
264 | | <value>deter</value> |
265 | | </attribute> |
266 | | <attribute> |
267 | | <attribute>failureaction</attribute> |
268 | | <value>fatal</value> |
269 | | </attribute> |
270 | | </computer> |
271 | | </elements> |
272 | | <elements> |
273 | | <computer> |
274 | | <name>b</name> |
275 | | <attribute> |
276 | | <attribute>type</attribute> |
277 | | <value>pc</value> |
278 | | </attribute> |
279 | | <os> |
280 | | <attribute> |
281 | | <attribute>osid</attribute> |
282 | | <value>FC6-STD</value> |
283 | | </attribute> |
284 | | </os> |
285 | | <interface> |
286 | | <substrate>link0</substrate> |
287 | | <capacity> |
288 | | <rate>100000</rate> |
289 | | <kind>max</kind> |
290 | | </capacity> |
291 | | </interface> |
292 | | <interface> |
293 | | <substrate>link1</substrate> |
294 | | <capacity> |
295 | | <rate>100000</rate> |
296 | | <kind>max</kind> |
297 | | </capacity> |
298 | | </interface> |
299 | | <attribute> |
300 | | <attribute>testbed</attribute> |
301 | | <value>deter</value> |
302 | | </attribute> |
303 | | <attribute> |
304 | | <attribute>failureaction</attribute> |
305 | | <value>fatal</value> |
306 | | </attribute> |
307 | | </computer> |
308 | | </elements> |
309 | | <elements> |
310 | | <computer> |
311 | | <name>c</name> |
312 | | <attribute> |
313 | | <attribute>type</attribute> |
314 | | <value>bvx2200</value> |
315 | | </attribute> |
316 | | <os> |
317 | | <attribute> |
318 | | <attribute>osid</attribute> |
319 | | <value>FC6-SMB</value> |
320 | | </attribute> |
321 | | </os> |
322 | | <interface> |
323 | | <substrate>lan0</substrate> |
324 | | <capacity> |
325 | | <rate>100000</rate> |
326 | | <kind>max</kind> |
327 | | </capacity> |
328 | | </interface> |
329 | | <interface> |
330 | | <substrate>link1</substrate> |
331 | | <capacity> |
332 | | <rate>100000</rate> |
333 | | <kind>max</kind> |
334 | | </capacity> |
335 | | </interface> |
336 | | <attribute> |
337 | | <attribute>testbed</attribute> |
338 | | <value>ucb</value> |
339 | | </attribute> |
340 | | <attribute> |
341 | | <attribute>failureaction</attribute> |
342 | | <value>fatal</value> |
343 | | </attribute> |
344 | | </computer> |
345 | | </elements> |
346 | | </experiment> |
347 | | }}} |