Revision 4f1c942b

b/hw/dp8393x.c
725 725
    return -1;
726 726
}
727 727

  
728
static void nic_receive(VLANClientState *vc, const uint8_t * buf, size_t size)
728
static ssize_t nic_receive(VLANClientState *vc, const uint8_t * buf, size_t size)
729 729
{
730 730
    uint16_t data[10];
731 731
    dp8393xState *s = vc->opaque;
......
742 742
    packet_type = receive_filter(s, buf, size);
743 743
    if (packet_type < 0) {
744 744
        DPRINTF("packet not for netcard\n");
745
        return;
745
        return -1;
746 746
    }
747 747

  
748 748
    /* XXX: Check byte ordering */
......
755 755
        s->memory_rw(s->mem_opaque, address, (uint8_t*)data, size, 0);
756 756
        if (data[0 * width] & 0x1) {
757 757
            /* Still EOL ; stop reception */
758
            return;
758
            return -1;
759 759
        } else {
760 760
            s->regs[SONIC_CRDA] = s->regs[SONIC_LLFA];
761 761
        }
......
833 833

  
834 834
    /* Done */
835 835
    dp8393x_update_irq(s);
836

  
837
    return size;
836 838
}
837 839

  
838 840
static void nic_reset(void *opaque)
b/hw/e1000.c
599 599
    return (s->mac_reg[RCTL] & E1000_RCTL_EN);
600 600
}
601 601

  
602
static void
602
static ssize_t
603 603
e1000_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
604 604
{
605 605
    E1000State *s = vc->opaque;
......
611 611
    uint8_t vlan_status = 0, vlan_offset = 0;
612 612

  
613 613
    if (!(s->mac_reg[RCTL] & E1000_RCTL_EN))
614
        return;
614
        return -1;
615 615

  
616 616
    if (size > s->rxbuf_size) {
617 617
        DBGOUT(RX, "packet too large for buffers (%lu > %d)\n",
618 618
               (unsigned long)size, s->rxbuf_size);
619
        return;
619
        return -1;
620 620
    }
621 621

  
622 622
    if (!receive_filter(s, buf, size))
623
        return;
623
        return size;
624 624

  
625 625
    if (vlan_enabled(s) && is_vlan_packet(s, buf)) {
626 626
        vlan_special = cpu_to_le16(be16_to_cpup((uint16_t *)(buf + 14)));
......
635 635
    do {
636 636
        if (s->mac_reg[RDH] == s->mac_reg[RDT] && s->check_rxov) {
637 637
            set_ics(s, 0, E1000_ICS_RXO);
638
            return;
638
            return -1;
639 639
        }
640 640
        base = ((uint64_t)s->mac_reg[RDBAH] << 32) + s->mac_reg[RDBAL] +
641 641
               sizeof(desc) * s->mac_reg[RDH];
......
659 659
            DBGOUT(RXERR, "RDH wraparound @%x, RDT %x, RDLEN %x\n",
660 660
                   rdh_start, s->mac_reg[RDT], s->mac_reg[RDLEN]);
661 661
            set_ics(s, 0, E1000_ICS_RXO);
662
            return;
662
            return -1;
663 663
        }
664 664
    } while (desc.buffer_addr == 0);
665 665

  
......
677 677
        n |= E1000_ICS_RXDMT0;
678 678

  
679 679
    set_ics(s, 0, n);
680

  
681
    return size;
680 682
}
681 683

  
682 684
static uint32_t
b/hw/eepro100.c
1441 1441
    //~ return !eepro100_buffer_full(s);
