본문 바로가기

OS/vxworks

VxWorks6.6에서 Gratuitous ARP 발행

 

Gratuitous ARP란?#

Gratuitous ARP는 다음의 경우에 사용된다.

1. IP 충돌을 감지할 때
2. 타장비들의 ARP 테이블을 갱신할 때
3. 스위치에게 해당 장비의 MAC 주소가 스위치의 특정 포트를 사용함을 알려줄 때
4. Ethernet 장비 또는 링크가 연결되었을 때
   - Gratuitous ARP를 자주 발생하는 호스트의 경우 Ethernet 장비 또는 케이블의 문제가 발생했다고 볼수 있다.

 

Gratuitous ARP가 필요한 상황#

http://cafe.naver.com/neteg.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=77389 의 두번째 경우와 같이 Stby/Active 라우터간 스위칭을 하기 위하여 사용하였다.

즉, A라는 상황에서는 Router 1로 전송해야 하며, B라는 상황에서 Router 2를 사용할 수 있도록 네트워크를 동적으로 제어하는데 사용하였다.

VxWorks에서의 구현예#

ipnet_cmd_arp API를 활용한다. 실제적으로 arpLib에 구현되어 있는 함수들은 다 ipnet_cmd_arp를 사용하였다고 한다.

gra_arp.cpp

  1. #include <stdio.h>
    #include <unistd.h>    // getOptServ is defined here

    extern "C" STATUS ipnet_cmd_arp(int, char **);

    // publish gratuitous ARP
    void gra_arp(char *ipAddr, char *linkAddr)
    {
        char *tempArgv[6];
        char **argv = tempArgv;
        int argc;
        char cmdString[50];
        int status;
       
        sprintf(cmdString, "-g -s %s %s", ipAddr, linkAddr);
       
        printf("ARP CMD : %s\n", cmdString);
       
        getOptServ(cmdString, 0, &argc, argv, 6);
       
        status = ipnet_cmd_arp(argc, argv);
    }

 

결과 화면#

1. Gratuitous ARP 발행전의 10.100.10.3에 대한 mac 주소는 00-01-02-03-04-05로 되어있다.

 01.JPG

 

2. Vxworks에서 위에서 만든 API를 사용하여 Gratuitous ARP를 발행한다.

02(1).JPG

 

3. Wireshark로 Gratoitous ARP가 브로드캐스팅 됨을 확인한다.

03.JPG

 

4. 10.100.10.3에 대한 mac 주소가 의도대로 변경되었음을 확인한다.

04.JPG

 

 

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