2017-05-02 15 views
0

파일 rpl-icmp6.c의 DIO 메시지가 DIO를 수신하는 노드의 하위에서 왔는지 여부를 테스트하려고합니다. 누구든지 나를 도울 수 있습니까?RPL children-list Contiki

나는 contiki가 아이들의 명부, 부모만을 명중하지 않는다는 것을 보았습니다. 따라서 어떻게해야할지 모르겠습니다.

의사 코드 :

if(senderOfDIO is child) { 

    check the rank of the packet 

} 

이 사람이 나를 도울 수 있습니까?

답변

0

저장 모드에서 RPL을 실행중인 경우, 노드에 연결된 경로를보고 경로의 nexthop이 끝점 addess와 같은지 확인하여 직접 연결된 노드를 알 수 있습니다.

#include "ipv6/uip-ds6-route.h" 

static void 
iterate_children(void) 
{ 
    uip_ds6_route_t *route; 

    /* Loop over routing entries */ 
    route = uip_ds6_route_head(); 
    while(route != NULL) { 
    const uip_ipaddr_t *address = &route->ipaddr; 
    const uip_ipaddr_t *nexthop = uip_ds6_route_nexthop(route); 
    if(uip_ipaddr_cmp(&address, &nexthop)) { 
     /* direct child: do somehting */ 
    } 

    route = uip_ds6_route_next(route); 
    } 
} 

이, 특히 질문을 해결 같은 것을 사용하려면 :

static uint8_t 
is_direct_child(uip_ipaddr_t *address) 
{ 
    uip_ds6_route_t *route; 

    route = uip_ds6_route_lookup(address); 
    if(route != NULL) { 
    const uip_ipaddr_t *nexthop = uip_ds6_route_nexthop(route); 
    if(uip_ipaddr_cmp(&address, &nexthop)) { 
     /* nexthop and the address are the same */ 
     return 1; 
    } 
    } 
    return 0; 
} 
+0

답변 해 주셔서 감사합니다. 아주 좋은 대답! 빠른 후속 질문 : is_direct_child에서 하위 IP 주소 또는 호스트 IP 주소를 보내야합니까? – Freddyny

+0

주소'argument'는 자식의 IP 주소를 의미합니다. – kfx

+0

나는 이해한다! 그래서 나는 is_direct_child를 다음과 같이 호출합니다 : is_direct_child (& from)'from은'uip_ipaddr_copy (& from, & UIP_IP_BUF-> srcipaddr);'와 같이 수신됩니다. 그러나,'uip_ds6_route_lookup (address)'에서 라우트를 전혀 찾을 수 없습니다. 'uip-ds6-route : fe80 :: c40c : 0 : 0 : 3에 대한 경로 찾기 '를 출력하면 다음 출력은'경로 없음 '입니다. @kfx가 왜 필요한지 생각해 볼 수 있습니까? – Freddyny

0

어느 RPL 보관 모드 또는 비 보관 모드를

직접 아이들을 통해 루프 코드의 예입니다 상위 노드에서 하위 노드로의 DIO는 두 가지 시나리오로 전송됩니다. 1 DODAG를 형성하기 전에 2 DODAG 형성 후 주기적으로 DIO에게 보냄.

자식 노드에 응답하는 경우를 제외하고는 DIO가 멀티 캐스트 될 때마다 DIS를 보냅니다.

자녀가 DIO 메시지를 수신 중인지 여부를 테스트하려면 가상 시뮬레이션 인 COOJA에서 확인할 수 있습니다.

비 저장 모드에서 라우터를 제외한 모든 노드는 하위 주소를 저장하지 않습니다. 여기서 패킷 전달은 모든 주소를 전송하는 SRH (Source Routing Header)에 의해 수행됩니다.