xgmac: Drop packets with eth_can_rx is false.

Signed-off-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Jason Wang <jasowang@redhat.com>
Message-id: 1436955553-22791-2-git-send-email-famz@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Fam Zheng 2015-07-15 18:19:02 +08:00 committed by Stefan Hajnoczi
parent 491a1f494e
commit 8c8c460c5f
1 changed files with 4 additions and 4 deletions
hw/net

View File

@ -312,10 +312,8 @@ static const MemoryRegionOps enet_mem_ops = {
.endianness = DEVICE_LITTLE_ENDIAN, .endianness = DEVICE_LITTLE_ENDIAN,
}; };
static int eth_can_rx(NetClientState *nc) static int eth_can_rx(XgmacState *s)
{ {
XgmacState *s = qemu_get_nic_opaque(nc);
/* RX enabled? */ /* RX enabled? */
return s->regs[DMA_CONTROL] & DMA_CONTROL_SR; return s->regs[DMA_CONTROL] & DMA_CONTROL_SR;
} }
@ -329,6 +327,9 @@ static ssize_t eth_rx(NetClientState *nc, const uint8_t *buf, size_t size)
struct desc bd; struct desc bd;
ssize_t ret; ssize_t ret;
if (!eth_can_rx(s)) {
return -1;
}
unicast = ~buf[0] & 0x1; unicast = ~buf[0] & 0x1;
broadcast = memcmp(buf, sa_bcast, 6) == 0; broadcast = memcmp(buf, sa_bcast, 6) == 0;
multicast = !unicast && !broadcast; multicast = !unicast && !broadcast;
@ -371,7 +372,6 @@ out:
static NetClientInfo net_xgmac_enet_info = { static NetClientInfo net_xgmac_enet_info = {
.type = NET_CLIENT_OPTIONS_KIND_NIC, .type = NET_CLIENT_OPTIONS_KIND_NIC,
.size = sizeof(NICState), .size = sizeof(NICState),
.can_receive = eth_can_rx,
.receive = eth_rx, .receive = eth_rx,
}; };