CPG_M...ALIZE(3) Corosync Cluster Engine Programmer's Manual CPG_M...ALIZE(3) NAME cpg_model_initialize - Create a new connection to the CPG service SYNOPSIS #include <corosync/cpg.h> cs_error_t cpg_model_initialize(cpg_handle_t *handle, cpg_model_t model, cpg_model_data_t *model_data, void *context); DESCRIPTION The cpg_model_initialize function is used to initialize a connection to the closed process groups API. Each application may have several connections to the CPG API. Each appli- cation uses the handle argument to uniquely identify the connection. The handle argument is then used in other function calls to identify the con- nection to be used for communication with the CPG service. Argument model is used to explicitly choose set of callbacks and internal parameters. Currently only model CPG_MODEL_V1 is defined. Callbacks and internal parameters are passed by model_data argument. This is casted pointer (idea is similar as in sockaddr function) to one of structures corresponding to chosen model. Currently only cpg_model_v1_data_t is needed. MODEL_V1 The MODEL_V1 is backwards compatible with original callbacks initialized by cpg_initialize but new callback cpg_totem_confchg_fn is defined. Every time an CPG event occurs within the joined group, one of the call- backs specified by the argument callbacks is called. The callback func- tions are described by the following type definitions: typedef void (*cpg_deliver_fn_t) ( cpg_handle_t handle, const struct cpg_name *group_name, uint32_t nodeid, uint32_t pid, const void *msg, size_t msg_len); typedef void (*cpg_confchg_fn_t) ( cpg_handle_t handle, const struct cpg_name *group_name, const struct cpg_address *member_list, size_t member_list_entries, const struct cpg_address *left_list, size_t left_list_entries, const struct cpg_address *joined_list, size_t joined_list_entries); typedef void (*cpg_totem_confchg_fn_t) ( cpg_handle_t handle, struct cpg_ring_id ring_id, uint32_t member_list_entries, const uint32_t *member_list); The cpg_model_v1_data_t structure is defined as: typedef struct { cpg_model_t model; cpg_deliver_fn_t cpg_deliver_fn; cpg_confchg_fn_t cpg_confchg_fn; cpg_totem_confchg_fn_t cpg_totem_confchg_fn; unsigned int flags; } cpg_model_v1_data_t; When a configuration change occurs or a message is to be delivered one of the callbacks is called from the cpg_dispatch() function. If a configura- tion change occurs, cpg_confchg_fn is called. If a delivery of a message occurs, cpg_deliver_fn is called. When totem membership change occurs, cpg_totem_confchg_fn is called. You can OR CPG_MODEL_V1_DELIVER_INI- TIAL_TOTEM_CONF constant to flags to get callback after first confchg event. The cpg_address structure is defined struct cpg_address { unsigned int nodeid; unsigned int pid; unsigned int reason; }; where nodeid is a 32 bit unique node identifier, pid is the process ID of the process that has joined/left the group or sent the message, and reason is an integer code indicating why the node joined/left the group (this value is not set for the member_list items). CPG_REASON_JOIN - the process joined a group using cpg_join(). CPG_REASON_LEAVE - the process left a group using cpg_leave() CPG_REASON_NODEDOWN - the process left a group because the node left the cluster. CPG_REASON_NODEUP - the process joined a group because it was already a member of a group on a node that has just joined the cluster CPG_REASON_PROCDOWN - the process left a group without calling cpg_leave() CPG_REASON_UNDEFINED - a special value used for the member_list items The cpg_ring_id structure is defined struct cpg_ring_id { uint32_t nodeid; uint64_t seq; }; where nodeid is the current Totem leader and seq is an increasing number. RETURN VALUE This call returns the CS_OK value if successful, otherwise an error is re- turned. ERRORS The errors are undocumented. SEE ALSO cpg_overview(3), cpg_initialize(3), cpg_finalize(3), cpg_fd_get(3), cpg_dispatch(3), cpg_join(3), cpg_leave(3), cpg_mcast_joined(3), cpg_mem- bership_get(3) cpg_zcb_alloc(3) cpg_zcb_free(3) cpg_zcb_mcast_joined(3) cpg_context_get(3) cpg_context_set(3) cpg_local_get(3) cpg_model_initial- ize(3) CS_ERR_TRY_AGAIN Resource temporarily unavailable CS_ERR_INVALID_PARAM Invalid argument CS_ERR_ACCESS Permission denied CS_ERR_LIBRARY The connection failed CS_ERR_INTERRUPT System call interrupted by a signal CS_ERR_NOT_SUPPORTED The requested protocol/functionality not supported CS_ERR_MESSAGE_ERROR Incorrect auth message received CS_ERR_NO_MEMORY Not enough memory to complete the requested task corosync Man Page 2024-07-15 CPG_M...ALIZE(3)
NAME | SYNOPSIS | DESCRIPTION | MODEL_V1 | RETURN VALUE | ERRORS | SEE ALSO
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=cpg_model_initialize&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>