1442 1442
}
1443 1443

  
1444
static void nic_receive(VLANClientState *vc, const uint8_t * buf, size_t size)
1444
static ssize_t nic_receive(VLANClientState *vc, const uint8_t * buf, size_t size)
1445 1445
{
1446 1446
    /* TODO:
1447 1447
     * - Magic packets should set bit 30 in power management driver register.
......
1458 1458
    if (s->configuration[8] & 0x80) {
1459 1459
        /* CSMA is disabled. */
1460 1460
        logout("%p received while CSMA is disabled\n", s);
1461
        return;
1461
        return -1;
1462 1462
    } else if (size < 64 && (s->configuration[7] & 1)) {
1463 1463
        /* Short frame and configuration byte 7/0 (discard short receive) set:
1464 1464
         * Short frame is discarded */
1465 1465
        logout("%p received short frame (%d byte)\n", s, size);
1466 1466
        s->statistics.rx_short_frame_errors++;
1467
        //~ return;
1467
        //~ return -1;
1468 1468
    } else if ((size > MAX_ETH_FRAME_SIZE + 4) && !(s->configuration[18] & 8)) {
1469 1469
        /* Long frame and configuration byte 18/3 (long receive ok) not set:
1470 1470
         * Long frames are discarded. */
1471 1471
        logout("%p received long frame (%d byte), ignored\n", s, size);
1472
        return;
1472
        return -1;
1473 1473
    } else if (memcmp(buf, s->macaddr, 6) == 0) {       // !!!
1474 1474
        /* Frame matches individual address. */
1475 1475
        /* TODO: check configuration byte 15/4 (ignore U/L). */
......
1485 1485
        assert(!(s->configuration[21] & BIT(3)));
1486 1486
        int mcast_idx = compute_mcast_idx(buf);
1487 1487
        if (!(s->mult[mcast_idx >> 3] & (1 << (mcast_idx & 7)))) {
1488
            return;
1488
            return size;
1489 1489
        }
1490 1490
        rfd_status |= 0x0002;
1491 1491
    } else if (s->configuration[15] & 1) {
......
1495 1495
    } else {
1496 1496
        logout("%p received frame, ignored, len=%d,%s\n", s, size,
1497 1497
               nic_dump(buf, size));
1498
        return;
1498
        return size;
1499 1499
    }
1500 1500

  
1501 1501
    if (get_ru_state(s) != ru_ready) {
......
1503 1503
        logout("no ressources, state=%u\n", get_ru_state(s));
1504 1504
        s->statistics.rx_resource_errors++;
1505 1505
        //~ assert(!"no ressources");
1506
        return;
1506
        return -1;
1507 1507
    }
1508 1508
    //~ !!!
1509 1509
//~ $3 = {status = 0x0, command = 0xc000, link = 0x2d220, rx_buf_addr = 0x207dc, count = 0x0, size = 0x5f8, packet = {0x0 <repeats 1518 times>}}
......
1540 1540
        /* S bit is set. */
1541 1541
        set_ru_state(s, ru_suspended);
1542 1542
    }
1543
    return size;
1543 1544
}
1544 1545

  
1545 1546
static int nic_load(QEMUFile * f, void *opaque, int version_id)
b/hw/etraxfs_eth.c
501 501
	return 1;
502 502
}
503 503

  
504
static void eth_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
504
static ssize_t eth_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
505 505
{
506 506
	unsigned char sa_bcast[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
507 507
	struct fs_eth *eth = vc->opaque;
......
510 510
	int r_bcast = eth->regs[RW_REC_CTRL] & 8;
511 511

  
512 512
	if (size < 12)
513
		return;
513
		return -1;
514 514

  
515 515
	D(printf("%x.%x.%x.%x.%x.%x ma=%d %d bc=%d\n",
516 516
		 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5],
......
521 521
	    && (!use_ma1 || memcmp(buf, eth->macaddr[1], 6))
522 522
	    && (!r_bcast || memcmp(buf, sa_bcast, 6))
523 523
	    && !eth_match_groupaddr(eth, buf))
524
		return;
524
		return size;
525 525

  
526 526
	/* FIXME: Find another way to pass on the fake csum.  */
527 527
	etraxfs_dmac_input(eth->dma_in, (void *)buf, size + 4, 1);
528

  
529
        return size;
528 530
}
529 531

  
530 532
static int eth_tx_push(void *opaque, unsigned char *buf, int len)
b/hw/mcf_fec.c
353 353
    return s->rx_enabled;
354 354
}
355 355

  
356
static void mcf_fec_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
356
static ssize_t mcf_fec_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
357 357
{
358 358
    mcf_fec_state *s = vc->opaque;
359 359
    mcf_fec_bd bd;
......
426 426
    s->rx_descriptor = addr;
427 427
    mcf_fec_enable_rx(s);
428 428
    mcf_fec_update(s);
429
    return size;
429 430
}
430 431

  
431 432
static CPUReadMemoryFunc *mcf_fec_readfn[] = {
b/hw/mipsnet.c
75 75
    return !mipsnet_buffer_full(s);
76 76
}
77 77

  
78
static void mipsnet_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
78
static ssize_t mipsnet_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
79 79
{
80 80
    MIPSnetState *s = vc->opaque;
81 81

  
......
83 83
    printf("mipsnet: receiving len=%d\n", size);
84 84
#endif
85 85
    if (!mipsnet_can_receive(vc))
86
        return;
86
        return -1;
87 87

  
88 88
    s->busy = 1;
89 89

  
......
98 98
    /* Now we can signal we have received something. */
99 99
    s->intctl |= MIPSNET_INTCTL_RXDONE;
100 100
    mipsnet_update_irq(s);
101

  
102
    return size;
101 103
}
102 104

  
103 105
static uint32_t mipsnet_ioport_read(void *opaque, uint32_t addr)
b/hw/musicpal.c
562 562
    return 1;
