Data Sheet

Inline Functions—Ethernet Controller I210
247
7.0 Inline Functions
7.1 Receive Functionality
Typically, packet reception consists of recognizing the presence of a packet on the wire, performing
address filtering, storing the packet in the receive data FIFO, transferring the data to one of the 4
receive queues in host memory, and updating the state of a receive descriptor.
A received packet goes through two stages of filtering.
The first step in queue assignment is to verify that the packet is destined to the port. This is done by a
set of L2 filters as described in Section 7.1.3.
In the second stage, a received packet that successfully passed the Rx filters is associated with one or
more receive descriptor queues as described in Section 7.1.1.
7.1.1 L2 Packet Filtering
The receive packet filtering role is to determine which of the incoming packets are allowed to pass to
the local system and which of the incoming packets should be dropped since they are not targeted to
the local system. Received packets can be destined to the host, to a Manageability Controller (MC), or
to both. This section describes how host filtering is done, and the interaction with management
filtering.
As shown in Figure 7-1, host filtering has three stages:
1. Packets are filtered by L2 filters (MAC address, unicast/multicast/broadcast). See Section 7.1.1.1
for details.
2. Packets are then filtered by VLAN if a VLAN tag is present. See Section 7.1.1.2 for details.
3. Packets are filtered by the manageability filters (IP, flex, other). See Section 10.3.3 for details.
A packet is not forwarded to the host if any of the following takes place:
1. The packet does not pass MAC address filters as described later in this section.
2. The packet does not pass VLAN filtering as described later in this section.
3. The packet passes manageability filtering and then the manageability filters determine that the
packet should be sent only to the MC (see Section 10.3 and the MNGONLY register).
A packet that passes receive filtering as previously described might still be dropped due to other
reasons. Normally, only good packets are received. These are defined as those packets with no Under
Size Error, Over Size Error (see Section 7.1.1.4), Packet Error, Length Error and CRC Error are
detected. However, if the store-bad-packet bit is set (RCTL.SBP), then bad packets that pass the filter
function are stored in host memory. Packet errors are indicated by error bits in the receive descriptor
(RDESC.ERRORS). It is possible to receive all packets, regardless of whether they are bad, by setting
the promiscuous enabled (Unicast and Multicast) and the store-bad-packet bits in the RCTL register.