首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同一Vlan中的原始和TCP套接字插件导致设备中的通信问题

同一Vlan中的原始和TCP套接字插件导致设备中的通信问题
EN

Stack Overflow用户
提问于 2020-08-28 16:13:33
回答 1查看 149关注 0票数 1

嗨,我有一个嵌入式设备,这是2个不同的端口。一种是与原始套接字通信,另一种是与设备通信。其他端口正在使用TCP/IP数据包类型。当我将这两个端口插入同一个vlan的交换机时,会导致网络问题。我的设备有一段时间(~15秒)无法连接TCP/IP套接字,我的原始套接字也无法与其他原始套接字设备通信(其他设备的原始套接字也插入相同的交换机)。下面显示了WireShark日志

wireshark pcap tcp数据包丢弃

但是如果我管理交换机不同的Vlan,我的意思是配置不同的Tcp端口和原始端口不同的Vlan。那么问题就解决了。

这是我的原始套接字源代码;

int createRawSocket(字符

*

sznetwork

_

接口

_

名称){ int i,ioctl

_

袜子,ifindex,未加工

_

sock=0;

代码语言:javascript
复制
ioctl_sock = socket ( AF_INET, SOCK_DGRAM, 0 );
if ( ioctl_sock < 0 )
{
  printf("\nFailed to create ioctl_sock socket\n");
 return -1;
}

/*Create raw socket*/
raw_sock = socket ( AF_PACKET, SOCK_RAW, htons ( ETH_P_ALL ));
if ( raw_sock < 0 )
{
      printf("\nFailed to create raw_sock socket\n");
      return -1;
}
strncpy ( abc_config.ifr.ifr_name, sznetwork_interface_name, sizeof (abc_config.ifr.ifr_name ));

/*Get the interface index*/
if ( ioctl ( ioctl_sock, SIOCGIFINDEX, &abc_config.ifr ) != 0 )
{
      printf ("\nFailed to call ioctl 3\n");
      return -1;
}
ifindex = abc_config.ifr.ifr_ifindex;
printf("Successfully got RAW interface index: %i\n\r", ifindex);

/*
 * prepare sockaddr_ll
 */
abc_config.socket_address.sll_family =  AF_PACKET;
abc_config.socket_address.sll_ifindex  = abc_config.ifr.ifr_ifindex;

 /*Bind to the raw socket*/
if( bind(raw_sock, (struct sockaddr *)&abc_config.socket_address, sizeof(abc_config.socket_address)) < 0 )
{
      printf("\nFailed to bind \n");
   return -1;
}

/*
 * retrieve corresponding MAC
 */
if (ioctl(raw_sock, SIOCGIFHWADDR, &abc_config.ifr) == -1) {
    perror("SIOCGIFINDEX");
    close(raw_sock);
    return ERROR;
}
abc_config.abc_raw_socket = raw_sock;
abc_config.abc_raw_state = RAW_READY;
return raw_sock;}

首先,我被认为是htons ( ETH

_

P

_

所有)使所有传入的数据包都允许。这会导致通信量增加,并且我认为无法建立连接,然后我用原始的

_

sock =插座( AF

_

数据包,套接字

_

RAW,IPPROTO

_

RAW);这次没有接收到任何类型的数据包。我发送的原始数据包的以太网类型: 0xcd03,接收: 0xdd04。

顺便说一下,嵌入式设备有一个Marvell88E6097,8 FE +3 GE堆叠式以太网交换机,电路内部有QoS和802.1Q。Raw和TCP套接字连接了此交换机。

会有什么问题呢?

非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-01 18:40:20

我通过桥接的方法解决了这个问题。下面是添加linux设备的bridge命令。

代码语言:javascript
复制
brctl addbr br1 
brctl addif br1 eth3 
ifconfig br1 up
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63629945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档