563 563
}
564 564

  
565
static void eth_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
565
static ssize_t eth_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
566 566
{
567 567
    mv88w8618_eth_state *s = vc->opaque;
568 568
    uint32_t desc_addr;
......
586 586
                if (s->icr & s->imr)
587 587
                    qemu_irq_raise(s->irq);
588 588
                eth_rx_desc_put(desc_addr, &desc);
589
                return;
589
                return size;
590 590
            }
591 591
            desc_addr = desc.next;
592 592
        } while (desc_addr != s->rx_queue[i]);
593 593
    }
594
    return size;
594 595
}
595 596

  
596 597
static void eth_tx_desc_put(uint32_t addr, mv88w8618_tx_desc *desc)
b/hw/ne2000.c
224 224

  
225 225
#define MIN_BUF_SIZE 60
226 226

  
227
static void ne2000_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
227
static ssize_t ne2000_receive(VLANClientState *vc, const uint8_t *buf, size_t size_)
228 228
{
229 229
    NE2000State *s = vc->opaque;
230
    int size = size_;
230 231
    uint8_t *p;
231 232
    unsigned int total_len, next, avail, len, index, mcast_idx;
232 233
    uint8_t buf1[60];
......
238 239
#endif
239 240

  
240 241
    if (s->cmd & E8390_STOP || ne2000_buffer_full(s))
241
        return;
242
        return -1;
242 243

  
243 244
    /* XXX: check this */
244 245
    if (s->rxcr & 0x10) {
......
247 248
        if (!memcmp(buf,  broadcast_macaddr, 6)) {
248 249
            /* broadcast address */
249 250
            if (!(s->rxcr & 0x04))
250
                return;
251
                return size;
251 252
        } else if (buf[0] & 0x01) {
252 253
            /* multicast */
253 254
            if (!(s->rxcr & 0x08))
254
                return;
255
                return size;
255 256
            mcast_idx = compute_mcast_idx(buf);
256 257
            if (!(s->mult[mcast_idx >> 3] & (1 << (mcast_idx & 7))))
257
                return;
258
                return size;
258 259
        } else if (s->mem[0] == buf[0] &&
259 260
                   s->mem[2] == buf[1] &&
260 261
                   s->mem[4] == buf[2] &&
......
263 264
                   s->mem[10] == buf[5]) {
264 265
            /* match */
265 266
        } else {
266
            return;
267
            return size;
267 268
        }
268 269
    }
269 270

  
......
316 317
    /* now we can signal we have received something */
317 318
    s->isr |= ENISR_RX;
318 319
    ne2000_update_irq(s);
320

  
321
    return size_;
319 322
}
320 323

  
321 324
static void ne2000_ioport_write(void *opaque, uint32_t addr, uint32_t val)
b/hw/pcnet.c
1076 1076

  
1077 1077
#define MIN_BUF_SIZE 60
1078 1078

  
1079
static void pcnet_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
1079
static ssize_t pcnet_receive(VLANClientState *vc, const uint8_t *buf, size_t size_)
1080 1080
{
1081 1081
    PCNetState *s = vc->opaque;
1082 1082
    int is_padr = 0, is_bcast = 0, is_ladr = 0;
1083 1083
    uint8_t buf1[60];
1084 1084
    int remaining;
1085 1085
    int crc_err = 0;
1086
    int size = size_;
1086 1087

  
1087 1088
    if (CSR_DRX(s) || CSR_STOP(s) || CSR_SPND(s) || !size)
1088
        return;
1089
        return -1;
1089 1090

  
1090 1091
#ifdef PCNET_DEBUG
1091 1092
    printf("pcnet_receive size=%d\n", size);
......
1252 1253

  
1253 1254
    pcnet_poll(s);
1254 1255
    pcnet_update_irq(s);
1256

  
1257
    return size_;
1255 1258
}
1256 1259

  
1257 1260
static void pcnet_transmit(PCNetState *s)
b/hw/rtl8139.c
812 812
    }
