将 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;
我正在尝试改进 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;