Revision 4f1c942b hw/xen_nic.c

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
/* ------------------------------------------------------------- */

Also available in: Unified diff