813 813
}
814 814

  
815
static void rtl8139_do_receive(VLANClientState *vc, const uint8_t *buf, int size, int do_interrupt)
815
static ssize_t rtl8139_do_receive(VLANClientState *vc, const uint8_t *buf, size_t size_, int do_interrupt)
816 816
{
817 817
    RTL8139State *s = vc->opaque;
818
    int size = size_;
818 819

  
819 820
    uint32_t packet_header = 0;
820 821

  
......
828 829
    if (!s->clock_enabled)
829 830
    {
830 831
        DEBUG_PRINT(("RTL8139: stopped ==========================\n"));
831
        return;
832
        return -1;
832 833
    }
833 834

  
834 835
    /* first check if receiver is enabled */
......
836 837
    if (!rtl8139_receiver_enabled(s))
837 838
    {
838 839
        DEBUG_PRINT(("RTL8139: receiver disabled ================\n"));
839
        return;
840
        return -1;
840 841
    }
841 842

  
842 843
    /* XXX: check this */
......
854 855
                /* update tally counter */
855 856
                ++s->tally_counters.RxERR;
856 857

  
857
                return;
858
                return size;
858 859
            }
859 860

  
860 861
            packet_header |= RxBroadcast;
......
873 874
                /* update tally counter */
874 875
                ++s->tally_counters.RxERR;
875 876

  
876
                return;
877
                return size;
877 878
            }
878 879

  
879 880
            int mcast_idx = compute_mcast_idx(buf);
......
885 886
                /* update tally counter */
886 887
                ++s->tally_counters.RxERR;
887 888

  
888
                return;
889
                return size;
889 890
            }
890 891

  
891 892
            packet_header |= RxMulticast;
......
909 910
                /* update tally counter */
910 911
                ++s->tally_counters.RxERR;
911 912

  
912
                return;
913
                return size;
913 914
            }
914 915

  
915 916
            packet_header |= RxPhysical;
......
926 927
            /* update tally counter */
927 928
            ++s->tally_counters.RxERR;
928 929

  
929
            return;
930
            return size;
930 931
        }
931 932
    }
932 933

  
......
993 994
            ++s->tally_counters.MissPkt;
994 995

  
995 996
            rtl8139_update_irq(s);
996
            return;
997
            return size_;
997 998
        }
998 999

  
999 1000
        uint32_t rx_space = rxdw0 & CP_RX_BUFFER_SIZE_MASK;
......
1013 1014
            ++s->tally_counters.MissPkt;
1014 1015

  
1015 1016
            rtl8139_update_irq(s);
1016
            return;
1017
            return size_;
1017 1018
        }
1018 1019

  
1019 1020
        target_phys_addr_t rx_addr = rtl8139_addr64(rxbufLO, rxbufHI);
......
1118 1119
            s->IntrStatus |= RxOverflow;
1119 1120
            ++s->RxMissed;
1120 1121
            rtl8139_update_irq(s);
1121
            return;
1122
            return size_;
1122 1123
        }
1123 1124

  
1124 1125
        packet_header |= RxStatusOK;
......
1156 1157
    {
1157 1158
        rtl8139_update_irq(s);
1158 1159
    }
1160

  
1161
    return size_;
1159 1162
}
1160 1163

  
1161
static void rtl8139_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
1164
static ssize_t rtl8139_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
1162 1165
{
1163
    rtl8139_do_receive(vc, buf, size, 1);
1166
    return rtl8139_do_receive(vc, buf, size, 1);
1164 1167
}
1165 1168

  
1166 1169
static void rtl8139_reset_rxring(RTL8139State *s, uint32_t bufferSize)
b/hw/smc91c111.c
602 602
    return 1;
