Other Parts Discussed in Thread: AM2634-Q1
器件型号: AM2634-Q1
你(们)好
我在 AM2634-Q1 CC EVM 上使用两个具有两个不同 IP 地址和网络掩码的以太网端口。 我正在运行具有两个 IP 地址的专用 UDP 客户端。 我能够在两个具有以下 IP 地址、子网和网关的以太网实例上发送 UDP 消息。
- NETIF_INST_ID0 - 192.168.0.155,255255.255.255.0192.168.0.1
- NETIF_INST_ID1 - 192.168.5.51,255.255.252.0。 192.168.5.1。
我将两个实例都加入多播组、调用如下所示。 我的多播地址是 239.255.1.1
igmp_joingroup_netif(g_pNetif[NETIF_INST_ID0], &g_MCast_IpAddr);
igmp_joingroup_netif(g_pNetif[NETIF_INST_ID1], &g_MCast_IpAddr);
我正在 Windows 计算机的端口 9997 和 9999 上运行两个 UDP 服务器。 两个 UDP 服务器位于不同的网络上。 两个实例都已加入多播组。
UDP 消息仅通过 NETIF_INST_ID1 发送到多播的问题。 代码下方。 这是一个测试代码、当工作时将在实际目标中实施。
#define MULTICAST_IP_ADDR_3 "239.255.1.1"
int NW_Main(void *args)
{
Enet_Type enetType;
uint32_t instId;
int32_t status;
static uint32_t cnt1 = 0, cnt2 = 0;
status = EventP_construct(&hEvent);
EnetApp_getEnetInstInfo(CONFIG_ENET_CPSW0, &enetType, &instId);
EnetAppUtils_enableClocks(enetType, instId);
EnetApp_driverInit();
status = EnetApp_driverOpen(enetType, instId);
EnetApp_initPhyStateHandlerTask(&hEvent);
if (ENET_SOK != status)
{
EnetAppUtils_print("Failed to open ENET: %d\r\n", status);
EnetAppUtils_assert(false);
return -1;
}
EnetApp_addMCastEntry(enetType,
instId,
EnetSoc_getCoreId(),
BROADCAST_MAC_ADDRESS,
CPSW_ALE_ALL_PORTS_MASK);
//call createPhyHandler here
lwip_init();
srand(ClockP_getTicks()/1000);
App_setupNetif();
App_allocateIPAddress();
if (ENET_SOK != status)
{
EnetAppUtils_print("Failed to construct Event: %d\r\n", status);
EnetAppUtils_assert(false);
return -1;
}
while (false == App_isNetworkUp(netif_default))
{
//DebugP_log("Waiting for network UP ...\r\n");
sys_check_timeouts();
const uint32_t recvdEventsMask = App_receiveEvents(&hEvent);
if (recvdEventsMask != AppEventId_NONE)
{
App_handleEvent(recvdEventsMask);
}
}
DebugP_log("Network is UP ...\r\n");
ClockP_sleep(1);
// udp_dual_server();
udp_client_pcb[0] = udp_new();
udp_client_pcb[1] = udp_new();
// ip4addr_aton(MULTICAST_IP_ADDR_1, &g_MCast_IpAddr);//error as non-igmp group
ip4addr_aton(MULTICAST_IP_ADDR_3, &g_MCast_IpAddr);
RTI_counterEnable(CONFIG_RTI0_BASE_ADDR, RTI_TMR_CNT_BLK_INDEX_0);
uint32_t multicast_done = 1;
while (1)
{
sys_check_timeouts();
const uint32_t recvdEventsMask = App_receiveEvents(&hEvent);
if (recvdEventsMask != AppEventId_NONE)
{
App_handleEvent(recvdEventsMask);
}
if(App_isNetworkUp(g_pNetif[NETIF_INST_ID0])){
if(cnt1 == 0){
igmp_joingroup_netif(g_pNetif[NETIF_INST_ID0], &g_MCast_IpAddr);
// igmp_joingroup(&g_pNetif[NETIF_INST_ID0]->ip_addr, &g_MCast_IpAddr);
}
if(cnt1 == 1){
// Udp_Client_Send(NETIF_INST_ID0, "192.168.0.155", 9999, "RAMAN");
Udp_Client_Send(NETIF_INST_ID0, MULTICAST_IP_ADDR_3, 9997, "RAMAN");
// ClockP_sleep(100*1000);
}
cnt1++;
if(cnt1 > 0xFFFF){
// udp_remove(udp_client_pcb);
cnt1 = 1;
}
}
if(App_isNetworkUp(g_pNetif[NETIF_INST_ID1])){
if(cnt2 == 0){
igmp_joingroup_netif(g_pNetif[NETIF_INST_ID1], &g_MCast_IpAddr);
// igmp_joingroup(&g_pNetif[NETIF_INST_ID1]->ip_addr, &g_MCast_IpAddr);
}
if(cnt2 == 1){
// Udp_Client_Send(NETIF_INST_ID1, "192.168.5.50", 9997, "BHABHA");
Udp_Client_Send(NETIF_INST_ID1, MULTICAST_IP_ADDR_3, 9999, "BHABHA");
// ClockP_sleep(100*1000);
}
cnt2++;
if(cnt2 > 0xFFFF){
// udp_remove(udp_client_pcb);
cnt2 = 1;
}
}
}
App_shutdownNetworkStack();
EnetApp_driverDeInit();
EventP_destruct(&hEvent);
return 0;
}
请求有关如何使多播适用于两个以太网端口的任何帮助。
谢谢、此致
Varma

