Клиентский код

Начал писать библиотеку с интерфейсом, которую будет использовать клиент. В папке ds/utils/ds_client/ создал папку lib. Код прокомментировал. 
1. КЛиентская библиотека находится в папке ds/utils/ds_client/lib и называется ds_cl.c. В ней пока реализованны функции - инициализация соединения con_handle_init(), подключение к хосту ds_connect(struct con_handle *con,char *ip,int port), отправка объекта на сервер ds_put_object(struct con_handle *con,struct ds_obj_id id, void *data, uint32_t data_size, uint64_t *off). В функции ds_put_object() объект нарезается на ds_packets (куски объекта) и по очереди отправляются на сервер.
2. Отредактировал код клиента ds/utils/ds_client/ds_client.c. Моделировалась такая ситуация. У клиента создается массив подключений struct con_handle, объект struct object. В цикле, клиент инициализирует три подключения для трех хостов. Потом он подключается к двум хостам ds_connect().  В obj.id заносится сгенерированный id. В obj.data записывается тестовая строка из 50 символов, офсет выставлен в начало (0). Дальше клиент хочет хранить половину объекта на одном хосте, вторую на другом .Он вызывает два раза ds_create_object (функция еще не готова) для резервирования места, размером (sizeof(obj.data_size)/2). Далее вызывается ds_put_object(), в нем половина объекта делится на 5 частей и отправляется на сервер, и потом еще раз для оптравки другой половины другому клиенту. Все куски имеют внутри себя id объекта, размер данных и смещение относительно начала, поэтому из этих кусков можно легко собрать объект заново. В конце клиент сбрасывает все соединения.
3. Хидер библиотеки ds_cl положил в /include, чтобы сервер мог видеть структуры. В ds_cl.h находятся определения для соединения con_handle, частей объектов ds_packet, объект object.
4. В папке ds/utils/ds_client/lib создал файл cl_crt.c, в котором реализованны функции crt_malloc,crt_free,... для юзерспейс.
5. В папке ds/utils/ds_client/lib создал файл random.c, в котором реализована функция ds_random_buf_read() для чтения данных из /dev/urandom в юзерспейс.

Я немного не понял, зачем делать  DS_PKT_OBJ_PUT, DS_PKT_OBJ_GET структурами.
Может вот так ?
enum packet_cmd
{
		DS_PKT_OBJ_PUT;
		DS_PKT_OBJ_GET 
		DS_PKT_OBJ_CREATE, 
		DS_PKT_OBJ_DELETE
};
struct ds_packet {
		enum packet_cmd  cmd;   
		struct ds_obj_id *obj_id;
		char 			 data[PAGE_SIZE];
		uint64_t 		 data_size;
		uint64_t 		 data_off;
};
На сервер просто будет:
...
switch(pack.cmd)
{
               case DS_PKT_OBJ_PUT: 
                              ds_get_object();break;
               case DS_PKT_OBJ_GET:
                               ds_put_object();break;
		case DS_PKT_OBJ_CREATE:
                                ds_alloc_object();break;
		case DS_PKT_OBJ_DELETE: 
                                ds_delete_object();break;
}