603 603
}
604 604

  
605
static void smc91c111_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
605
static ssize_t smc91c111_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
606 606
{
607 607
    smc91c111_state *s = vc->opaque;
608 608
    int status;
......
612 612
    uint8_t *p;
613 613

  
614 614
    if ((s->rcr & RCR_RXEN) == 0 || (s->rcr & RCR_SOFT_RST))
615
        return;
615
        return -1;
616 616
    /* Short packets are padded with zeros.  Receiving a packet
617 617
       < 64 bytes long is considered an error condition.  */
618 618
    if (size < 64)
......
625 625
        packetsize += 4;
626 626
    /* TODO: Flag overrun and receive errors.  */
627 627
    if (packetsize > 2048)
628
        return;
628
        return -1;
629 629
    packetnum = smc91c111_allocate_packet(s);
630 630
    if (packetnum == 0x80)
631
        return;
631
        return -1;
632 632
    s->rx_fifo[s->rx_fifo_len++] = packetnum;
633 633

  
634 634
    p = &s->data[packetnum][0];
......
676 676
    /* TODO: Raise early RX interrupt?  */
677 677
    s->int_level |= INT_RCV;
678 678
    smc91c111_update(s);
679

  
680
    return size;
679 681
}
680 682

  
681 683
static CPUReadMemoryFunc *smc91c111_readfn[] = {
b/hw/stellaris_enet.c
78 78
}
79 79

  
80 80
/* TODO: Implement MAC address filtering.  */
81
static void stellaris_enet_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
81
static ssize_t stellaris_enet_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
82 82
{
83 83
    stellaris_enet_state *s = vc->opaque;
84 84
    int n;
......
86 86
    uint32_t crc;
87 87

  
88 88
    if ((s->rctl & SE_RCTL_RXEN) == 0)
89
        return;
89
        return -1;
90 90
    if (s->np >= 31) {
91 91
        DPRINTF("Packet dropped\n");
92
        return;
92
        return -1;
93 93
    }
94 94

  
95 95
    DPRINTF("Received packet len=%d\n", size);
......
116 116

  
117 117
    s->ris |= SE_INT_RX;
118 118
    stellaris_enet_update(s);
119

  
120
    return size;
119 121
}
120 122

  
121 123
static int stellaris_enet_can_receive(VLANClientState *vc)
b/hw/usb-net.c
1369 1369
    return ret;
1370 1370
}
1371 1371

  
1372
static void usbnet_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
1372
static ssize_t usbnet_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
1373 1373
{
1374 1374
    USBNetState *s = vc->opaque;
1375 1375
    struct rndis_packet_msg_type *msg;
......
1377 1377
    if (s->rndis) {
1378 1378
        msg = (struct rndis_packet_msg_type *) s->in_buf;
1379 1379
        if (!s->rndis_state == RNDIS_DATA_INITIALIZED)
1380
            return;
1380
            return -1;
1381 1381
        if (size + sizeof(struct rndis_packet_msg_type) > sizeof(s->in_buf))
1382
            return;
1382
            return -1;
1383 1383

  
1384 1384
        memset(msg, 0, sizeof(struct rndis_packet_msg_type));
1385 1385
        msg->MessageType = cpu_to_le32(RNDIS_PACKET_MSG);
......
1398 1398
        s->in_len = size + sizeof(struct rndis_packet_msg_type);
1399 1399
    } else {
1400 1400
        if (size > sizeof(s->in_buf))
1401
            return;
1401
            return -1;
1402 1402
        memcpy(s->in_buf, buf, size);
1403 1403
        s->in_len = size;
1404 1404
    }
1405 1405
    s->in_ptr = 0;
1406
    return size;
1406 1407
}
1407 1408

  
1408 1409
static int usbnet_can_receive(VLANClientState *vc)
b/hw/virtio-net.c
361 361
    return 0;
