The hardware ringbuffer Understanding the RTL-8139 mechanism for packet reception

advertisement
The hardware ringbuffer
Understanding the RTL-8139
mechanism for packet reception
Implementing a ringbuffer
Start address
Buffer length
Buffer storage
datum
HEAD
datum
datum
datum
TAIL
TAIL = where to insert the next datum
HEAD = where to remove the next datum
Some ringbuffer details
• When HEAD == TAIL the buffer is empty
• The HEAD and TAIL pointers advance to
the end of the buffer, then ‘wrap around’
• Some storage always remains unused
• When sizes of stored data-items are not
uniform, then the size of each item must
be stored somewhere – probably with the
item itself
RealTek’s implementation
Receive Buffer Start Address
Receive Configuration Register
(includes size of the buffer)
Buffer storage
data
data
= packet header (4-bytes)
= packet data (size varies)
data
CBR
Current Buffer
Register
(4-byte aligned)
CAPR
Current Address
of Packet to Read
(minus 16 bytes)
Packet-Header Format
15
14
13
5
4
M
A
R
P
A
M
B
A
R
I
S
E
R
U
N
T
reserved
3
L
O
N
G
2
1
0
C
R
C
F
A
E
R
O
K
Packet Status (least significant 16 bits)
31
16
Packet Length (most significant 16 bits)
LEGEND
MAR (Multicast Address Received)
PAM (Physical Address Matched)
BAR (Broadcast Address Received)
ROK = Received OK
FAE = Frame Alignment Error
CRC = CRC Error
LONG = Packet length exceeds 4KB
RUNT = Packet size below 64 bytes
ISE = Invalid Symbol Error
Receive Algorithm
•
•
•
•
•
•
•
Reset controller (bit #4 in register CR)
Allocate memory and program RBSTART
Enable reception (bit #3 in register CR)
Configure reception (RXCONFIG register)
Adjust CAPR for size of allocated buffer
Optionally unmask the receive interrupts
Await received packet(s) (bit #0 in CR)
Recall ‘RXCONFIG’ layout
32-bit register (offsets 0x44-0x47)
31
28 27
13
Rx FIFO
Threshold
23
18
Early Receive
Threshold
reserved
15
24
12
11
Rx Buf
Length
10
7
5
4
Max DMA
Burse Size
W
R
A
P
L
O
N
G
R
U
N
T
0
16
Mult Rx
ER ERR
INT 8
reserved
8
17
3
B
C
A
S
T
2
1
0
M
C
A
S
T
M
A
C
A
L
L
How to configure Rx
• Buffer length is the most crucial parameter
– 8KB (=00) with or without ‘wrap’
– 16KB (=01) with or without ‘wrap’
– 32KB (=10) with or without ‘wrap’
– 64KB (=11) (‘wrap’ is automatic)
• Next is which packets to receive:
– Broadcast, Multicast and MAC-Address Match
– (You do NOT want to receive ALL packets)
What about thresholds?
• The Linux driver offers us guidance
– Can use ‘none’ as Early Rx Threshold
– Can use ‘none’ as Rx FIFO Threshold
– Can use a ‘reserved’ DMA Burst size
• So the Linux driver used: 0x0000E70E
• But you can experiment with other values
In-class exercise #1
• Install our ‘user8139.c’ device-driver, and
take note of its buffer’s physical address
• Install our ‘dram.c’ device-driver, and use
‘fileview’ to look at the NIC Receive Buffer
• Then modify ‘nicstudy.cpp’ so that it will
enable (and configure) packet-recption
• Use ‘fileview’ to look at received packets
In-class exercise #2
• Now enhance your modified version of the
‘nicstudy’ application so that it will display
a succession of received packets (using
both hexadecimal and ascii formats), in a
manner similar to our ‘rxtester.cpp’ demo
• Be sure you ‘disable’ the packet reception
before you remove ‘user8139.ko’ from the
kernel – or risk a system ‘crash’ (Why?)
The ‘/etc/ethers’ file
• This file describes the list of associations
of Ethernet-addresses with IP-addresses
• It’s a text file, created with a text editor
• Each line describes one correspondence:
xx:xx:xx:xx:xx:xx
138.202.171.30
• But comments start with a #-character
• A sample ‘ethers’ file is on our website
Dynamic Address Resolution
• A standard Internet Protocol service exists
which provides a dynamic way for stations
to discover the Ethernet address that goes
with a given IP-address
• It is called ‘Address Resolution Protocol’
ARP request
A
B
request
C
D
E
Station ‘A’ wants to know the Ethernet Address for station ‘B’
So ‘A’ broadcasts an ARP request-packet to all other stations
ARP reply
A
B
reply
C
D
E
Station ‘B’ recognizes that the request is for its Ethernet Address.
So ‘B’ replies directly to ‘A’, and other stations ignore the request.
ARP packet-format
packet-header
Dest’n MAC Source MAC 0806
HTYPE=0001
broadcast
address for
ARP request
ARP packet-data
PTYPE=0008
HLEN (01) PLEN=04 OPER=0001/0002
source hardware address (6 bytes)
source protocol address (4 bytes)
destination hardware address (6 bytes)
destination protocol address (4 bytes)
All zeros for an
ARP request
Download