ED(4)

명칭
ed - 고성능 이더넷(ethernet) 디바이스 드라이버

서식
device ed0 at isa? port 0x280 net irq 5 iomem 0xd8000 device ed1 at isa? port 0x300 net irq 5 iomem 0xd8000 device ed2 at isa? port 0x320 net irq 10 flags 0x4 iosiz 16384 iomem 0xd8000

해설
ed 드라이버는, National Semiconductor 의 DS8390 에 근거한다 8 또는 16 비트의 ISA 이더넷(ethernet) 카드와 다른 회사가 제조한 같은 NIC (역주: 네트워크 인터페이스 카드) (을)를 서포트합니다.

이 드라이버는 Western Digital 가 제조한 모든 80x3 시리즈의 ISA 이더넷(ethernet) 카드와 SMC, SMC Ultra, 3Com 3c503, Novell NE1000/NE2000, HP PC Lan+ 를 서포트합니다.

ed 드라이버는 독특한 멀티 버퍼 기구를 이용해, 높은 전송 성능을 달성하고 있습니다. 16 비트 ISA 카드를 사용했을 때에, IEEE 802.3 CSMA 이더넷(ethernet)의 이론 최대 성능의 97% 를 실현될 수 있습니다.

표준의, 포트나 IRQ 의 지정 기능에 가세해 8/16 비트 모드의 강제 기능, 멀티 버퍼의 유효화/무효화 기능, 그리고 디폴트 인터페이스 타입의 선택 기능 (AUI/BNC, twisted pair를 가지는 카드로는 AUI/10BaseT) (을)를 서포트한다, 얼마든지의 flags (을)를 ed 드라이버는 서포트하고 있습니다.

flags (은)는 비트 필드이며, 정리하면(자) 다음과 같이 됩니다:

0x01
    트랜시버를 무효로 합니다. 트랜시버를 서포트하는 카드로는, 이 플래그 (은)는 트랜시버를 무효로 해, 디폴트로 AUI 접속이 사용됩니다.

0x02
    강제적으로 8 비트 모드로 합니다. 이 플래그는, 카드가 자신을 어떻게 인식했다고 해도, 강제적으로 8 비트 모드로 합니다. 이 플래그는, 8 비트 인터페이스 밖에 가지고 있지 않음에도 불구하고, 자기 자신을 16 비트이다고 오인식 하는 몇개의 클론의 카드로 필요하게 됩니다.

0x04
    강제적으로 16 비트 모드로 합니다. 이 플래그는, 카드가 자신을 어떻게 인식했다고 해도, 강제적으로 16 비트 모드로 합니다. 이 플래그는, 16 비트 ISA 인터페이스를 가지고 있는 것에도 불구하고, 자기 자신을 8 비트이다고 오인식 하는 몇개의 클론의 카드로 필요하게 됩니다.

0x08
    멀티 버퍼에 의한 전송을 무효로 합니다. 이 플래그는, 복수의 전송 버퍼 의 사용을 금지합니다. 발송지의 머신을 취급할 수 있는 것보다도 빠르게 패킷을 보낼 때에 발생한다 경합 상태 (중대한 패킷 손실에 의해 압니다)로 필요하게 될지도 모릅니다. 몇개의 (FreeBSD 가 아니다 :-)) 머신은, 심한 이더넷(ethernet) 성능으로, 단순한 1100K+ 데이터 전송마저도 대처할 수 없습니다. 이 플래그를 사용하는 것은, 수신 버퍼를 패킷 1 개분 늘리는 가치도 있습니다. 또, 8 비트 카드상에서는, 수신 손실을 줄이는 도움이 될지도 모릅니다.

3c503 카드를 사용할 때, ifconfig(8) 에 link2 옵션을 지정하는 것에 의해, AUI 접속을 선택해도 괜찮습니다 (BNC 가 디폴트).

진단

ed%d: kernel configured irq %d doesn't match board configured irq %d. 커널 설정 파일 중(안)에서 지정되고 (커넬에 짜넣어지고) IRQ 번호가, 인터페이스 카드로 설정된 IRQ 와 다르고 있습니다.

