This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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

Other Parts Discussed in Thread: TMDSIDK574

我是用的是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地址的地方。

  • 您好,下面是我写的关于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。

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