конвертировать ipv6 в ipv4 в contiki

Я пытаюсь преобразовать адрес ipv6 в адрес ipv4 на узле exp5438 в ОС Contiki, используя реализованную функцию «ip64_addr_6to4»:

    int ip64_addr_6to4(const uip_ip6addr_t *ipv6addr, uip_ip4addr_t *ipv4addr)

он возвращает «0», что означает, что ему не удалось преобразовать адрес. чтобы попробовать решение, описанное в https://sourceforge.net/p/contiki/mailman/message/31607766/ я добавил строку ниже в «contiki/platform/exp5438/contiki-conf.h»:

   #define UIP_FALLBACK_INTERFACE ip64_uip_fallback_interface

при компиляции я получаю эту ошибку:

contiki-exp5438.a(tcpip.o): В функции `tcpip_uipcall': /home/user/contiki/examples/mySim/routing/../../..//core/net/ip/tcpip.c: 793: неопределенная ссылка на ip64_uip_fallback_interface /home/user/contiki/examples/mySim/routing/../../..//core/net/ip/tcpip.c:779: неопределенная ссылка на ip64_uip_fallback_interface

Я не могу найти связь между ошибкой и решением. Любое предложение решить ошибку или сделать что-то, чтобы функция работала правильно, будет оценено по достоинству.


person mahshid    schedule 04.05.2019    source источник


Ответы (1)


Как бы вы преобразовали адрес IPv6 в адрес IPv4? Оба являются протоколами сетевого уровня, которые по своей сути несовместимы. Хотя существует от 6 до 4 шлюзов, между ними нет линейного преобразования.

person Andreas Neumeier    schedule 04.05.2019
comment
это функция. Вы также можете найти в [github.com/contiki-os/contiki/blob/master/core/net/ip/ : ` int ip64_addr_6to4(const uip_ip6addr_t *ipv6addr, uip_ip4addr_t *ipv4addr) { if(ip64_addr_is_ip64(ipv6addr)) { ipv4addr-›u8[0] = ipv6addr-›u8[12]; ipv4addr-›u8[1] = ipv6addr-›u8[13]; ipv4addr->u8[2] = ipv6addr->u8[14]; ipv4addr-›u8[3] = ipv6addr-›u8[15]; printf(ip64_addr_6to4: IPv6-кодированный адрес IPv4 %d.%d.%d.%d\n, ipv4addr->u8[0], ipv4addr->u8[1], ipv4addr->u8[2], ipv4addr-> u8[3]); вернуть 1; } вернуть 0; }` - person mahshid; 05.05.2019