1 / 16

The hardware ringbuffer

The hardware ringbuffer. Understanding the RTL-8139 mechanism for packet reception. Implementing a ringbuffer. Start address. Buffer length. Buffer storage. datum. datum. datum. datum. TAIL. HEAD. TAIL = where to insert the next datum HEAD = where to remove the next datum.

Download Presentation

The hardware ringbuffer

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Implementing a ringbuffer Start address Buffer length Buffer storage datum datum datum datum TAIL HEAD TAIL = where to insert the next datum HEAD = where to remove the next datum

  3. 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

  4. RealTek’s implementation Receive Buffer Start Address Receive Configuration Register (includes size of the buffer) Buffer storage data data data CBR Current Buffer Register (4-byte aligned) CAPR Current Address of Packet to Read (minus 16 bytes) = packet header (4-bytes) = packet data (size varies)

  5. Packet-Header Format 15 14 13 5 4 3 2 1 0 M A R P A M B A R reserved I S E R U N T L O N G C R C F A E R O K Packet Status (least significant 16 bits) 31 16 Packet Length (most significant 16 bits) LEGEND ROK = Received OK MAR (Multicast Address Received) FAE = Frame Alignment Error PAM (Physical Address Matched) CRC = CRC Error BAR (Broadcast Address Received) LONG = Packet length exceeds 4KB RUNT = Packet size below 64 bytes ISE = Invalid Symbol Error

  6. 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)

  7. Recall ‘RXCONFIG’ layout 32-bit register (offsets 0x44-0x47) 31 28 27 24 23 18 17 16 reserved Early Receive Threshold reserved Mult ER INT Rx ERR 8 15 13 12 11 10 8 7 5 4 3 2 1 0 Rx FIFO Threshold Rx Buf Length Max DMA Burse Size W R A P 0 L O N G R U N T B C A S T M C A S T M A C A L L

  8. 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)

  9. 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

  10. 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

  11. 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?)

  12. 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

  13. 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’

  14. 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

  15. 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.

  16. ARP packet-format packet-header Dest’n MAC Source MAC 0806 ARP packet-data HTYPE=0001 PTYPE=0008 broadcast address for ARP request HLEN (01) PLEN=04 OPER=0001/0002 source hardware address (6 bytes) source protocol address (4 bytes) destination hardware address (6 bytes) All zeros for an ARP request destination protocol address (4 bytes)

More Related