Chapter 3
Configuring the Networking Hardware


D.M.Z CONTENT PRE NEXT

3.1 Devices, Drivers, and all that
3.2 Kernel Configuration
3.3 A Tour of Linux Networking Devices
3.4 Ethernet Installation
3.5 The PLIP Driver
3.6 The SLIP and PPP Drivers

3.1 Devices, Drivers, and all that

지금까지, 우리는 네트웍 인터페이스와 일반적인 TCP/IP 이슈에 대해 약간이나마 살펴보았다. 그러나 커널 내부의 "네트워킹 코드"가 한 하드웨어에 접근할 때, 실제로 어떤 일이 일어나는 지는 언급하지 않았다. 이를 위해, 인터페이스와 드라이버(driver)의 개념에 대해 약간 얘기하고자 한다.

먼저, 이더넷 보드같은 하드웨어 자체에 대해: 이것은 쓸데없는 숫자가 적혀있는 수많은 소규모 칩으로 어질러진 합성수지 판으로, PC의 슬롯(slot)에 꽃혀 있다. 이것을 일컬어 흔히 디바이스(device)라 부른다.

이더넷 보드를 사용가능토록, 이 디바이스에 접근하는 방법을 알려주는 function이 커널 내부에 존재하는데, 이를 가리켜 흔히 디바이스 드라이버라 한다. 예를 들어, 리눅스에선 여러회사 제품의 이더넷 보드가 기능상 유사하다. 이것을 창시자 Donald Becker의 이름을 따, "Becker Series"라 부른다. 또 다른 예로, 패러랠(parallel) 포트에 붙이는 D-Link pocket adapter를 제어하는 D-Link 드라이버가 있다.

그러나, 드라이버가 디바이스를 "제어한다"고 말하는 의미는 무엇인가? 위의 이더넷 보드로 돌아가 보자. 드라이버는 주변장치의 on-board logic(디바이스의 칩속에 내장된, 계폐회로 요소의 상호 접속등에 관한 기준적 원칙 - 역자주)과 교신할 수 있다. 즉, 드라이버는 보드에 커맨드와 데이터를, 보드는 수신된 데이터를 드라이버에 전한다.

PC에서, 이러한 교신은 on-board register나 그 비슷한 것에 매핑된 I/O 메모리를 통해서 이루어진다. 커널이 보드로 보낸 모든 커맨드와 데이터는 이 레지스터를 통과한다. I/O 메모리는 일반적으로 그것의 starting 또는 base address를 줌으로써 기록된다. 일반적으로, 이더넷 보드의 base address는 0x300 또는 0x360이다.

특별한 경우가 아니라면, base address같은 하드웨어적인 이슈에 대해서 걱정하지 않아도 된다. 왜냐 하면, 부팅시에 커널이 보드의 위치를 찾기위한 시도를 하기때문이다. 이를 가리켜 autoprobing이라 하는데, 이는 커널이 몇몇 메모리 영역을 읽어 이더넷 보드가 설치되어 있을 경우와 비교하는 것이다. 그러나, 이더넷 보드를 자동적으로 찾지 못할 수도 있는데, 때때로 싸구려 카드가 다른 업체의 표준 보드에 완벽하게 호환되지 않을 때 발생하는 일이다. 커널은 부팅시에 하나의 이더넷 디바이스만을 찾기 때문에, 그 이상의 보드를 사용한다면 커널에게 그 보드에 관해 명확하게 얘기해줘야 한다.

커널에게 말해줘야 할 또다른 매개변수(parameter)는 interrupt request channel이다. 하드웨어 구성요소는 그들에 대한 주의가 필요하다고 생각할 때, 즉 데이터가 수신되거나 특수한 상태가 발생했을 때, 보통 커널을 인터럽트한다. PC에서, 인터럽트는 0,1 그리고 3에서 15까지의 수가 매겨진 15개의 인터럽트 채널 중 하나에서 일어날 수 있는데, 하드웨어 구성요소에 지정된 인터럽트 번호를 흔히 interrupt request number, 또는 IRQ라 한다.

Chapter 2에서 보았던 것처럼, 커널은 디바이스에 인터페이스라는 것을 통해 접근한다. 인터페이스는 데이터그램을 보내거나 받거나하는 것 같은, 모든 하드웨어 타입에 동일한, 추상적인 함수 셋을 제공한다.

