将ipaddress复制到UIP_ICMP_PAYLOAD

时间:2017-05-12 11:21:07

标签: c contiki

我正在尝试改进RPL协议,因此实现了新的控制消息。我能够发送整数,但不能发送IP地址。谁能帮助医学?我正在位于rpl-icmp6.c的文件contiki/core/net/rpl中工作。

这是我的第一个接收数据的函数:

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);
 }

0 个答案:

没有答案