글쓴이: 초보 글쓴날: 2006-02-08 20:52:02 읽은수: 1 <+>
dns.a(dns_transmit.o)(.text+0x4e0): In function `thistcp':
: undefined reference to `errno'
dns.a(dns_transmit.o)(.text+0x58b): In function `dns_transmit_start':
: undefined reference to `errno'
dns.a(dns_transmit.o)(.text+0x721): In function `dns_transmit_get':
: undefined reference to `errno'
dns.a(dns_transmit.o)(.text+0x80b): In function `dns_transmit_get':
: undefined reference to `errno'
dns.a(dns_dfd.o)(.text+0x24): In function `dns_domain_fromdot':
: undefined reference to `errno'
unix.a(alloc.o)(.text+0x48): more undefined references to `errno' follo
UNP 책에 나온 소스 입니다.
하나의 시스템에 할당된 ip 주소를 가지고 이에 해당 하는 mac 주소를 프린트하는 소스 코드 입니다.
ioctl을 사용하고 cmd로 SIOCGARP를 사용합니다.
그런데 아래와 같이 mac 주소가 출력이 안되네요...
뭐가 문젤까요 ?
127.0.0.1: ioctl SIOCGARP: No such device
130.154.16.209: ioctl SIOCGARP: No such device
10.1.1.1: ioctl SIOCGARP: No such device
10.4.1.1: ioctl SIOCGARP: No such device
소스 코드는 아래와 같습니다.
참고로 get_ifi_info() 함수는 시스템에 network interface 정보를 가져 오는 함수입니다.
라우터에 telnet 접속하여 command날리고 결과 받는 부분이 필요한데요. (NMS) 마땅한 C/C++라이버러리가 잘 없어서 찾아보니 jakarta commons 의 net api 가 매우 적합하였습니다.
헌데, 이 모듈이 또한 다른 C/C++ 데몬과 message queue로 IPC해야하기땜에 결국 자바를 이용하면 JNI를 쓰야하는데, 검토를 해보니 충분히 가능은 합니다만.. 주고받는 데이터가 복잡한 다중 struct구조들이 많은데 이것들을 JNI로 할려니 너무 비효율적인것 같네요. 객체를 그냥 받아서 큐에 밀어넣어도 된다면야 더할나위 없겠지만 struct align, byte ordering, primitive/object type size 등등 때문에 결국 JNI에서 다시 struct를 구성해서 밀어넣어야 하고..굳이 한다면 JNI 메소드자체를 각 멤버를 인자만 받아서 여기서 구조체를 완성시키는 식으로하면 그나마 나아보이지만.. 그래도 깔끔하지 못한것은 마찬가지로 보이구요..
(1) 하나의 서브넷에서 특정 단말이 해당 서브넷에 접속되어 있는 모든 단말들에 대해서 arp 테이블을 최신의 상태로 유지하고자 합니다.
지금 생각으로는 주기적으로 서브넷 내에 브로드캐스트 메시지를 뿌리면 서브넷 내의 모든 단말들이 응답을 할것이고 이로 인해 최신의 arp 테이블이 유지가 될것이라고 생각하고 있습니다. 이 방법이 틀렸거나 혹은 다른 좋은 방법이 있으면 알려 주세요...
(2) 같은 서브넷 내에 있는 또다른 단말의 mac 주소만 알고 있는 경우 이 mac 주소를 가지고 해당 단말의 ip 주소로 매핑 하는 방법이 있을까요 ?
시그널에 응답할 수 있다고 하는데, 어떻게 가능한지 모르겠습니다. 시그널 핸들러는 응용의 컨텍스트에서 실행되는 코드가 아닌가요? 커널 문맥으로 실행된다면 응용의 코드가 그 문맥에서 실행된다고 말할 수 있는 것은 아닌지...
리눅스 커널에 대해서 조금씩 조금씩 배워가고 있는데 아직까지의 얕은 지식으로는 이해가 되지 않는 부분들이 많아서 이렇게 질문을 드립니다.
그럼 항상 건강하세요.