인터페이스는 이름으로써 인식되는데, 이 이름은 /dev 디렉토리의 디바이스 파일이 아니라, 커널에 내부적으로 정의되어 있다.(/dev 디렉토리하의 디바이스 파일은 stream을 파일 시스템처럼 나타낸 것이다. 리눅스와 같은 UN*X에서는 대부분 디바이스에 대한 접근을 파일 또는 stream을 열고, 닫고, 쓰고, 읽는 형식으로 한다. -역자주) 이더넷 인터페이스의 일반적인 명칭은 eth0, eth1, 등이다. 디바이스에 인터페이스를 지정하는 것은 보통 디바이스가 설정된 순서에 따른다. 예를 들면, 즉 첫번째로 설치된 것이 etho, 그 다음이 eth1 등이 되는 식이다. 이에대한 단 한가지 예외는 SLIP 인터페이스의 규칙이며, 이는 동적으로 지정된다. 다시 말해, SLIP 연결이 성립되면 시리얼 포트에 인터페이스가 지정된다.

그림 3.1의 그림에서 하드웨어와 디바이스 드라이버, 그리고 인터페이스간의 관계를 보여주고자 한다.

부팅시에 커널은 어떤 디바이스가 감지되는지, 어떤 인터페이스를 설치하는지 표시해 준다. 다음은 보편적인 부팅화면의 일부분이다.
      .
      .
     This processor honours the WP bit even when in supervisor mode. Good.
     Floopy drive(s): fd0 is 1.44M
     Swansea University Computer Society NET3.010
     IP Protocols: ICMP, UDP, TCP
     PPP: Version 0.2.1 (4 channels) OPTIMIZE_FLAGS
     TCP compression code copyright 1989 Regents of the University of 
     California
     PPP line discipline registered.
     SLIP: version 0.7.5 (5 channels)
     CSLIP: code copyroght 1989 Regents of the University of California
     dl0: D-Link DE-600 pocket adapter, Ethernet Address: 00:80:C8:71:76:95
     Checking 386/387 coupling... Ok, fpu using exception 16 error reporting.
     Linux version 1.1.11 (okir@monad) #3 Sat May 7 14:57:18 MET DST 1994

이것은 커널이 TCP/IP를 사용하도록, 그리고 SLIP, CSLIP, PPP 드리이버를 포함하여 컴파일 되어 있음을 보여준다. 밑에서 3번째 줄은 D-Link pocket adapter가 감지되고, 그에 dl0 인터페이스를 설치하였음을 보여준다. 만약 당신이 다른 인터넷 카드를 가지고 있다면, 커널은 보통 감지한 카드 타입밑에 eth0로 시작하는 줄을 표시할 것이다. 그러나 만약, 이더넷 카드를 설치했음에도 그런 메시지를 보지 못한다면, 이는 커널이 당신의 보드를 찾지 못함을 의미한다. 이에 관해선 다음 절에서 다룬다.


3.2 Kernel Configuration

대부분의 리눅스 배포판에 딸린 부트디스크는 모든 일반적인 타입의 PC 하드웨어에서 동작한다. 이 말은 즉, 그러한 부트디스크의 커널은 당신이 필요로 하지 않는 모든 종류의 드라이버를 지니고 있지만, 커널의 일부분만을 교체할 수 없기 때문에 귀중한 시스템 메모리를 낭비하게 된다는 것이다. 그러므로, 보통 당신이 필요로하는 드라이버만을 포함한 커널을 돌리게 된다.

리눅스 시스템을 운영하고자 하면, 커널을 만드는데 익숙해져야 할 것이다. 이에 대한 기본은 Linux Documentation Project (LDP)중의 하나인 Matt Welsh의 "Installation and Getting Started" 가이드에서 설명하고 있다. 이 절에선, 단지 네트워킹에 관계된 설정옵션만을 논의하고자 한다.

make config을 실행시, 커널 math emulation을 할건지 말건지와 같은 일반적인 설정에 대한 질문을 먼저 받게된다. 이들 중의 한 가지는 TCP/IP 네트워킹을 지원할 것인지에 대한 것이다, 네트워킹이 가능한 커널을 얻기 위해선 y를 선택해야 한다.

3.2.1 Kernel Opetin in Linux 1.0 and Higher

