VxWorks에서 이더넷 헤더의 mac 어드레스를 조작하기 위하여 arpLib를 사용하였다. 간단히 사용방법을 적는다.
10.100.10.2 : vxworks 임베디드 보드
10.100.10.90 : 노트북
상황은 이렇다.
10.100.10.90에서 네트워크에 존재하지 않는 10.100.10.3으로의 arp를 요청하였을때 10.100.10.2의 vxworks에서 arpLib를 사용하여 10.100.10.3 arp 요청이 왔을때 특정 맥 주소로 응답하게 하는 것이 목적이다.
이를 위하여 vxworks의 arpLib를 사용한다. 전반적인 API는 링크를 확인한다.
커널 옵션에서 아래의 컴포넌트를 추가한다.
Network Components >> Network Utility Components > arpLib
타장비로의 arp 전파를 위하여 ATF_PERM (0x04), ATF_PUBL (0x08) 옵션을 넣는다.
- include "vxWorks.h"
#include "arpLib.h"
#include "sockLib.h"
#include "sys/socket.h"
#include <stdio.h>
void test()
{
STATUS ret;
ret = arpAdd("10.100.10.3", "ff:ff:ff:ff:ff:ff", 0x04 | 0x08);
if ( ret == ERROR )
{
perror("arpAdd");
}
}
10.100.10.90 Host에서 10.100.10.3의 맥 정보가 없는 화면
10.100.10.2 vxWorks에서 arpAdd로 10.100.10.3에 해당하는 맥 주소를 등록한 화면
10.100.10.90에서 ping 10.100.10.3 명령을 주었을 경우 wireshark로 잡은 arp 쿼리와 그에 응답하는 vxworks 호스트의 모습.
arpAdd 시 ATF_PUBL 옵션을 안넣었을 경우 위의 그림과는 달리 arp에 응답하지 않는다.
이 글은 스프링노트에서 작성되었습니다.