memcpy(ret_val, data, len);
}
+void make_header(QDict* obj, type_length length, type_group group, type_action action)
+{
+ qdict_put(obj, "length", qint_from_int((int64_t)length));
+ qdict_put(obj, "group", qint_from_int((int64_t)group));
+ qdict_put(obj, "action", qint_from_int((int64_t)action));
+}
+
+
bool ntf_to_injector(const char* data, const int len)
{
type_length length = 0;
- type_action group = 0;
- type_group action = 0;
+ type_group group = 0;
+ type_action action = 0;
const int catsize = 10;
const char* ijdata = (data + catsize + 2 + 1 + 1);
QDict* obj_header = qdict_new();
+ make_header(obj_header, length, group, action);
- qdict_put(obj_header, "cat", qstring_from_str(cat));
- qdict_put(obj_header, "length", qint_from_int((int64_t)length));
- qdict_put(obj_header, "group", qint_from_int((int64_t)group));
- qdict_put(obj_header, "action", qint_from_int((int64_t)action));
-
- QDict* obj = qdict_new();
+ QDict* objData = qdict_new();
qobject_incref(QOBJECT(obj_header));
- qdict_put(obj, "header", obj_header);
- qdict_put(obj, "data", qstring_from_str(ijdata));
+ qdict_put(objData, "cat", qstring_from_str(cat));
+ qdict_put(objData, "header", obj_header);
+ qdict_put(objData, "ijdata", qstring_from_str(ijdata));
+
+
+ QDict* objMsg = qdict_new();
+ qobject_incref(QOBJECT(objData));
+
+ qdict_put(objMsg, "type", qstring_from_str("injector"));
+ qdict_put(objMsg, "result", qstring_from_str("success"));
+ qdict_put(objMsg, "data", objData);
QString *json;
- json = qobject_to_json(QOBJECT(obj));
+ json = qobject_to_json(QOBJECT(objMsg));
assert(json != NULL);
QDECREF(json);
QDECREF(obj_header);
- QDECREF(obj);
+ QDECREF(objData);
+ QDECREF(objMsg);
return true;
}
return true;
}
+static int ijcount = 0;
+
static bool injector_command_proc(ECS_Client *clii, QObject *obj)
{
QDict* header = qdict_get_qdict(qobject_to_qdict(obj), "header");
// get data
const char* data = qdict_get_str(qobject_to_qdict(obj), COMMANDS_DATA);
+ LOG(">> count= %d", ++ijcount);
LOG(">> print len = %d, data\" %s\"", strlen(data), data);
LOG(">> header = cmd = %s, length = %d, action=%d, group=%d",
cmd, length, action, group);
static pthread_mutex_t recv_buf_mutex = PTHREAD_MUTEX_INITIALIZER;\r
static pthread_mutex_t send_buf_mutex = PTHREAD_MUTEX_INITIALIZER;\r
\r
-/*\r
-bool queue_evdi_buf(VirtIO_EVDI* evdi)\r
-{\r
- int sg_idx;\r
- EvdiBuf* ebuf = malloc(sizeof(EvdiBuf));\r
-\r
- while (sg_idx = virtqueue_pop(evdi->rvq, &ebuf->elem))\r
-\r
- INFO(">> QueueEvdiBuf : sg_idx = %d\n", sg_idx);\r
-\r
-\r
- pthread_mutex_lock(&recv_buf_mutex);\r
-\r
- QTAILQ_INSERT_TAIL(&evdi_in_queue, ebuf, next);\r
- qemu_bh_schedule(evdi->bh);\r
-\r
- pthread_mutex_unlock(&recv_buf_mutex);\r
-}\r
-*/\r
-/*\r
-void reset_msg_info(msg_info* info)\r
-{\r
- info->route = route_ij;\r
- info->use = 0;\r
- info->count = 0;\r
- info->index = 0;\r
-\r
-}\r
-*/\r
-\r
bool send_to_evdi(const uint32_t route, char* data, const uint32_t len)\r
{\r
int size;\r
}\r
\r
\r
-//static int g_cnt = 0;\r
+static int g_cnt = 0;\r
\r
static void flush_evdi_recv_queue(void)\r
{\r
int index;\r
- TRACE("nothing to do.\n");\r
\r
if (unlikely(!virtio_queue_ready(vio_evdi->rvq))) {\r
INFO("virtio queue is not ready\n");\r
index = virtqueue_pop(vio_evdi->rvq, &elem);\r
if (index == 0)\r
{\r
- ERR("unexpected empty queue");\r
+ //ERR("unexpected empty queue");\r
break;\r
}\r
\r
- INFO(">> virtqueue_pop. index: %d, out_num : %d, in_num : %d\n", index, elem.out_num, elem.in_num);\r
+ //INFO(">> virtqueue_pop. index: %d, out_num : %d, in_num : %d\n", index, elem.out_num, elem.in_num);\r
\r
memcpy(elem.in_sg[0].iov_base, &msginfo->info, sizeof(struct msg_info));\r
\r
- INFO(">> send to guest use = %d, msg = %s, iov_len = %d \n",\r
- msginfo->info.use, msginfo->info.buf, elem.in_sg[0].iov_len);\r
+ //INFO(">> send to guest count = %d, use = %d, msg = %s, iov_len = %d \n",\r
+ ++g_cnt, msginfo->info.use, msginfo->info.buf, elem.in_sg[0].iov_len);\r
\r
virtqueue_push(vio_evdi->rvq, &elem, sizeof(msg_info));\r
virtio_notify(&vio_evdi->vdev, vio_evdi->rvq);\r
\r
static void virtio_evdi_recv(VirtIODevice *vdev, VirtQueue *vq)\r
{\r
- INFO(">> evdirecv : virtio_evdi_recv\n");\r
-\r
- if (!QTAILQ_EMPTY(&evdi_recv_msg_queue))\r
- return;\r
-\r
- flush_evdi_recv_queue();\r
-\r
- INFO("enf of virtio_evdi_recv\n");\r
-}\r
-\r
-/*\r
-static void virtio_evdi_recv(VirtIODevice *vdev, VirtQueue *vq)\r
-{\r
- int index = 0;\r
-\r
- struct msg_info _msg;\r
-\r
- INFO(">> evdirecv : virtio_evdi_recv\n");\r
-\r
- if (unlikely(virtio_queue_empty(vio_evdi->rvq))) {\r
- INFO(">> evdirecv : virtqueue is empty\n");\r
- return;\r
- }\r
-\r
- VirtQueueElement elem;\r
-\r
- while ((index = virtqueue_pop(vq, &elem))) {\r
-\r
- INFO(">> evdirecv : virtqueue_pop. index: %d\n", index);\r
- INFO(">> evdirecv : element out_num : %d, in_num : %d\n", elem.out_num, elem.in_num);\r
-\r
- if (index == 0) {\r
- INFO("evdirecv : virtqueue break\n");\r
- break;\r
- }\r
-\r
- INFO(">> evdirecv : received use = %d, iov_len = %d\n", _msg.use, elem.in_sg[0].iov_len);\r
-\r
- memcpy(&_msg, elem.in_sg[0].iov_base, elem.in_sg[0].iov_len);\r
-\r
-\r
- if (g_cnt < 10)\r
- {\r
- memset(&_msg, 0x00, sizeof(_msg));\r
- sprintf(_msg.buf, "test_%d\n", g_cnt++);\r
- memcpy(elem.in_sg[0].iov_base, &_msg, sizeof(struct msg_info));\r
-\r
- INFO(">> evdirecv : send to guest msg use = %d, msg = %s, iov_len = %d \n",\r
- _msg.use, _msg.buf, elem.in_sg[0].iov_len);\r
-\r
-\r
- virtqueue_push(vq, &elem, sizeof(VirtIO_EVDI));\r
- virtio_notify(&vio_evdi->vdev, vq);\r
- }\r
- }\r
-\r
- INFO("enf of virtio_evdi_recv\n");\r
+ flush_evdi_recv_queue();\r
}\r
\r
-*/\r
-\r
static void virtio_evdi_send(VirtIODevice *vdev, VirtQueue *vq)\r
{\r
VirtIO_EVDI *vevdi = (VirtIO_EVDI *)vdev;\r
\r
while ((index = virtqueue_pop(vq, &elem))) {\r
\r
- INFO("<< virtqueue pop. index: %d, out_num : %d, in_num : %d\n", index, elem.out_num, elem.in_num);\r
+ //INFO("<< virtqueue pop. index: %d, out_num : %d, in_num : %d\n", index, elem.out_num, elem.in_num);\r
\r
if (index == 0) {\r
INFO("<< virtqueue break\n");\r
break;\r
}\r
\r
- INFO("<< use=%d, iov_len = %d\n", _msg.use, elem.out_sg[0].iov_len);\r
+ //INFO("<< use=%d, iov_len = %d\n", _msg.use, elem.out_sg[0].iov_len);\r
\r
memset(&_msg, 0x00, sizeof(_msg));\r
memcpy(&_msg, elem.out_sg[0].iov_base, elem.out_sg[0].iov_len);\r
\r
- INFO("<< recv from guest len = %d, msg = %s \n", _msg.use, _msg.buf);\r
+ //INFO("<< recv from guest len = %d, msg = %s \n", _msg.use, _msg.buf);\r
\r
ntf_to_injector(_msg.buf, _msg.use);\r
}\r
virtio_notify(&vio_evdi->vdev, vq);\r
}\r
\r
-/*\r
-static void virtio_evdi_send(VirtIODevice *vdev, VirtQueue *vq)\r
-{\r
- VirtIO_EVDI *vevdi = (VirtIO_EVDI *)vdev;\r
- int index = 0;\r
- struct msg_info _msg;\r
-\r
- INFO("<< evdisend : virtio_evdi_send \n");\r
- if (virtio_queue_empty(vevdi->svq)) {\r
- INFO("<< evdisend : virtqueue is empty.\n");\r
- return;\r
- }\r
-\r
- VirtQueueElement elem;\r
-\r
- while ((index = virtqueue_pop(vq, &elem))) {\r
-\r
- INFO("<< evdisend : virtqueue pop. index: %d\n", index);\r
- INFO("<< evdisend : element out_num : %d, in_num : %d\n", elem.out_num, elem.in_num);\r
-\r
- if (index == 0) {\r
- INFO("<< evdisend : virtqueue break\n");\r
- break;\r
- }\r
-\r
- INFO("<< evdisend : use=%d, iov_len = %d\n", _msg.use, elem.out_sg[0].iov_len);\r
-\r
- memset(&_msg, 0x00, sizeof(_msg));\r
- memcpy(&_msg, elem.out_sg[0].iov_base, elem.out_sg[0].iov_len);\r
-\r
- INFO("<< evdisend : recv from guest len = %d, msg = %s \n", _msg.use, _msg.buf);\r
- }\r
-\r
- virtqueue_push(vq, &elem, sizeof(VirtIO_EVDI));\r
- virtio_notify(&vio_evdi->vdev, vq);\r
-}\r
-*/\r
-\r
static uint32_t virtio_evdi_get_features(VirtIODevice *vdev,\r
uint32_t request_feature)\r
{\r