커널의 일반적인 옵션을 설정하고 나면, SCSI 드라이버와 같은 다양한 특성등에 대한 설정을 물어오게되고, 뒤이어 네트워킹 지원에 연관된 사항을 늘어 놓는다. 그리고 정밀한 설정옵션은 커널의 발전에 따라 계속 증가할 것이다. 커널 버전 1.0과 1.1에서 제공하는 일반적인 옵션은 다음과 같다. (해설은 이탤릭체로 표기되어 있다):

     *
     * Network device support
     *
     Network device support? (CONFIG_ETHERCARDS) [y]

괄호안의 매크로에 신경쓰지 말고, 당신이 어떤 타입의 네트워킹 디바이스를 사용하건 (그것이 이더넷이든, SLIP 또는 PPP이건) y를 선택해야한다. 이것에 y를 선택하면 이더넷 타입 디바이스에 대한 지원을 자동적으로 하고, 다른 타입의 네트웍 드라이버에 대한 지원은 개별적으로 켜줄 수 있다.

     SLIP (serial line) support? (CONFIG_SLIP) [y]
      SLIP compressed headers (SL_COMPRESSED) [y]
     PPP (point-to-point) support? (CONFIG_PPP) [y]
     PLIP (parallel port) support? (CONFIG_PLIP) [n]

이러한 사항은 리눅스가 지원하는 다양한 link layer protocol에 대해 고려한다. SLIP은 시리얼 라인을 통해 IP 데이터그램을 전송케한다. compressed header 옵션은 TCP/IP 헤더를 3바이트로 압축하는 기술인 CSLIP을 지원하게 한다. 하나, 이것이 CSLIP을 자동으로 켜진 않는다. 단지 그에 필요한 커널 함수를 제공할 뿐이다.

PPP는 시리얼 라인을 통해 네트웍 traffic을 보내는 또다른 프로토콜이다. PPP는 SLIP보다 유연성있고, 또한 IP에만 제한되지 않으며 IPX까지도 지원한다. PPP가 최근에 완성된 것인만큼 이 옵션이 커널에 포함되어 있지 않을 수도 있다. (물론 옛날 얘기다-역자주)

PLIP은 패러랠 포트를 통하여 IP데이터그램을 송신할 수 있는 방법이다. 보통 DOS로 운영되는 PC간의 통신에 쓰인다.

다음의 사항은 여러 공급원의 이더넷 보다와 관련된 것으로, 더 많은 드라이버가 현재 개발중이기 때문에 이 항목외에 추가된 사항을 볼 수도 있을 것이다. 만약 여러 다른머신에서 사용할 수 있는 커널을 만들기 원한다면, 하나 이상의 드라이버를 포함시킬 수도 있다.

     NE2000/NE1000 support (CONFIG_NE2000) [y]
     WD80*3 support (CONFIG_WD80x3) [n]
     SMC Ultra support (CONFIG_ULTRA) [n]
     3c501 support (CONFIG_EL1) [n]
     3c503 support (CONFIG_EL2) [n]
     3c509/3c579 support (CONFIG_EL3) [n]
     HP PCLAN support (CONFIG_HPLAN) [n]
     AT1500 and NE2100 (LANCE and PCnet-ISA) support (CONFIG_LANCE) [n]
     AT1700 support (CONFIG_AT1700) [n]
     DEPCA support (CONFIG_DEPCA) [n]
     D-Link DE600 pocket adaptor support (CONFIG_DE600) [y]
     AT-LAN-TEC/RealTek pocket adaptor support (CONFIG_ATP) [n]
     *
     * CD-ROM drivers
     *
     ...

마지막으로 파일시스템 부분에서는, NFS를 지원할 것인지 묻는다. NFS는 파일시스템을 여러 호스트에 export 시킬수 있게 함으로써, 마치 파일이 보통 하드디스크에 있는 것처럼 보이게 한다.

     NFS filesystem support (CONFIG_NFS_Fs) [y]

3.2.2 Kernel Options in Linux 1.1.14 and Higher

IPX 지원의 알파버전이 추가된 리눅스 1.1.14에서는 이 설정 프로시저가 약간 바뀌었다. 일반 옵션부분에서 보통 네트워킹 지원여부를 묻고, 곧이어 자잘한 네트워킹 옵션에 대한 두어개의 질문을 한다.

     *
     * Networking options
     *
     TCP/IP networking (CONFIG_TNET) [y]

