attach_cib_generation(update_msg, "cib_generation", the_cib);
cib_pre_notify(	const char *op, crm_data_t *existing, crm_data_t *update) {	HA_Message *update_msg = ha_msg_new(6);	const char *type = NULL;	const char *id = NULL;	if(update != NULL) {		id = crm_element_value(update, XML_ATTR_ID);	}		ha_msg_add(update_msg, F_TYPE, T_CIB_NOTIFY);	ha_msg_add(update_msg, F_SUBTYPE, T_CIB_PRE_NOTIFY);	ha_msg_add(update_msg, F_CIB_OPERATION, op);	if(id != NULL) {		ha_msg_add(update_msg, F_CIB_OBJID, id);	}	if(update != NULL) {		ha_msg_add(update_msg, F_CIB_OBJTYPE, crm_element_name(update));	} else if(existing != NULL) {		ha_msg_add(update_msg, F_CIB_OBJTYPE, crm_element_name(existing));	}	type = cl_get_string(update_msg, F_CIB_OBJTYPE);			if(existing != NULL) {		add_message_xml(update_msg, F_CIB_EXISTING, existing);	}	if(update != NULL) {		add_message_xml(update_msg, F_CIB_UPDATE, update);	}	g_hash_table_foreach(client_list, cib_notify_client, update_msg);		pending_updates++;		if(update == NULL) {		crm_verbose("Performing operation %s (on section=%s)",			    op, type);	} else {		crm_verbose("Performing %s on <%s%s%s>",			    op, type, id?" id=":"", id?id:"");	}			crm_msg_del(update_msg);}