| 744 | } |
| 745 | |
| 746 | cs_error_t cpg_membership_get ( |
| 747 | cpg_handle_t handle, |
| 748 | struct cpg_name *group_name, |
| 749 | struct cpg_address *member_list, |
| 750 | int *member_list_entries) |
| 751 | { |
| 752 | cs_error_t error; |
| 753 | struct cpg_inst *cpg_inst; |
| 754 | struct iovec iov; |
| 755 | struct req_lib_cpg_membership_get req_lib_cpg_membership_get; |
| 756 | struct res_lib_cpg_membership_get res_lib_cpg_membership_get; |
| 757 | unsigned int i; |
| 758 | |
| 759 | if (group_name->length > CPG_MAX_NAME_LENGTH) { |
| 760 | return (CS_ERR_NAME_TOO_LONG); |
| 761 | } |
| 762 | if (member_list == NULL) { |
| 763 | return (CS_ERR_INVALID_PARAM); |
| 764 | } |
| 765 | if (member_list_entries == NULL) { |
| 766 | return (CS_ERR_INVALID_PARAM); |
| 767 | } |
| 768 | |
| 769 | error = hdb_error_to_cs (hdb_handle_get (&cpg_handle_t_db, handle, (void *)&cpg_inst)); |
| 770 | if (error != CS_OK) { |
| 771 | return (error); |
| 772 | } |
| 773 | |
| 774 | req_lib_cpg_membership_get.header.size = sizeof (struct req_lib_cpg_membership_get); |
| 775 | req_lib_cpg_membership_get.header.id = MESSAGE_REQ_CPG_MEMBERSHIP; |
| 776 | |
| 777 | marshall_to_mar_cpg_name_t (&req_lib_cpg_membership_get.group_name, |
| 778 | group_name); |
| 779 | |
| 780 | iov.iov_base = (void *)&req_lib_cpg_membership_get; |
| 781 | iov.iov_len = sizeof (struct req_lib_cpg_membership_get); |
| 782 | |
| 783 | error = coroipcc_msg_send_reply_receive (cpg_inst->c, &iov, 1, |
| 784 | &res_lib_cpg_membership_get, sizeof (res_lib_cpg_membership_get)); |
| 785 | |
| 786 | if (error != CS_OK) { |
| 787 | goto error_exit; |
| 788 | } |
| 789 | |
| 790 | error = res_lib_cpg_membership_get.header.error; |
| 791 | |
| 792 | /* |
| 793 | * Copy results to caller |
| 794 | */ |
| 795 | *member_list_entries = res_lib_cpg_membership_get.member_count; |
| 796 | if (member_list) { |
| 797 | for (i = 0; i < res_lib_cpg_membership_get.member_count; i++) { |
| 798 | marshall_from_mar_cpg_address_t (&member_list[i], |
| 799 | &res_lib_cpg_membership_get.member_list[i]); |
| 800 | } |
| 801 | } |
| 802 | |
| 803 | error_exit: |