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