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.

关于在EVM6678评估板上做组播通信的问题



你好,我在EVM6678评估板上使用ndk_2_21_00_32要实现组播通信,在hello world程序的基础上修改,但是只能实现点对点的通信和广播通信,在组播通信中可以成功的加入设定的组,但是无法收到pc端发送的组播信息。通过观察,发现组播包确实发送到了evm6678的网卡,但是不知道为什么没有提交给接收任务。组播程序主要是从ndk源码的contest.c文件中获取。请教一下在6678中实现组播通信是否还有其他要设置的东西,还有是否能提供可用的组播通信实例,非常感谢!

  • 你需要修改NDK driver来实现

    ...\pdk_C6678_1_0_0_xxx\packages\ti\transport\ndk\nimu\src

    调用PA PDK的库函数 Pa_configExceptionRoute,增加以下的异常路由

    #define pa_EROUTE_MAC_MULTICAST     13

    #define pa_EROUTE_IP_MULTICAST      15

  • 6678 EMAC接收过来的包根据CPSW_CFG_RES寄存器的配置经过PA进行过滤路由,或者直接由pktDMA接收到DSP memory。如果不需要PA进行过滤路由的话,就可以省略掉PA的配置;如果需要经过PA进行路由的话,则需要Marvin所述往PA里添加相应的路由表象。具体请参考pdk的paunittest 例子。

  •        ndk源码的contest.c文件中有MulticastTest函数用于测试组播通信,我把这个函数作为任务函数和mcsdk中的helloworld示例结合在一起,用于测试组播,通过调试发现,可以成功加入设定的组,但是无法收到pc端发送的组播信息,经过调试发现MutilcastTest函数调用的setsockopt函数需要调用ndk协议栈中的SockSet函数,而SockSet函数针对加入组播参数IP_Add_MemberShip又需要调用pdk路径下的nimu_eth.c文件中的Emac_Ioctrlz函数,但是这个函数在nimu_eth.c文件中没有给出具体实现,很可能问题就是在这里。

       还有pdk的paunittest 例子确实可以收到所有的数据包,但是在这个例子里面使用的是查询方式,并且并没有提供和ndk的接口。而nimu_eth.c文件实现了pdk和ndk的标准接口,使用的也是中断方式接收数据。

       现在的问题是如果想使用ndk开发组播程序,不知道如何去修改nimu_eth.c文件中的Emac_Ioctrl函数。谢谢回答

  • 你好!

    如Marvin 所说,实现组播通信,加上异常路由即可。

    Pa_configExceptionRoute 调用,可以参考PDK 中的 Pa.c.

    paRouteInfo_t, paCmdReply_t 的设置设计 navigator,楼主可以 看下navigator 的 user guide.