Revision 72cf2d4f net.c
b/net.c | ||
---|---|---|
31 | 31 |
|
32 | 32 |
/* Needed early for CONFIG_BSD etc. */ |
33 | 33 |
#include "config-host.h" |
34 |
/* Needed early to override system queue definitions on BSD */ |
|
35 |
#include "sys-queue.h" |
|
36 | 34 |
|
37 | 35 |
#ifndef _WIN32 |
38 | 36 |
#include <sys/times.h> |
... | ... | |
114 | 112 |
#include "qemu-log.h" |
115 | 113 |
|
116 | 114 |
#include "slirp/libslirp.h" |
115 |
#include "qemu-queue.h" |
|
117 | 116 |
|
118 | 117 |
|
119 | 118 |
static VLANState *first_vlan; |
... | ... | |
440 | 439 |
{ |
441 | 440 |
VLANPacket *packet, *next; |
442 | 441 |
|
443 |
TAILQ_FOREACH_SAFE(packet, &vc->vlan->send_queue, entry, next) { |
|
442 |
QTAILQ_FOREACH_SAFE(packet, &vc->vlan->send_queue, entry, next) {
|
|
444 | 443 |
if (packet->sender == vc) { |
445 |
TAILQ_REMOVE(&vc->vlan->send_queue, packet, entry); |
|
444 |
QTAILQ_REMOVE(&vc->vlan->send_queue, packet, entry);
|
|
446 | 445 |
qemu_free(packet); |
447 | 446 |
} |
448 | 447 |
} |
... | ... | |
450 | 449 |
|
451 | 450 |
void qemu_flush_queued_packets(VLANClientState *vc) |
452 | 451 |
{ |
453 |
while (!TAILQ_EMPTY(&vc->vlan->send_queue)) { |
|
452 |
while (!QTAILQ_EMPTY(&vc->vlan->send_queue)) {
|
|
454 | 453 |
VLANPacket *packet; |
455 | 454 |
int ret; |
456 | 455 |
|
457 |
packet = TAILQ_FIRST(&vc->vlan->send_queue); |
|
458 |
TAILQ_REMOVE(&vc->vlan->send_queue, packet, entry); |
|
456 |
packet = QTAILQ_FIRST(&vc->vlan->send_queue);
|
|
457 |
QTAILQ_REMOVE(&vc->vlan->send_queue, packet, entry);
|
|
459 | 458 |
|
460 | 459 |
ret = qemu_deliver_packet(packet->sender, packet->data, packet->size); |
461 | 460 |
if (ret == 0 && packet->sent_cb != NULL) { |
462 |
TAILQ_INSERT_HEAD(&vc->vlan->send_queue, packet, entry); |
|
461 |
QTAILQ_INSERT_HEAD(&vc->vlan->send_queue, packet, entry);
|
|
463 | 462 |
break; |
464 | 463 |
} |
465 | 464 |
|
... | ... | |
482 | 481 |
packet->sent_cb = sent_cb; |
483 | 482 |
memcpy(packet->data, buf, size); |
484 | 483 |
|
485 |
TAILQ_INSERT_TAIL(&sender->vlan->send_queue, packet, entry); |
|
484 |
QTAILQ_INSERT_TAIL(&sender->vlan->send_queue, packet, entry);
|
|
486 | 485 |
} |
487 | 486 |
|
488 | 487 |
ssize_t qemu_send_packet_async(VLANClientState *sender, |
... | ... | |
605 | 604 |
packet->size += len; |
606 | 605 |
} |
607 | 606 |
|
608 |
TAILQ_INSERT_TAIL(&sender->vlan->send_queue, packet, entry); |
|
607 |
QTAILQ_INSERT_TAIL(&sender->vlan->send_queue, packet, entry);
|
|
609 | 608 |
|
610 | 609 |
return packet->size; |
611 | 610 |
} |
... | ... | |
671 | 670 |
}; |
672 | 671 |
|
673 | 672 |
typedef struct SlirpState { |
674 |
TAILQ_ENTRY(SlirpState) entry; |
|
673 |
QTAILQ_ENTRY(SlirpState) entry;
|
|
675 | 674 |
VLANClientState *vc; |
676 | 675 |
Slirp *slirp; |
677 | 676 |
#ifndef _WIN32 |
... | ... | |
682 | 681 |
static struct slirp_config_str *slirp_configs; |
683 | 682 |
const char *legacy_tftp_prefix; |
684 | 683 |
const char *legacy_bootp_filename; |
685 |
static TAILQ_HEAD(slirp_stacks, SlirpState) slirp_stacks = |
|
686 |
TAILQ_HEAD_INITIALIZER(slirp_stacks); |
|
684 |
static QTAILQ_HEAD(slirp_stacks, SlirpState) slirp_stacks =
|
|
685 |
QTAILQ_HEAD_INITIALIZER(slirp_stacks);
|
|
687 | 686 |
|
688 | 687 |
static void slirp_hostfwd(SlirpState *s, Monitor *mon, const char *redir_str, |
689 | 688 |
int legacy_format); |
... | ... | |
736 | 735 |
|
737 | 736 |
slirp_cleanup(s->slirp); |
738 | 737 |
slirp_smb_cleanup(s); |
739 |
TAILQ_REMOVE(&slirp_stacks, s, entry); |
|
738 |
QTAILQ_REMOVE(&slirp_stacks, s, entry);
|
|
740 | 739 |
qemu_free(s); |
741 | 740 |
} |
742 | 741 |
|
... | ... | |
844 | 843 |
s = qemu_mallocz(sizeof(SlirpState)); |
845 | 844 |
s->slirp = slirp_init(restricted, net, mask, host, vhostname, |
846 | 845 |
tftp_export, bootfile, dhcp, dns, s); |
847 |
TAILQ_INSERT_TAIL(&slirp_stacks, s, entry); |
|
846 |
QTAILQ_INSERT_TAIL(&slirp_stacks, s, entry);
|
|
848 | 847 |
|
849 | 848 |
while (slirp_configs) { |
850 | 849 |
struct slirp_config_str *config = slirp_configs; |
... | ... | |
891 | 890 |
} |
892 | 891 |
return vc->opaque; |
893 | 892 |
} else { |
894 |
if (TAILQ_EMPTY(&slirp_stacks)) { |
|
893 |
if (QTAILQ_EMPTY(&slirp_stacks)) {
|
|
895 | 894 |
monitor_printf(mon, "user mode network stack not in use\n"); |
896 | 895 |
return NULL; |
897 | 896 |
} |
898 |
return TAILQ_FIRST(&slirp_stacks); |
|
897 |
return QTAILQ_FIRST(&slirp_stacks);
|
|
899 | 898 |
} |
900 | 899 |
} |
901 | 900 |
|
... | ... | |
946 | 945 |
|
947 | 946 |
host_port = atoi(p); |
948 | 947 |
|
949 |
err = slirp_remove_hostfwd(TAILQ_FIRST(&slirp_stacks)->slirp, is_udp, |
|
948 |
err = slirp_remove_hostfwd(QTAILQ_FIRST(&slirp_stacks)->slirp, is_udp,
|
|
950 | 949 |
host_addr, host_port); |
951 | 950 |
|
952 | 951 |
monitor_printf(mon, "host forwarding rule for %s %s\n", src_str, |
... | ... | |
1045 | 1044 |
{ |
1046 | 1045 |
struct slirp_config_str *config; |
1047 | 1046 |
|
1048 |
if (TAILQ_EMPTY(&slirp_stacks)) { |
|
1047 |
if (QTAILQ_EMPTY(&slirp_stacks)) {
|
|
1049 | 1048 |
config = qemu_malloc(sizeof(*config)); |
1050 | 1049 |
pstrcpy(config->str, sizeof(config->str), redir_str); |
1051 | 1050 |
config->flags = SLIRP_CFG_HOSTFWD | SLIRP_CFG_LEGACY; |
... | ... | |
1054 | 1053 |
return; |
1055 | 1054 |
} |
1056 | 1055 |
|
1057 |
slirp_hostfwd(TAILQ_FIRST(&slirp_stacks), NULL, redir_str, 1); |
|
1056 |
slirp_hostfwd(QTAILQ_FIRST(&slirp_stacks), NULL, redir_str, 1);
|
|
1058 | 1057 |
} |
1059 | 1058 |
|
1060 | 1059 |
#ifndef _WIN32 |
... | ... | |
1137 | 1136 |
exit(1); |
1138 | 1137 |
} |
1139 | 1138 |
legacy_smb_export = exported_dir; |
1140 |
if (!TAILQ_EMPTY(&slirp_stacks)) { |
|
1141 |
slirp_smb(TAILQ_FIRST(&slirp_stacks), NULL, exported_dir, |
|
1139 |
if (!QTAILQ_EMPTY(&slirp_stacks)) {
|
|
1140 |
slirp_smb(QTAILQ_FIRST(&slirp_stacks), NULL, exported_dir,
|
|
1142 | 1141 |
vserver_addr); |
1143 | 1142 |
} |
1144 | 1143 |
} |
... | ... | |
1233 | 1232 |
{ |
1234 | 1233 |
SlirpState *s; |
1235 | 1234 |
|
1236 |
TAILQ_FOREACH(s, &slirp_stacks, entry) { |
|
1235 |
QTAILQ_FOREACH(s, &slirp_stacks, entry) {
|
|
1237 | 1236 |
monitor_printf(mon, "VLAN %d (%s):\n", s->vc->vlan->id, s->vc->name); |
1238 | 1237 |
slirp_connection_info(s->slirp, mon); |
1239 | 1238 |
} |
... | ... | |
2330 | 2329 |
} |
2331 | 2330 |
vlan = qemu_mallocz(sizeof(VLANState)); |
2332 | 2331 |
vlan->id = id; |
2333 |
TAILQ_INIT(&vlan->send_queue); |
|
2332 |
QTAILQ_INIT(&vlan->send_queue);
|
|
2334 | 2333 |
vlan->next = NULL; |
2335 | 2334 |
pvlan = &first_vlan; |
2336 | 2335 |
while (*pvlan != NULL) |
... | ... | |
2594 | 2593 |
qemu_free(smb_export); |
2595 | 2594 |
qemu_free(vsmbsrv); |
2596 | 2595 |
} else if (!strcmp(device, "channel")) { |
2597 |
if (TAILQ_EMPTY(&slirp_stacks)) { |
|
2596 |
if (QTAILQ_EMPTY(&slirp_stacks)) {
|
|
2598 | 2597 |
struct slirp_config_str *config; |
2599 | 2598 |
|
2600 | 2599 |
config = qemu_malloc(sizeof(*config)); |
... | ... | |
2603 | 2602 |
config->next = slirp_configs; |
2604 | 2603 |
slirp_configs = config; |
2605 | 2604 |
} else { |
2606 |
slirp_guestfwd(TAILQ_FIRST(&slirp_stacks), mon, p, 1); |
|
2605 |
slirp_guestfwd(QTAILQ_FIRST(&slirp_stacks), mon, p, 1);
|
|
2607 | 2606 |
} |
2608 | 2607 |
ret = 0; |
2609 | 2608 |
} else |
Also available in: Unified diff