aboutsummaryrefslogtreecommitdiff
path: root/src/testbed/testbed.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/testbed/testbed.h')
-rw-r--r--src/testbed/testbed.h866
1 files changed, 0 insertions, 866 deletions
diff --git a/src/testbed/testbed.h b/src/testbed/testbed.h
deleted file mode 100644
index 0f86c149b..000000000
--- a/src/testbed/testbed.h
+++ /dev/null
@@ -1,866 +0,0 @@
1/*
2 This file is part of GNUnet
3 Copyright (C) 2008--2013 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21/**
22 * @file testbed/testbed.h
23 * @brief IPC messages between testing API and service ("controller")
24 * @author Christian Grothoff
25 */
26
27#ifndef TESTBED_H
28#define TESTBED_H
29
30#include "gnunet_util_lib.h"
31
32GNUNET_NETWORK_STRUCT_BEGIN
33/**
34 * Initial message from a client to a testing control service.
35 */
36struct GNUNET_TESTBED_InitMessage
37{
38 /**
39 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_INIT
40 */
41 struct GNUNET_MessageHeader header;
42
43 /**
44 * Host ID that the controller is either given (if this is the
45 * dominating client) or assumed to have (for peer-connections
46 * between controllers). A controller must check that all
47 * connections make consistent claims...
48 */
49 uint32_t host_id GNUNET_PACKED;
50
51 /**
52 * Event mask that specifies which events this client
53 * is interested in. In NBO.
54 */
55 uint64_t event_mask GNUNET_PACKED;
56
57 /* Followed by 0-terminated hostname of the controller */
58};
59
60
61/**
62 * Notify the service about a host that we intend to use.
63 */
64struct GNUNET_TESTBED_AddHostMessage
65{
66 /**
67 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_ADD_HOST
68 */
69 struct GNUNET_MessageHeader header;
70
71 /**
72 * Unique ID for the host (in NBO).
73 */
74 uint32_t host_id GNUNET_PACKED;
75
76 /**
77 * SSH port to use, 0 for default (in NBO).
78 */
79 uint16_t ssh_port GNUNET_PACKED;
80
81 /**
82 * Number of bytes in the user name that follows;
83 * 0 to use no user name; otherwise 'strlen (username)',
84 * excluding 0-termination!
85 */
86 uint16_t username_length GNUNET_PACKED;
87
88 /**
89 * Number of bytes in the host name (excluding 0-termination) that follows the
90 * user name; cannot be 0
91 */
92 uint16_t hostname_length GNUNET_PACKED;
93
94 /**
95 * The length of the uncompressed configuration
96 */
97 uint16_t config_size GNUNET_PACKED;
98
99 /* followed by non 0-terminated user name */
100
101 /* followed by non 0-terminated host name */
102
103 /* followed by gzip compressed configuration to start or connect to a
104 controller on this host. While starting the controller this configuration
105 is used as a template */
106};
107
108
109/**
110 * Confirmation from the service that adding a host
111 * worked (or failed).
112 * FIXME: Where is this required?
113 */
114struct GNUNET_TESTBED_HostConfirmedMessage
115{
116 /**
117 * Type is GNUNET_MESSAGE_TYPE_TESTBED_ADD_HOST_SUCCESS
118 */
119 struct GNUNET_MessageHeader header;
120
121 /**
122 * Unique ID for the host (in NBO).
123 */
124 uint32_t host_id GNUNET_PACKED;
125
126 /* followed by the 0-terminated error message (on failure)
127 * (typical errors include host-id already in use) */
128};
129
130
131/**
132 * Client notifies controller that it should delegate
133 * requests for a particular client to a particular
134 * sub-controller.
135 */
136struct GNUNET_TESTBED_ControllerLinkRequest
137{
138 /**
139 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_LINK_CONTROLLERS
140 */
141 struct GNUNET_MessageHeader header;
142
143 /**
144 * For which host should requests be delegated? NBO.
145 */
146 uint32_t delegated_host_id GNUNET_PACKED;
147
148 /**
149 * The id of the operation which created this message
150 */
151 uint64_t operation_id GNUNET_PACKED;
152
153 /**
154 * Which host is responsible for managing the delegation? NBO
155 */
156 uint32_t slave_host_id GNUNET_PACKED;
157
158 /**
159 * Set to 1 if the receiving controller is the master controller for
160 * the slave host (and thus responsible for starting it?). 0 if not
161 */
162 uint8_t is_subordinate;
163};
164
165
166/**
167 * Response message for ControllerLinkRequest message
168 */
169struct GNUNET_TESTBED_ControllerLinkResponse
170{
171 /**
172 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_LINK_CONTROLLERS_RESULT
173 */
174 struct GNUNET_MessageHeader header;
175
176 /**
177 * The size of the compressed configuration. Can be ZERO if the controller is
178 * not started (depends on the ControllerLinkRequest). NBO.
179 */
180 uint16_t config_size GNUNET_PACKED;
181
182 /**
183 * Set to #GNUNET_YES to signify SUCCESS; #GNUNET_NO to signify failure
184 */
185 uint16_t success GNUNET_PACKED;
186
187 /**
188 * The id of the operation which created this message. NBO
189 */
190 uint64_t operation_id GNUNET_PACKED;
191
192 /* If controller linking is successful and configuration is present, then here
193 * comes the serialized gzip configuration with which the controller is
194 * running at the delegate host */
195
196 /* In case of failure, here comes the error message (without \0 termination)*/
197};
198
199
200/**
201 * Message sent from client to testing service to
202 * create (configure, but not start) a peer.
203 */
204struct GNUNET_TESTBED_PeerCreateMessage
205{
206 /**
207 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_CREATE_PEER
208 */
209 struct GNUNET_MessageHeader header;
210
211 /**
212 * On which host should the peer be started?
213 */
214 uint32_t host_id GNUNET_PACKED;
215
216 /**
217 * Unique operation id
218 */
219 uint64_t operation_id GNUNET_PACKED;
220
221 /**
222 * Unique ID for the peer.
223 */
224 uint32_t peer_id GNUNET_PACKED;
225
226 /**
227 * Size of the uncompressed configuration
228 */
229 uint16_t config_size GNUNET_PACKED;
230
231 /* followed by serialized peer configuration;
232 * gzip'ed configuration file in INI format */
233};
234
235
236/**
237 * Message sent from client to testing service to
238 * reconfigure a (stopped) a peer.
239 */
240struct GNUNET_TESTBED_PeerReconfigureMessage
241{
242 /**
243 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_RECONFIGURE_PEER
244 */
245 struct GNUNET_MessageHeader header;
246
247 /**
248 * Unique ID for the peer.
249 */
250 uint32_t peer_id GNUNET_PACKED;
251
252 /**
253 * Operation ID that is used to identify this operation.
254 */
255 uint64_t operation_id GNUNET_PACKED;
256
257 /**
258 * The length of the serialized configuration when uncompressed
259 */
260 uint16_t config_size GNUNET_PACKED;
261
262 /* followed by serialized peer configuration;
263 * gzip'ed configuration file in INI format */
264};
265
266
267/**
268 * Message sent from client to testing service to
269 * start a peer.
270 */
271struct GNUNET_TESTBED_PeerStartMessage
272{
273 /**
274 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_START_PEER
275 */
276 struct GNUNET_MessageHeader header;
277
278 /**
279 * Unique ID for the peer.
280 */
281 uint32_t peer_id GNUNET_PACKED;
282
283 /**
284 * Operation ID that is used to identify this operation.
285 */
286 uint64_t operation_id GNUNET_PACKED;
287};
288
289
290/**
291 * Message sent from client to testing service to
292 * stop a peer.
293 */
294struct GNUNET_TESTBED_PeerStopMessage
295{
296 /**
297 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_STOP_PEER
298 */
299 struct GNUNET_MessageHeader header;
300
301 /**
302 * Unique ID for the peer.
303 */
304 uint32_t peer_id GNUNET_PACKED;
305
306 /**
307 * Operation ID that is used to identify this operation.
308 */
309 uint64_t operation_id GNUNET_PACKED;
310};
311
312
313/**
314 * Message sent from client to testing service to
315 * destroy a (stopped) peer.
316 */
317struct GNUNET_TESTBED_PeerDestroyMessage
318{
319 /**
320 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_DESTROY_PEER
321 */
322 struct GNUNET_MessageHeader header;
323
324 /**
325 * Unique ID for the peer.
326 */
327 uint32_t peer_id GNUNET_PACKED;
328
329 /**
330 * Operation ID that is used to identify this operation.
331 */
332 uint64_t operation_id GNUNET_PACKED;
333};
334
335
336/**
337 * Message sent from client to testing service to
338 * (re)configure a "physical" link between two peers.
339 */
340struct GNUNET_TESTBED_ConfigureUnderlayLinkMessage
341{
342 /**
343 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_CONFIGURE_UNDERLAY_LINK
344 */
345 struct GNUNET_MessageHeader header;
346
347 /**
348 * 'enum GNUNET_TESTBED_ConnectOption' of the option to change
349 */
350 int32_t connect_option GNUNET_PACKED;
351
352 /**
353 * Unique ID for the first peer.
354 */
355 uint32_t peer1 GNUNET_PACKED;
356
357 /**
358 * Unique ID for the second peer.
359 */
360 uint32_t peer2 GNUNET_PACKED;
361
362 /**
363 * Operation ID that is used to identify this operation.
364 */
365 uint64_t operation_id GNUNET_PACKED;
366
367 /* followed by option-dependent variable-size values */
368};
369
370
371/**
372 * Message sent from client to testing service to
373 * connect two peers.
374 */
375struct GNUNET_TESTBED_OverlayConnectMessage
376{
377 /**
378 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_OVERLAY_CONNECT
379 */
380 struct GNUNET_MessageHeader header;
381
382 /**
383 * Unique ID for the first peer.
384 */
385 uint32_t peer1 GNUNET_PACKED;
386
387 /**
388 * Operation ID that is used to identify this operation.
389 */
390 uint64_t operation_id GNUNET_PACKED;
391
392 /**
393 * Unique ID for the second peer.
394 */
395 uint32_t peer2 GNUNET_PACKED;
396
397 /**
398 * The ID of the host which runs peer2
399 */
400 uint32_t peer2_host_id GNUNET_PACKED;
401};
402
403
404/**
405 * Message sent from host controller of a peer(A) to the host controller of
406 * another peer(B) to request B to connect to A
407 */
408struct GNUNET_TESTBED_RemoteOverlayConnectMessage
409{
410 /**
411 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_REMOTE_OVERLAY_CONNECT
412 */
413 struct GNUNET_MessageHeader header;
414
415 /**
416 * The Unique ID of B
417 */
418 uint32_t peer GNUNET_PACKED;
419
420 /**
421 * The Operation ID that is used to identify this operation
422 */
423 uint64_t operation_id GNUNET_PACKED;
424
425 /**
426 * Identity of A
427 */
428 struct GNUNET_PeerIdentity peer_identity;
429
430 /**
431 * To be followed by the HELLO message of A
432 */
433 struct GNUNET_MessageHeader hello[0];
434 // FIXME: we usually do not use this gcc-hack as some
435 // compilers / tools really get messed up by it...
436};
437
438
439/**
440 * Event notification from a controller to a client.
441 */
442struct GNUNET_TESTBED_PeerEventMessage
443{
444 /**
445 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_PEER_EVENT
446 */
447 struct GNUNET_MessageHeader header;
448
449 /**
450 * `enum GNUNET_TESTBED_EventType` (in NBO);
451 * either #GNUNET_TESTBED_ET_PEER_START or #GNUNET_TESTBED_ET_PEER_STOP.
452 */
453 int32_t event_type GNUNET_PACKED;
454
455 /**
456 * Host where the peer is running.
457 */
458 uint32_t host_id GNUNET_PACKED;
459
460 /**
461 * Peer that was started or stopped.
462 */
463 uint32_t peer_id GNUNET_PACKED;
464
465 /**
466 * Operation ID that is used to identify this operation.
467 */
468 uint64_t operation_id GNUNET_PACKED;
469};
470
471
472/**
473 * Event notification from a controller to a client.
474 */
475struct GNUNET_TESTBED_ConnectionEventMessage
476{
477 /**
478 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_PEER_CONNECT_EVENT
479 */
480 struct GNUNET_MessageHeader header;
481
482 /**
483 * 'enum GNUNET_TESTBED_EventType' (in NBO);
484 * either #GNUNET_TESTBED_ET_CONNECT or #GNUNET_TESTBED_ET_DISCONNECT.
485 */
486 int32_t event_type GNUNET_PACKED;
487
488 /**
489 * First peer.
490 */
491 uint32_t peer1 GNUNET_PACKED;
492
493 /**
494 * Second peer.
495 */
496 uint32_t peer2 GNUNET_PACKED;
497
498 /**
499 * Operation ID that is used to identify this operation.
500 */
501 uint64_t operation_id GNUNET_PACKED;
502};
503
504
505/**
506 * Event notification from a controller to a client.
507 */
508struct GNUNET_TESTBED_OperationFailureEventMessage
509{
510 /**
511 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_OPERATION_FAIL_EVENT
512 */
513 struct GNUNET_MessageHeader header;
514
515 /**
516 * 'enum GNUNET_TESTBED_EventType' (in NBO);
517 * #GNUNET_TESTBED_ET_OPERATION_FINISHED.
518 */
519 int32_t event_type GNUNET_PACKED;
520
521 /**
522 * Operation ID of the operation that created this event.
523 */
524 uint64_t operation_id GNUNET_PACKED;
525
526 /* followed by 0-terminated error message */
527};
528
529
530/**
531 * Event notification from a controller to a client.
532 */
533struct GNUNET_TESTBED_PeerCreateSuccessEventMessage
534{
535 /**
536 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_CREATE_PEER_SUCCESS
537 */
538 struct GNUNET_MessageHeader header;
539
540 /**
541 * Peer identity of the peer that was created.
542 */
543 uint32_t peer_id GNUNET_PACKED;
544
545 /**
546 * Operation ID of the operation that created this event.
547 */
548 uint64_t operation_id GNUNET_PACKED;
549};
550
551
552/**
553 * Event notification from a controller to a client for
554 * a generic operational success where the operation does
555 * not return any data.
556 */
557struct GNUNET_TESTBED_GenericOperationSuccessEventMessage
558{
559 /**
560 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_GENERIC_OPERATION_SUCCESS
561 */
562 struct GNUNET_MessageHeader header;
563
564 /**
565 * 'enum GNUNET_TESTBED_EventType' (in NBO);
566 * #GNUNET_TESTBED_ET_OPERATION_FINISHED.
567 */
568 int32_t event_type GNUNET_PACKED;
569
570 /**
571 * Operation ID of the operation that created this event.
572 */
573 uint64_t operation_id GNUNET_PACKED;
574};
575
576
577/**
578 * Message sent from client to testing service to
579 * obtain the configuration of a peer.
580 */
581struct GNUNET_TESTBED_PeerGetConfigurationMessage
582{
583 /**
584 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_GET_PEER_INFORMATION
585 */
586 struct GNUNET_MessageHeader header;
587
588 /**
589 * Unique ID for the peer.
590 */
591 uint32_t peer_id GNUNET_PACKED;
592
593 /**
594 * Operation ID that is used to identify this operation.
595 */
596 uint64_t operation_id GNUNET_PACKED;
597};
598
599
600/**
601 * Peer configuration and identity reply from controller to a client.
602 */
603struct GNUNET_TESTBED_PeerConfigurationInformationMessage
604{
605 /**
606 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_PEER_INFORMATION
607 */
608 struct GNUNET_MessageHeader header;
609
610 /**
611 * The id of the peer relevant to this information
612 */
613 uint32_t peer_id GNUNET_PACKED;
614
615 /**
616 * Operation ID of the operation that created this event.
617 */
618 uint64_t operation_id GNUNET_PACKED;
619
620 /**
621 * Identity of the peer.
622 */
623 struct GNUNET_PeerIdentity peer_identity;
624
625 /**
626 * The size of configuration when uncompressed
627 */
628 uint16_t config_size GNUNET_PACKED;
629
630 /* followed by gzip-compressed configuration of the peer */
631};
632
633
634/**
635 * Message to request configuration of a slave controller
636 */
637struct GNUNET_TESTBED_SlaveGetConfigurationMessage
638{
639 /**
640 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_GET_SLAVE_CONFIGURATION
641 */
642 struct GNUNET_MessageHeader header;
643
644 /**
645 * The id of the slave host
646 */
647 uint32_t slave_id GNUNET_PACKED;
648
649 /**
650 * Operation ID
651 */
652 uint64_t operation_id GNUNET_PACKED;
653};
654
655
656/**
657 * Reply to #GNUNET_MESSAGE_TYPE_TESTBED_GET_SLAVE_CONFIGURATION message
658 */
659struct GNUNET_TESTBED_SlaveConfiguration
660{
661 /**
662 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_SLAVE_CONFIGURATION
663 */
664 struct GNUNET_MessageHeader header;
665
666 /**
667 * The id of the host where the slave is running
668 */
669 uint32_t slave_id GNUNET_PACKED;
670
671 /**
672 * Operation ID
673 */
674 uint64_t operation_id GNUNET_PACKED;
675
676 /**
677 * The size of the configuration when uncompressed
678 */
679 uint16_t config_size GNUNET_PACKED;
680
681 /* followed by gzip-compressed configuration of the peer */
682};
683
684
685/**
686 * Shutdown peers message
687 */
688struct GNUNET_TESTBED_ShutdownPeersMessage
689{
690 /**
691 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_SHUTDOWN_PEERS
692 */
693 struct GNUNET_MessageHeader header;
694
695 /**
696 * Operation ID
697 */
698 uint64_t operation_id GNUNET_PACKED;
699};
700
701
702/**
703 * Message to start/stop services of a peer
704 */
705struct GNUNET_TESTBED_ManagePeerServiceMessage
706{
707 /**
708 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_SHUTDOWN_PEERS
709 */
710 struct GNUNET_MessageHeader header;
711
712 /**
713 * Unique ID of the peer whose service has to be managed.
714 */
715 uint32_t peer_id GNUNET_PACKED;
716
717 /**
718 * Operation ID
719 */
720 uint64_t operation_id GNUNET_PACKED;
721
722 /**
723 * set this to 1 to start the service; 0 to stop the service
724 */
725 uint8_t start;
726
727 /**
728 * The NULL-terminated name of the service to start/stop follows here
729 */
730};
731
732
733/**
734 * Message to send underlay link model of a peer. This message will be
735 * forwarded to the controller running the peer.
736 */
737struct GNUNET_TESTBED_UnderlayLinkModelMsg
738{
739 /**
740 * Type is #GNUNET_MESSAGE_TYPE_UNDERLAYLINKMODELMSG
741 */
742 struct GNUNET_MessageHeader header;
743
744 /**
745 * The number of peer entries contained in this message
746 */
747 uint32_t nentries GNUNET_PACKED;
748
749 /**
750 * The number of link properties contained in this message
751 */
752 uint32_t nprops GNUNET_PACKED;
753
754 /**
755 * Array of ids of peers to be in the blacklist/whitelist. Each id is of type
756 * uint32_t. Number of ids should be equal to nentries.
757 */
758
759 /**
760 * Array of link properties. Each link property is to be arraged in a
761 * sequence of four integers of type uint32_t: peer_id, latency, loss and
762 * bandwidth.
763 */
764};
765
766
767/**************************************/
768/* Barriers IPC messages and protocol */
769/**************************************/
770
771
772/**
773 * The environmental variable which when available refers to the configuration
774 * file the local testbed controller is using
775 */
776#define ENV_TESTBED_CONFIG "GNUNET_TESTBED_CONTROLLER_CONFIG"
777
778
779/**
780 * Message to initialise a barrier
781 */
782struct GNUNET_TESTBED_BarrierInit
783{
784 /**
785 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_BARRIER_INIT
786 */
787 struct GNUNET_MessageHeader header;
788
789 /**
790 * The quorum percentage needed for crossing the barrier
791 */
792 uint8_t quorum;
793
794 /**
795 * name of the barrier. Non NULL-terminated.
796 */
797 char name[0];
798};
799
800
801/**
802 * Message to cancel a barrier
803 */
804struct GNUNET_TESTBED_BarrierCancel
805{
806 /**
807 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_BARRIER_CANCEL
808 */
809 struct GNUNET_MessageHeader header;
810
811 /**
812 * The barrier name. Non NULL terminated
813 */
814 char name[0];
815};
816
817
818/**
819 * Message for signalling status changes of a barrier
820 */
821struct GNUNET_TESTBED_BarrierStatusMsg
822{
823 /**
824 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_BARRIER_STATUS
825 */
826 struct GNUNET_MessageHeader header;
827
828 /**
829 * status. Use enumerated values of enum BarrierStatus
830 */
831 uint16_t status GNUNET_PACKED;
832
833 /**
834 * strlen of the barrier name
835 */
836 uint16_t name_len GNUNET_PACKED;
837
838 /**
839 * the barrier name (0-terminated) concatenated with an error message
840 * (0-terminated) if the status were to indicate an error
841 */
842 char data[0];
843};
844
845
846/**
847 * Message sent from peers to the testbed-barrier service to indicate that they
848 * have reached a barrier and are waiting for it to be crossed
849 */
850struct GNUNET_TESTBED_BarrierWait
851{
852 /**
853 * Type is #GNUNET_MESSAGE_TYPE_TESTBED_BARRIER_WAIT
854 */
855 struct GNUNET_MessageHeader header;
856
857 /**
858 * The name of the barrier they have reached. Non-NULL terminated.
859 */
860 char name[0];
861};
862
863
864GNUNET_NETWORK_STRUCT_END
865#endif
866/* end of testbed.h */