TCP/IP 네트워킹을 사용하기 위해서는 y라고 대답해야 한다. 그러나 n을 선택했을 경우에도 IPX를 지원하게끔 커널을 컴파일 할 수 있다.

     IP forwarding/gatewaying (CONFIG_FORWARD) [n]

만약 시스템을 두 이더넷 간, 혹은 이더넷과 SLIP 링크 사이 등의 게이트웨이로 쓰고자 한다면 이 옵션을 켜 두어야 한다. 물론 이 옵션을 이본으로 켜 두어도 별 상관 없지만, 호스트를 소위 firewall이라는 것으로 설정하려면 이것을 꺼 주어야 할 것이다. firewall이란 둘 이상의 네트웍에 연결은 되어 있지만 그들간에 traffic을 라우트 시키지 않는 호스트를 말한다. 이는 사용자가 기없의 네트웍을 통하여 내부에 최소한의 위험부담을 주며 인터넷에 억세스하도록 하는데 보통 쓰인다. 사용자는 파이어월에 로그인하여 인터넷 서비스를 사용할 수 있지만, 내부로의 연결이 파이어월을 통과할 수 없으므로 외부의 어택으로부터 기업의 머신을 보호할 수 있다.

     *
     * (it is saft to leave these untouched)
     *
     PC/TCP compatibility mode (CONFIG_INET_PCTCP) [n]

이 옵션은 DOS기반 PC의 상용 implementation인 PC/TCP의 몇몇 버전과의 비호환성을 보완해준다. 이 옵션을 켜 두어도 일반 UN*X머신과 통신이 가능하지만, 느린 링크 때문에 퍼포먼스는 떨어진다.

     Reverse ARP (CONFIG_INET_RARP) [n]

이것은 RARP (Reverse Address Resolution Protocol)를 사용가능케 한다. RARP는 디스크없는 클라이언트나 X-터미널이 부팅시에 자신의 IP 주소를 얻는데 쓰인다. 이런 류의 클라이언트의 서버로 쓰기 원한다면 반드시 RARP를 사용가능토록 해야한다. 최근의 네트웍 유틸리티 패키지(net-0.32d)엔 rarp라고 하는, 시스템을 RARP 캐쉬에 첨부하는 작은 유틸리티가 포함되어 있다.

     Assume subnets are local (CONFIG_INET_SNARL) [y]

TCP 상에서 데이터를 보낼 때, 커널은 그것을 IP에 넘겨주기에 앞서 stream을 패킷으로 나누어야 한다. 이더넷과 같은 로컬 네트웍을통해 다다를 수 있는 호스트에겐, 먼 거리의 링크를 통해 갈 수 있는 곳의 호스트보다 큰 패킷을 사용할 것이다. 만약 SNARL을 켜두지 않는다면, 커널은 실제로 인터페이스로 접속된 네트웍만을 로컬이라고 간주할 것이다. 그러나 Groucho Marx University의 class B 네트웍을 보면 모든 class B네트웍이 로컬이라 할 수 있으나, 대부분의 호스트는 하나 또는 두개의 서브넷과 맞닿아 있다. 만약 SNARL 옵션을 켜두면, 커널은 모든 서브넷을 로컬로 간주하고 캠퍼스내의 모든 호스트와 통신할 때 덩치 큰 패킷을 사용할 것이다.

만약 특정 호스트에 보다 작은 크기의 패킷을 사용하여 데이터를 보내고자 한다면(가령, SLIP 링크를 통해 데이터가 전송된다고 할 때), 당신은 routemtu 옵션을 사용할 수 있으며, 이에 대해선 이 chapter의 마지막 부분에서 간략하게나마 논하고자 한다.

     Disable NAGLE algorithm (normally enabled) (CONFIG_TCP_NAGLE_OFF) [n]

Nagle의 법칙은 소위 타이니그램(tinygram)이라는 작은 IP 패킷을 특정하게 보내는 것을 피하고자 하는 규칙이다. 타이니그램은 보통 telnet이나 rsh처럼 single keystroke을 전송하는 인터랙티브 네트워킹 툴이 생성하는 것으로, 이것은 SLIP같은 bandwidth에서는 아주 효율성이 떨어진다. Nagle 알고리즘은 어떤 상황에서 TCP 데이터를 잠시 잡아둠으로써 위의 상황을 방지하려 한다. 그러나 패킷이 drop되는 문제가 있다면 Nagle 알고리즘을 사용하지 않을 수도 있다.

     The IPX protocol (CONFIG_IPX) [n]

