linux-network

View the Project on GitHub super-learners/linux-network

User-Space Helpers

커널이 이벤트를 처리하기 위해 user-space 프로그램을 호출하는 경우가 있다. 이 때 2개의 헬퍼가 사용됨.

커널은 call_usermodehelper 라는 함수를 통해 이런 사용자 공간 헬퍼를 호출한다. 이 함수는 arg[]라는 변수 리스트와 env[]라는 환경 변수를 헬퍼 프로그램에 전달할 수 있다.

5-3

kmod

hot plug

처음에 플러그앤플레이를 제공하기 위해 리눅스 커널에 들어오게 됐다. 부팅 시 핫 플러그 기능이 없는 장치도 관리하기 위해 사용될 수 있다. 개념상 작동 중인 시스템에 장치가 새로 꽂히든 부팅 시에 이미 장착돼 있든 상관하지 않는다. ( 두 경우 모두 알람을 받는다) 리눅스 시스템은 네트워크 장치를 비롯한 주변 장치를 초기화하기 위해 스크립트 세트를 실행한다. 부팅 시에 이미 존재하는 장치에 대한 알림은 무시된다. 커널 모듈을 컴파일할 때 객체 파일은 기본적으로 /lib/modules/커널버전 아래에 생성된다. 저 디렉토리에 modules.pcimap과 modules.usbmap 파일이 생성되는 데, 각각 커널에서 지원하는 장치의 PCI ID와 USD ID를 포함한다. 그리고 그 파일 안에는 각 ID에 연관된 커널 모듈 참조가 있다. 사용자 공간 헬퍼는 핫 플러그 가능한 장치가 꽂혔다는 알림을 받았을 때 이들 파일을 사용해 정확한 장치를 찾아낸다.

/sbin/hotplug

핫 플러그를 위한 기본 user-space helper는 Hotplug 패키지에 포함된 /sbin/hotplug 스크립트이다. 이 패키지는 /etc/hotplug와 /etc/hotplug.d에 포함된 파일을 통해 설정할 수 있다.

Virtual Devices

리눅스는 여러 종류의 가상 장치를 정의하는 것을 허가

5-4

example of Virtual Devices

커널 네트워크 스택과 통신

가상 장치와 실제 장치가 커널과 통신하는 방법이 약간 다름. 다음과 같은 차이가 있음

Tuning via /proc Filesystem

5-5

/proc 안의 몇 개 파일은 내부 데이터 스트럭처와 설정 변수를 노출한다. 자원이 장치에 의해 할당됐는지 추적하는 데 유용. /proc/sys/kernel 에는 modprobe와 hotplug 파일이 있다. /proc/net 에서 net_dev_init과 dev-proc_init, dev_mcast_init을 통해 생성한 파일을 찾을 수 있다.

/proc/drivers, /proc/bus, /pro/irq 등 여러 디렉터리들이 있다. 점차 /sys 디렉터리로 변경되는 중.

5장에서 다룬 함수, 매크로, 변수, 데이터 스트럭처 요약

이름 설명
함수와 매크로  
request_irq, free_irq IRQ 라인에 콜백 핸들러를 등록, 해제함. 등록은 배재되거나 공유될 수 있음
request_region, release_region I/O 포트와 메모리를 할당하고 해제
call_usermodehelper 사용자 공간 헬퍼 애플리케이션을 호출
module_param 모듈을 위한 설정 매개변수를 정의 하는 데 사용
net_dev_init 부팅 시 네트워크 코드를 초기화
전역 변수  
dev_boot_phase 레거시 코드가 NIC 디바이스 드라이버를 등록하기 전에 net_dev_init의 수행을 강제하기 위한 boolean flag
irq_desc IRQ description 벡터의 포인터
데이터 스트럭쳐  
struct irq_action 각 IRQ 라인은 이 스트럭처의 인스턴스에 의해 정의됨. 콜백 함수 포함
net_device 네트워크 장치