diff --git a/src/api/complete.c b/src/api/complete.c index e3eeea122a396ceb58661da9f4eac585c94b0224..a9aa27a47199d8b81a3cd3d7c2749e30a3532c5d 100644 --- a/src/api/complete.c +++ b/src/api/complete.c @@ -25,35 +25,41 @@ \*****************************************************************************/ #ifdef HAVE_CONFIG_H -# include <config.h> +# include "config.h" #endif #include <errno.h> #include <stdio.h> #include <stdlib.h> -#include <src/api/slurm.h> -#include <src/common/slurm_protocol_api.h> +#include "src/api/slurm.h" +#include "src/common/hostlist.h" +#include "src/common/slurm_protocol_api.h" /* slurm_complete_job - note the completion of a job and all of its steps */ int -slurm_complete_job ( uint32_t job_id ) +slurm_complete_job ( uint32_t job_id, uint32_t job_return_code, + uint32_t system_return_code ) { - return slurm_complete_job_step ( job_id, NO_VAL); + return slurm_complete_job_step ( job_id, NO_VAL, job_return_code, + system_return_code); } /* slurm_complete_job_step - note the completion of a specific job step * (or all steps if step_id==NO_VAL) */ int -slurm_complete_job_step ( uint32_t job_id, uint32_t step_id ) +slurm_complete_job_step ( uint32_t job_id, uint32_t step_id, + uint32_t job_return_code, + uint32_t system_return_code ) { int msg_size ; int rc ; slurm_fd sockfd ; slurm_msg_t request_msg ; slurm_msg_t response_msg ; - job_step_id_msg_t job_step_id_msg ; + complete_job_step_msg_t complete_job_step_msg ; return_code_msg_t * slurm_rc_msg ; + char host[128]; /* init message connection for message communication with controller */ if ( ( sockfd = slurm_open_controller_conn ( ) ) @@ -63,10 +69,14 @@ slurm_complete_job_step ( uint32_t job_id, uint32_t step_id ) } /* send request message */ - job_step_id_msg . job_id = job_id ; - job_step_id_msg . job_step_id = step_id ; - request_msg . msg_type = REQUEST_COMPLETE_JOB_STEP ; - request_msg . data = &job_step_id_msg ; + complete_job_step_msg . job_id = job_id ; + complete_job_step_msg . job_step_id = step_id ; + complete_job_step_msg . job_rc = job_return_code ; + complete_job_step_msg . slurm_rc = system_return_code ; + (void) getnodename (host, sizeof(host)) ; + complete_job_step_msg . node_name = host; + request_msg . msg_type = REQUEST_COMPLETE_JOB_STEP ; + request_msg . data = &complete_job_step_msg ; if ( ( rc = slurm_send_controller_msg ( sockfd , & request_msg ) ) == SLURM_SOCKET_ERROR ) { slurm_seterrno ( SLURM_COMMUNICATIONS_SEND_ERROR ); diff --git a/src/api/slurm.h b/src/api/slurm.h index e0eb34fc4cea771d5a4dd236b88ebba8624fed4a..ba08fde9e0733246679f2be778f5efb0d26dccd5 100644 --- a/src/api/slurm.h +++ b/src/api/slurm.h @@ -472,10 +472,13 @@ extern int slurm_cancel_job_step (uint32_t job_id, uint32_t step_id); \*****************************************************************************/ /* slurm_complete_job - note the completion of a job and all of its steps */ -extern int slurm_complete_job (uint32_t job_id); +extern int slurm_complete_job (uint32_t job_id, uint32_t job_return_code, + uint32_t system_return_code ); /* slurm_complete_job_step - note the completion of a specific job step */ -extern int slurm_complete_job_step (uint32_t job_id, uint32_t step_id); +extern int slurm_complete_job_step (uint32_t job_id, uint32_t step_id, + uint32_t job_return_code, + uint32_t system_return_code ); /*****************************************************************************\ diff --git a/src/common/slurm_errno.c b/src/common/slurm_errno.c index 9d9670b84d8056827cf39247899657f7ee31598f..5ae0b235460a787ded10defa9e8261a4ec3c1210 100644 --- a/src/common/slurm_errno.c +++ b/src/common/slurm_errno.c @@ -206,24 +206,24 @@ static slurm_errtab_t slurm_errtab[] = { "Unknown socket error" }, { ESLURMD_SIGNATURE_FIELD_TOO_SMALL, "Credential signature field is too small" }, - { ESLURMD_CAN_NOT_CREATE_BATCH_DIR, + { ESLURMD_CREATE_BATCH_DIR_ERROR, "Slurmd could not create a batch directory" }, - { ESLURMD_CAN_NOT_MODIFY_BATCH_DIR, + { ESLURMD_MODIFY_BATCH_DIR_ERROR, "Slurmd could not chown or chmod a batch directory" }, - { ESLURMD_CAN_NOT_CREATE_BATCH_SCRIPT, + { ESLURMD_CREATE_BATCH_SCRIPT_ERROR, "Slurmd could not create a batch script" }, - { ESLURMD_CAN_NOT_MODIFY_BATCH_SCRIPT, + { ESLURMD_MODIFY_BATCH_SCRIPT_ERROR, "Slurmd could not chown or chmod a batch script" }, - { ESLURMD_CAN_NOT_SETUP_ENVIRONMENT, + { ESLURMD_SETUP_ENVIRONMENT_ERROR, "Slurmd could not set up environment for batch job" }, { ESLURMD_SHARED_MEMORY_ERROR, "Slurmd shared memory error" }, - { ESLURMD_CAN_NOT_SET_UID_OR_GID, + { ESLURMD_SET_UID_OR_GID_ERROR, "Slurmd could not set UID or GID for batch job" }, - { ESLURMD_CAN_NOT_SET_SID, + { ESLURMD_SET_SID_ERROR, "Slurmd could not set session ID for batch job" }, - { ESLURMD_CAN_NOT_SPAWN_THREAD_HANDLER, - "Slurmd could not spawn thread handler" }, + { ESLURMD_CANNOT_SPAWN_IO_THREAD, + "Slurmd could not spawn I/O thread handler" }, { ESLURMD_FORK_FAILED, "Slurmd could not fork batch job" }, { ESLURMD_EXECVE_FAILED, diff --git a/src/common/slurm_errno.h b/src/common/slurm_errno.h index 493f29271f675bc06a093951d3ac3d06b8e90eb1..c922a81905c2f44f75be35a19e6ed697fcd1fc00 100644 --- a/src/common/slurm_errno.h +++ b/src/common/slurm_errno.h @@ -125,15 +125,15 @@ enum { ESLURMD_SOCKET_DISCONNECT, ESLURMD_UNKNOWN_SOCKET_ERROR, ESLURMD_SIGNATURE_FIELD_TOO_SMALL, - ESLURMD_CAN_NOT_CREATE_BATCH_DIR, - ESLURMD_CAN_NOT_MODIFY_BATCH_DIR, - ESLURMD_CAN_NOT_CREATE_BATCH_SCRIPT, - ESLURMD_CAN_NOT_MODIFY_BATCH_SCRIPT, - ESLURMD_CAN_NOT_SETUP_ENVIRONMENT, + ESLURMD_CREATE_BATCH_DIR_ERROR, + ESLURMD_MODIFY_BATCH_DIR_ERROR, + ESLURMD_CREATE_BATCH_SCRIPT_ERROR, + ESLURMD_MODIFY_BATCH_SCRIPT_ERROR, + ESLURMD_SETUP_ENVIRONMENT_ERROR, ESLURMD_SHARED_MEMORY_ERROR, - ESLURMD_CAN_NOT_SET_UID_OR_GID, - ESLURMD_CAN_NOT_SET_SID, - ESLURMD_CAN_NOT_SPAWN_THREAD_HANDLER, + ESLURMD_SET_UID_OR_GID_ERROR, + ESLURMD_SET_SID_ERROR, + ESLURMD_CANNOT_SPAWN_IO_THREAD, ESLURMD_FORK_FAILED, ESLURMD_EXECVE_FAILED, diff --git a/src/common/slurm_protocol_defs.c b/src/common/slurm_protocol_defs.c index 18ac435e1608939a03f1221669ca74ada1eb5822..da8625b260e1b0056b07fb1a86d8c877fe976573 100644 --- a/src/common/slurm_protocol_defs.c +++ b/src/common/slurm_protocol_defs.c @@ -207,6 +207,15 @@ void slurm_free_job_step_create_request_msg(job_step_create_request_msg_t * } } +void slurm_free_job_complete_msg(complete_job_step_msg_t * msg) +{ + if (msg) { + if (msg->node_name) + xfree(msg->node_name); + xfree(msg); + } +} + void slurm_free_launch_tasks_response_msg(launch_tasks_response_msg_t * msg) diff --git a/src/common/slurm_protocol_defs.h b/src/common/slurm_protocol_defs.h index 45306472e14358e0b6099d90aae838baeb618af1..9da29929758b7a270f8bb433bedca727ac380267 100644 --- a/src/common/slurm_protocol_defs.h +++ b/src/common/slurm_protocol_defs.h @@ -28,7 +28,7 @@ #define _SLURM_PROTOCOL_DEFS_H #if HAVE_CONFIG_H -# include <config.h> +# include "config.h" # if HAVE_INTTYPES_H # include <inttypes.h> # else @@ -43,10 +43,10 @@ # include <inttypes.h> #endif /* HAVE_CONFIG_H */ -#include <src/api/slurm.h> -#include <src/common/macros.h> -#include <src/common/xassert.h> -#include <src/common/slurm_protocol_common.h> +#include "src/api/slurm.h" +#include "src/common/macros.h" +#include "src/common/xassert.h" +#include "src/common/slurm_protocol_common.h" /* used to define the type of the io_stream_header_t.type @@ -206,6 +206,14 @@ typedef struct job_step_info_request_msg { uint32_t step_id; } job_step_info_request_msg_t; +typedef struct complete_job_step_msg { + uint32_t job_id; + uint32_t job_step_id; + uint32_t job_rc; + uint32_t slurm_rc; + char *node_name; +} complete_job_step_msg_t; + typedef struct kill_tasks_msg { uint32_t job_id; uint32_t job_step_id; @@ -332,6 +340,7 @@ void inline slurm_free_job_step_id(job_step_id_t * msg); void inline slurm_free_shutdown_msg (shutdown_msg_t * msg); void inline slurm_free_job_desc_msg(job_desc_msg_t * msg); +void inline slurm_free_job_complete_msg(complete_job_step_msg_t * msg); void inline slurm_free_node_registration_status_msg ( slurm_node_registration_status_msg_t * msg); diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c index 8c6209a4e9ac196e6ea5cf3c572c322085020c8a..29dfaa2c5982de9f8a7ae09b71436578705b775c 100644 --- a/src/common/slurm_protocol_pack.c +++ b/src/common/slurm_protocol_pack.c @@ -237,10 +237,13 @@ int pack_msg ( slurm_msg_t const * msg , Buf buffer ) /******** job_step_id_t Messages ********/ case REQUEST_JOB_INFO : case REQUEST_CANCEL_JOB_STEP : - case REQUEST_COMPLETE_JOB_STEP : pack_job_step_id ( ( job_step_id_t * ) msg->data , buffer ) ; break ; + case REQUEST_COMPLETE_JOB_STEP : + pack_complete_job_step ( + ( complete_job_step_msg_t * ) msg->data , buffer ) ; + break ; case REQUEST_REVOKE_JOB_CREDENTIAL : pack_revoke_credential_msg ( @@ -442,11 +445,15 @@ int unpack_msg ( slurm_msg_t * msg , Buf buffer ) /******** job_step_id_t Messages ********/ case REQUEST_JOB_INFO : case REQUEST_CANCEL_JOB_STEP : - case REQUEST_COMPLETE_JOB_STEP : rc = unpack_job_step_id ( ( job_step_id_t ** ) & ( msg->data ) , buffer ) ; break ; + case REQUEST_COMPLETE_JOB_STEP : + rc = unpack_complete_job_step ( + ( complete_job_step_msg_t ** ) &(msg->data) , + buffer ) ; + break ; case REQUEST_REVOKE_JOB_CREDENTIAL : rc = unpack_revoke_credential_msg ( ( revoke_credential_msg_t ** ) @@ -1965,6 +1972,36 @@ int unpack_job_step_id ( job_step_id_t ** msg_ptr , Buf buffer ) return SLURM_ERROR; } +void pack_complete_job_step ( complete_job_step_msg_t * msg , Buf buffer ) +{ + pack32 ( msg -> job_id , buffer ) ; + pack32 ( msg -> job_step_id , buffer ) ; + pack32 ( msg -> job_rc , buffer ) ; + pack32 ( msg -> slurm_rc , buffer ) ; + packstr ( msg -> node_name , buffer ) ; +} + +int unpack_complete_job_step ( complete_job_step_msg_t ** msg_ptr , Buf buffer ) +{ + complete_job_step_msg_t * msg ; + uint16_t uint16_tmp; + + msg = xmalloc ( sizeof ( complete_job_step_msg_t ) ) ; + *msg_ptr = msg ; + + safe_unpack32 ( & msg -> job_id , buffer ) ; + safe_unpack32 ( & msg -> job_step_id , buffer ) ; + safe_unpack32 ( & msg -> job_rc , buffer ) ; + safe_unpack32 ( & msg -> slurm_rc , buffer ) ; + safe_unpackstr_xmalloc ( & msg -> node_name , & uint16_tmp , buffer ) ; + return SLURM_SUCCESS ; + + unpack_error: + xfree (msg); + *msg_ptr = NULL; + return SLURM_ERROR; +} + void pack_get_job_step_info ( job_step_info_request_msg_t * msg , Buf buffer ) { diff --git a/src/common/slurm_protocol_pack.h b/src/common/slurm_protocol_pack.h index 665ba59e61db68af3311db45d2ebf3b762301c8b..eead8bf96988e5c3a42519d2ab2ec5cbedb3ccf5 100644 --- a/src/common/slurm_protocol_pack.h +++ b/src/common/slurm_protocol_pack.h @@ -28,7 +28,7 @@ #define _SLURM_PROTOCOL_PACK_H #if HAVE_CONFIG_H -# include <config.h> +# include "config.h" # if HAVE_INTTYPES_H # include <inttypes.h> # else @@ -40,8 +40,8 @@ # include <inttypes.h> #endif /* HAVE_CONFIG_H */ -#include <src/common/pack.h> -#include <src/common/slurm_protocol_defs.h> +#include "src/common/pack.h" +#include "src/common/slurm_protocol_defs.h" /* Pack / Unpack methods for slurm protocol header */ void pack_header ( header_t * header , Buf buffer ); @@ -57,7 +57,8 @@ int pack_msg ( slurm_msg_t const * msg , Buf buffer ); int unpack_msg ( slurm_msg_t * msgi , Buf buffer ); /* specific Pack / Unpack methods for slurm protocol bodies */ -void pack_node_registration_status_msg ( slurm_node_registration_status_msg_t * msg , Buf buffer ); +void pack_node_registration_status_msg ( + slurm_node_registration_status_msg_t * msg , Buf buffer ); int unpack_node_registration_status_msg ( slurm_node_registration_status_msg_t ** msg , Buf buffer ); @@ -65,22 +66,28 @@ void pack_job_desc ( job_desc_msg_t *job_desc_msg_ptr, Buf buffer ); int unpack_job_desc ( job_desc_msg_t **job_desc_msg_ptr, Buf buffer ); void pack_old_job_desc ( old_job_alloc_msg_t * job_desc_ptr, Buf buffer ); -int unpack_old_job_desc ( old_job_alloc_msg_t **job_desc_buffer_ptr, Buf buffer ); +int unpack_old_job_desc ( old_job_alloc_msg_t **job_desc_buffer_ptr, + Buf buffer ); void pack_last_update ( last_update_msg_t * msg , Buf buffer ); int unpack_last_update ( last_update_msg_t ** msg , Buf buffer ); -void pack_job_step_create_request_msg ( job_step_create_request_msg_t* msg , Buf buffer ); -int unpack_job_step_create_request_msg ( job_step_create_request_msg_t** msg , Buf buffer ); +void pack_job_step_create_request_msg ( job_step_create_request_msg_t* msg , + Buf buffer ); +int unpack_job_step_create_request_msg ( job_step_create_request_msg_t** msg , + Buf buffer ); -void pack_job_step_create_response_msg ( job_step_create_response_msg_t* msg , Buf buffer ); -int unpack_job_step_create_response_msg (job_step_create_response_msg_t** msg , Buf buffer ); +void pack_job_step_create_response_msg ( job_step_create_response_msg_t* msg , + Buf buffer ); +int unpack_job_step_create_response_msg (job_step_create_response_msg_t** msg , + Buf buffer ); void pack_return_code ( return_code_msg_t * msg , Buf buffer ); int unpack_return_code ( return_code_msg_t ** msg , Buf buffer ); void pack_slurm_ctl_conf ( slurm_ctl_conf_info_msg_t * build_ptr, Buf buffer ); -int unpack_slurm_ctl_conf ( slurm_ctl_conf_info_msg_t **build_buffer_ptr, Buf buffer ); +int unpack_slurm_ctl_conf ( slurm_ctl_conf_info_msg_t **build_buffer_ptr, + Buf buffer ); void pack_buffer_msg ( slurm_msg_t * msg , Buf buffer ); @@ -93,13 +100,13 @@ int unpack_job_info ( job_info_t ** job , Buf buffer ); int unpack_job_info_members ( job_info_t * job , Buf buffer ); /* job_step_info messages - * the pack_job_step_info_members is to be used programs such as slurmctld which do - * not use the protocol structures internally. + * the pack_job_step_info_members is to be used programs such as slurmctld + * which do not use the protocol structures internally. */ void pack_job_step_info ( job_step_info_t* step, Buf buffer ); void pack_job_step_info_members( uint32_t job_id, uint16_t step_id, - uint32_t user_id, time_t start_time, char *partition, char *nodes, - Buf buffer ); + uint32_t user_id, time_t start_time, char *partition, + char *nodes, Buf buffer ); int unpack_job_step_info ( job_step_info_t ** step , Buf buffer ); @@ -121,27 +128,44 @@ void pack_job_step_id ( job_step_id_t * msg , Buf buffer ); int unpack_job_step_id ( job_step_id_t ** msg_ptr , Buf buffer ); /* job_step_id Macros for typedefs */ -#define pack_cancel_job_step_msg(msg,buffer) pack_job_step_id(msg,buffer) -#define unpack_cancel_job_step_msg(msg_ptr,buffer) unpack_job_step_id(msg_ptr,buffer) -#define pack_job_step_id_msg(msg,buffer) pack_job_step_id(msg,buffer) -#define unpack_job_step_id_msg(msg_ptr,buffer) unpack_job_step_id(msg_ptr,buffer) -#define pack_job_step_info_request_msg(msg,buffer) pack_job_step_id(msg,buffer) -#define unpack_job_step_info_request_msg(msg_ptr,buffer)unpack_job_step_id(msg_ptr,buffer) -#define pack_job_info_request_msg(msg,buffer) pack_job_step_id(msg,buffer) -#define unpack_job_info_request_msg(msg_ptr,buffer) unpack_job_step_id(msg_ptr,buffer) +#define pack_cancel_job_step_msg(msg,buffer) \ + pack_job_step_id(msg,buffer) +#define unpack_cancel_job_step_msg(msg_ptr,buffer) \ + unpack_job_step_id(msg_ptr,buffer) +#define pack_job_step_id_msg(msg,buffer) \ + pack_job_step_id(msg,buffer) +#define unpack_job_step_id_msg(msg_ptr,buffer) \ + unpack_job_step_id(msg_ptr,buffer) +#define pack_job_step_info_request_msg(msg,buffer) \ + pack_job_step_id(msg,buffer) +#define unpack_job_step_info_request_msg(msg_ptr,buffer)\ + unpack_job_step_id(msg_ptr,buffer) +#define pack_job_info_request_msg(msg,buffer) \ + pack_job_step_id(msg,buffer) +#define unpack_job_info_request_msg(msg_ptr,buffer) \ + unpack_job_step_id(msg_ptr,buffer) int unpack_job_step_info ( job_step_info_t ** step , Buf buffer ); int unpack_job_step_info_members ( job_step_info_t * step , Buf buffer ); -int unpack_job_step_info_response_msg ( job_step_info_response_msg_t** msg, Buf buffer ); +int unpack_job_step_info_response_msg ( job_step_info_response_msg_t** msg, + Buf buffer ); + +void pack_complete_job_step ( complete_job_step_msg_t * msg , Buf buffer ) ; +int unpack_complete_job_step ( complete_job_step_msg_t ** msg_ptr , + Buf buffer ) ; void pack_cancel_tasks_msg ( kill_tasks_msg_t * msg , Buf buffer ); int unpack_cancel_tasks_msg ( kill_tasks_msg_t ** msg_ptr , Buf buffer ); -void pack_resource_allocation_response_msg ( resource_allocation_response_msg_t * msg, Buf buffer ); -int unpack_resource_allocation_response_msg ( resource_allocation_response_msg_t ** msg , Buf buffer ); +void pack_resource_allocation_response_msg ( + resource_allocation_response_msg_t * msg, Buf buffer ); +int unpack_resource_allocation_response_msg ( + resource_allocation_response_msg_t ** msg , Buf buffer ); -void pack_resource_allocation_and_run_response_msg ( resource_allocation_and_run_response_msg_t * msg, Buf buffer ); -int unpack_resource_allocation_and_run_response_msg ( resource_allocation_and_run_response_msg_t ** msg , Buf buffer ); +void pack_resource_allocation_and_run_response_msg ( + resource_allocation_and_run_response_msg_t * msg, Buf buffer ); +int unpack_resource_allocation_and_run_response_msg ( + resource_allocation_and_run_response_msg_t ** msg , Buf buffer ); void pack_submit_response_msg ( submit_response_msg_t * msg, Buf buffer ); int unpack_submit_response_msg ( submit_response_msg_t ** msg , Buf buffer ); @@ -158,24 +182,34 @@ int unpack_update_partition_msg ( update_part_msg_t ** msg_ptr , Buf buffer ); void pack_shutdown_msg ( shutdown_msg_t * msg , Buf buffer ); int unpack_shutdown_msg ( shutdown_msg_t ** msg_ptr , Buf buffer ); -void pack_launch_tasks_request_msg ( launch_tasks_request_msg_t * msg , Buf buffer ); -int unpack_launch_tasks_request_msg ( launch_tasks_request_msg_t ** msg_ptr , Buf buffer ); +void pack_launch_tasks_request_msg ( launch_tasks_request_msg_t * msg , + Buf buffer ); +int unpack_launch_tasks_request_msg ( launch_tasks_request_msg_t ** msg_ptr , + Buf buffer ); -void pack_launch_tasks_response_msg ( launch_tasks_response_msg_t * msg , Buf buffer ); -int unpack_launch_tasks_response_msg ( launch_tasks_response_msg_t ** msg_ptr , Buf buffer ); +void pack_launch_tasks_response_msg ( launch_tasks_response_msg_t * msg , + Buf buffer ); +int unpack_launch_tasks_response_msg ( launch_tasks_response_msg_t ** msg_ptr , + Buf buffer ); void pack_kill_tasks_msg ( kill_tasks_msg_t * msg , Buf buffer ); int unpack_kill_tasks_msg ( kill_tasks_msg_t ** msg_ptr , Buf buffer ); -void pack_slurm_addr_array ( slurm_addr * slurm_address , uint16_t size_val, Buf buffer ); -int unpack_slurm_addr_array ( slurm_addr ** slurm_address , uint16_t * size_val , Buf buffer ); +void pack_slurm_addr_array ( slurm_addr * slurm_address , uint16_t size_val, + Buf buffer ); +int unpack_slurm_addr_array ( slurm_addr ** slurm_address , + uint16_t * size_val , Buf buffer ); -extern void pack_get_job_step_info ( job_step_info_request_msg_t * msg , Buf buffer ); -extern int unpack_get_job_step_info ( job_step_info_request_msg_t ** msg , Buf buffer ); +extern void pack_get_job_step_info ( job_step_info_request_msg_t * msg , + Buf buffer ); +extern int unpack_get_job_step_info ( job_step_info_request_msg_t ** msg , + Buf buffer ); -void pack_reattach_tasks_streams_msg ( reattach_tasks_streams_msg_t * msg , Buf buffer ) ; -int unpack_reattach_tasks_streams_msg ( reattach_tasks_streams_msg_t ** msg_ptr , Buf buffer ) ; +void pack_reattach_tasks_streams_msg ( + reattach_tasks_streams_msg_t * msg , Buf buffer ) ; +int unpack_reattach_tasks_streams_msg ( + reattach_tasks_streams_msg_t ** msg_ptr , Buf buffer ) ; void pack_revoke_credential_msg ( revoke_credential_msg_t* msg , Buf buffer ) ; int unpack_revoke_credential_msg ( revoke_credential_msg_t** msg , Buf buffer ) ;