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