이것은 IPX, 즉 Novell 네트워킹에 사용되는 전송 프로토콜인 IPX 지원을 하도록 한다. 이는 현재 개발중에 있고, 또한 아직 그다지 쓸만하지도 않다. 이것의 한가지 이점이라면, 언젠가는 IPX 기반 DOS 유틸리티와 데이터를 교환하고, PPP 링크를 통해 Novell 기반 네트웍간에 traffic을 라우트 시키는 것일게다. 그러나, Novell 네트워킹의 high-level 프로토콜이 지원될 날은 멀게 느껴지며, 그에대한 특허는 무시무시할 정도의 비용과 비공개 승인에 의해서만 사용가능하다.

1.1.16 커널부터, 리눅스는 또다른 드라이버 타입인 dummy 드라이버를 지원한다. 다음의 질문이 디바이스 드라이버 부분에 뜬다.

     Dummy net driver support (CONFIG_DUMMY) [y]

dummy 드라이버는 실제로 큰 역할을 하지 않으나, standalone 또는 SLIP 호스트에서는 꽤 유용하다. 그것은 한 마디로 masquerade된 loopback 인터페이스이며, 이더넷 없이 SLIP에 의존하는 호스트가 당신의 IP 주소를 계속 지니고 있기를 원할 때 사용한다. 이에대한 보다 깊은 설명은 chapter5의 The Dummy Interface에서 할 것이다.


3.3 A Tour of Linux Network Devices

리눅스 커널은 다양한 장비의 타입에 따라 많은 수의 하드웨어 드라이버를 지원한다. 이 절에선 사용가능한 드라이버에 대한 간략한 개요와 그에 주어진 인터페이스 명칭을 제시한다.

아래에 나열된 것 같은 리눅스의 표준 인터페이스 명칭은 여러개 있는데, 대부분의 드라이버가 하나 이상의 인터페이스를 지원할 수 있으며, 이 때 인터페이스엔 eth0,eth1 등과 같이 번호가 매겨진다.

lo 로컬 loopback 인터페이스. 네트웍 어플리케이션 등의 테스트를 위한 목적으로 사용된다. 이것은 마치 폐쇠회로처럼, 여기에 쓴 데이터그램은 그 즉시 호스트의 네트웍 레이어로 되돌아 온다. 커널엔 단 하나의 loopback 디바이스가 있으며, 상식적으로 그 이상 또는 그 이하일 필요가 없다.
ethn n번째 이더넷 카드. 이는 대부분의 이더넷 카드가 가지는 일반적인 인터페이스 명이다.
dln 이 인터페이스는, 또다른 이더넷 디바이스인 D-Link DE-600 pocket adaptor에 억세스하며, 이것은 패러랠 포트를 통해 제어되는 점이 약간 특이하다.
sln n번째 SLIP 인터페이스. SLIP 인터페이스는 그것이 SLIP에 allocate된 순서대로 시리얼 라인과 연계된다. 즉, 첫번째 시리얼 라인이 sl0 등으로 설정되는 식이다. 커널은 최대 4개 까지의 SLIP 인터페이스를 지원한다.
pppn n번째 PPP 인터페이스. SLIP 인터페이스와 마찬가지로, PPP 모드로 변환된 순서대로 시리얼 라인과 연계된다. 최대 4개 까지의 인터페이스가 지원된다.
plipn n번째 PLIP 인터페이스. PLIP은 패러랠 라인을 통해 IP 데이터그램을 운반한다. 최대 3개까지의 PLIP 인터페이스가 지원되며, 시스템 부팅시에 PLIP 드라이버에 연계되고 패러랠 포트에 map 된다.

나중에는 ISDN이나 AX.25 또는 그 외에 아직 소개되지 않은 인터페이스 드라이버가 추가될 것이다. IPX(Novell 네트워킹 프로토콜)과 AX.25(ham radio 아마츄어가 사용하는)는 현재 개발중이며, 아직 alpha stage에 머무르고 있다.

