【问题标题】:convert ipv6 to ipv4 in contiki在 contiki 中将 ipv6 转换为 ipv4
【发布时间】:2019-09-22 20:22:52
【问题描述】:

我正在尝试在 Contiki OS 中的 exp5438 mote 上使用实现的函数“ip64_addr_6to4”将 ipv6 地址转换为 ipv4 地址:

    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 的引用

我找不到错误和解决方案之间的关系。任何解决错误或执行功能正常工作的建议将不胜感激。

【问题讨论】:

    标签: ipv6 ipv4 contiki cooja


    【解决方案1】:

    如何将 IPv6 地址转换为 IPv4 地址?两者都是本质上不兼容的网络级协议。虽然有 6 到 4 个网关,但两者之间没有线性转换。

    【讨论】:

    • 它是函数。你也可以在 [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; }`
    【解决方案2】:

    Contiki 在 RPL 路由协议上实现,即 Rpl 是 LLN 的 IPv6 路由协议。我认为您应该使用其他路由协议和环境。

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2015-03-28
    • 1970-01-01
    • 2015-03-10
    • 2018-01-23
    • 2020-11-06
    • 2011-01-03
    • 2017-12-17
    • 2010-12-06
    • 1970-01-01
    相关资源
    最近更新 更多