int clock_domain_descriptor_imp::proc_get_clock_source_resp(void *& notification_id, const uint8_t * frame, size_t frame_len, int & status)
{
    struct jdksavdecc_frame cmd_frame;
    struct jdksavdecc_aem_command_get_clock_source_response aem_cmd_get_clk_src_resp;
    ssize_t aem_cmd_get_clk_src_resp_returned;
    uint32_t msg_type;
    bool u_field;

    memcpy(cmd_frame.payload, frame, frame_len);
    memset(&aem_cmd_get_clk_src_resp, 0, sizeof(jdksavdecc_aem_command_get_clock_source_response));

    aem_cmd_get_clk_src_resp_returned = jdksavdecc_aem_command_get_clock_source_response_read(&aem_cmd_get_clk_src_resp,
                                                                                              frame,
                                                                                              ETHER_HDR_SIZE,
                                                                                              frame_len);

    if (aem_cmd_get_clk_src_resp_returned < 0)
    {
        log_imp_ref->post_log_msg(LOGGING_LEVEL_ERROR, "aem_cmd_get_clk_src_resp_read error\n");
        assert(aem_cmd_get_clk_src_resp_returned >= 0);
        return -1;
    }

    replace_frame(frame, ETHER_HDR_SIZE, frame_len);

    msg_type = aem_cmd_get_clk_src_resp.aem_header.aecpdu_header.header.message_type;
    status = aem_cmd_get_clk_src_resp.aem_header.aecpdu_header.header.status;
    u_field = aem_cmd_get_clk_src_resp.aem_header.command_type >> 15 & 0x01; // u_field = the msb of the uint16_t command_type

    aecp_controller_state_machine_ref->update_inflight_for_rcvd_resp(notification_id, msg_type, u_field, &cmd_frame);

    return 0;
}
	int clock_domain_descriptor_imp::proc_get_clock_source_resp(void *&notification_id, uint32_t &notification_flag, uint8_t *frame, uint16_t mem_buf_len, int &status)
	{
		struct jdksavdecc_frame *ether_frame;
		int aem_cmd_get_clk_src_resp_returned;
		uint32_t msg_type;
		bool u_field;

		ether_frame = (struct jdksavdecc_frame *)malloc(sizeof(struct jdksavdecc_frame));
		memcpy(ether_frame->payload, frame, mem_buf_len);

		aem_cmd_get_clk_src_resp_returned = jdksavdecc_aem_command_get_clock_source_response_read(&aem_cmd_get_clk_src_resp,
		                                                                                          frame,
		                                                                                          aecp::CMD_POS,
		                                                                                          mem_buf_len);

		if(aem_cmd_get_clk_src_resp_returned < 0)
		{
			avdecc_lib::log_ref->logging(avdecc_lib::LOGGING_LEVEL_ERROR, "aem_cmd_get_clk_src_resp_read error\n");
			assert(aem_cmd_get_clk_src_resp_returned >= 0);
			return -1;
		}

		msg_type = aem_cmd_get_clk_src_resp.aem_header.aecpdu_header.header.message_type;
		status = aem_cmd_get_clk_src_resp.aem_header.aecpdu_header.header.status;
		u_field = aem_cmd_get_clk_src_resp.command_type >> 15 & 0x01; // u_field = the msb of the uint16_t command_type

		aem_controller_state_machine_ref->update_inflight_for_rcvd_resp(notification_id, notification_flag, msg_type, u_field, ether_frame);

		free(ether_frame);
		return 0;
	}