err = sock_create(AF_INET6, SOCK_DGRAM, IPPROTO_UDP, &client->sock);
if (err) {
pr_err("sock_create failed\n");
return err;
}
memset (&saddr, 0, sizeof(struct sockaddr_in6));
saddr.sin6_family = AF_INET6;
saddr.sin6_scope_id = 20;
saddr.sin6_port = htons(client->talker_params->udp_dstport);
saddr.sin6_addr = in6addr_loopback; //This should be removed
saddr.sin6_flowinfo = 0;
memcpy( saddr.sin6_addr.s6_addr
,&client->talker_params->ip_6_dstaddr.addr
,sizeof(ip_addr_6_t));
pr_info("saddr.sin6_addr.s6_addr=%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x\n ",
saddr.sin6_addr.s6_addr[0],
saddr.sin6_addr.s6_addr[1],
saddr.sin6_addr.s6_addr[2],
saddr.sin6_addr.s6_addr[3],
saddr.sin6_addr.s6_addr[4],
saddr.sin6_addr.s6_addr[5],
saddr.sin6_addr.s6_addr[6],
saddr.sin6_addr.s6_addr[7],
saddr.sin6_addr.s6_addr[8],
saddr.sin6_addr.s6_addr[9],
saddr.sin6_addr.s6_addr[10],
saddr.sin6_addr.s6_addr[11],
saddr.sin6_addr.s6_addr[12],
saddr.sin6_addr.s6_addr[13],
saddr.sin6_addr.s6_addr[14],
saddr.sin6_addr.s6_addr[15]);
pr_info("The size of sizeof(saddr): %d \n",sizeof(saddr));
pr_info("The size of sizeof(saddr): %d \n",sizeof(struct sockaddr_in6));
err = client->sock->ops->connect(client->sock
,(struct sockaddr*)&saddr
, sizeof(saddr)
, O_RDWR);
连接失败,无效参数。由于此实现在内核中,我无法使用getaddrinfo。我尝试连接的链接本地地址是fe80 :: 5e26:aff:fe84:585d
我写了一个userland应用程序,并能够使用ipv6
将消息发送到目的地