이후의 섹션에서 우리는 위에 적힌 드라이버의 사용에 관계된 사항을 논하고자 한다.


3.4 Ethernet Installation

현재 리눅스 네트웍 코드는 여러 상표의 이더넷 가드를 지원한다. 대부분의 드라이버는, National Semiconductor 8390 chip에 기반을 둔 카드들의 드라이버의 저자인 Donald Becker (becher@cesdis.gsfc.nasa.gov)에 의해 쓰여졌으며, 이들은 Becker Series Driver로 알려지게 되었다. 패러랠 포트를 통해 이더넷 억세스하게 하는 D-Link pocker adapter중, D-Link의 제품군의 드라이버 역시 존재한다. 이것의 드라이버는 BjΦrn Ekwall (bj0rn@blox.se)가, DEPCA 드라이버는 David C. Davies (davies@wanton.lkg.dec.com)가 작성했다.

3.4.1 Ethernet Cabling

태어나서 처음으로 이더넷을 설치할 경우를 위해, 케이블링에 관한 약간의 도움말을 적어 놓았다. 이더넷에서 케이블링을 적절하게 하는 것은 여간 까다로운 일이 아니다. 케이블의 양 끝간의 저항이 50 Ohm을 넘어서는 안되며, 케이블에 가지를 쳐서도 (즉, 케이블 3개를 별 모양으로 연결하는 것) 안된다. thin 동축케이블을 T형 BNC의 중계로 사용할 때, 접합점은 보드의 커넥터에 직접 꼬아져 있어야 한다. 즉, 케이블 세그먼트를 집어 넣어선 안된다.

thicknet에 연결하고자 할 때는, 호스트를 transceiver(때때로 Ethernet Attachment Unit으로도 불리는)로 연결해야 한다. transceiver는 보드상의 15-pin AUI포트에 직접 꽂을 수 있지만, 차폐된 케이블을 사용하는 편이 낫다.

3.4.2 Supported Boards

이더넷 HOWTO에서 지원되는 보드의 완전한 목록은 매달마다 Paul Gortmaker에 의해 comp.os.linux.announce에 포스팅 된다.

다음은 리눅스에서 지원된다고 널리 알려진 보드의 목록이다. HOWTO의 현행 목록은 3차례에 걸쳐 증가되었다. 그러나, 만약 여기에서 당신의 보드를 찾았다 하더라도 HOWTO를 먼저 검토해 보라. 거기엔 이러한 카드의 동작에 대한 중요한 항목이 때때로 있기도 하니까 말이다. 몇몇 DMA기반 이더넷 보드는 Adaptec 1542 SCSI 컨트롤러와 같은 DMA 채널을 사용하기도 하는데, 둘 중 하나의 DMA 채널을 다른 곳으로 옮기지 않는다면 이더넷 보드가 패킷 데이터를 하드디스크에 쓸 수 없을 것이다.

3Com EtherLink
3c507과 3c509, 그리고 3c503, 3c503/16이 지원된다. 3c501도 지원되나 너무느려서 구입할 가치가 없다.
Novell Eagle NE1000과 NE2000, 그리고 다양한 호환종이 지원되며, NE1500과 NE2100 역시 지원된다.
Western Digital/SMC
WD8003과 WD8013 (SMC Elite와 SMC Elite Plus와 동일하게) 지원되며, SMC Elite 16 Ultra도 새로 지원된다.
Hewlett Packard
HP 27252, HP 27247, 그리고 HPJ2405A
D-LinkDE-600 packet adapter, DE-100, DE-200, 그리고 DE-220-T. PCMCIA 카드인 DE-650-T용 패치킷도 있다.
DECDE200 (32K/64K), DE202, DE100, 그리고 DEPCA rev E.
Allied Teliesis
AT1500과 AT1700

리눅스에서 위의 카드들은 리눅스 주 배포판에 precompile된 커널에서도 사용할 수 있다. 보통 이들의 드라이버가 포함되어 있기 때문이나, 장기적인 관점에서는 당신이 실제로 필요로 하는 드라이버만이 포함된 전용 커널을 굴리는 편이 더 낫다.

3.4.3 Ethernet Autoprobing

부팅시에, 이더넷 코드는 보드의 위치를 지정하고 디바이스의 타입을 정한다. 카드는 다음의 주소와 방법에 따라 probe된다.

