Compare commits
30
Commits
v2.7.0-rc3
...
v2.7.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1dc33ed90b | ||
|
|
12d2c4184c | ||
|
|
56f101ecce | ||
|
|
805b5d98c6 | ||
|
|
fff39a7ad0 | ||
|
|
2b294f6b65 | ||
|
|
336d5881a9 | ||
|
|
616018352c | ||
|
|
135a972b45 | ||
|
|
b69a553b4a | ||
|
|
e00da552a0 | ||
|
|
8c1c230a6e | ||
|
|
58a83c6149 | ||
|
|
bccdef6b1a | ||
|
|
d75aa4372f | ||
|
|
62680fad7f | ||
|
|
e0af5a0e8b | ||
|
|
67f3280c06 | ||
|
|
5f9f818ea8 | ||
|
|
5045570009 | ||
|
|
60c6b790fc | ||
|
|
aee5f8f98e | ||
|
|
02b1ad881c | ||
|
|
156af3ac98 | ||
|
|
ce83ee57f6 | ||
|
|
5844365fe8 | ||
|
|
4b887ae658 | ||
|
|
e9e0a5854b | ||
|
|
47882fa497 | ||
|
|
92b6a16087 |
No files matched your search
+1
-1
@@ -169,7 +169,7 @@ static int curl_sock_cb(CURL *curl, curl_socket_t fd, int action,
|
||||
state->sock_fd = fd;
|
||||
s = state->s;
|
||||
|
||||
DPRINTF("CURL (AIO): Sock action %d on fd %d\n", action, fd);
|
||||
DPRINTF("CURL (AIO): Sock action %d on fd %d\n", action, (int)fd);
|
||||
switch (action) {
|
||||
case CURL_POLL_IN:
|
||||
aio_set_fd_handler(s->aio_context, fd, false,
|
||||
|
||||
+5
-3
@@ -2283,11 +2283,11 @@ int coroutine_fn bdrv_co_flush(BlockDriverState *bs)
|
||||
int current_gen = bs->write_gen;
|
||||
|
||||
/* Wait until any previous flushes are completed */
|
||||
while (bs->flush_started_gen != bs->flushed_gen) {
|
||||
while (bs->active_flush_req != NULL) {
|
||||
qemu_co_queue_wait(&bs->flush_queue);
|
||||
}
|
||||
|
||||
bs->flush_started_gen = current_gen;
|
||||
bs->active_flush_req = &req;
|
||||
|
||||
/* Write back all layers by calling one driver function */
|
||||
if (bs->drv->bdrv_co_flush) {
|
||||
@@ -2357,7 +2357,9 @@ flush_parent:
|
||||
out:
|
||||
/* Notify any pending flushes that we have completed */
|
||||
bs->flushed_gen = current_gen;
|
||||
qemu_co_queue_restart_all(&bs->flush_queue);
|
||||
bs->active_flush_req = NULL;
|
||||
/* Return value is ignored - it's ok if wait queue is empty */
|
||||
qemu_co_queue_next(&bs->flush_queue);
|
||||
|
||||
tracked_request_end(&req);
|
||||
return ret;
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu-version.h"
|
||||
#include <machine/trap.h>
|
||||
|
||||
#include "qapi/error.h"
|
||||
|
||||
+138
-9
@@ -1010,6 +1010,7 @@ static void v9fs_attach(void *opaque)
|
||||
goto out;
|
||||
}
|
||||
err += offset;
|
||||
memcpy(&s->root_qid, &qid, sizeof(qid));
|
||||
trace_v9fs_attach_return(pdu->tag, pdu->id,
|
||||
qid.type, qid.version, qid.path);
|
||||
/*
|
||||
@@ -1256,6 +1257,19 @@ static int v9fs_walk_marshal(V9fsPDU *pdu, uint16_t nwnames, V9fsQID *qids)
|
||||
return offset;
|
||||
}
|
||||
|
||||
static bool name_is_illegal(const char *name)
|
||||
{
|
||||
return !*name || strchr(name, '/') != NULL;
|
||||
}
|
||||
|
||||
static bool not_same_qid(const V9fsQID *qid1, const V9fsQID *qid2)
|
||||
{
|
||||
return
|
||||
qid1->type != qid2->type ||
|
||||
qid1->version != qid2->version ||
|
||||
qid1->path != qid2->path;
|
||||
}
|
||||
|
||||
static void v9fs_walk(void *opaque)
|
||||
{
|
||||
int name_idx;
|
||||
@@ -1271,6 +1285,7 @@ static void v9fs_walk(void *opaque)
|
||||
V9fsFidState *newfidp = NULL;
|
||||
V9fsPDU *pdu = opaque;
|
||||
V9fsState *s = pdu->s;
|
||||
V9fsQID qid;
|
||||
|
||||
err = pdu_unmarshal(pdu, offset, "ddw", &fid, &newfid, &nwnames);
|
||||
if (err < 0) {
|
||||
@@ -1289,6 +1304,10 @@ static void v9fs_walk(void *opaque)
|
||||
if (err < 0) {
|
||||
goto out_nofid;
|
||||
}
|
||||
if (name_is_illegal(wnames[i].data)) {
|
||||
err = -ENOENT;
|
||||
goto out_nofid;
|
||||
}
|
||||
offset += err;
|
||||
}
|
||||
} else if (nwnames > P9_MAXWELEM) {
|
||||
@@ -1300,6 +1319,12 @@ static void v9fs_walk(void *opaque)
|
||||
err = -ENOENT;
|
||||
goto out_nofid;
|
||||
}
|
||||
|
||||
err = fid_to_qid(pdu, fidp, &qid);
|
||||
if (err < 0) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
v9fs_path_init(&dpath);
|
||||
v9fs_path_init(&path);
|
||||
/*
|
||||
@@ -1309,16 +1334,22 @@ static void v9fs_walk(void *opaque)
|
||||
v9fs_path_copy(&dpath, &fidp->path);
|
||||
v9fs_path_copy(&path, &fidp->path);
|
||||
for (name_idx = 0; name_idx < nwnames; name_idx++) {
|
||||
err = v9fs_co_name_to_path(pdu, &dpath, wnames[name_idx].data, &path);
|
||||
if (err < 0) {
|
||||
goto out;
|
||||
if (not_same_qid(&pdu->s->root_qid, &qid) ||
|
||||
strcmp("..", wnames[name_idx].data)) {
|
||||
err = v9fs_co_name_to_path(pdu, &dpath, wnames[name_idx].data,
|
||||
&path);
|
||||
if (err < 0) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
err = v9fs_co_lstat(pdu, &path, &stbuf);
|
||||
if (err < 0) {
|
||||
goto out;
|
||||
}
|
||||
stat_to_qid(&stbuf, &qid);
|
||||
v9fs_path_copy(&dpath, &path);
|
||||
}
|
||||
err = v9fs_co_lstat(pdu, &path, &stbuf);
|
||||
if (err < 0) {
|
||||
goto out;
|
||||
}
|
||||
stat_to_qid(&stbuf, &qids[name_idx]);
|
||||
v9fs_path_copy(&dpath, &path);
|
||||
memcpy(&qids[name_idx], &qid, sizeof(qid));
|
||||
}
|
||||
if (fid == newfid) {
|
||||
BUG_ON(fidp->fid_type != P9_FID_NONE);
|
||||
@@ -1483,6 +1514,16 @@ static void v9fs_lcreate(void *opaque)
|
||||
}
|
||||
trace_v9fs_lcreate(pdu->tag, pdu->id, dfid, flags, mode, gid);
|
||||
|
||||
if (name_is_illegal(name.data)) {
|
||||
err = -ENOENT;
|
||||
goto out_nofid;
|
||||
}
|
||||
|
||||
if (!strcmp(".", name.data) || !strcmp("..", name.data)) {
|
||||
err = -EEXIST;
|
||||
goto out_nofid;
|
||||
}
|
||||
|
||||
fidp = get_fid(pdu, dfid);
|
||||
if (fidp == NULL) {
|
||||
err = -ENOENT;
|
||||
@@ -2077,6 +2118,16 @@ static void v9fs_create(void *opaque)
|
||||
}
|
||||
trace_v9fs_create(pdu->tag, pdu->id, fid, name.data, perm, mode);
|
||||
|
||||
if (name_is_illegal(name.data)) {
|
||||
err = -ENOENT;
|
||||
goto out_nofid;
|
||||
}
|
||||
|
||||
if (!strcmp(".", name.data) || !strcmp("..", name.data)) {
|
||||
err = -EEXIST;
|
||||
goto out_nofid;
|
||||
}
|
||||
|
||||
fidp = get_fid(pdu, fid);
|
||||
if (fidp == NULL) {
|
||||
err = -EINVAL;
|
||||
@@ -2242,6 +2293,16 @@ static void v9fs_symlink(void *opaque)
|
||||
}
|
||||
trace_v9fs_symlink(pdu->tag, pdu->id, dfid, name.data, symname.data, gid);
|
||||
|
||||
if (name_is_illegal(name.data)) {
|
||||
err = -ENOENT;
|
||||
goto out_nofid;
|
||||
}
|
||||
|
||||
if (!strcmp(".", name.data) || !strcmp("..", name.data)) {
|
||||
err = -EEXIST;
|
||||
goto out_nofid;
|
||||
}
|
||||
|
||||
dfidp = get_fid(pdu, dfid);
|
||||
if (dfidp == NULL) {
|
||||
err = -EINVAL;
|
||||
@@ -2316,6 +2377,16 @@ static void v9fs_link(void *opaque)
|
||||
}
|
||||
trace_v9fs_link(pdu->tag, pdu->id, dfid, oldfid, name.data);
|
||||
|
||||
if (name_is_illegal(name.data)) {
|
||||
err = -ENOENT;
|
||||
goto out_nofid;
|
||||
}
|
||||
|
||||
if (!strcmp(".", name.data) || !strcmp("..", name.data)) {
|
||||
err = -EEXIST;
|
||||
goto out_nofid;
|
||||
}
|
||||
|
||||
dfidp = get_fid(pdu, dfid);
|
||||
if (dfidp == NULL) {
|
||||
err = -ENOENT;
|
||||
@@ -2398,6 +2469,22 @@ static void v9fs_unlinkat(void *opaque)
|
||||
if (err < 0) {
|
||||
goto out_nofid;
|
||||
}
|
||||
|
||||
if (name_is_illegal(name.data)) {
|
||||
err = -ENOENT;
|
||||
goto out_nofid;
|
||||
}
|
||||
|
||||
if (!strcmp(".", name.data)) {
|
||||
err = -EINVAL;
|
||||
goto out_nofid;
|
||||
}
|
||||
|
||||
if (!strcmp("..", name.data)) {
|
||||
err = -ENOTEMPTY;
|
||||
goto out_nofid;
|
||||
}
|
||||
|
||||
dfidp = get_fid(pdu, dfid);
|
||||
if (dfidp == NULL) {
|
||||
err = -EINVAL;
|
||||
@@ -2504,6 +2591,17 @@ static void v9fs_rename(void *opaque)
|
||||
if (err < 0) {
|
||||
goto out_nofid;
|
||||
}
|
||||
|
||||
if (name_is_illegal(name.data)) {
|
||||
err = -ENOENT;
|
||||
goto out_nofid;
|
||||
}
|
||||
|
||||
if (!strcmp(".", name.data) || !strcmp("..", name.data)) {
|
||||
err = -EISDIR;
|
||||
goto out_nofid;
|
||||
}
|
||||
|
||||
fidp = get_fid(pdu, fid);
|
||||
if (fidp == NULL) {
|
||||
err = -ENOENT;
|
||||
@@ -2616,6 +2714,17 @@ static void v9fs_renameat(void *opaque)
|
||||
goto out_err;
|
||||
}
|
||||
|
||||
if (name_is_illegal(old_name.data) || name_is_illegal(new_name.data)) {
|
||||
err = -ENOENT;
|
||||
goto out_err;
|
||||
}
|
||||
|
||||
if (!strcmp(".", old_name.data) || !strcmp("..", old_name.data) ||
|
||||
!strcmp(".", new_name.data) || !strcmp("..", new_name.data)) {
|
||||
err = -EISDIR;
|
||||
goto out_err;
|
||||
}
|
||||
|
||||
v9fs_path_write_lock(s);
|
||||
err = v9fs_complete_renameat(pdu, olddirfid,
|
||||
&old_name, newdirfid, &new_name);
|
||||
@@ -2826,6 +2935,16 @@ static void v9fs_mknod(void *opaque)
|
||||
}
|
||||
trace_v9fs_mknod(pdu->tag, pdu->id, fid, mode, major, minor);
|
||||
|
||||
if (name_is_illegal(name.data)) {
|
||||
err = -ENOENT;
|
||||
goto out_nofid;
|
||||
}
|
||||
|
||||
if (!strcmp(".", name.data) || !strcmp("..", name.data)) {
|
||||
err = -EEXIST;
|
||||
goto out_nofid;
|
||||
}
|
||||
|
||||
fidp = get_fid(pdu, fid);
|
||||
if (fidp == NULL) {
|
||||
err = -ENOENT;
|
||||
@@ -2977,6 +3096,16 @@ static void v9fs_mkdir(void *opaque)
|
||||
}
|
||||
trace_v9fs_mkdir(pdu->tag, pdu->id, fid, name.data, mode, gid);
|
||||
|
||||
if (name_is_illegal(name.data)) {
|
||||
err = -ENOENT;
|
||||
goto out_nofid;
|
||||
}
|
||||
|
||||
if (!strcmp(".", name.data) || !strcmp("..", name.data)) {
|
||||
err = -EEXIST;
|
||||
goto out_nofid;
|
||||
}
|
||||
|
||||
fidp = get_fid(pdu, fid);
|
||||
if (fidp == NULL) {
|
||||
err = -ENOENT;
|
||||
|
||||
@@ -236,6 +236,7 @@ typedef struct V9fsState
|
||||
int32_t root_fid;
|
||||
Error *migration_blocker;
|
||||
V9fsConf fsconf;
|
||||
V9fsQID root_qid;
|
||||
} V9fsState;
|
||||
|
||||
/* 9p2000.L open flags */
|
||||
|
||||
+1
-7
@@ -69,7 +69,6 @@ typedef struct E1000EState {
|
||||
uint16_t subsys_ven_used;
|
||||
uint16_t subsys_used;
|
||||
|
||||
uint32_t intr_state;
|
||||
bool disable_vnet;
|
||||
|
||||
E1000ECore core;
|
||||
@@ -89,8 +88,6 @@ typedef struct E1000EState {
|
||||
#define E1000E_MSIX_TABLE (0x0000)
|
||||
#define E1000E_MSIX_PBA (0x2000)
|
||||
|
||||
#define E1000E_USE_MSIX BIT(0)
|
||||
|
||||
static uint64_t
|
||||
e1000e_mmio_read(void *opaque, hwaddr addr, unsigned size)
|
||||
{
|
||||
@@ -302,8 +299,6 @@ e1000e_init_msix(E1000EState *s)
|
||||
} else {
|
||||
if (!e1000e_use_msix_vectors(s, E1000E_MSIX_VEC_NUM)) {
|
||||
msix_uninit(d, &s->msix, &s->msix);
|
||||
} else {
|
||||
s->intr_state |= E1000E_USE_MSIX;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -311,7 +306,7 @@ e1000e_init_msix(E1000EState *s)
|
||||
static void
|
||||
e1000e_cleanup_msix(E1000EState *s)
|
||||
{
|
||||
if (s->intr_state & E1000E_USE_MSIX) {
|
||||
if (msix_enabled(PCI_DEVICE(s))) {
|
||||
e1000e_unuse_msix_vectors(s, E1000E_MSIX_VEC_NUM);
|
||||
msix_uninit(PCI_DEVICE(s), &s->msix, &s->msix);
|
||||
}
|
||||
@@ -601,7 +596,6 @@ static const VMStateDescription e1000e_vmstate = {
|
||||
VMSTATE_MSIX(parent_obj, E1000EState),
|
||||
|
||||
VMSTATE_UINT32(ioaddr, E1000EState),
|
||||
VMSTATE_UINT32(intr_state, E1000EState),
|
||||
VMSTATE_UINT32(core.rxbuf_min_shift, E1000EState),
|
||||
VMSTATE_UINT8(core.rx_desc_len, E1000EState),
|
||||
VMSTATE_UINT32_ARRAY(core.rxbuf_sizes, E1000EState,
|
||||
|
||||
+2
-3
@@ -65,10 +65,9 @@ void net_tx_pkt_init(struct NetTxPkt **pkt, PCIDevice *pci_dev,
|
||||
|
||||
p->pci_dev = pci_dev;
|
||||
|
||||
p->vec = g_malloc((sizeof *p->vec) *
|
||||
(max_frags + NET_TX_PKT_PL_START_FRAG));
|
||||
p->vec = g_new(struct iovec, max_frags + NET_TX_PKT_PL_START_FRAG);
|
||||
|
||||
p->raw = g_malloc((sizeof *p->raw) * max_frags);
|
||||
p->raw = g_new(struct iovec, max_frags);
|
||||
|
||||
p->max_payload_frags = max_frags;
|
||||
p->max_raw_frags = max_frags;
|
||||
|
||||
@@ -268,6 +268,7 @@ void virtqueue_discard(VirtQueue *vq, const VirtQueueElement *elem,
|
||||
unsigned int len)
|
||||
{
|
||||
vq->last_avail_idx--;
|
||||
vq->inuse--;
|
||||
virtqueue_unmap_sg(vq, elem, len);
|
||||
}
|
||||
|
||||
@@ -1648,6 +1649,21 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f, int version_id)
|
||||
}
|
||||
vdev->vq[i].used_idx = vring_used_idx(&vdev->vq[i]);
|
||||
vdev->vq[i].shadow_avail_idx = vring_avail_idx(&vdev->vq[i]);
|
||||
|
||||
/*
|
||||
* Some devices migrate VirtQueueElements that have been popped
|
||||
* from the avail ring but not yet returned to the used ring.
|
||||
*/
|
||||
vdev->vq[i].inuse = vdev->vq[i].last_avail_idx -
|
||||
vdev->vq[i].used_idx;
|
||||
if (vdev->vq[i].inuse > vdev->vq[i].vring.num) {
|
||||
error_report("VQ %d size 0x%x < last_avail_idx 0x%x - "
|
||||
"used_idx 0x%x",
|
||||
i, vdev->vq[i].vring.num,
|
||||
vdev->vq[i].last_avail_idx,
|
||||
vdev->vq[i].used_idx);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -443,8 +443,8 @@ struct BlockDriverState {
|
||||
note this is a reference count */
|
||||
|
||||
CoQueue flush_queue; /* Serializing flush queue */
|
||||
BdrvTrackedRequest *active_flush_req; /* Flush request in flight */
|
||||
unsigned int write_gen; /* Current data generation */
|
||||
unsigned int flush_started_gen; /* Generation for which flush has started */
|
||||
unsigned int flushed_gen; /* Flushed write generation */
|
||||
|
||||
BlockDriver *drv; /* NULL means no media */
|
||||
|
||||
@@ -48,6 +48,26 @@ static inline gint64 qemu_g_get_monotonic_time(void)
|
||||
gint g_poll_fixed(GPollFD *fds, guint nfds, gint timeout);
|
||||
#endif
|
||||
|
||||
#if !GLIB_CHECK_VERSION(2, 30, 0)
|
||||
/* Not a 100% compatible implementation, but good enough for most
|
||||
* cases. Placeholders are only supported at the end of the
|
||||
* template. */
|
||||
static inline gchar *qemu_g_dir_make_tmp(gchar const *tmpl, GError **error)
|
||||
{
|
||||
gchar *path = g_build_filename(g_get_tmp_dir(), tmpl ?: ".XXXXXX", NULL);
|
||||
|
||||
if (mkdtemp(path) != NULL) {
|
||||
return path;
|
||||
}
|
||||
/* Error occurred, clean up. */
|
||||
g_set_error(error, G_FILE_ERROR, g_file_error_from_errno(errno),
|
||||
"mkdtemp() failed");
|
||||
g_free(path);
|
||||
return NULL;
|
||||
}
|
||||
#define g_dir_make_tmp(tmpl, error) qemu_g_dir_make_tmp(tmpl, error)
|
||||
#endif /* glib 2.30 */
|
||||
|
||||
#if !GLIB_CHECK_VERSION(2, 31, 0)
|
||||
/* before glib-2.31, GMutex and GCond was dynamic-only (there was a separate
|
||||
* GStaticMutex, but it didn't work with condition variables).
|
||||
|
||||
+264
-195
@@ -289,6 +289,161 @@ static bitmask_transtbl fcntl_flags_tbl[] = {
|
||||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
enum {
|
||||
QEMU_IFLA_BR_UNSPEC,
|
||||
QEMU_IFLA_BR_FORWARD_DELAY,
|
||||
QEMU_IFLA_BR_HELLO_TIME,
|
||||
QEMU_IFLA_BR_MAX_AGE,
|
||||
QEMU_IFLA_BR_AGEING_TIME,
|
||||
QEMU_IFLA_BR_STP_STATE,
|
||||
QEMU_IFLA_BR_PRIORITY,
|
||||
QEMU_IFLA_BR_VLAN_FILTERING,
|
||||
QEMU_IFLA_BR_VLAN_PROTOCOL,
|
||||
QEMU_IFLA_BR_GROUP_FWD_MASK,
|
||||
QEMU_IFLA_BR_ROOT_ID,
|
||||
QEMU_IFLA_BR_BRIDGE_ID,
|
||||
QEMU_IFLA_BR_ROOT_PORT,
|
||||
QEMU_IFLA_BR_ROOT_PATH_COST,
|
||||
QEMU_IFLA_BR_TOPOLOGY_CHANGE,
|
||||
QEMU_IFLA_BR_TOPOLOGY_CHANGE_DETECTED,
|
||||
QEMU_IFLA_BR_HELLO_TIMER,
|
||||
QEMU_IFLA_BR_TCN_TIMER,
|
||||
QEMU_IFLA_BR_TOPOLOGY_CHANGE_TIMER,
|
||||
QEMU_IFLA_BR_GC_TIMER,
|
||||
QEMU_IFLA_BR_GROUP_ADDR,
|
||||
QEMU_IFLA_BR_FDB_FLUSH,
|
||||
QEMU_IFLA_BR_MCAST_ROUTER,
|
||||
QEMU_IFLA_BR_MCAST_SNOOPING,
|
||||
QEMU_IFLA_BR_MCAST_QUERY_USE_IFADDR,
|
||||
QEMU_IFLA_BR_MCAST_QUERIER,
|
||||
QEMU_IFLA_BR_MCAST_HASH_ELASTICITY,
|
||||
QEMU_IFLA_BR_MCAST_HASH_MAX,
|
||||
QEMU_IFLA_BR_MCAST_LAST_MEMBER_CNT,
|
||||
QEMU_IFLA_BR_MCAST_STARTUP_QUERY_CNT,
|
||||
QEMU_IFLA_BR_MCAST_LAST_MEMBER_INTVL,
|
||||
QEMU_IFLA_BR_MCAST_MEMBERSHIP_INTVL,
|
||||
QEMU_IFLA_BR_MCAST_QUERIER_INTVL,
|
||||
QEMU_IFLA_BR_MCAST_QUERY_INTVL,
|
||||
QEMU_IFLA_BR_MCAST_QUERY_RESPONSE_INTVL,
|
||||
QEMU_IFLA_BR_MCAST_STARTUP_QUERY_INTVL,
|
||||
QEMU_IFLA_BR_NF_CALL_IPTABLES,
|
||||
QEMU_IFLA_BR_NF_CALL_IP6TABLES,
|
||||
QEMU_IFLA_BR_NF_CALL_ARPTABLES,
|
||||
QEMU_IFLA_BR_VLAN_DEFAULT_PVID,
|
||||
QEMU_IFLA_BR_PAD,
|
||||
QEMU_IFLA_BR_VLAN_STATS_ENABLED,
|
||||
QEMU_IFLA_BR_MCAST_STATS_ENABLED,
|
||||
QEMU___IFLA_BR_MAX,
|
||||
};
|
||||
|
||||
enum {
|
||||
QEMU_IFLA_UNSPEC,
|
||||
QEMU_IFLA_ADDRESS,
|
||||
QEMU_IFLA_BROADCAST,
|
||||
QEMU_IFLA_IFNAME,
|
||||
QEMU_IFLA_MTU,
|
||||
QEMU_IFLA_LINK,
|
||||
QEMU_IFLA_QDISC,
|
||||
QEMU_IFLA_STATS,
|
||||
QEMU_IFLA_COST,
|
||||
QEMU_IFLA_PRIORITY,
|
||||
QEMU_IFLA_MASTER,
|
||||
QEMU_IFLA_WIRELESS,
|
||||
QEMU_IFLA_PROTINFO,
|
||||
QEMU_IFLA_TXQLEN,
|
||||
QEMU_IFLA_MAP,
|
||||
QEMU_IFLA_WEIGHT,
|
||||
QEMU_IFLA_OPERSTATE,
|
||||
QEMU_IFLA_LINKMODE,
|
||||
QEMU_IFLA_LINKINFO,
|
||||
QEMU_IFLA_NET_NS_PID,
|
||||
QEMU_IFLA_IFALIAS,
|
||||
QEMU_IFLA_NUM_VF,
|
||||
QEMU_IFLA_VFINFO_LIST,
|
||||
QEMU_IFLA_STATS64,
|
||||
QEMU_IFLA_VF_PORTS,
|
||||
QEMU_IFLA_PORT_SELF,
|
||||
QEMU_IFLA_AF_SPEC,
|
||||
QEMU_IFLA_GROUP,
|
||||
QEMU_IFLA_NET_NS_FD,
|
||||
QEMU_IFLA_EXT_MASK,
|
||||
QEMU_IFLA_PROMISCUITY,
|
||||
QEMU_IFLA_NUM_TX_QUEUES,
|
||||
QEMU_IFLA_NUM_RX_QUEUES,
|
||||
QEMU_IFLA_CARRIER,
|
||||
QEMU_IFLA_PHYS_PORT_ID,
|
||||
QEMU_IFLA_CARRIER_CHANGES,
|
||||
QEMU_IFLA_PHYS_SWITCH_ID,
|
||||
QEMU_IFLA_LINK_NETNSID,
|
||||
QEMU_IFLA_PHYS_PORT_NAME,
|
||||
QEMU_IFLA_PROTO_DOWN,
|
||||
QEMU_IFLA_GSO_MAX_SEGS,
|
||||
QEMU_IFLA_GSO_MAX_SIZE,
|
||||
QEMU_IFLA_PAD,
|
||||
QEMU_IFLA_XDP,
|
||||
QEMU___IFLA_MAX
|
||||
};
|
||||
|
||||
enum {
|
||||
QEMU_IFLA_BRPORT_UNSPEC,
|
||||
QEMU_IFLA_BRPORT_STATE,
|
||||
QEMU_IFLA_BRPORT_PRIORITY,
|
||||
QEMU_IFLA_BRPORT_COST,
|
||||
QEMU_IFLA_BRPORT_MODE,
|
||||
QEMU_IFLA_BRPORT_GUARD,
|
||||
QEMU_IFLA_BRPORT_PROTECT,
|
||||
QEMU_IFLA_BRPORT_FAST_LEAVE,
|
||||
QEMU_IFLA_BRPORT_LEARNING,
|
||||
QEMU_IFLA_BRPORT_UNICAST_FLOOD,
|
||||
QEMU_IFLA_BRPORT_PROXYARP,
|
||||
QEMU_IFLA_BRPORT_LEARNING_SYNC,
|
||||
QEMU_IFLA_BRPORT_PROXYARP_WIFI,
|
||||
QEMU_IFLA_BRPORT_ROOT_ID,
|
||||
QEMU_IFLA_BRPORT_BRIDGE_ID,
|
||||
QEMU_IFLA_BRPORT_DESIGNATED_PORT,
|
||||
QEMU_IFLA_BRPORT_DESIGNATED_COST,
|
||||
QEMU_IFLA_BRPORT_ID,
|
||||
QEMU_IFLA_BRPORT_NO,
|
||||
QEMU_IFLA_BRPORT_TOPOLOGY_CHANGE_ACK,
|
||||
QEMU_IFLA_BRPORT_CONFIG_PENDING,
|
||||
QEMU_IFLA_BRPORT_MESSAGE_AGE_TIMER,
|
||||
QEMU_IFLA_BRPORT_FORWARD_DELAY_TIMER,
|
||||
QEMU_IFLA_BRPORT_HOLD_TIMER,
|
||||
QEMU_IFLA_BRPORT_FLUSH,
|
||||
QEMU_IFLA_BRPORT_MULTICAST_ROUTER,
|
||||
QEMU_IFLA_BRPORT_PAD,
|
||||
QEMU___IFLA_BRPORT_MAX
|
||||
};
|
||||
|
||||
enum {
|
||||
QEMU_IFLA_INFO_UNSPEC,
|
||||
QEMU_IFLA_INFO_KIND,
|
||||
QEMU_IFLA_INFO_DATA,
|
||||
QEMU_IFLA_INFO_XSTATS,
|
||||
QEMU_IFLA_INFO_SLAVE_KIND,
|
||||
QEMU_IFLA_INFO_SLAVE_DATA,
|
||||
QEMU___IFLA_INFO_MAX,
|
||||
};
|
||||
|
||||
enum {
|
||||
QEMU_IFLA_INET_UNSPEC,
|
||||
QEMU_IFLA_INET_CONF,
|
||||
QEMU___IFLA_INET_MAX,
|
||||
};
|
||||
|
||||
enum {
|
||||
QEMU_IFLA_INET6_UNSPEC,
|
||||
QEMU_IFLA_INET6_FLAGS,
|
||||
QEMU_IFLA_INET6_CONF,
|
||||
QEMU_IFLA_INET6_STATS,
|
||||
QEMU_IFLA_INET6_MCAST,
|
||||
QEMU_IFLA_INET6_CACHEINFO,
|
||||
QEMU_IFLA_INET6_ICMP6STATS,
|
||||
QEMU_IFLA_INET6_TOKEN,
|
||||
QEMU_IFLA_INET6_ADDR_GEN_MODE,
|
||||
QEMU___IFLA_INET6_MAX
|
||||
};
|
||||
|
||||
typedef abi_long (*TargetFdDataFunc)(void *, size_t);
|
||||
typedef abi_long (*TargetFdAddrFunc)(void *, abi_ulong, socklen_t);
|
||||
typedef struct TargetFdTrans {
|
||||
@@ -1783,129 +1938,67 @@ static abi_long host_to_target_data_bridge_nlattr(struct nlattr *nlattr,
|
||||
uint64_t *u64;
|
||||
|
||||
switch (nlattr->nla_type) {
|
||||
#ifdef IFLA_BR_FDB_FLUSH
|
||||
/* no data */
|
||||
case IFLA_BR_FDB_FLUSH:
|
||||
case QEMU_IFLA_BR_FDB_FLUSH:
|
||||
break;
|
||||
#endif
|
||||
#ifdef IFLA_BR_GROUP_ADDR
|
||||
/* binary */
|
||||
case IFLA_BR_GROUP_ADDR:
|
||||
case QEMU_IFLA_BR_GROUP_ADDR:
|
||||
break;
|
||||
#endif
|
||||
/* uint8_t */
|
||||
case IFLA_BR_VLAN_FILTERING:
|
||||
#ifdef IFLA_BR_TOPOLOGY_CHANGE
|
||||
case IFLA_BR_TOPOLOGY_CHANGE:
|
||||
#endif
|
||||
#ifdef IFLA_BR_TOPOLOGY_CHANGE_DETECTED
|
||||
case IFLA_BR_TOPOLOGY_CHANGE_DETECTED:
|
||||
#endif
|
||||
#ifdef IFLA_BR_MCAST_ROUTER
|
||||
case IFLA_BR_MCAST_ROUTER:
|
||||
#endif
|
||||
#ifdef IFLA_BR_MCAST_SNOOPING
|
||||
case IFLA_BR_MCAST_SNOOPING:
|
||||
#endif
|
||||
#ifdef IFLA_BR_MCAST_QUERY_USE_IFADDR
|
||||
case IFLA_BR_MCAST_QUERY_USE_IFADDR:
|
||||
#endif
|
||||
#ifdef IFLA_BR_MCAST_QUERIER
|
||||
case IFLA_BR_MCAST_QUERIER:
|
||||
#endif
|
||||
#ifdef IFLA_BR_NF_CALL_IPTABLES
|
||||
case IFLA_BR_NF_CALL_IPTABLES:
|
||||
#endif
|
||||
#ifdef IFLA_BR_NF_CALL_IP6TABLES
|
||||
case IFLA_BR_NF_CALL_IP6TABLES:
|
||||
#endif
|
||||
#ifdef IFLA_BR_NF_CALL_ARPTABLES
|
||||
case IFLA_BR_NF_CALL_ARPTABLES:
|
||||
#endif
|
||||
case QEMU_IFLA_BR_VLAN_FILTERING:
|
||||
case QEMU_IFLA_BR_TOPOLOGY_CHANGE:
|
||||
case QEMU_IFLA_BR_TOPOLOGY_CHANGE_DETECTED:
|
||||
case QEMU_IFLA_BR_MCAST_ROUTER:
|
||||
case QEMU_IFLA_BR_MCAST_SNOOPING:
|
||||
case QEMU_IFLA_BR_MCAST_QUERY_USE_IFADDR:
|
||||
case QEMU_IFLA_BR_MCAST_QUERIER:
|
||||
case QEMU_IFLA_BR_NF_CALL_IPTABLES:
|
||||
case QEMU_IFLA_BR_NF_CALL_IP6TABLES:
|
||||
case QEMU_IFLA_BR_NF_CALL_ARPTABLES:
|
||||
break;
|
||||
/* uint16_t */
|
||||
case IFLA_BR_PRIORITY:
|
||||
case IFLA_BR_VLAN_PROTOCOL:
|
||||
#ifdef IFLA_BR_GROUP_FWD_MASK
|
||||
case IFLA_BR_GROUP_FWD_MASK:
|
||||
#endif
|
||||
#ifdef IFLA_BR_ROOT_PORT
|
||||
case IFLA_BR_ROOT_PORT:
|
||||
#endif
|
||||
#ifdef IFLA_BR_VLAN_DEFAULT_PVID
|
||||
case IFLA_BR_VLAN_DEFAULT_PVID:
|
||||
#endif
|
||||
case QEMU_IFLA_BR_PRIORITY:
|
||||
case QEMU_IFLA_BR_VLAN_PROTOCOL:
|
||||
case QEMU_IFLA_BR_GROUP_FWD_MASK:
|
||||
case QEMU_IFLA_BR_ROOT_PORT:
|
||||
case QEMU_IFLA_BR_VLAN_DEFAULT_PVID:
|
||||
u16 = NLA_DATA(nlattr);
|
||||
*u16 = tswap16(*u16);
|
||||
break;
|
||||
/* uint32_t */
|
||||
case IFLA_BR_FORWARD_DELAY:
|
||||
case IFLA_BR_HELLO_TIME:
|
||||
case IFLA_BR_MAX_AGE:
|
||||
case IFLA_BR_AGEING_TIME:
|
||||
case IFLA_BR_STP_STATE:
|
||||
#ifdef IFLA_BR_ROOT_PATH_COST
|
||||
case IFLA_BR_ROOT_PATH_COST:
|
||||
#endif
|
||||
#ifdef IFLA_BR_MCAST_HASH_ELASTICITY
|
||||
case IFLA_BR_MCAST_HASH_ELASTICITY:
|
||||
#endif
|
||||
#ifdef IFLA_BR_MCAST_HASH_MAX
|
||||
case IFLA_BR_MCAST_HASH_MAX:
|
||||
#endif
|
||||
#ifdef IFLA_BR_MCAST_LAST_MEMBER_CNT
|
||||
case IFLA_BR_MCAST_LAST_MEMBER_CNT:
|
||||
#endif
|
||||
#ifdef IFLA_BR_MCAST_STARTUP_QUERY_CNT
|
||||
case IFLA_BR_MCAST_STARTUP_QUERY_CNT:
|
||||
#endif
|
||||
case QEMU_IFLA_BR_FORWARD_DELAY:
|
||||
case QEMU_IFLA_BR_HELLO_TIME:
|
||||
case QEMU_IFLA_BR_MAX_AGE:
|
||||
case QEMU_IFLA_BR_AGEING_TIME:
|
||||
case QEMU_IFLA_BR_STP_STATE:
|
||||
case QEMU_IFLA_BR_ROOT_PATH_COST:
|
||||
case QEMU_IFLA_BR_MCAST_HASH_ELASTICITY:
|
||||
case QEMU_IFLA_BR_MCAST_HASH_MAX:
|
||||
case QEMU_IFLA_BR_MCAST_LAST_MEMBER_CNT:
|
||||
case QEMU_IFLA_BR_MCAST_STARTUP_QUERY_CNT:
|
||||
u32 = NLA_DATA(nlattr);
|
||||
*u32 = tswap32(*u32);
|
||||
break;
|
||||
/* uint64_t */
|
||||
#ifdef IFLA_BR_HELLO_TIMER
|
||||
case IFLA_BR_HELLO_TIMER:
|
||||
#endif
|
||||
#ifdef IFLA_BR_TCN_TIMER
|
||||
case IFLA_BR_TCN_TIMER:
|
||||
#endif
|
||||
#ifdef IFLA_BR_GC_TIMER
|
||||
case IFLA_BR_GC_TIMER:
|
||||
#endif
|
||||
#ifdef IFLA_BR_TOPOLOGY_CHANGE_TIMER
|
||||
case IFLA_BR_TOPOLOGY_CHANGE_TIMER:
|
||||
#endif
|
||||
#ifdef IFLA_BR_MCAST_LAST_MEMBER_INTVL
|
||||
case IFLA_BR_MCAST_LAST_MEMBER_INTVL:
|
||||
#endif
|
||||
#ifdef IFLA_BR_MCAST_MEMBERSHIP_INTVL
|
||||
case IFLA_BR_MCAST_MEMBERSHIP_INTVL:
|
||||
#endif
|
||||
#ifdef IFLA_BR_MCAST_QUERIER_INTVL
|
||||
case IFLA_BR_MCAST_QUERIER_INTVL:
|
||||
#endif
|
||||
#ifdef IFLA_BR_MCAST_QUERY_INTVL
|
||||
case IFLA_BR_MCAST_QUERY_INTVL:
|
||||
#endif
|
||||
#ifdef IFLA_BR_MCAST_QUERY_RESPONSE_INTVL
|
||||
case IFLA_BR_MCAST_QUERY_RESPONSE_INTVL:
|
||||
#endif
|
||||
#ifdef IFLA_BR_MCAST_STARTUP_QUERY_INTVL
|
||||
case IFLA_BR_MCAST_STARTUP_QUERY_INTVL:
|
||||
#endif
|
||||
case QEMU_IFLA_BR_HELLO_TIMER:
|
||||
case QEMU_IFLA_BR_TCN_TIMER:
|
||||
case QEMU_IFLA_BR_GC_TIMER:
|
||||
case QEMU_IFLA_BR_TOPOLOGY_CHANGE_TIMER:
|
||||
case QEMU_IFLA_BR_MCAST_LAST_MEMBER_INTVL:
|
||||
case QEMU_IFLA_BR_MCAST_MEMBERSHIP_INTVL:
|
||||
case QEMU_IFLA_BR_MCAST_QUERIER_INTVL:
|
||||
case QEMU_IFLA_BR_MCAST_QUERY_INTVL:
|
||||
case QEMU_IFLA_BR_MCAST_QUERY_RESPONSE_INTVL:
|
||||
case QEMU_IFLA_BR_MCAST_STARTUP_QUERY_INTVL:
|
||||
u64 = NLA_DATA(nlattr);
|
||||
*u64 = tswap64(*u64);
|
||||
break;
|
||||
/* ifla_bridge_id: uin8_t[] */
|
||||
#ifdef IFLA_BR_ROOT_ID
|
||||
case IFLA_BR_ROOT_ID:
|
||||
#endif
|
||||
#ifdef IFLA_BR_BRIDGE_ID
|
||||
case IFLA_BR_BRIDGE_ID:
|
||||
#endif
|
||||
case QEMU_IFLA_BR_ROOT_ID:
|
||||
case QEMU_IFLA_BR_BRIDGE_ID:
|
||||
break;
|
||||
default:
|
||||
gemu_log("Unknown IFLA_BR type %d\n", nlattr->nla_type);
|
||||
gemu_log("Unknown QEMU_IFLA_BR type %d\n", nlattr->nla_type);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
@@ -1920,71 +2013,47 @@ static abi_long host_to_target_slave_data_bridge_nlattr(struct nlattr *nlattr,
|
||||
|
||||
switch (nlattr->nla_type) {
|
||||
/* uint8_t */
|
||||
case IFLA_BRPORT_STATE:
|
||||
case IFLA_BRPORT_MODE:
|
||||
case IFLA_BRPORT_GUARD:
|
||||
case IFLA_BRPORT_PROTECT:
|
||||
case IFLA_BRPORT_FAST_LEAVE:
|
||||
case IFLA_BRPORT_LEARNING:
|
||||
case IFLA_BRPORT_UNICAST_FLOOD:
|
||||
case IFLA_BRPORT_PROXYARP:
|
||||
case IFLA_BRPORT_LEARNING_SYNC:
|
||||
case IFLA_BRPORT_PROXYARP_WIFI:
|
||||
#ifdef IFLA_BRPORT_TOPOLOGY_CHANGE_ACK
|
||||
case IFLA_BRPORT_TOPOLOGY_CHANGE_ACK:
|
||||
#endif
|
||||
#ifdef IFLA_BRPORT_CONFIG_PENDING
|
||||
case IFLA_BRPORT_CONFIG_PENDING:
|
||||
#endif
|
||||
#ifdef IFLA_BRPORT_MULTICAST_ROUTER
|
||||
case IFLA_BRPORT_MULTICAST_ROUTER:
|
||||
#endif
|
||||
case QEMU_IFLA_BRPORT_STATE:
|
||||
case QEMU_IFLA_BRPORT_MODE:
|
||||
case QEMU_IFLA_BRPORT_GUARD:
|
||||
case QEMU_IFLA_BRPORT_PROTECT:
|
||||
case QEMU_IFLA_BRPORT_FAST_LEAVE:
|
||||
case QEMU_IFLA_BRPORT_LEARNING:
|
||||
case QEMU_IFLA_BRPORT_UNICAST_FLOOD:
|
||||
case QEMU_IFLA_BRPORT_PROXYARP:
|
||||
case QEMU_IFLA_BRPORT_LEARNING_SYNC:
|
||||
case QEMU_IFLA_BRPORT_PROXYARP_WIFI:
|
||||
case QEMU_IFLA_BRPORT_TOPOLOGY_CHANGE_ACK:
|
||||
case QEMU_IFLA_BRPORT_CONFIG_PENDING:
|
||||
case QEMU_IFLA_BRPORT_MULTICAST_ROUTER:
|
||||
break;
|
||||
/* uint16_t */
|
||||
case IFLA_BRPORT_PRIORITY:
|
||||
#ifdef IFLA_BRPORT_DESIGNATED_PORT
|
||||
case IFLA_BRPORT_DESIGNATED_PORT:
|
||||
#endif
|
||||
#ifdef IFLA_BRPORT_DESIGNATED_COST
|
||||
case IFLA_BRPORT_DESIGNATED_COST:
|
||||
#endif
|
||||
#ifdef IFLA_BRPORT_ID
|
||||
case IFLA_BRPORT_ID:
|
||||
#endif
|
||||
#ifdef IFLA_BRPORT_NO
|
||||
case IFLA_BRPORT_NO:
|
||||
#endif
|
||||
case QEMU_IFLA_BRPORT_PRIORITY:
|
||||
case QEMU_IFLA_BRPORT_DESIGNATED_PORT:
|
||||
case QEMU_IFLA_BRPORT_DESIGNATED_COST:
|
||||
case QEMU_IFLA_BRPORT_ID:
|
||||
case QEMU_IFLA_BRPORT_NO:
|
||||
u16 = NLA_DATA(nlattr);
|
||||
*u16 = tswap16(*u16);
|
||||
break;
|
||||
/* uin32_t */
|
||||
case IFLA_BRPORT_COST:
|
||||
case QEMU_IFLA_BRPORT_COST:
|
||||
u32 = NLA_DATA(nlattr);
|
||||
*u32 = tswap32(*u32);
|
||||
break;
|
||||
/* uint64_t */
|
||||
#ifdef IFLA_BRPORT_MESSAGE_AGE_TIMER
|
||||
case IFLA_BRPORT_MESSAGE_AGE_TIMER:
|
||||
#endif
|
||||
#ifdef IFLA_BRPORT_FORWARD_DELAY_TIMER
|
||||
case IFLA_BRPORT_FORWARD_DELAY_TIMER:
|
||||
#endif
|
||||
#ifdef IFLA_BRPORT_HOLD_TIMER
|
||||
case IFLA_BRPORT_HOLD_TIMER:
|
||||
#endif
|
||||
case QEMU_IFLA_BRPORT_MESSAGE_AGE_TIMER:
|
||||
case QEMU_IFLA_BRPORT_FORWARD_DELAY_TIMER:
|
||||
case QEMU_IFLA_BRPORT_HOLD_TIMER:
|
||||
u64 = NLA_DATA(nlattr);
|
||||
*u64 = tswap64(*u64);
|
||||
break;
|
||||
/* ifla_bridge_id: uint8_t[] */
|
||||
#ifdef IFLA_BRPORT_ROOT_ID
|
||||
case IFLA_BRPORT_ROOT_ID:
|
||||
#endif
|
||||
#ifdef IFLA_BRPORT_BRIDGE_ID
|
||||
case IFLA_BRPORT_BRIDGE_ID:
|
||||
#endif
|
||||
case QEMU_IFLA_BRPORT_ROOT_ID:
|
||||
case QEMU_IFLA_BRPORT_BRIDGE_ID:
|
||||
break;
|
||||
default:
|
||||
gemu_log("Unknown IFLA_BRPORT type %d\n", nlattr->nla_type);
|
||||
gemu_log("Unknown QEMU_IFLA_BRPORT type %d\n", nlattr->nla_type);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
@@ -2004,20 +2073,20 @@ static abi_long host_to_target_data_linkinfo_nlattr(struct nlattr *nlattr,
|
||||
|
||||
switch (nlattr->nla_type) {
|
||||
/* string */
|
||||
case IFLA_INFO_KIND:
|
||||
case QEMU_IFLA_INFO_KIND:
|
||||
li_context->name = NLA_DATA(nlattr);
|
||||
li_context->len = nlattr->nla_len - NLA_HDRLEN;
|
||||
break;
|
||||
case IFLA_INFO_SLAVE_KIND:
|
||||
case QEMU_IFLA_INFO_SLAVE_KIND:
|
||||
li_context->slave_name = NLA_DATA(nlattr);
|
||||
li_context->slave_len = nlattr->nla_len - NLA_HDRLEN;
|
||||
break;
|
||||
/* stats */
|
||||
case IFLA_INFO_XSTATS:
|
||||
case QEMU_IFLA_INFO_XSTATS:
|
||||
/* FIXME: only used by CAN */
|
||||
break;
|
||||
/* nested */
|
||||
case IFLA_INFO_DATA:
|
||||
case QEMU_IFLA_INFO_DATA:
|
||||
if (strncmp(li_context->name, "bridge",
|
||||
li_context->len) == 0) {
|
||||
return host_to_target_for_each_nlattr(NLA_DATA(nlattr),
|
||||
@@ -2025,10 +2094,10 @@ static abi_long host_to_target_data_linkinfo_nlattr(struct nlattr *nlattr,
|
||||
NULL,
|
||||
host_to_target_data_bridge_nlattr);
|
||||
} else {
|
||||
gemu_log("Unknown IFLA_INFO_KIND %s\n", li_context->name);
|
||||
gemu_log("Unknown QEMU_IFLA_INFO_KIND %s\n", li_context->name);
|
||||
}
|
||||
break;
|
||||
case IFLA_INFO_SLAVE_DATA:
|
||||
case QEMU_IFLA_INFO_SLAVE_DATA:
|
||||
if (strncmp(li_context->slave_name, "bridge",
|
||||
li_context->slave_len) == 0) {
|
||||
return host_to_target_for_each_nlattr(NLA_DATA(nlattr),
|
||||
@@ -2036,12 +2105,12 @@ static abi_long host_to_target_data_linkinfo_nlattr(struct nlattr *nlattr,
|
||||
NULL,
|
||||
host_to_target_slave_data_bridge_nlattr);
|
||||
} else {
|
||||
gemu_log("Unknown IFLA_INFO_SLAVE_KIND %s\n",
|
||||
gemu_log("Unknown QEMU_IFLA_INFO_SLAVE_KIND %s\n",
|
||||
li_context->slave_name);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
gemu_log("Unknown host IFLA_INFO type: %d\n", nlattr->nla_type);
|
||||
gemu_log("Unknown host QEMU_IFLA_INFO type: %d\n", nlattr->nla_type);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2055,7 +2124,7 @@ static abi_long host_to_target_data_inet_nlattr(struct nlattr *nlattr,
|
||||
int i;
|
||||
|
||||
switch (nlattr->nla_type) {
|
||||
case IFLA_INET_CONF:
|
||||
case QEMU_IFLA_INET_CONF:
|
||||
u32 = NLA_DATA(nlattr);
|
||||
for (i = 0; i < (nlattr->nla_len - NLA_HDRLEN) / sizeof(*u32);
|
||||
i++) {
|
||||
@@ -2078,18 +2147,18 @@ static abi_long host_to_target_data_inet6_nlattr(struct nlattr *nlattr,
|
||||
|
||||
switch (nlattr->nla_type) {
|
||||
/* binaries */
|
||||
case IFLA_INET6_TOKEN:
|
||||
case QEMU_IFLA_INET6_TOKEN:
|
||||
break;
|
||||
/* uint8_t */
|
||||
case IFLA_INET6_ADDR_GEN_MODE:
|
||||
case QEMU_IFLA_INET6_ADDR_GEN_MODE:
|
||||
break;
|
||||
/* uint32_t */
|
||||
case IFLA_INET6_FLAGS:
|
||||
case QEMU_IFLA_INET6_FLAGS:
|
||||
u32 = NLA_DATA(nlattr);
|
||||
*u32 = tswap32(*u32);
|
||||
break;
|
||||
/* uint32_t[] */
|
||||
case IFLA_INET6_CONF:
|
||||
case QEMU_IFLA_INET6_CONF:
|
||||
u32 = NLA_DATA(nlattr);
|
||||
for (i = 0; i < (nlattr->nla_len - NLA_HDRLEN) / sizeof(*u32);
|
||||
i++) {
|
||||
@@ -2097,7 +2166,7 @@ static abi_long host_to_target_data_inet6_nlattr(struct nlattr *nlattr,
|
||||
}
|
||||
break;
|
||||
/* ifla_cacheinfo */
|
||||
case IFLA_INET6_CACHEINFO:
|
||||
case QEMU_IFLA_INET6_CACHEINFO:
|
||||
ci = NLA_DATA(nlattr);
|
||||
ci->max_reasm_len = tswap32(ci->max_reasm_len);
|
||||
ci->tstamp = tswap32(ci->tstamp);
|
||||
@@ -2105,8 +2174,8 @@ static abi_long host_to_target_data_inet6_nlattr(struct nlattr *nlattr,
|
||||
ci->retrans_time = tswap32(ci->retrans_time);
|
||||
break;
|
||||
/* uint64_t[] */
|
||||
case IFLA_INET6_STATS:
|
||||
case IFLA_INET6_ICMP6STATS:
|
||||
case QEMU_IFLA_INET6_STATS:
|
||||
case QEMU_IFLA_INET6_ICMP6STATS:
|
||||
u64 = NLA_DATA(nlattr);
|
||||
for (i = 0; i < (nlattr->nla_len - NLA_HDRLEN) / sizeof(*u64);
|
||||
i++) {
|
||||
@@ -2148,37 +2217,37 @@ static abi_long host_to_target_data_link_rtattr(struct rtattr *rtattr)
|
||||
|
||||
switch (rtattr->rta_type) {
|
||||
/* binary stream */
|
||||
case IFLA_ADDRESS:
|
||||
case IFLA_BROADCAST:
|
||||
case QEMU_IFLA_ADDRESS:
|
||||
case QEMU_IFLA_BROADCAST:
|
||||
/* string */
|
||||
case IFLA_IFNAME:
|
||||
case IFLA_QDISC:
|
||||
case QEMU_IFLA_IFNAME:
|
||||
case QEMU_IFLA_QDISC:
|
||||
break;
|
||||
/* uin8_t */
|
||||
case IFLA_OPERSTATE:
|
||||
case IFLA_LINKMODE:
|
||||
case IFLA_CARRIER:
|
||||
case IFLA_PROTO_DOWN:
|
||||
case QEMU_IFLA_OPERSTATE:
|
||||
case QEMU_IFLA_LINKMODE:
|
||||
case QEMU_IFLA_CARRIER:
|
||||
case QEMU_IFLA_PROTO_DOWN:
|
||||
break;
|
||||
/* uint32_t */
|
||||
case IFLA_MTU:
|
||||
case IFLA_LINK:
|
||||
case IFLA_WEIGHT:
|
||||
case IFLA_TXQLEN:
|
||||
case IFLA_CARRIER_CHANGES:
|
||||
case IFLA_NUM_RX_QUEUES:
|
||||
case IFLA_NUM_TX_QUEUES:
|
||||
case IFLA_PROMISCUITY:
|
||||
case IFLA_EXT_MASK:
|
||||
case IFLA_LINK_NETNSID:
|
||||
case IFLA_GROUP:
|
||||
case IFLA_MASTER:
|
||||
case IFLA_NUM_VF:
|
||||
case QEMU_IFLA_MTU:
|
||||
case QEMU_IFLA_LINK:
|
||||
case QEMU_IFLA_WEIGHT:
|
||||
case QEMU_IFLA_TXQLEN:
|
||||
case QEMU_IFLA_CARRIER_CHANGES:
|
||||
case QEMU_IFLA_NUM_RX_QUEUES:
|
||||
case QEMU_IFLA_NUM_TX_QUEUES:
|
||||
case QEMU_IFLA_PROMISCUITY:
|
||||
case QEMU_IFLA_EXT_MASK:
|
||||
case QEMU_IFLA_LINK_NETNSID:
|
||||
case QEMU_IFLA_GROUP:
|
||||
case QEMU_IFLA_MASTER:
|
||||
case QEMU_IFLA_NUM_VF:
|
||||
u32 = RTA_DATA(rtattr);
|
||||
*u32 = tswap32(*u32);
|
||||
break;
|
||||
/* struct rtnl_link_stats */
|
||||
case IFLA_STATS:
|
||||
case QEMU_IFLA_STATS:
|
||||
st = RTA_DATA(rtattr);
|
||||
st->rx_packets = tswap32(st->rx_packets);
|
||||
st->tx_packets = tswap32(st->tx_packets);
|
||||
@@ -2211,7 +2280,7 @@ static abi_long host_to_target_data_link_rtattr(struct rtattr *rtattr)
|
||||
st->tx_compressed = tswap32(st->tx_compressed);
|
||||
break;
|
||||
/* struct rtnl_link_stats64 */
|
||||
case IFLA_STATS64:
|
||||
case QEMU_IFLA_STATS64:
|
||||
st64 = RTA_DATA(rtattr);
|
||||
st64->rx_packets = tswap64(st64->rx_packets);
|
||||
st64->tx_packets = tswap64(st64->tx_packets);
|
||||
@@ -2244,7 +2313,7 @@ static abi_long host_to_target_data_link_rtattr(struct rtattr *rtattr)
|
||||
st64->tx_compressed = tswap64(st64->tx_compressed);
|
||||
break;
|
||||
/* struct rtnl_link_ifmap */
|
||||
case IFLA_MAP:
|
||||
case QEMU_IFLA_MAP:
|
||||
map = RTA_DATA(rtattr);
|
||||
map->mem_start = tswap64(map->mem_start);
|
||||
map->mem_end = tswap64(map->mem_end);
|
||||
@@ -2252,17 +2321,17 @@ static abi_long host_to_target_data_link_rtattr(struct rtattr *rtattr)
|
||||
map->irq = tswap16(map->irq);
|
||||
break;
|
||||
/* nested */
|
||||
case IFLA_LINKINFO:
|
||||
case QEMU_IFLA_LINKINFO:
|
||||
memset(&li_context, 0, sizeof(li_context));
|
||||
return host_to_target_for_each_nlattr(RTA_DATA(rtattr), rtattr->rta_len,
|
||||
&li_context,
|
||||
host_to_target_data_linkinfo_nlattr);
|
||||
case IFLA_AF_SPEC:
|
||||
case QEMU_IFLA_AF_SPEC:
|
||||
return host_to_target_for_each_nlattr(RTA_DATA(rtattr), rtattr->rta_len,
|
||||
NULL,
|
||||
host_to_target_data_spec_nlattr);
|
||||
default:
|
||||
gemu_log("Unknown host IFLA type: %d\n", rtattr->rta_type);
|
||||
gemu_log("Unknown host QEMU_IFLA type: %d\n", rtattr->rta_type);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
@@ -2429,7 +2498,7 @@ static abi_long target_to_host_data_link_rtattr(struct rtattr *rtattr)
|
||||
{
|
||||
switch (rtattr->rta_type) {
|
||||
default:
|
||||
gemu_log("Unknown target IFLA type: %d\n", rtattr->rta_type);
|
||||
gemu_log("Unknown target QEMU_IFLA type: %d\n", rtattr->rta_type);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
|
||||
@@ -1602,9 +1602,8 @@ void net_socket_rs_init(SocketReadState *rs,
|
||||
|
||||
/*
|
||||
* Returns
|
||||
* 0: SocketReadState is not ready
|
||||
* 1: SocketReadState is ready
|
||||
* otherwise error occurs
|
||||
* 0: success
|
||||
* -1: error occurs
|
||||
*/
|
||||
int net_fill_rstate(SocketReadState *rs, const uint8_t *buf, int size)
|
||||
{
|
||||
@@ -1652,10 +1651,11 @@ int net_fill_rstate(SocketReadState *rs, const uint8_t *buf, int size)
|
||||
if (rs->finalize) {
|
||||
rs->finalize(rs);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
assert(size == 0);
|
||||
return 0;
|
||||
}
|
||||
+3
-1
@@ -131,7 +131,9 @@ static void net_slirp_cleanup(NetClientState *nc)
|
||||
SlirpState *s = DO_UPCAST(SlirpState, nc, nc);
|
||||
|
||||
slirp_cleanup(s->slirp);
|
||||
qemu_remove_exit_notifier(&s->exit_notifier);
|
||||
if (s->exit_notifier.notify) {
|
||||
qemu_remove_exit_notifier(&s->exit_notifier);
|
||||
}
|
||||
slirp_smb_cleanup(s);
|
||||
QTAILQ_REMOVE(&slirp_stacks, s, entry);
|
||||
}
|
||||
|
||||
+28
-27
@@ -489,30 +489,41 @@ static int net_socket_listen_init(NetClientState *peer,
|
||||
{
|
||||
NetClientState *nc;
|
||||
NetSocketState *s;
|
||||
SocketAddress *saddr;
|
||||
int ret;
|
||||
Error *local_error = NULL;
|
||||
struct sockaddr_in saddr;
|
||||
int fd, ret;
|
||||
|
||||
saddr = socket_parse(host_str, &local_error);
|
||||
if (saddr == NULL) {
|
||||
error_report_err(local_error);
|
||||
if (parse_host_port(&saddr, host_str) < 0)
|
||||
return -1;
|
||||
|
||||
fd = qemu_socket(PF_INET, SOCK_STREAM, 0);
|
||||
if (fd < 0) {
|
||||
perror("socket");
|
||||
return -1;
|
||||
}
|
||||
qemu_set_nonblock(fd);
|
||||
|
||||
ret = socket_listen(saddr, &local_error);
|
||||
socket_set_fast_reuse(fd);
|
||||
|
||||
ret = bind(fd, (struct sockaddr *)&saddr, sizeof(saddr));
|
||||
if (ret < 0) {
|
||||
error_report_err(local_error);
|
||||
perror("bind");
|
||||
closesocket(fd);
|
||||
return -1;
|
||||
}
|
||||
ret = listen(fd, 0);
|
||||
if (ret < 0) {
|
||||
perror("listen");
|
||||
closesocket(fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
nc = qemu_new_net_client(&net_socket_info, peer, model, name);
|
||||
s = DO_UPCAST(NetSocketState, nc, nc);
|
||||
s->fd = -1;
|
||||
s->listen_fd = ret;
|
||||
s->listen_fd = fd;
|
||||
s->nc.link_down = true;
|
||||
|
||||
qemu_set_fd_handler(s->listen_fd, net_socket_accept, NULL, s);
|
||||
qapi_free_SocketAddress(saddr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -523,15 +534,10 @@ static int net_socket_connect_init(NetClientState *peer,
|
||||
{
|
||||
NetSocketState *s;
|
||||
int fd, connected, ret;
|
||||
char *addr_str;
|
||||
SocketAddress *saddr;
|
||||
Error *local_error = NULL;
|
||||
struct sockaddr_in saddr;
|
||||
|
||||
saddr = socket_parse(host_str, &local_error);
|
||||
if (saddr == NULL) {
|
||||
error_report_err(local_error);
|
||||
if (parse_host_port(&saddr, host_str) < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
fd = qemu_socket(PF_INET, SOCK_STREAM, 0);
|
||||
if (fd < 0) {
|
||||
@@ -539,9 +545,10 @@ static int net_socket_connect_init(NetClientState *peer,
|
||||
return -1;
|
||||
}
|
||||
qemu_set_nonblock(fd);
|
||||
|
||||
connected = 0;
|
||||
for(;;) {
|
||||
ret = socket_connect(saddr, &local_error, NULL, NULL);
|
||||
ret = connect(fd, (struct sockaddr *)&saddr, sizeof(saddr));
|
||||
if (ret < 0) {
|
||||
if (errno == EINTR || errno == EWOULDBLOCK) {
|
||||
/* continue */
|
||||
@@ -550,7 +557,7 @@ static int net_socket_connect_init(NetClientState *peer,
|
||||
errno == EINVAL) {
|
||||
break;
|
||||
} else {
|
||||
error_report_err(local_error);
|
||||
perror("connect");
|
||||
closesocket(fd);
|
||||
return -1;
|
||||
}
|
||||
@@ -562,15 +569,9 @@ static int net_socket_connect_init(NetClientState *peer,
|
||||
s = net_socket_fd_init(peer, model, name, fd, connected);
|
||||
if (!s)
|
||||
return -1;
|
||||
|
||||
addr_str = socket_address_to_string(saddr, &local_error);
|
||||
if (addr_str == NULL)
|
||||
return -1;
|
||||
|
||||
snprintf(s->nc.info_str, sizeof(s->nc.info_str),
|
||||
"socket: connect to %s", addr_str);
|
||||
qapi_free_SocketAddress(saddr);
|
||||
g_free(addr_str);
|
||||
"socket: connect to %s:%d",
|
||||
inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -10,10 +10,7 @@ $(call set-vpath, $(SRC_PATH)/pc-bios/optionrom)
|
||||
.PHONY : all clean build-all
|
||||
|
||||
# Compiling with no optimization creates ROMs that are too large
|
||||
ifeq ($(filter -O%, $(CFLAGS)),)
|
||||
override CFLAGS += -O2
|
||||
endif
|
||||
ifeq ($(filter -O%, $(CFLAGS)),-O0)
|
||||
ifeq ($(lastword $(filter -O%, -O0 $(CFLAGS))),-O0)
|
||||
override CFLAGS += -O2
|
||||
endif
|
||||
|
||||
|
||||
+41
-7
@@ -25,6 +25,7 @@
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include <glib/gstdio.h>
|
||||
|
||||
#include "qemu-common.h"
|
||||
#include "qapi/error.h"
|
||||
@@ -86,24 +87,57 @@ static void test_parse_range(void)
|
||||
error_free_or_abort(&err);
|
||||
}
|
||||
|
||||
static void test_parse_path(void)
|
||||
static void set_log_path_tmp(char const *dir, char const *tpl, Error **errp)
|
||||
{
|
||||
gchar *file_path = g_build_filename(dir, tpl, NULL);
|
||||
|
||||
qemu_set_log_filename(file_path, errp);
|
||||
g_free(file_path);
|
||||
}
|
||||
|
||||
static void test_parse_path(gconstpointer data)
|
||||
{
|
||||
gchar const *tmp_path = data;
|
||||
Error *err = NULL;
|
||||
|
||||
qemu_set_log_filename("/tmp/qemu.log", &error_abort);
|
||||
qemu_set_log_filename("/tmp/qemu-%d.log", &error_abort);
|
||||
qemu_set_log_filename("/tmp/qemu.log.%d", &error_abort);
|
||||
set_log_path_tmp(tmp_path, "qemu.log", &error_abort);
|
||||
set_log_path_tmp(tmp_path, "qemu-%d.log", &error_abort);
|
||||
set_log_path_tmp(tmp_path, "qemu.log.%d", &error_abort);
|
||||
|
||||
qemu_set_log_filename("/tmp/qemu-%d%d.log", &err);
|
||||
set_log_path_tmp(tmp_path, "qemu-%d%d.log", &err);
|
||||
error_free_or_abort(&err);
|
||||
}
|
||||
|
||||
/* Remove a directory and all its entries (non-recursive). */
|
||||
static void rmdir_full(gchar const *root)
|
||||
{
|
||||
GDir *root_gdir = g_dir_open(root, 0, NULL);
|
||||
gchar const *entry_name;
|
||||
|
||||
g_assert_nonnull(root_gdir);
|
||||
while ((entry_name = g_dir_read_name(root_gdir)) != NULL) {
|
||||
gchar *entry_path = g_build_filename(root, entry_name, NULL);
|
||||
g_assert(g_remove(entry_path) == 0);
|
||||
g_free(entry_path);
|
||||
}
|
||||
g_dir_close(root_gdir);
|
||||
g_assert(g_rmdir(root) == 0);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
gchar *tmp_path = g_dir_make_tmp("qemu-test-logging.XXXXXX", NULL);
|
||||
int rc;
|
||||
|
||||
g_test_init(&argc, &argv, NULL);
|
||||
g_assert_nonnull(tmp_path);
|
||||
|
||||
g_test_add_func("/logging/parse_range", test_parse_range);
|
||||
g_test_add_func("/logging/parse_path", test_parse_path);
|
||||
g_test_add_data_func("/logging/parse_path", tmp_path, test_parse_path);
|
||||
|
||||
return g_test_run();
|
||||
rc = g_test_run();
|
||||
|
||||
rmdir_full(tmp_path);
|
||||
g_free(tmp_path);
|
||||
return rc;
|
||||
}
|
||||
@@ -834,6 +834,9 @@ static void page_flush_tb(void)
|
||||
/* XXX: tb_flush is currently not thread safe */
|
||||
void tb_flush(CPUState *cpu)
|
||||
{
|
||||
if (!tcg_enabled()) {
|
||||
return;
|
||||
}
|
||||
#if defined(DEBUG_FLUSH)
|
||||
printf("qemu: flush code_size=%ld nb_tbs=%d avg_tb_size=%ld\n",
|
||||
(unsigned long)(tcg_ctx.code_gen_ptr - tcg_ctx.code_gen_buffer),
|
||||
|
||||
@@ -692,6 +692,8 @@ void *vnc_server_fb_ptr(VncDisplay *vd, int x, int y)
|
||||
|
||||
static void vnc_update_server_surface(VncDisplay *vd)
|
||||
{
|
||||
int width, height;
|
||||
|
||||
qemu_pixman_image_unref(vd->server);
|
||||
vd->server = NULL;
|
||||
|
||||
@@ -699,10 +701,15 @@ static void vnc_update_server_surface(VncDisplay *vd)
|
||||
return;
|
||||
}
|
||||
|
||||
width = vnc_width(vd);
|
||||
height = vnc_height(vd);
|
||||
vd->server = pixman_image_create_bits(VNC_SERVER_FB_FORMAT,
|
||||
vnc_width(vd),
|
||||
vnc_height(vd),
|
||||
width, height,
|
||||
NULL, 0);
|
||||
|
||||
memset(vd->guest.dirty, 0x00, sizeof(vd->guest.dirty));
|
||||
vnc_set_area_dirty(vd->guest.dirty, vd, 0, 0,
|
||||
width, height);
|
||||
}
|
||||
|
||||
static void vnc_dpy_switch(DisplayChangeListener *dcl,
|
||||
@@ -710,7 +717,6 @@ static void vnc_dpy_switch(DisplayChangeListener *dcl,
|
||||
{
|
||||
VncDisplay *vd = container_of(dcl, VncDisplay, dcl);
|
||||
VncState *vs;
|
||||
int width, height;
|
||||
|
||||
vnc_abort_display_jobs(vd);
|
||||
vd->ds = surface;
|
||||
@@ -722,11 +728,6 @@ static void vnc_dpy_switch(DisplayChangeListener *dcl,
|
||||
qemu_pixman_image_unref(vd->guest.fb);
|
||||
vd->guest.fb = pixman_image_ref(surface->image);
|
||||
vd->guest.format = surface->format;
|
||||
width = vnc_width(vd);
|
||||
height = vnc_height(vd);
|
||||
memset(vd->guest.dirty, 0x00, sizeof(vd->guest.dirty));
|
||||
vnc_set_area_dirty(vd->guest.dirty, vd, 0, 0,
|
||||
width, height);
|
||||
|
||||
QTAILQ_FOREACH(vs, &vd->clients, next) {
|
||||
vnc_colordepth(vs);
|
||||
@@ -736,7 +737,8 @@ static void vnc_dpy_switch(DisplayChangeListener *dcl,
|
||||
}
|
||||
memset(vs->dirty, 0x00, sizeof(vs->dirty));
|
||||
vnc_set_area_dirty(vs->dirty, vd, 0, 0,
|
||||
width, height);
|
||||
vnc_width(vd),
|
||||
vnc_height(vd));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user