1 /* See the DRL-LICENSE file for this file's software license. */
8 /** Enumeration of identity types. */
11 /** Type used by identities that will limit all slivers on the machine. */
14 /** Type used by identities that will limit only a subset of slivers. */
18 /** Enumeration of identity member types. */
21 /** The member is an identifier (xid) of a single sliver. */
24 /** The member is an identifier (guid) of another sliver-set identity. */
29 * Linked list node containing address information for one of the identity's
32 typedef struct ident_peer {
33 /** The peer's IP address. */
36 /** Pointer to the next peer in the list or NULL if this is the last. */
37 struct ident_peer *next;
41 * Linked list node containing hierarchy information. For whole-machine
42 * identities, this is unnecessary. For sliver-set identities, this specifies
43 * which slivers and other sliver-sets belong in the set.
45 typedef struct ident_member {
46 /** The numerical xid or guid of the member. */
49 /** Specifies whether the value is an xid or guid. */
50 enum member_types type;
52 /** Pointer to the next member in the list or NULL if this is the last. */
53 struct ident_member *next;
57 * Linked list node containing identity information.
59 typedef struct ident_config {
60 /** The guid of this identity. */
63 /** The global DRL limit for this identity. */
66 /** The communication fabric (COMM_MESH or COMM_GOSSIP) for this identity.*/
67 enum commfabrics commfabric;
69 /** The gossip branch factor (when commfabric is COMM_GOSSIP). */
72 /** The gossip group membership policy (SWIM, ZOOKEEPER). */
73 enum memberships membership;
75 /** The behavioral policy to use when one or more failures in group
76 * membership are detected. */
77 enum failure_behaviors failure_behavior;
79 #ifdef BUILD_ZOOKEEPER
81 /** The host string that should be passed to zookeeper_init when using
82 * zookeeper. This consists of comma-separated ipaddr:port pairs. Example:
83 * "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002" */
88 /** The flow accounting mechanism to be used by this identity. */
89 enum accountings accounting;
91 /** The fixed (1-second) ewma weight value for this identity. */
92 double fixed_ewma_weight;
94 /** The number of limiter intervals to wait between calls to estimate,
95 * allocate and enforce. */
96 int mainloop_intervals;
98 /** The number of limiter intervals to wait between communication. */
99 int communication_intervals;
101 /** The type of this identity. */
102 enum ident_types type;
104 /** List of the identity's peers. */
107 /** The number of peers. */
110 /** If this is set, the node goes under the root rather than machine nodes. */
113 /** List of the identity's members (type IDENT_SET only). */
114 ident_member *members;
116 /** If NM is setting up the hierarchy for us, this is the htb node to use
117 * for this identity. */
120 /** If NM is setting up the hierarchy for us, this is the htb parent node
121 * to use for this identity. */
124 /** Pointer to the next ident in the list or NULL if this is the last. */
125 struct ident_config *next;
129 * Structure used to pass two lists after parsing is complete.
131 typedef struct parsed_configs {
132 /** A list of IDENT_MACHINE type identities. */
133 ident_config *machines;
135 /** The number of machine identities. */
138 /** A list of IDENT_SET type identities. */
141 /** The number of set identities. */
144 /** Pointer to the tail of the machines list. */
145 ident_config *last_machine;
147 /** Pointer to the tail of the sets list. */
148 ident_config *last_set;
152 * Frees the specified ident and all of the memory associated with it and its
155 * @param ident The ident to free.
157 void free_ident(ident_config *ident);
160 * Frees the specified list of identities and all of the memory associated
163 * @param list The ident_config list to free.
165 void free_ident_list(ident_config *list);
168 * Uses libxml2 to parse a DRL configuration XML file and converts the
169 * information into a linked list of identities.
171 * @param configfile The path to the XML configuration file.
172 * @param configs A parsed_configs structure to be filled in with linked list
173 * of machine and set configs.
175 * @returns zero on success, non-zero on error.
177 int parse_drl_config(const char *configfile, parsed_configs *configs);
180 * Reads /proc/virtual to get a list of viable xids. It creates an array of
181 * leaf_t structures and a map that maps xid to the leaf_t in the array with
184 * @param instance The drl_instance_t to be filled in. This function sets
185 * the instance's leaf_map, leaves, and leaf_count fields.
187 * @returns zero on success, non-zero on error. (Possibly ENOMEM if memory
188 * allocation fails, or 1 if the cause of the error is unclear. */
189 int get_eligible_leaves(struct drl_instance *instance);
191 #endif /* _DRL_CONFIG_ */