ip转换:
const uint8_t g_zero_addr[128] = {0};
typedef struct
{
union
{
uint8_t head[12];
uint32_t u32_head[3];
}head_un;
} mapped_head_t;
mapped_head_t g_v4_mapped_head;
int map_v4_to_v6(const struct in_addr *src_addr,struct in6_addr *dest_addr)
{
unsigned char *p_dest_ip = NULL;
g_v4_mapped_head.head_un.u32_head[2] = htonl(0x0000ffff);
if(0 != memcmp(src_addr, g_zero_addr, sizeof(struct in_addr)))
{
p_dest_ip = (unsigned char *)dest_addr;
memcpy(p_dest_ip + 12,src_addr, sizeof(struct in_addr));
memcpy(p_dest_ip, g_v4_mapped_head.head_un.head, 12);
}
else
{
memset((char *)dest_addr, 0, sizeof(struct in6_addr));
return -1;
}
return 0;
}