Revision 067d01de hw/eepro100.c
b/hw/eepro100.c | ||
---|---|---|
1496 | 1496 |
} else if (size < 64 && (s->configuration[7] & 1)) { |
1497 | 1497 |
/* Short frame and configuration byte 7/0 (discard short receive) set: |
1498 | 1498 |
* Short frame is discarded */ |
1499 |
logout("%p received short frame (%d byte)\n", s, size);
|
|
1499 |
logout("%p received short frame (%zu byte)\n", s, size);
|
|
1500 | 1500 |
s->statistics.rx_short_frame_errors++; |
1501 | 1501 |
//~ return -1; |
1502 | 1502 |
} else if ((size > MAX_ETH_FRAME_SIZE + 4) && !(s->configuration[18] & 8)) { |
1503 | 1503 |
/* Long frame and configuration byte 18/3 (long receive ok) not set: |
1504 | 1504 |
* Long frames are discarded. */ |
1505 |
logout("%p received long frame (%d byte), ignored\n", s, size);
|
|
1505 |
logout("%p received long frame (%zu byte), ignored\n", s, size);
|
|
1506 | 1506 |
return -1; |
1507 | 1507 |
} else if (memcmp(buf, s->macaddr, 6) == 0) { // !!! |
1508 | 1508 |
/* Frame matches individual address. */ |
1509 | 1509 |
/* TODO: check configuration byte 15/4 (ignore U/L). */ |
1510 |
TRACE(RXTX, logout("%p received frame for me, len=%d\n", s, size));
|
|
1510 |
TRACE(RXTX, logout("%p received frame for me, len=%zu\n", s, size));
|
|
1511 | 1511 |
} else if (memcmp(buf, broadcast_macaddr, 6) == 0) { |
1512 | 1512 |
/* Broadcast frame. */ |
1513 |
TRACE(RXTX, logout("%p received broadcast, len=%d\n", s, size));
|
|
1513 |
TRACE(RXTX, logout("%p received broadcast, len=%zu\n", s, size));
|
|
1514 | 1514 |
rfd_status |= 0x0002; |
1515 | 1515 |
} else if (buf[0] & 0x01) { // !!! |
1516 | 1516 |
/* Multicast frame. */ |
1517 |
TRACE(RXTX, logout("%p received multicast, len=%d\n", s, size));
|
|
1517 |
TRACE(RXTX, logout("%p received multicast, len=%zu\n", s, size));
|
|
1518 | 1518 |
/* TODO: check multicast all bit. */ |
1519 | 1519 |
assert(!(s->configuration[21] & BIT(3))); |
1520 | 1520 |
int mcast_idx = compute_mcast_idx(buf); |
... | ... | |
1524 | 1524 |
rfd_status |= 0x0002; |
1525 | 1525 |
} else if (s->configuration[15] & 1) { |
1526 | 1526 |
/* Promiscuous: receive all. */ |
1527 |
TRACE(RXTX, logout("%p received frame in promiscuous mode, len=%d\n", s, size));
|
|
1527 |
TRACE(RXTX, logout("%p received frame in promiscuous mode, len=%zu\n", s, size));
|
|
1528 | 1528 |
rfd_status |= 0x0004; |
1529 | 1529 |
} else { |
1530 |
TRACE(RXTX, logout("%p received frame, ignored, len=%d,%s\n", s, size,
|
|
1530 |
TRACE(RXTX, logout("%p received frame, ignored, len=%zu,%s\n", s, size,
|
|
1531 | 1531 |
nic_dump(buf, size))); |
1532 | 1532 |
return size; |
1533 | 1533 |
} |
Also available in: Unified diff