diff options
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/xend/lib/blkif.py | 2 | ||||
| -rw-r--r-- | tools/xend/lib/utils.c | 297 |
2 files changed, 163 insertions, 136 deletions
diff --git a/tools/xend/lib/blkif.py b/tools/xend/lib/blkif.py index 9ea972caa5..a35d1bcea1 100644 --- a/tools/xend/lib/blkif.py +++ b/tools/xend/lib/blkif.py @@ -64,7 +64,7 @@ def backend_rx_rsp(port, msg): { 'domid' : dom, 'blkif_handle' : 0, 'vdevice' : vdev, 'extent.sector_start' : start_sect, - 'extent.sector.length' : nr_sect, + 'extent.sector_length' : nr_sect, 'extent.device' : pdev }) backend_tx_req(msg) elif subtype == CMSG_BLKIF_BE_VBD_GROW: diff --git a/tools/xend/lib/utils.c b/tools/xend/lib/utils.c index a01ba5254b..918e74cc96 100644 --- a/tools/xend/lib/utils.c +++ b/tools/xend/lib/utils.c @@ -236,18 +236,29 @@ static PyTypeObject xu_notifier_type = { */ #define TYPE(_x,_y) (((_x)<<8)|(_y)) -#define P2C(_struct, _field, _pytype, _ctype1, _ctype2) \ +#define P2C(_struct, _field, _ctype) \ do { \ PyObject *obj; \ - if ( ((obj = PyDict_GetItemString(payload, #_field)) != NULL) && \ - Py ## _pytype ## _Check(obj) ) \ - ((_struct *)&xum->msg.msg[0])->_field = \ - (_ctype2)Py ## _pytype ## _As ## _ctype1(obj); \ + if ( (obj = PyDict_GetItemString(payload, #_field)) != NULL ) \ + { \ + if ( PyInt_Check(obj) ) \ + { \ + ((_struct *)&xum->msg.msg[0])->_field = \ + (_ctype)PyInt_AsLong(obj); \ + dict_items_parsed++; \ + } \ + else if ( PyLong_Check(obj) ) \ + { \ + ((_struct *)&xum->msg.msg[0])->_field = \ + (_ctype)PyLong_AsUnsignedLongLong(obj); \ + dict_items_parsed++; \ + } \ + } \ xum->msg.length = sizeof(_struct); \ } while ( 0 ) -#define C2P(_struct, _field, _pytype, _ctype1, _ctype2) \ +#define C2P(_struct, _field, _pytype, _ctype) \ do { \ - PyObject *obj = Py ## _pytype ## _From ## _ctype1 \ + PyObject *obj = Py ## _pytype ## _From ## _ctype \ (((_struct *)&xum->msg.msg[0])->_field); \ if ( dict == NULL ) dict = PyDict_New(); \ PyDict_SetItemString(dict, #_field, obj); \ @@ -284,20 +295,33 @@ static PyObject *xu_message_set_response_fields(PyObject *self, PyObject *args) { xu_message_object *xum = (xu_message_object *)self; PyObject *payload; + int dict_items_parsed = 0; if ( !PyArg_ParseTuple(args, "O", &payload) ) return NULL; + if ( !PyDict_Check(payload) ) + { + PyErr_SetString(PyExc_TypeError, "payload is not a dictionary"); + return NULL; + } + switch ( TYPE(xum->msg.type, xum->msg.subtype) ) { case TYPE(CMSG_BLKIF_FE, CMSG_BLKIF_FE_DRIVER_STATUS_CHANGED): - P2C(blkif_fe_driver_status_changed_t, nr_interfaces, Int, Long, u32); + P2C(blkif_fe_driver_status_changed_t, nr_interfaces, u32); break; case TYPE(CMSG_NETIF_FE, CMSG_NETIF_FE_DRIVER_STATUS_CHANGED): - P2C(netif_fe_driver_status_changed_t, nr_interfaces, Int, Long, u32); + P2C(netif_fe_driver_status_changed_t, nr_interfaces, u32); break; } + if ( dict_items_parsed != PyDict_Size(payload) ) + { + PyErr_SetString(PyExc_TypeError, "payload contains bad items"); + return NULL; + } + Py_INCREF(Py_None); return Py_None; } @@ -313,117 +337,116 @@ static PyObject *xu_message_get_payload(PyObject *self, PyObject *args) switch ( TYPE(xum->msg.type, xum->msg.subtype) ) { case TYPE(CMSG_BLKIF_FE, CMSG_BLKIF_FE_INTERFACE_STATUS_CHANGED): - C2P(blkif_fe_interface_status_changed_t, handle, Int, Long, u32); - C2P(blkif_fe_interface_status_changed_t, status, Int, Long, u32); - C2P(blkif_fe_interface_status_changed_t, evtchn, Int, Long, u16); + C2P(blkif_fe_interface_status_changed_t, handle, Int, Long); + C2P(blkif_fe_interface_status_changed_t, status, Int, Long); + C2P(blkif_fe_interface_status_changed_t, evtchn, Int, Long); return dict; case TYPE(CMSG_BLKIF_FE, CMSG_BLKIF_FE_DRIVER_STATUS_CHANGED): - C2P(blkif_fe_driver_status_changed_t, status, Int, Long, u32); + C2P(blkif_fe_driver_status_changed_t, status, Int, Long); return dict; case TYPE(CMSG_BLKIF_FE, CMSG_BLKIF_FE_INTERFACE_CONNECT): - C2P(blkif_fe_interface_connect_t, handle, Int, Long, u32); - C2P(blkif_fe_interface_connect_t, shmem_frame, Int, Long, memory_t); + C2P(blkif_fe_interface_connect_t, handle, Int, Long); + C2P(blkif_fe_interface_connect_t, shmem_frame, Int, Long); return dict; case TYPE(CMSG_BLKIF_FE, CMSG_BLKIF_FE_INTERFACE_DISCONNECT): - C2P(blkif_fe_interface_disconnect_t, handle, Int, Long, u32); + C2P(blkif_fe_interface_disconnect_t, handle, Int, Long); return dict; case TYPE(CMSG_BLKIF_BE, CMSG_BLKIF_BE_CREATE): - C2P(blkif_be_create_t, domid, Int, Long, u32); - C2P(blkif_be_create_t, blkif_handle, Int, Long, u32); - C2P(blkif_be_create_t, status, Int, Long, u32); + C2P(blkif_be_create_t, domid, Int, Long); + C2P(blkif_be_create_t, blkif_handle, Int, Long); + C2P(blkif_be_create_t, status, Int, Long); return dict; case TYPE(CMSG_BLKIF_BE, CMSG_BLKIF_BE_DESTROY): - C2P(blkif_be_destroy_t, domid, Int, Long, u32); - C2P(blkif_be_destroy_t, blkif_handle, Int, Long, u32); - C2P(blkif_be_destroy_t, status, Int, Long, u32); + C2P(blkif_be_destroy_t, domid, Int, Long); + C2P(blkif_be_destroy_t, blkif_handle, Int, Long); + C2P(blkif_be_destroy_t, status, Int, Long); return dict; case TYPE(CMSG_BLKIF_BE, CMSG_BLKIF_BE_CONNECT): - C2P(blkif_be_connect_t, domid, Int, Long, u32); - C2P(blkif_be_connect_t, blkif_handle, Int, Long, u32); - C2P(blkif_be_connect_t, shmem_frame, Int, Long, memory_t); - C2P(blkif_be_connect_t, evtchn, Int, Long, u16); - C2P(blkif_be_connect_t, status, Int, Long, u32); + C2P(blkif_be_connect_t, domid, Int, Long); + C2P(blkif_be_connect_t, blkif_handle, Int, Long); + C2P(blkif_be_connect_t, shmem_frame, Int, Long); + C2P(blkif_be_connect_t, evtchn, Int, Long); + C2P(blkif_be_connect_t, status, Int, Long); return dict; case TYPE(CMSG_BLKIF_BE, CMSG_BLKIF_BE_DISCONNECT): - C2P(blkif_be_disconnect_t, domid, Int, Long, u32); - C2P(blkif_be_disconnect_t, blkif_handle, Int, Long, u32); - C2P(blkif_be_disconnect_t, status, Int, Long, u32); + C2P(blkif_be_disconnect_t, domid, Int, Long); + C2P(blkif_be_disconnect_t, blkif_handle, Int, Long); + C2P(blkif_be_disconnect_t, status, Int, Long); return dict; case TYPE(CMSG_BLKIF_BE, CMSG_BLKIF_BE_VBD_CREATE): - C2P(blkif_be_vbd_create_t, domid, Int, Long, u32); - C2P(blkif_be_vbd_create_t, blkif_handle, Int, Long, u32); - C2P(blkif_be_vbd_create_t, vdevice, Int, Long, blkif_vdev_t); - C2P(blkif_be_vbd_create_t, readonly, Int, Long, u16); - C2P(blkif_be_vbd_create_t, status, Int, Long, u32); + C2P(blkif_be_vbd_create_t, domid, Int, Long); + C2P(blkif_be_vbd_create_t, blkif_handle, Int, Long); + C2P(blkif_be_vbd_create_t, vdevice, Int, Long); + C2P(blkif_be_vbd_create_t, readonly, Int, Long); + C2P(blkif_be_vbd_create_t, status, Int, Long); return dict; case TYPE(CMSG_BLKIF_BE, CMSG_BLKIF_BE_VBD_DESTROY): - C2P(blkif_be_vbd_destroy_t, domid, Int, Long, u32); - C2P(blkif_be_vbd_destroy_t, blkif_handle, Int, Long, u32); - C2P(blkif_be_vbd_destroy_t, vdevice, Int, Long, blkif_vdev_t); - C2P(blkif_be_vbd_destroy_t, status, Int, Long, u32); + C2P(blkif_be_vbd_destroy_t, domid, Int, Long); + C2P(blkif_be_vbd_destroy_t, blkif_handle, Int, Long); + C2P(blkif_be_vbd_destroy_t, vdevice, Int, Long); + C2P(blkif_be_vbd_destroy_t, status, Int, Long); return dict; case TYPE(CMSG_BLKIF_BE, CMSG_BLKIF_BE_VBD_GROW): - C2P(blkif_be_vbd_grow_t, domid, Int, Long, u32); - C2P(blkif_be_vbd_grow_t, blkif_handle, Int, Long, u32); - C2P(blkif_be_vbd_grow_t, vdevice, Int, Long, blkif_vdev_t); + C2P(blkif_be_vbd_grow_t, domid, Int, Long); + C2P(blkif_be_vbd_grow_t, blkif_handle, Int, Long); + C2P(blkif_be_vbd_grow_t, vdevice, Int, Long); C2P(blkif_be_vbd_grow_t, extent.sector_start, - Long, UnsignedLongLong, blkif_sector_t); + Long, UnsignedLongLong); C2P(blkif_be_vbd_grow_t, extent.sector_length, - Long, UnsignedLongLong, blkif_sector_t); - C2P(blkif_be_vbd_grow_t, extent.device, - Int, Long, blkif_pdev_t); - C2P(blkif_be_vbd_grow_t, status, Int, Long, u32); + Long, UnsignedLongLong); + C2P(blkif_be_vbd_grow_t, extent.device, Int, Long); + C2P(blkif_be_vbd_grow_t, status, Int, Long); return dict; case TYPE(CMSG_BLKIF_BE, CMSG_BLKIF_BE_VBD_SHRINK): - C2P(blkif_be_vbd_shrink_t, domid, Int, Long, u32); - C2P(blkif_be_vbd_shrink_t, blkif_handle, Int, Long, u32); - C2P(blkif_be_vbd_shrink_t, vdevice, Int, Long, blkif_vdev_t); - C2P(blkif_be_vbd_shrink_t, status, Int, Long, u32); + C2P(blkif_be_vbd_shrink_t, domid, Int, Long); + C2P(blkif_be_vbd_shrink_t, blkif_handle, Int, Long); + C2P(blkif_be_vbd_shrink_t, vdevice, Int, Long); + C2P(blkif_be_vbd_shrink_t, status, Int, Long); return dict; case TYPE(CMSG_BLKIF_BE, CMSG_BLKIF_BE_DRIVER_STATUS_CHANGED): - C2P(blkif_be_driver_status_changed_t, status, Int, Long, u32); + C2P(blkif_be_driver_status_changed_t, status, Int, Long); return dict; case TYPE(CMSG_NETIF_FE, CMSG_NETIF_FE_INTERFACE_STATUS_CHANGED): - C2P(netif_fe_interface_status_changed_t, handle, Int, Long, u32); - C2P(netif_fe_interface_status_changed_t, status, Int, Long, u32); - C2P(netif_fe_interface_status_changed_t, evtchn, Int, Long, u16); + C2P(netif_fe_interface_status_changed_t, handle, Int, Long); + C2P(netif_fe_interface_status_changed_t, status, Int, Long); + C2P(netif_fe_interface_status_changed_t, evtchn, Int, Long); return dict; case TYPE(CMSG_NETIF_FE, CMSG_NETIF_FE_DRIVER_STATUS_CHANGED): - C2P(netif_fe_driver_status_changed_t, status, Int, Long, u32); + C2P(netif_fe_driver_status_changed_t, status, Int, Long); return dict; case TYPE(CMSG_NETIF_FE, CMSG_NETIF_FE_INTERFACE_CONNECT): - C2P(netif_fe_interface_connect_t, handle, Int, Long, u32); - C2P(netif_fe_interface_connect_t, tx_shmem_frame, Int, Long, memory_t); - C2P(netif_fe_interface_connect_t, rx_shmem_frame, Int, Long, memory_t); + C2P(netif_fe_interface_connect_t, handle, Int, Long); + C2P(netif_fe_interface_connect_t, tx_shmem_frame, Int, Long); + C2P(netif_fe_interface_connect_t, rx_shmem_frame, Int, Long); return dict; case TYPE(CMSG_NETIF_FE, CMSG_NETIF_FE_INTERFACE_DISCONNECT): - C2P(netif_fe_interface_disconnect_t, handle, Int, Long, u32); + C2P(netif_fe_interface_disconnect_t, handle, Int, Long); return dict; case TYPE(CMSG_NETIF_BE, CMSG_NETIF_BE_CREATE): - C2P(netif_be_create_t, domid, Int, Long, u32); - C2P(netif_be_create_t, netif_handle, Int, Long, u32); - C2P(netif_be_create_t, status, Int, Long, u32); + C2P(netif_be_create_t, domid, Int, Long); + C2P(netif_be_create_t, netif_handle, Int, Long); + C2P(netif_be_create_t, status, Int, Long); return dict; case TYPE(CMSG_NETIF_BE, CMSG_NETIF_BE_DESTROY): - C2P(netif_be_destroy_t, domid, Int, Long, u32); - C2P(netif_be_destroy_t, netif_handle, Int, Long, u32); - C2P(netif_be_destroy_t, status, Int, Long, u32); + C2P(netif_be_destroy_t, domid, Int, Long); + C2P(netif_be_destroy_t, netif_handle, Int, Long); + C2P(netif_be_destroy_t, status, Int, Long); return dict; case TYPE(CMSG_NETIF_BE, CMSG_NETIF_BE_CONNECT): - C2P(netif_be_connect_t, domid, Int, Long, u32); - C2P(netif_be_connect_t, netif_handle, Int, Long, u32); - C2P(netif_be_connect_t, tx_shmem_frame, Int, Long, memory_t); - C2P(netif_be_connect_t, rx_shmem_frame, Int, Long, memory_t); - C2P(netif_be_connect_t, evtchn, Int, Long, u16); - C2P(netif_be_connect_t, status, Int, Long, u32); + C2P(netif_be_connect_t, domid, Int, Long); + C2P(netif_be_connect_t, netif_handle, Int, Long); + C2P(netif_be_connect_t, tx_shmem_frame, Int, Long); + C2P(netif_be_connect_t, rx_shmem_frame, Int, Long); + C2P(netif_be_connect_t, evtchn, Int, Long); + C2P(netif_be_connect_t, status, Int, Long); return dict; case TYPE(CMSG_NETIF_BE, CMSG_NETIF_BE_DISCONNECT): - C2P(netif_be_disconnect_t, domid, Int, Long, u32); - C2P(netif_be_disconnect_t, netif_handle, Int, Long, u32); - C2P(netif_be_disconnect_t, status, Int, Long, u32); + C2P(netif_be_disconnect_t, domid, Int, Long); + C2P(netif_be_disconnect_t, netif_handle, Int, Long); + C2P(netif_be_disconnect_t, status, Int, Long); return dict; case TYPE(CMSG_NETIF_BE, CMSG_NETIF_BE_DRIVER_STATUS_CHANGED): - C2P(netif_be_driver_status_changed_t, status, Int, Long, u32); + C2P(netif_be_driver_status_changed_t, status, Int, Long); return dict; } @@ -472,7 +495,7 @@ staticforward PyTypeObject xu_message_type; static PyObject *xu_message_new(PyObject *self, PyObject *args) { xu_message_object *xum; - int type, subtype, id; + int type, subtype, id, dict_items_parsed = 0; PyObject *payload = NULL; if ( !PyArg_ParseTuple(args, "iii|O", &type, &subtype, &id, &payload) ) @@ -498,93 +521,97 @@ static PyObject *xu_message_new(PyObject *self, PyObject *args) switch ( TYPE(type, subtype) ) { case TYPE(CMSG_BLKIF_FE, CMSG_BLKIF_FE_INTERFACE_STATUS_CHANGED): - P2C(blkif_fe_interface_status_changed_t, handle, Int, Long, u32); - P2C(blkif_fe_interface_status_changed_t, status, Int, Long, u32); - P2C(blkif_fe_interface_status_changed_t, evtchn, Int, Long, u16); + P2C(blkif_fe_interface_status_changed_t, handle, u32); + P2C(blkif_fe_interface_status_changed_t, status, u32); + P2C(blkif_fe_interface_status_changed_t, evtchn, u16); break; case TYPE(CMSG_BLKIF_BE, CMSG_BLKIF_BE_CREATE): - P2C(blkif_be_create_t, domid, Int, Long, u32); - P2C(blkif_be_create_t, blkif_handle, Int, Long, u32); + P2C(blkif_be_create_t, domid, u32); + P2C(blkif_be_create_t, blkif_handle, u32); break; case TYPE(CMSG_BLKIF_BE, CMSG_BLKIF_BE_DESTROY): - P2C(blkif_be_destroy_t, domid, Int, Long, u32); - P2C(blkif_be_destroy_t, blkif_handle, Int, Long, u32); + P2C(blkif_be_destroy_t, domid, u32); + P2C(blkif_be_destroy_t, blkif_handle, u32); break; case TYPE(CMSG_BLKIF_BE, CMSG_BLKIF_BE_CONNECT): - P2C(blkif_be_connect_t, domid, Int, Long, u32); - P2C(blkif_be_connect_t, blkif_handle, Int, Long, u32); - P2C(blkif_be_connect_t, shmem_frame, Int, Long, memory_t); - P2C(blkif_be_connect_t, evtchn, Int, Long, u16); + P2C(blkif_be_connect_t, domid, u32); + P2C(blkif_be_connect_t, blkif_handle, u32); + P2C(blkif_be_connect_t, shmem_frame, memory_t); + P2C(blkif_be_connect_t, evtchn, u16); break; case TYPE(CMSG_BLKIF_BE, CMSG_BLKIF_BE_DISCONNECT): - P2C(blkif_be_disconnect_t, domid, Int, Long, u32); - P2C(blkif_be_disconnect_t, blkif_handle, Int, Long, u32); + P2C(blkif_be_disconnect_t, domid, u32); + P2C(blkif_be_disconnect_t, blkif_handle, u32); break; case TYPE(CMSG_BLKIF_BE, CMSG_BLKIF_BE_VBD_CREATE): - P2C(blkif_be_vbd_create_t, domid, Int, Long, u32); - P2C(blkif_be_vbd_create_t, blkif_handle, Int, Long, u32); - P2C(blkif_be_vbd_create_t, vdevice, Int, Long, blkif_vdev_t); - P2C(blkif_be_vbd_create_t, readonly, Int, Long, u16); + P2C(blkif_be_vbd_create_t, domid, u32); + P2C(blkif_be_vbd_create_t, blkif_handle, u32); + P2C(blkif_be_vbd_create_t, vdevice, blkif_vdev_t); + P2C(blkif_be_vbd_create_t, readonly, u16); break; case TYPE(CMSG_BLKIF_BE, CMSG_BLKIF_BE_VBD_DESTROY): - P2C(blkif_be_vbd_destroy_t, domid, Int, Long, u32); - P2C(blkif_be_vbd_destroy_t, blkif_handle, Int, Long, u32); - P2C(blkif_be_vbd_destroy_t, vdevice, Int, Long, blkif_vdev_t); + P2C(blkif_be_vbd_destroy_t, domid, u32); + P2C(blkif_be_vbd_destroy_t, blkif_handle, u32); + P2C(blkif_be_vbd_destroy_t, vdevice, blkif_vdev_t); break; case TYPE(CMSG_BLKIF_BE, CMSG_BLKIF_BE_VBD_GROW): - P2C(blkif_be_vbd_grow_t, domid, Int, Long, u32); - P2C(blkif_be_vbd_grow_t, blkif_handle, Int, Long, u32); - P2C(blkif_be_vbd_grow_t, vdevice, Int, Long, blkif_vdev_t); - P2C(blkif_be_vbd_grow_t, extent.sector_start, - Long, UnsignedLongLong, blkif_sector_t); - P2C(blkif_be_vbd_grow_t, extent.sector_length, - Long, UnsignedLongLong, blkif_sector_t); - P2C(blkif_be_vbd_grow_t, extent.device, - Int, Long, blkif_pdev_t); + P2C(blkif_be_vbd_grow_t, domid, u32); + P2C(blkif_be_vbd_grow_t, blkif_handle, u32); + P2C(blkif_be_vbd_grow_t, vdevice, blkif_vdev_t); + P2C(blkif_be_vbd_grow_t, extent.sector_start, blkif_sector_t); + P2C(blkif_be_vbd_grow_t, extent.sector_length, blkif_sector_t); + P2C(blkif_be_vbd_grow_t, extent.device, blkif_pdev_t); break; case TYPE(CMSG_BLKIF_BE, CMSG_BLKIF_BE_VBD_SHRINK): - P2C(blkif_be_vbd_shrink_t, domid, Int, Long, u32); - P2C(blkif_be_vbd_shrink_t, blkif_handle, Int, Long, u32); - P2C(blkif_be_vbd_shrink_t, vdevice, Int, Long, blkif_vdev_t); + P2C(blkif_be_vbd_shrink_t, domid, u32); + P2C(blkif_be_vbd_shrink_t, blkif_handle, u32); + P2C(blkif_be_vbd_shrink_t, vdevice, blkif_vdev_t); break; case TYPE(CMSG_NETIF_FE, CMSG_NETIF_FE_INTERFACE_STATUS_CHANGED): - P2C(netif_fe_interface_status_changed_t, handle, Int, Long, u32); - P2C(netif_fe_interface_status_changed_t, status, Int, Long, u32); - P2C(netif_fe_interface_status_changed_t, evtchn, Int, Long, u16); - P2C(netif_fe_interface_status_changed_t, mac[0], Int, Long, u8); - P2C(netif_fe_interface_status_changed_t, mac[1], Int, Long, u8); - P2C(netif_fe_interface_status_changed_t, mac[2], Int, Long, u8); - P2C(netif_fe_interface_status_changed_t, mac[3], Int, Long, u8); - P2C(netif_fe_interface_status_changed_t, mac[4], Int, Long, u8); - P2C(netif_fe_interface_status_changed_t, mac[5], Int, Long, u8); + P2C(netif_fe_interface_status_changed_t, handle, u32); + P2C(netif_fe_interface_status_changed_t, status, u32); + P2C(netif_fe_interface_status_changed_t, evtchn, u16); + P2C(netif_fe_interface_status_changed_t, mac[0], u8); + P2C(netif_fe_interface_status_changed_t, mac[1], u8); + P2C(netif_fe_interface_status_changed_t, mac[2], u8); + P2C(netif_fe_interface_status_changed_t, mac[3], u8); + P2C(netif_fe_interface_status_changed_t, mac[4], u8); + P2C(netif_fe_interface_status_changed_t, mac[5], u8); break; case TYPE(CMSG_NETIF_BE, CMSG_NETIF_BE_CREATE): - P2C(netif_be_create_t, domid, Int, Long, u32); - P2C(netif_be_create_t, netif_handle, Int, Long, u32); - P2C(netif_be_create_t, mac[0], Int, Long, u8); - P2C(netif_be_create_t, mac[1], Int, Long, u8); - P2C(netif_be_create_t, mac[2], Int, Long, u8); - P2C(netif_be_create_t, mac[3], Int, Long, u8); - P2C(netif_be_create_t, mac[4], Int, Long, u8); - P2C(netif_be_create_t, mac[5], Int, Long, u8); + P2C(netif_be_create_t, domid, u32); + P2C(netif_be_create_t, netif_handle, u32); + P2C(netif_be_create_t, mac[0], u8); + P2C(netif_be_create_t, mac[1], u8); + P2C(netif_be_create_t, mac[2], u8); + P2C(netif_be_create_t, mac[3], u8); + P2C(netif_be_create_t, mac[4], u8); + P2C(netif_be_create_t, mac[5], u8); break; case TYPE(CMSG_NETIF_BE, CMSG_NETIF_BE_DESTROY): - P2C(netif_be_destroy_t, domid, Int, Long, u32); - P2C(netif_be_destroy_t, netif_handle, Int, Long, u32); + P2C(netif_be_destroy_t, domid, u32); + P2C(netif_be_destroy_t, netif_handle, u32); break; case TYPE(CMSG_NETIF_BE, CMSG_NETIF_BE_CONNECT): - P2C(netif_be_connect_t, domid, Int, Long, u32); - P2C(netif_be_connect_t, netif_handle, Int, Long, u32); - P2C(netif_be_connect_t, tx_shmem_frame, Int, Long, memory_t); - P2C(netif_be_connect_t, rx_shmem_frame, Int, Long, memory_t); - P2C(netif_be_connect_t, evtchn, Int, Long, u16); + P2C(netif_be_connect_t, domid, u32); + P2C(netif_be_connect_t, netif_handle, u32); + P2C(netif_be_connect_t, tx_shmem_frame, memory_t); + P2C(netif_be_connect_t, rx_shmem_frame, memory_t); + P2C(netif_be_connect_t, evtchn, u16); break; case TYPE(CMSG_NETIF_BE, CMSG_NETIF_BE_DISCONNECT): - P2C(netif_be_disconnect_t, domid, Int, Long, u32); - P2C(netif_be_disconnect_t, netif_handle, Int, Long, u32); + P2C(netif_be_disconnect_t, domid, u32); + P2C(netif_be_disconnect_t, netif_handle, u32); break; } + if ( dict_items_parsed != PyDict_Size(payload) ) + { + PyErr_SetString(PyExc_TypeError, "payload contains bad items"); + PyObject_Del((PyObject *)xum); + return NULL; + } + return (PyObject *)xum; } |
