如何在Contiki

时间:2018-03-05 00:49:06

标签: c contiki

我想将全局地址转换为链接级地址(或者即使可以反向执行)我在uip6.c文件中有以下功能。我想将rep(其中rep给我带有fe80前缀的lladdress)转换为srcaddr(其中srcaddr为我提供带有前缀的全局地址比如aaaa),反之亦然。

void
cmpr_addr(void)
{
  uip_ds6_route_t *rep;

  rep = uip_ds6_route_lookup(&UIP_IP_BUF->srcipaddr);
  printf("nexthop: ");
  PRINT6ADDR(uip_ds6_route_nexthop(rep));
  printf("\n ");

  printf("srcaddr: ");
  PRINT6ADDR(&UIP_IP_BUF->srcipaddr);
  printf("\n ");   
}

我之前检查过没有可以执行此操作的内置函数。

2 个答案:

答案 0 :(得分:0)

这是不可能的。设备的本地链接地址与其可能拥有的任何公共地址之间没有任何关系 - 它们以完全不同的方式获得。

答案 1 :(得分:0)

以下代码对我有用:

uip_ds6_route_t *rep;

uip_ipaddr_t copy;

uip_ipaddr_copy(&copy, &UIP_IP_BUF->srcipaddr);
rep = uip_ds6_route_lookup(&UIP_IP_BUF->srcipaddr);
printf("nexthop: ");
PRINT6ADDR(uip_ds6_route_nexthop(rep));
printf("\n ");

printf("srcaddr: ");
copy.u8[0]=0xfe;
copy.u8[1]=0x80;

//copy.u16[0]=0xfe80;
PRINT6ADDR(&copy);
printf("\n ");

if (uip_ipaddr_cmp(&copy, uip_ds6_route_nexthop(rep)))
printf("\nYes Child Node");
else
printf("\nNo Child Node");