将 IP 地址复制到 UIP_ICMP_PAYLOAD

Copy an ipaddress into the UIP_ICMP_PAYLOAD

我正在尝试改进 RPL 协议,因此实施了新的控制消息。我可以发送整数,但不能发送 ip 地址。有谁能帮忙看病吗?我正在处理位于 contiki/core/net/rpl.

的文件 rpl-icmp6.c

这是我的第一个函数,它正在接收数据:

static void
tru_input(void)
{   
   int trustValue;
   uip_ipaddr_t *trustAddr;
   unsigned char *buffer;
   buffer = UIP_ICMP_PAYLOAD;

   trustValue = buffer[0];
   memcpy(&trustAddr, buffer[1], 16);

   PRINT6ADDR(trustAddr);

}

这是发送数据的函数:

void
tru_output(uip_ipaddr_t *addr, uip_ipaddr_t *trustAddr, int *trustValue)
{
  unsigned char *buffer;
  buffer = UIP_ICMP_PAYLOAD;
  buffer[0] = &trustValue;
  memcpy(buffer[1], &trustAddr, 16);
  uip_icmp6_send(addr, ICMP6_RPL, RPL_CODE_TRU, 1);
}

我收到 java.lang.ArrayIndexOutOfBoundsException:-1。有人可以帮助我吗?

编辑:

这是我的新代码:

static void
tru_input(void)
{   
  int trustValue;
  uip_ipaddr_t trustAddr;
  unsigned char *buffer;

  buffer = UIP_ICMP_PAYLOAD;

  trustValue = buffer[0];
  memcpy(&trustAddr, buffer + 1, 16);

  PRINT6ADDR(trustAddr);
  PRINTF("\n");

 }
 /*---------------------------------------------------------------------------*/
void
tru_output(uip_ipaddr_t *addr, uip_ipaddr_t *trustAddr, int trustValue)
{
  /*Array OF byte: Find out how to enter all the bytes into the PAYLOAD. */
  unsigned char *buffer;
  buffer = UIP_ICMP_PAYLOAD;
  buffer[0] = trustValue;

  memcpy(buffer + 1, trustAddr, 16);
  uip_icmp6_send(addr, ICMP6_RPL, RPL_CODE_TRU, 17);
 }
memcpy(&trustAddr, buffer[1], 16);

您正在将指向 buffer[1] 的值(即一个字符)复制到指向 trustAddr 的值 我想你想传递 buffer[1]:

的地址
memcpy(&trustAddr, buffer + 1, 16);

在tru_output中相同(你不需要将trustAddr的指针传递给memcpy,因为你已经将其声明为指针:

memcpy(buffer+1, trustAddr, 16);

我看到您还需要用 16 字节初始化 trustAddr,因为您正在将内存复制到随机内存区域,所以不要将 trustAddr 声明为指针:

uip_ipaddr_t trustAddr;