리눅스 IP 프로토콜에서 ARP를 쓰지 않도록 프로그래밍하는 방법?
글쓴이: coolaid0 / 작성시간: 금, 2007/07/13 - 12:15오후
기본적으로 리눅스의 IP 프로토콜을 이용하는 이더넷 디바이스 드라이버를 구현할때는
dev->hard_header=...
이런 식으로 MAC 주소를 채워넣을 수 있는 함수를 지정하게 되죠.
만약 내부 ARP 테이블에 MAC 주소가 없다면 ARP 프로토콜이 동작하여 상대방의 MAC 주소를 받아오게 됩니다.
만약 네트워크 디바이스 드라이버에서
dev->hard_header= NULL;
을 해버리면 arp.c 내부에서 neigh->nud_state = NUD_NOARP;로
설정하여 ARP가 동작을 하지 않게 되는 걸로 알고 있습니다.
지금의 상황은, 새로운 Hard_header 함수를 만들어서 이를 디바이스 드라이버에 적용시켜
IP를 encapsulation하도록 동작하게 만들었습니다. 즉, 디바이스 드라이버에서 hard_header를 호출하면
MAC 주소를 붙이는 게 아니라 새로운 방식의 주소가 IP 패킷의 앞뒤로 붙게 만들었습니다.
이렇게 되면 ARP 프로토콜이 의미가 없어지는데, 어쨌건 hard_header가 지정이 되어 있으니
ARP 프로토콜이 동작을 해버리네요.
ARP가 동작이 안되도록 막는 방법이 있을까요?
가능하면 커널은 건드리지 않는 방향이었으면 좋겠습니다..
Forums:
댓글 달기