ed%d: failed to clear shared memory at %x - check configuration. 시스템 부트 시에 카드가 프로브 되었을 때에, ed 드라이버가 카드의 공유 메모리를 클리어 할 수 없는 것이 판명되었습니다. 이것은 대체로, BIOS 의 확장 ROM 가 이더넷(ethernet) 카드의 공유 메모리와 같은 주소로 설정되어 있는 경우에 일어납니다. 부딪치고 있는 카드를 찾아내, BIOS ROM 를 충돌하지 않는 주소로 변경해 주세요. 또는, 카드의 공유 메모리가 충돌하지 않는 주소에 MAP 되도록(듯이), 커널 설정 파일내의 iomem 옵션을 변경해 주세요.

ed%d: Invalid irq configuration (%d) must be 2-5 for 3c503. 커널 설정 파일내에서 지정되어 있는 IRQ 번호가 3Com 3c503 카드에 있어 부정합니다. 3x503 에는, IRQ 2 에서 5 까지 마셔 할당하고 가능합니다.

ed%d: Cannot find start of RAM.

ed%d: Cannot find any RAM, start : %d, x = %d. 카드의 파켓트메모리의 설정중에, Gateway 제 카드의 프로브에 실패했습니다. 이것은, 잘못해 카드를 Gateway 제이다고 인식했는지, 카드가 망가져 있는 것을 나타내고 있을 가능성이 높습니다.

ed: packets buffered, but transmitter idle. 드라이버의 논리적인 문제를 나타내고 있습니다. 이것은 우선 일어나지 않을 것입니다.

ed%d: device timeout 예기 된 전송 세치기가 생기지 않았던 것을 나타내고 있습니다. 통상, ISA 버스의 다른 카드와의 세치기의 충돌에 의해 일어납니다.

ed%d: NIC memory corrupt - invalid packet length %d. IEEE 802.3 표준으로 용서되고 있는 최대장보다 큰 사이즈 또는 최소장보다 짧은 사이즈의 패킷이 수신된 것을 나타내고 있습니다. 통상, ISA 버스의 다른 카드와의 충돌에 의해 일어납니다만, 경우에 따라서는 잘못한 케이블의 끌고 다니기를 나타내고 있는 일도 있습니다.

ed%d: remote transmit DMA failed to complete. 이것은, NE1000 나 NE2000 의 형태의 카드에의 프로그램 I/O 전송을 올바르게 완료 할 수 없었던 것을 나타내고 있습니다. 통상, ISA 버스 속도의 설정이 너무 빨랐을 경우에 일어납니다.

경고
DS8390 칩의 초기 리버젼에는 문제가 있습니다. 수신 링 버퍼가 흘러넘치면(자) 굳어져 버립니다. 때로는 패킷 링 헤더내의 길이 필드의 바이트순서를 바꾸어 버려 (이 원인으로서 off-by-one alignment에 관련한 것이 몇개인가 있습니다),"NIC memory corrupt - invalid packet length" 그렇다고 하는 메세지를 출력합니다. 이러한 문제가 일어나면(자) 카드는 리셋트 됩니다만, 이 상태로부터의 회복에 관한 그 외의 문제는 없습니다.

NIC 메모리의 액세스는, 3Com 나 Novell 의 카드로는 WD/SMC 의 카드보다 매우 늦습니다. 8 비트 보드에서는 1 MB/초이하, 16 비트 카드로는 2 MB/초이하가 됩니다. 현저한 네트워크 트래픽이 있는 경우에, 링 버퍼가 넘쳐 패킷을 떨어뜨리게 될지도 모릅니다.

16 비트 Compex 카드는 자신이 8 비트이다고 인식합니다. 이 카드는 8 비트 모드에서도 동작합니다만, 커널 설정 파일에 flags 0x04 (16 비트 모드를 강제한다)(을)를 지정하면(자), 보다 높은 성능을 얻을 수 있습니다. 게다가 16 비트 모드가 제공하는 추가의 8k 의 공유 메모리를 이용하기 위해서, iosize 16384 도 지정하는 것이 좋을 것입니다.

버그
ed 드라이버는, 부정한 패킷을 수신했을 때에는, 조금 적극적으로 카드를 리셋트 너무 하는 싫지만 있습니다. 결과적으로, 수신한 정당한 패킷으로, 카드로부터 주메모리에 전송 하고 있지 않는 것을, 버리게 될지도 모릅니다.

관련 항목
arp(4), netintro(4), ifconfig(8)

역사
ed 디바이스 드라이버는, FreeBSD 1.0 그리고 최초로 등장했습니다.

저자
ed 디바이스 드라이버와 본메뉴얼은 David Greenman 하지만 썼습니다.