Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
mv msg/msg.h simgrid/msg.h
[simgrid.git] / include / simgrid / platf_generator.h
1
2 /* platf_generator.h - Public interface to the SimGrid platforms generator  */
3
4 /* Copyright (c) 2004-2014. The SimGrid Team.
5  * All rights reserved.                                                     */
6
7 /* This program is free software; you can redistribute it and/or modify it
8  * under the terms of the license (GNU LGPL) which comes with this package. */
9
10 #ifndef SG_PLATF_GEN_H
11 #define SG_PLATF_GEN_H
12
13 #include "xbt.h"
14 #include "xbt/graph.h" //Only for platf_graph_get()
15 #include "platf.h"
16
17 typedef enum {
18   ROUTER,
19   HOST,
20   CLUSTER
21 } e_platf_node_kind;
22
23 typedef struct s_context_node_t {
24   unsigned long id;
25   double x, y;
26   int degree;
27   e_platf_node_kind kind;
28   int connect_checked;
29   union {
30     s_sg_platf_host_cbarg_t host_parameters;
31     s_sg_platf_cluster_cbarg_t cluster_parameters;
32     char* router_id;
33   };
34 } s_context_node_t, *context_node_t;
35
36 typedef struct s_context_edge_t {
37   unsigned long id;
38   double length;
39   int labeled;
40   s_sg_platf_link_cbarg_t link_parameters;
41 } s_context_edge_t, *context_edge_t;
42
43 typedef void (*platf_promoter_cb_t) (context_node_t);
44 typedef void (*platf_labeler_cb_t) (context_edge_t);
45
46 XBT_PUBLIC(void) platf_random_seed(unsigned long seed[6]);
47
48 XBT_PUBLIC(void) platf_graph_uniform(unsigned long node_count);
49 XBT_PUBLIC(void) platf_graph_heavytailed(unsigned long node_count);
50
51 XBT_PUBLIC(void) platf_graph_interconnect_star(void);
52 XBT_PUBLIC(void) platf_graph_interconnect_line(void);
53 XBT_PUBLIC(void) platf_graph_interconnect_ring(void);
54 XBT_PUBLIC(void) platf_graph_interconnect_clique(void);
55 XBT_PUBLIC(void) platf_graph_interconnect_uniform(double alpha);
56 XBT_PUBLIC(void) platf_graph_interconnect_exponential(double alpha);
57 XBT_PUBLIC(void) platf_graph_interconnect_zegura(double alpha, double beta, double r);
58 XBT_PUBLIC(void) platf_graph_interconnect_waxman(double alpha, double beta);
59 XBT_PUBLIC(void) platf_graph_interconnect_barabasi(void);
60
61 XBT_PUBLIC(int) platf_graph_is_connected(void);
62
63 XBT_PUBLIC(void) platf_graph_clear_links(void);
64
65 XBT_PUBLIC(void) platf_graph_promote_to_host(context_node_t node, sg_platf_host_cbarg_t parameters);
66 XBT_PUBLIC(void) platf_graph_promote_to_cluster(context_node_t node, sg_platf_cluster_cbarg_t parameters);
67
68 XBT_PUBLIC(void) platf_graph_link_label(context_edge_t edge, sg_platf_link_cbarg_t parameters);
69
70 XBT_PUBLIC(void) platf_graph_promoter(platf_promoter_cb_t promoter_callback);
71 XBT_PUBLIC(void) platf_graph_labeler(platf_labeler_cb_t labeler_callback);
72
73 XBT_PUBLIC(void) platf_do_promote(void);
74 XBT_PUBLIC(void) platf_do_label(void);
75
76 XBT_PUBLIC(void) platf_generate(void);
77
78 // WARNING : Only for debbugging ; should be removed when platform
79 // generation works correctly
80 XBT_PUBLIC(xbt_graph_t) platf_graph_get(void);
81
82 #endif              /* SG_PLATF_GEN_H */
83