TI中文支持网
TI专业的中文技术问题搜集分享网站

关于在TI-RTOS上面支持IPv6问题

我是用的是TMDSIDK574,bios_6_76_03_01,ndk_3_61_01_01,pdk_am57xx_1_0_17。我想要在TI-RTOS上面同时使用IPv4和IPv6套接字,不知道是否有人实现过IPv6套接字编程啊。我在官方例程没有找到如何实现IPv6的,我在cfg文件里面只看到有个“enable IPv6”,我也阅读了“ TI Network Developer's Kit (NDK) API Reference Guide:IP Version 6 (IPv6) Stack API”关于IPv6的描述,不知道是否可以静态设置IPv6不,是否能够给出IPv6套接字编程的一些示例啊。

我试着用socket编程,应该是PC IPv6地址与开发板不在网段,通信不了,但是我也查看不到板子的IPv6地址,也没有发现任何可以静态配置IPv6地址的地方。

Shine:

请看一下下面的链接是否 有帮助。
processors.wiki.ti.com/…/IPv6_Support
software-dl.ti.com/…/ipv6_8c.html

user4839655:

回复 Shine:

您好,下面是我写的关于UDP IPv6的代码:

Void sock_udp_ipv6(UArg arg0, UArg arg1){ sleep(5); Task_Params params; Error_Block eb; SOCKET sock; int dev_index = 1; int status; struct addrinfo hints; struct addrinfo *results1 = NULL; int value; char port[8]; IP6N srcaddress; static char src[] = "fe80::a00:9ff:fedc:aaaa"; if(IPv6StringToIPAddress((char *)&src[0],(IP6N*)&srcaddress)==-1) { UART_printf("\error.\n"); } IPv6Init(); IPv6AddAddress(1,srcaddress,64,INFINITE_LT ,INFINITE_LT ,0);

fdOpenSession (TaskSelf ()); #if 1 if ((sock = socket (AF_INET6, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) { UART_printf("\n sssss.\n"); return; }

static char dst[] = "fe80::a00:9ff:fedc:abcd"; struct sockaddr_in6 stSockAdr;

stSockAdr.sin6_family = AF_INET6; stSockAdr.sin6_port = NDK_htons(8899); // inet_ntop(AF_INET6, (char *)&dst[0], &stSockAdr.sin6_addr, sizeof(stSockAdr.sin6_addr)); if(IPv6StringToIPAddress((char *)&dst[0],(IP6N*)&stSockAdr.sin6_addr)==-1) { UART_printf("\error.\n"); }

struct timeval to; to.tv_sec = 3; to.tv_usec = 0; if(setsockopt( sock, SOL_SOCKET, SO_SNDTIMEO, &to, sizeof( to ))== SOCKET_ERROR){ UART_printf("\n er.\n"); } if(setsockopt( sock, SOL_SOCKET, SO_RCVTIMEO, &to, sizeof( to ))== SOCKET_ERROR){ UART_printf("\n er.\n"); }

int slen = sizeof(stSockAdr);

int result = 0,z = -5; char buffer[5] = "hello"; while(1){ result = sendto(sock,buffer,sizeof(buffer),0,(struct sockaddr *)&stSockAdr,slen); z= fdError(); UART_printf("write %d bytes\n", result); UART_printf("z=%d bytes\n", z);

} #endif // Close the file session fdCloseSession(TaskSelf());}

但是在调试sendto函数的时候进入到

NETIF_DEVICE* NIMUFindByIndex (uint32_t index){ NETIF_DEVICE* ptr_device;

/* Get the head of the list. */ ptr_device = (NETIF_DEVICE *)list_get_head ((NDK_LIST_NODE**)&nimu_mcb.devices); while (ptr_device != NULL) { /* Did we get the match? */ if (ptr_device->index == index) return ptr_device;

/* Go to the next element. */ ptr_device = (NETIF_DEVICE*)list_get_next ((NDK_LIST_NODE*)ptr_device); }

/* No matching entry found. */ return NULL;}

每次返回的都是NULL,导致sendto函数执行sendto_error:

sendto_error: /* Unlock the fd with error */ fdint_unlockfd(pfd, error);

llExit();

return (SOCKET_ERROR);

发数据的时候发送不出去。fdError()返回的值是22。

Shine:

回复 user4839655:

我将您的问题发布在E2E英文技术论坛上,将由资深的英文论坛工程师为您提供帮助。请关注下面的帖子。
e2e.ti.com/…/923838

赞(0)
未经允许不得转载:TI中文支持网 » 关于在TI-RTOS上面支持IPv6问题
分享到: 更多 (0)