Board probe하는 주소
WD/SMC
SMC 16 Ultra
3c501
3c503
 
NEx000
HP
 
DEPCA
0x300, 0x280, 0x380, 0x240
0x300, 0x280
0x280
0x300, 0x310, 0x330, 0x350, 0x250,
0x280, x2a0, 0x2e0
0x300, 0x280, 0x320, 0x340, 0x360
0x300, 0x320, 0x340, 0x280, 0x2C0,
0x200, 0x240
0x300, 0x320, 0x340, 0x360

autoprobing 코드에는 두가지 한계가 있는데, 하나는 모든 보드를 완전히 인식할 수 없다는 것으로, 통상보드의 싸구려 호환기종이나 WD80x3 보드의 경우가 이에 해당된다. 또 하나의 문제점은 커널이 하나이상의 보드를 autoprobe하지 않는다는 것이다. 이것은 하나의 기능으로, 당신이 보드에 각각 인터페이스를 지정할 수 있도록 하기 위해서이다.

하나 이상의 보드를 사용한다면, 또는 만약 autoprobe로 당신의 보드를 찾지 못한다면, 커널에게 카드의 base address와 이름을 일일히 알려주어야 한다.

Net-3에서 위와같이 하는데는 2가지 다른 방식이 있다. 한가지는 드라이버 정보를 가지는 커널소스에서 drivers/net/Space.c 파일의 내용을 수정하거나 추가하는 것으로, 당신이 네트워킹 코드에 친숙해야 가능하다. 더 나은 방법은 부팅시에 이 정보를 커널에 주는 것이다. 만약, lilo 부트를 사용한다면 lilo.confappend옵력을 통해 커널에게 파라미터를 넘겨줄 수 있다. 커널에게 이더넷 디바이스에 관한 정보를 주길 원한다면, 다음의 파라미터를 넘겨주면 된다.

     ether=irq, base_addr, param1, param2, name

처음부터 4번째까지는 숫자이고 마지막은 디바이스 명칭이다. 모든 숫자 값은 생략 가능하다. 그러니까, 만약 빼버리거나 0으로 지정하면 커널을 probing을 하여 그 값을 찾거나 디폴트 값을 사용한다.

첫번째 파라미터는 IRQ를 디바이스에 지정한다. 기본적으로 커널은 디바이스의 IRQ 채널을 자동탐지 한다. 3c503 드라이버는 5,9,3,4 중 사용하고 있지 않은 IRQ를 선택하여 이 라인을 사용하도록 보드를 설정하는 특별한 기능을 갖고 있다.

base_addr 파라미터는 I/O base address를 지정한다. 0 값은 커널에게 위에 나열한 주소를 probe하도록 한다.

나머지 두 파라미터는 드라이버에 따라 달리 쓰인다. WD80x3같은 shared-memory 보드의 경우엔 shared-memory 영역의 처음과 마지막 주소를 지정한다. 다른 카드의 경우 param1은 디버깅 정보를 표시하는 레벨을 정하는데, 1에서 7까지의 단계로 군말이 많아지고, 8은 전부 없애 버리며, 디폴트 값은 0이다. 3c503 드라이버는 param2로 internal transceiver(디폴트)나 external transceiver(1의 값)을 선택한다. 전자는 보드의 BNC 커넥터를, 그리고 후자는 AUI 포트를 사용한다.

두개의 디더넷 보드를 사용할 경우, 한 보드는 리눅스 autodetect로, 두번째는 lilo로 파라미터를 넘겨줌으로써 찾을 수 있으나, 두번째 보드를 우연히 먼저 찾게 되어 나머지를 등록하지 않게 되는 일이 없는지 확인해야 한다. 이것을 위해선 liloreserved 옵션을 넘겨주어야 하는데, 이는 커널이 두번째 보드에 할당된 I/O공간을 probe하지 않도록 한다.

예를 들어, 두번째 이더넷 보드가 eth1으로 0x300에 설치되어 있다면, 다음의 파라미터를 커널에 넘겨주면 된다.

     reserve=0x300,32 ether=0,0x300,eth1

reserve 옵션은 디바이스를 probing할 때, 보드의 I/O 공간에 어떠한 드라이버도 접근하지 못하도록 한다. 물론 eth0에 autobrobing한것을 override하라고 커널에 파라미터를 건네줄 수 있다.

     reserve=0x340,32 ether=0,0x340,eth0

