+#define NO_MAX_DURATION -1.0
+
+/* user-visible parameters */
+extern double sg_tcp_gamma;
+extern double sg_latency_factor;
+extern double sg_bandwidth_factor;
+extern double sg_weight_S_parameter;
+extern int sg_maxmin_selective_update;
+#ifdef HAVE_GTNETS
+ extern double sg_gtnets_jitter;
+ extern int sg_gtnets_jitter_seed;
+#endif
+
+
+extern const char *surf_action_state_names[6];
+
+typedef enum {
+ SURF_LINK_SHARED = 1,
+ SURF_LINK_FATPIPE = 0
+} e_surf_link_sharing_policy_t;
+
+typedef struct surf_model_private {
+ int (*resource_used) (void *resource_id);
+ /* Share the resources to the actions and return in how much time
+ the next action may terminate */
+ double (*share_resources) (double now);
+ /* Update the actions' state */
+ void (*update_actions_state) (double now, double delta);
+ void (*update_resource_state) (void *id, tmgr_trace_event_t event_type,
+ double value, double time);
+ void (*finalize) (void);
+} s_surf_model_private_t;
+
+double generic_maxmin_share_resources(xbt_swag_t running_actions,
+ size_t offset,
+ lmm_system_t sys,
+ void (*solve) (lmm_system_t));
+
+/* Generic functions common to all models */
+e_surf_action_state_t surf_action_state_get(surf_action_t action); /* cannot declare inline since we use a pointer to it */
+double surf_action_get_start_time(surf_action_t action); /* cannot declare inline since we use a pointer to it */
+double surf_action_get_finish_time(surf_action_t action); /* cannot declare inline since we use a pointer to it */