362 362
}
363 363

  
364
static void virtio_net_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
364
static ssize_t virtio_net_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
365 365
{
366 366
    VirtIONet *n = vc->opaque;
367 367
    struct virtio_net_hdr_mrg_rxbuf *mhdr = NULL;
368 368
    size_t hdr_len, offset, i;
369 369

  
370 370
    if (!do_virtio_net_can_receive(n, size))
371
        return;
371
        return -1;
372 372

  
373 373
    if (!receive_filter(n, buf, size))
374
        return;
374
        return size;
375 375

  
376 376
    /* hdr_len refers to the header we supply to the guest */
377 377
    hdr_len = n->mergeable_rx_bufs ?
......
389 389
        if ((i != 0 && !n->mergeable_rx_bufs) ||
390 390
            virtqueue_pop(n->rx_vq, &elem) == 0) {
391 391
            if (i == 0)
392
                return;
392
                return -1;
393 393
            fprintf(stderr, "virtio-net truncating packet\n");
394 394
            exit(1);
395 395
        }
......
431 431

  
432 432
    virtqueue_flush(n->rx_vq, i);
433 433
    virtio_notify(&n->vdev, n->rx_vq);
434

  
435
    return size;
434 436
}
435 437

  
436 438
/* TX */
b/hw/xen_nic.c
243 243
    return 1;
244 244
}
245 245

  
246
static void net_rx_packet(VLANClientState *vc, const uint8_t *buf, size_t size)
246
static ssize_t net_rx_packet(VLANClientState *vc, const uint8_t *buf, size_t size)
247 247
{
248 248
    struct XenNetDev *netdev = vc->opaque;
249 249
    netif_rx_request_t rxreq;
......
251 251
    void *page;
252 252

  
253 253
    if (netdev->xendev.be_state != XenbusStateConnected)
254
	return;
254
	return -1;
255 255

  
256 256
    rc = netdev->rx_ring.req_cons;
257 257
    rp = netdev->rx_ring.sring->req_prod;
......
259 259

  
260 260
    if (rc == rp || RING_REQUEST_CONS_OVERFLOW(&netdev->rx_ring, rc)) {
261 261
	xen_be_printf(&netdev->xendev, 2, "no buffer, drop packet\n");
262
	return;
262
	return -1;
263 263
    }
264 264
    if (size > XC_PAGE_SIZE - NET_IP_ALIGN) {
265 265
	xen_be_printf(&netdev->xendev, 0, "packet too big (%lu > %ld)",
266 266
		      (unsigned long)size, XC_PAGE_SIZE - NET_IP_ALIGN);
267
	return;
267
	return -1;
268 268
    }
269 269

  
270 270
    memcpy(&rxreq, RING_GET_REQUEST(&netdev->rx_ring, rc), sizeof(rxreq));
......
277 277
	xen_be_printf(&netdev->xendev, 0, "error: rx gref dereference failed (%d)\n",
278 278
                      rxreq.gref);
279 279
	net_rx_response(netdev, &rxreq, NETIF_RSP_ERROR, 0, 0, 0);
280
	return;
280
	return -1;
281 281
    }
282 282
    memcpy(page + NET_IP_ALIGN, buf, size);
283 283
    xc_gnttab_munmap(netdev->xendev.gnttabdev, page, 1);
284 284
    net_rx_response(netdev, &rxreq, NETIF_RSP_OKAY, NET_IP_ALIGN, size, 0);
285

  
286
    return size;
285 287
}
286 288

  
287 289
/* ------------------------------------------------------------- */
b/net.c
593 593
    return slirp_inited;
594 594
}
595 595

  
596
static void slirp_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
596
static ssize_t slirp_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
597 597
{
598 598
#ifdef DEBUG_SLIRP
599 599
    printf("slirp input:\n");
600 600
    hex_dump(stdout, buf, size);
601 601
#endif
602 602
    slirp_input(buf, size);
603
    return size;
603 604
}
604 605

  
605 606
static int slirp_in_use;
......
945 946
    return len;
946 947
}
947 948

  
948
static void tap_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
949
static ssize_t tap_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
949 950
{
950 951
    TAPState *s = vc->opaque;
951
    int ret;
952
    for(;;) {
953
        ret = write(s->fd, buf, size);
954
        if (ret < 0 && (errno == EINTR || errno == EAGAIN)) {
955
        } else {
956
            break;
957
        }
958
    }
952
    ssize_t len;
953

  
954
    do {
955
        len = write(s->fd, buf, size);
956
    } while (len == -1 && (errno == EINTR || errno == EAGAIN));
957

  
958
    return len;
959 959
}
960 960

  
961 961
static int tap_can_send(void *opaque)
......
1311 1311
    }