autoprobing을 모두 꺼버리려면 base_addr에 -1의 인자를 주면 된다.

     ether=0,-1,eth0


3.5 The PLIP Driver

PLIP은 parallel Line IP의 약자로 단지 두 머신만을 연결하고자 할 때 사용하는 저렴한 네트워킹 방법이다. 이것은 패러랠 포트와, 10kBps에서 20kBps정도의 속도를 내는 특수 케이블을 사용한다.

PLIP은 원래 Crynwr, Inc에서 개발되었으며, 그 디자인은 아주 천재적인 것이다. (또는 hackish하다고도 할 수 있다.) 즉, 오랫동안 PC의 패러랠 포트는 단방향적인(uni-directional) 프린터 포트로 사용되어 왔다. 다시 말해, 8개의 데이터라인은 단지 PC에서 주변기기로 보내는 데 쓰이며, 순환하는 통로는 없다. PLIP은 이것을 해결하기 위해, 오직 noibbles(반 바이트)로 모든 데이터를 전송하는데 그치는 5개의 status 라인을 입력에 사용한다. 이러한 작몽 모드를 zero PLIP이라 부르는데, 오늘날에는 이러한 단방향 포트는 더이상 사용되지 않는 것 같고, 대신 모드 1이라 불리는, full 8비트 인터페이스를 사용하는 PLIP 확장판이 쓰인다.

현재의 리눅스는 모드 0만을 지원한다. PLIP 코드의 예전버전과는 달리, 현재는 NCSA telnet의 PLIP 드라이버처럼 Crynwr의 PLIP 실행판과의 호환성에 주력하고 있다. 두 머신을 PLIP으로 연결하려면, 몇몇 가게에서 파는 "Null Printer", 또는 "Turbo Laplink"라고 하는 특수한 케이블이 필요한데, 가능하다면 당신손으로 쉽게 만들 수도 있다. 이는 Appendix A에 있을 것이다.

셀수 없는 사람들이 PLIP 드라이버 제작에 참여했는데, 현재는 Niibe Yutaka가 관리 유지하고 있다. PLIP이 커널에 내재되면, 그것은 사용가능한 프린터 포트에 각각 하나의 네트웍 인터페이스를, plip0은 패러랠 포트 lp0에, plip1lp1등과 같은 식으로 부여할 것이다. 포트에 대한 인터페이스 매핑은 다음과 같다.

인터페이스I/O 포트IRQ
plip0
plip1
plip2
0x3BC
0x378
0x278
7
7
5

만약 당신의 프린터 포트를 다르게 설정했다면, 리눅스 커널 소스의dirvers/net/Space.c의 값을 변경하고, 커널을 컴파일 해야 한다.


3.6 The SLIP and PPP Drivers

SLIP (Serial Line IP)과 PPP (Point-to-Point Protocol)은 시리얼 링크를 통해 IP 패킷을 보내는 데 넓게 쓰이는 프로토콜이다. 여러회사가 개인에게 (다른 방법으로써는 사용하지 못하는) dial-up SLIP과 PPP로 인터넷에 억세스하게금 하고 있다.

SLIP이나 PPP를 사용하기 위해서 하드웨어적인 변경을 할 필요는 없다. 단지 아무 시리얼 포트를 사요하면 된다. 시리얼 포트설정이 TCP/IP 네트워킹에만 해당되는 것이 아니므로, 별개의 chapter에서 이에 대해 전념하는데, 더많은 정보를 원한다면 chapter4를 보라.

Other Chapters

1. Introduction to Networking
2. Issues of TCP/IP Networking
3. Configuring the Networking Hardware
4. Setting up the Serial Hardware
5. Configuring TCP/IP Networking
6. Nake Service and Resolver Configuration
7. Serial Line IP
8. The Point-to-Point Protocol
9. Various Network Applications
10. The Network Information System
11. The Network File System
12. Managing Taylor UUCP
13. Electronic Mail
14. Getting smail Up and Running
15. Sendmail+IDA
16. Netnews
17. C News
18. A Description of NNTP
19. Newsreader Configuration

Appendix

A. A Null Printer Cable for PLIP
B. Sample smail Configuration Files
C. The GNU General Public License