请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:AM3352 工具/软件:Linux
您好!
我很难正确获取网络组件。
我使用的平台是采用 AM3352处理器的 Variscite 的 VAR-SOM-AM33模块。 它配置为具有2个网络接口。
它运行基于 https://git.ti.com/ti-linux-kernel/ti-linux-kernel/commits/linux-4.4.y 4.4.19标签的 Linux 内核
我的问题是、我无法接收网络接口子网中没有 IT 源地址的多播网络数据包。 以下是示例:
AM3352作为网络接口配置为169.254.10.6/16、并配置套接字以接收组224.5.6.7上的多播流量并将其绑定到端口45014。 如果在网络上发送的多播数据包将169.254.10.99作为源 IP 地址、则我可以毫无问题地接收数据包。 如果源地址为10.190.10.5、我不会接收任何数据包。
内部开关中是否有要更改的配置以使其正常工作?
这是用于创建套接字和接收数据的代码
{
int sock = socket (PF_iNet、SOCK_DGRAM、IPPROTO_UDP);
Int ON = 1;
setsockopt (sock、SOCKETOPTTIONLEVEL_Socket、SOCKETOPTTIONNAME_REUSEADDR、(char*)& ON、 sizeof (on));
int addrLen = sizeof (struct sockaddr_in);
struct sockaddr_in addr;
addr.sin_family = AF_iNet;
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_port = htons (unsigned short) 45016);
bind (sock、addr、addrLen);
struct ip_mreq mreq;
mreq.imr_multiaddr.s_addr = inet_addr ("224.5.6.7");
mreq.imr_interface.s_adsock = inet_addr ("169.254.10.6");
setsockopt (dr、SOCKETOPTLEVSocket、 SOCKETOPTTIONNAME_REUSEADDR、(char*)&mreq、sizeof (mreq));
字节 aTmpData[2048];
int bytesRx = recv (sock、aTmpData、2048、0);
}
下面是 DTS 文件中与网络相关的部分:
&Mac{ pinctrl-names ="default"、"sleep"; pinctrl-0 =<&cpsw_default>; pinctrl-1 =<&cpsw_sleep>; dual_emac =<1>; 状态="确定"; } ;达芬奇_MDIO{ pinctrl-names ="默认"、"睡眠"; pinctrl-0=<&Davinc_MDIO_default>; pinctrl-1 =<&Davinc_MDIO_SLEEP>; 状态="确定"; phy1:PHY@1{ reg =<1>; /* Micrel、reset-regs;*/ }; phy7:PHY@7{ reg =<4>; RXC-skim-ps =<3000>; rxdv-skime-ps =<0>; txc-skim-ps =<3000>; txen-skim-ps =<0>; rxd0-skie-ps =<0>; rxd1-skie-ps =<0>; rxd2-skie-ps =<0>; rxd3-skie-ps =<0>; txd0-skim-ps =<0>; txd1-skim-ps =<0>; Txd2-skim-ps =<0>; txd3-skim-ps =<0>; }; } ;&cpsw_emac0{ phy_id =<&Davinci_mdio>、<1>; phy-mode ="RMII"; dual_emac_res_vlan =<1>; }; &cpsw_emac1{ phy_id =<&Davinci_mdio>、<4>; phy-mode ="RGMII-txid"; dual_EMAC_res_vlan =<2>; };