1312 1312
}
1313 1313

  
1314
static void vde_receive(VLANClientState *vc, const uint8_t *buf, int size)
1314
static ssize_t vde_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
1315 1315
{
1316 1316
    VDEState *s = vc->opaque;
1317
    int ret;
1318
    for(;;) {
1319
        ret = vde_send(s->vde, (const char *)buf, size, 0);
1320
        if (ret < 0 && errno == EINTR) {
1321
        } else {
1322
            break;
1323
        }
1324
    }
1317
    ssize ret;
1318

  
1319
    do {
1320
      ret = vde_send(s->vde, (const char *)buf, size, 0);
1321
    } while (ret < 0 && errno == EINTR);
1322

  
1323
    return ret;
1325 1324
}
1326 1325

  
1327 1326
static void vde_cleanup(VLANClientState *vc)
......
1380 1379
} NetSocketListenState;
1381 1380

  
1382 1381
/* XXX: we consider we can send the whole packet without blocking */
1383
static void net_socket_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
1382
static ssize_t net_socket_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
1384 1383
{
1385 1384
    NetSocketState *s = vc->opaque;
1386 1385
    uint32_t len;
1387 1386
    len = htonl(size);
1388 1387

  
1389 1388
    send_all(s->fd, (const uint8_t *)&len, sizeof(len));
1390
    send_all(s->fd, buf, size);
1389
    return send_all(s->fd, buf, size);
1391 1390
}
1392 1391

  
1393
static void net_socket_receive_dgram(VLANClientState *vc, const uint8_t *buf, size_t size)
1392
static ssize_t net_socket_receive_dgram(VLANClientState *vc, const uint8_t *buf, size_t size)
1394 1393
{
1395 1394
    NetSocketState *s = vc->opaque;
1396
    sendto(s->fd, buf, size, 0,
1397
           (struct sockaddr *)&s->dgram_dst, sizeof(s->dgram_dst));
1395

  
1396
    return sendto(s->fd, buf, size, 0,
1397
                  (struct sockaddr *)&s->dgram_dst, sizeof(s->dgram_dst));
1398 1398
}
1399 1399

  
1400 1400
static void net_socket_send(void *opaque)
......
1831 1831
    uint32_t len;
1832 1832
};
1833 1833

  
1834
static void dump_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
1834
static ssize_t dump_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
1835 1835
{
1836 1836
    DumpState *s = vc->opaque;
1837 1837
    struct pcap_sf_pkthdr hdr;
......
1840 1840

  
1841 1841
    /* Early return in case of previous error. */
1842 1842
    if (s->fd < 0) {
1843
        return;
1843
        return size;
1844 1844
    }
1845 1845

  
1846 1846
    ts = muldiv64(qemu_get_clock(vm_clock), 1000000, ticks_per_sec);
......
1856 1856
        close(s->fd);
1857 1857
        s->fd = -1;
1858 1858
    }
1859

  
1860
    return size;
1859 1861
}
1860 1862

  
1861 1863
static void net_dump_cleanup(VLANClientState *vc)
b/net.h
8 8
typedef struct VLANClientState VLANClientState;
9 9

  
10 10
typedef int (NetCanReceive)(VLANClientState *);
11
typedef void (NetReceive)(VLANClientState *, const uint8_t *, size_t);
11
typedef ssize_t (NetReceive)(VLANClientState *, const uint8_t *, size_t);
12 12
typedef ssize_t (NetReceiveIOV)(VLANClientState *, const struct iovec *, int);
13 13
typedef void (NetCleanup) (VLANClientState *);
14 14
typedef void (LinkStatusChanged)(VLANClientState *);
b/tap-win32.c
650 650
    qemu_free(s);
651 651
}
652 652

  
653
static void tap_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
653
static ssize_t tap_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
654 654
{
655
    TAPState *s = opaque;
655
    TAPState *s = vc->opaque;
656 656

  
657
    tap_win32_write(s->handle, buf, size);
657
    return tap_win32_write(s->handle, buf, size);
658 658
}
659 659

  
660 660
static void tap_win32_send(void *opaque)

Also available in: Unified diff