본문 바로가기

OS/vxworks

VxWorks에서 arpLib 사용

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) 옵션을 넣는다.

  1. 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의 맥 정보가 없는 화면

 arp01.JPG

 

10.100.10.2 vxWorks에서 arpAdd로 10.100.10.3에 해당하는 맥 주소를 등록한 화면

arp03.JPG

 

10.100.10.90에서 ping 10.100.10.3 명령을 주었을 경우 wireshark로 잡은 arp 쿼리와 그에 응답하는 vxworks 호스트의 모습.

arp02.JPG 

 

arpAdd 시 ATF_PUBL 옵션을 안넣었을 경우 위의 그림과는 달리 arp에 응답하지 않는다.

arp04.JPG

이 글은 스프링노트에서 작성되었습니다.