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

关于NDK网络开发的疑问

最近在进行NDK的网络开发,其中遇到了一个问题比较疑惑:

rc = NC_NetStart( hcfg, NetworkOpen, NetworkClose, NetworkIPAddr );

这个函数中注册了3个函数,NetworkIPAddr函数我看NDK的说明文档里面说当IP地址变化的时候回调用它,那我的疑问是什么时候IP地址会变化呢?

如果说刚刚启动的时候,系统进行IP配置后调用它,我可以理解。但是当系统完全启动,网络已经正常工作后,什么情况下IP还会变动呢?

之所以提到这个问题是因为,最近开发的过程中,遇到了这样的问题。

我们的工程是这样的思路,用两个核,一个核专门用于接收网络数据,从PC端,放入公共内存,另一个核负责处理收到的数据,两个核用IPC通信,在实际应用中,我发现,网络核在接收到PC端的一部分数据后,突然就调用了NetworkIPAddr这个函数,这样导致打乱了整个系统的工作。

而这个NetworkIPAddr函数打印出来的信息是:

Network Removed: If-l:192.168.2.100

意思就应该是网络移除什么的。NetworkIPAddr这个函数我是直接copy的MCSDK ndk的 client例程的。

所以,请大神指点一下,NetworkIPAddr这个函数在什么情况下会调用(我知道IP变化的时候调用,可是什么情况下IP会变化???),以及这个函数的三个参数是什么意思?

Andy Yin1:

有没有可能是网口link down了,你看一下此时网口的状态。这个函数的三个参数如下所示,依次是IP地址,使用DHCP index,及添加or移除IP地址的标示。

static void NetworkIPAddr( IPN IPAddr, uint IfIdx, uint fAdd ){ static uint fAddGroups = 0; IPN IPTmp;

if( fAdd ) platform_write("Network Added: "); else platform_write("Network Removed: ");

// Print a message IPTmp = ntohl( IPAddr ); platform_write("If-%d:%d.%d.%d.%d\n", IfIdx, (UINT8)(IPTmp>>24)&0xFF, (UINT8)(IPTmp>>16)&0xFF, (UINT8)(IPTmp>>8)&0xFF, (UINT8)IPTmp&0xFF );

// This is a good time to join any multicast group we require if( fAdd && !fAddGroups ) { fAddGroups = 1;// IGMPJoinHostGroup( inet_addr("224.1.2.3"), IfIdx ); }

/* Create a Task to send/receive Raw ethernet traffic */#ifdef TEST_RAW_SEND hSendRaw = TaskCreate( SendRawEth, "TxRawEthTsk", OS_TASKPRINORM, 0x1400, 0, 0, 0 );#endif#ifdef TEST_RAW_RECV hRecvRaw = TaskCreate( RecvRawEth, "PerformRawRX", OS_TASKPRIHIGH, 0x1400, 0, 0, 0 );#endif}

赞(0)
未经允许不得转载:TI中文支持网 » 关于NDK网络开发的疑问
分享到: 更多 (0)