- 浏览: 1482690 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (691)
- linux (207)
- shell (33)
- java (42)
- 其他 (22)
- javascript (33)
- cloud (16)
- python (33)
- c (48)
- sql (12)
- 工具 (6)
- 缓存 (16)
- ubuntu (7)
- perl (3)
- lua (2)
- 超级有用 (2)
- 服务器 (2)
- mac (22)
- nginx (34)
- php (2)
- 内核 (2)
- gdb (13)
- ICTCLAS (2)
- mac android (0)
- unix (1)
- android (1)
- vim (1)
- epoll (1)
- ios (21)
- mysql (3)
- systemtap (1)
- 算法 (2)
- 汇编 (2)
- arm (3)
- 我的数据结构 (8)
- websocket (12)
- hadoop (5)
- thrift (2)
- hbase (1)
- graphviz (1)
- redis (1)
- raspberry (2)
- qemu (31)
- opencv (4)
- socket (1)
- opengl (1)
- ibeacons (1)
- emacs (6)
- openstack (24)
- docker (1)
- webrtc (11)
- angularjs (2)
- neutron (23)
- jslinux (18)
- 网络 (13)
- tap (9)
- tensorflow (8)
- nlu (4)
- asm.js (5)
- sip (3)
- xl2tp (5)
- conda (1)
- emscripten (6)
- ffmpeg (10)
- srt (1)
- wasm (5)
- bert (3)
- kaldi (4)
- 知识图谱 (1)
最新评论
-
wahahachuang8:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
websocket的helloworld -
q114687576:
http://www.blue-zero.com/WebSoc ...
websocket的helloworld -
zhaoyanzimm:
感谢您的分享,给我提供了很大的帮助,在使用过程中发现了一个问题 ...
nginx的helloworld模块的helloworld -
haoningabc:
leebyte 写道太NB了,期待早日用上Killinux!么 ...
qemu+emacs+gdb调试内核 -
leebyte:
太NB了,期待早日用上Killinux!
qemu+emacs+gdb调试内核
转载
http://www.cnblogs.com/wlei/archive/2012/12/15/2819429.html
在实际工作中碰到一个问题:设备有两个网口,当把这两个网口桥接到br0上时,之后如果设置了mac地址,就会发现数据包不能正常收发。
如下是相关解释
--------------------------------------------------------------------
转自(http://blog.csdn.net/fanwenbo/article/details/2131193)
先说现象
结论:
br0如果没有指定hw MAC, br0的MAC地址会根据bridge中port的变化,自动选择port中最小的一个MAC地址作为br0的MAC地址。
br0只能指定port中有的interface的MAC作为br0的MAC地址。
源代码分析:
source code dir is: linux-2.4.x/net/bridge
- br_device.c
br_dev_setup() 注册了一些函数,其中 dev->set_mac_address = br_set_mac_address; //这个就是ifconfig br0 hw ether调用的函数了
static int br_set_mac_address(struct net_device *dev, void *addr)
{
struct net_bridge *br = dev->priv;
struct sockaddr *sa = (struct sockaddr *) addr;
。。。。。
//here ! copy MAC addr to br->preferred_id.addr
memcpy(br->preferred_id.addr, sa->sa_data, ETH_ALEN);
br_stp_recalculate_bridge_id(br);
。。。。。
}
- br_stp_if.c
static unsigned char br_mac_zero[6] = {0,0,0,0,0,0};
/* called under bridge lock */
void br_stp_recalculate_bridge_id(struct net_bridge *br)
{
unsigned char *addr;
struct net_bridge_port *p;
//初始br0的MAC为00:00:00:00:00:00
addr = br_mac_zero;
p = br->port_list;
while (p != NULL) {
/* match against preferred address first */
if (memcmp(p->dev->dev_addr, br->preferred_id.addr, ETH_ALEN) == 0) {
addr = p->dev->dev_addr;
//匹配port的MAC地址与首选MAC是否相符
break;
}
if (addr == br_mac_zero ||
memcmp(p->dev->dev_addr, addr, ETH_ALEN) < 0)
//寻找MAC最小的那一个
addr = p->dev->dev_addr;
p = p->next;
}
//如果没有Port的话,就为0;
//如果没有设置首选MAC,就等于最小的那一个。
//如果设置了首选MAC,则首选MAC必须同其中一个port的MAC匹配,才等于首选MAC
if (memcmp(br->bridge_id.addr, addr, ETH_ALEN))
br_stp_change_bridge_id(br, addr);
}
- 什么时候会执行br_stp_recalculate_bridge_id呢
- in br_device.c 中 br_set_mac_address()
- in br_if.c 中 br_del_if() & br_add_if()
- in br_notify.c 中 br_devic_event()的 NETDEV_CHANGEADDR 事件,该事件是任意port有修改addr就会触发的
看过代码就很容易理解bridge在处理自身MAC地址时的行为了
----------------------------------------------------------------------------
针对这种情况,目前采用的方法就是先去设置网口的mac地址,然后再桥接成br0,这样mac地址就不需要操心了,网桥端口的mac地址设置时需要留意一下。
http://www.cnblogs.com/wlei/archive/2012/12/15/2819429.html
在实际工作中碰到一个问题:设备有两个网口,当把这两个网口桥接到br0上时,之后如果设置了mac地址,就会发现数据包不能正常收发。
如下是相关解释
--------------------------------------------------------------------
转自(http://blog.csdn.net/fanwenbo/article/details/2131193)
先说现象
brctl addbr br0 ifconfig br0 br0 MAC is 00:00:00:00:00:00 brctl addif br0 eth1 (eth1 is xx:xx:xx:xx:xx:33) ifconfig br0 br0 MAC is xx:xx:xx:xx:xx:33 same as eth1, auto change brctl addif br0 eth2 (eth2 is xx:xx:xx:xx:xx:30) ifconfig br0 br0 MAC is xx:xx:xx:xx:xx:30 same as eth2, For eth2 less than eth1, auto change
ifconfig eth2 hw ether xx:xx:xx:xx:xx:50 ifconfig br0 br0 MAC is xx:xx:xx:xx:xx:33 same as eth1, auto change ifconfig br0 hw ether xx:xx:xx:xx:xx:99 ifconfig br0 br0 MAC is xx:xx:xx:xx:xx:33 same as eth1, NOT change
ifconfig br0 hw ether xx:xx:xx:xx:xx:33 ;same as eth1 ifconfig eth2 hw ether xx:xx:xx:xx:xx:20 ;less than eth1 ifconfig br0 br0 MAC is xx:xx:xx:xx:xx:33 same as eth1, `ifconfig br0 hw` NOT effective ifconfig eth1 hw ether xx:xx:xx:xx:xx:50 ;upper op,we set br0 = eth1's MAC,now we change eth1 MAC ifconfig br0 br0 MAC is xx:xx:xx:xx:xx:20 same as eth2, auto change
结论:
br0如果没有指定hw MAC, br0的MAC地址会根据bridge中port的变化,自动选择port中最小的一个MAC地址作为br0的MAC地址。
br0只能指定port中有的interface的MAC作为br0的MAC地址。
源代码分析:
source code dir is: linux-2.4.x/net/bridge
- br_device.c
br_dev_setup() 注册了一些函数,其中 dev->set_mac_address = br_set_mac_address; //这个就是ifconfig br0 hw ether调用的函数了
static int br_set_mac_address(struct net_device *dev, void *addr)
{
struct net_bridge *br = dev->priv;
struct sockaddr *sa = (struct sockaddr *) addr;
。。。。。
//here ! copy MAC addr to br->preferred_id.addr
memcpy(br->preferred_id.addr, sa->sa_data, ETH_ALEN);
br_stp_recalculate_bridge_id(br);
。。。。。
}
- br_stp_if.c
static unsigned char br_mac_zero[6] = {0,0,0,0,0,0};
/* called under bridge lock */
void br_stp_recalculate_bridge_id(struct net_bridge *br)
{
unsigned char *addr;
struct net_bridge_port *p;
//初始br0的MAC为00:00:00:00:00:00
addr = br_mac_zero;
p = br->port_list;
while (p != NULL) {
/* match against preferred address first */
if (memcmp(p->dev->dev_addr, br->preferred_id.addr, ETH_ALEN) == 0) {
addr = p->dev->dev_addr;
//匹配port的MAC地址与首选MAC是否相符
break;
}
if (addr == br_mac_zero ||
memcmp(p->dev->dev_addr, addr, ETH_ALEN) < 0)
//寻找MAC最小的那一个
addr = p->dev->dev_addr;
p = p->next;
}
//如果没有Port的话,就为0;
//如果没有设置首选MAC,就等于最小的那一个。
//如果设置了首选MAC,则首选MAC必须同其中一个port的MAC匹配,才等于首选MAC
if (memcmp(br->bridge_id.addr, addr, ETH_ALEN))
br_stp_change_bridge_id(br, addr);
}
- 什么时候会执行br_stp_recalculate_bridge_id呢
- in br_device.c 中 br_set_mac_address()
- in br_if.c 中 br_del_if() & br_add_if()
- in br_notify.c 中 br_devic_event()的 NETDEV_CHANGEADDR 事件,该事件是任意port有修改addr就会触发的
看过代码就很容易理解bridge在处理自身MAC地址时的行为了
----------------------------------------------------------------------------
针对这种情况,目前采用的方法就是先去设置网口的mac地址,然后再桥接成br0,这样mac地址就不需要操心了,网桥端口的mac地址设置时需要留意一下。
发表评论
-
建立tap设备的c的代码
2019-01-08 19:09 480tapper.c #include <stdio.h& ... -
jslinux总结帖
2019-01-04 21:33 1160注意个问题: chrome不要用两个tab页,否则ping不通 ... -
M版openstack(ovs,dvr,动态迁移)
2017-06-09 10:30 1800主要内容 1.先搭建三个节点的环境,dvr模式 2.建一个vm ... -
M版本的openstack的例子(linuxbridge)
2017-05-23 15:05 560做两个节点控制节点和计算节点 mcontroller521 ... -
jslinux-deobfuscated-network
2017-02-13 22:37 733基础知识 查看网络包 tcpdump -i eth0 -e ... -
Tunnels with iproute2
2016-11-14 15:22 593copy from http://members.ferrar ... -
vxlan多台主机的vm之间不同网段互通
2016-09-19 21:06 4403组播: 试验: 在三台机器上 192.168.139.251 ... -
vxlan多台主机的vm之间相同网段互通
2016-09-19 16:30 2243三台机器 建立namespace ... -
qemu用tap方式启动vm的网络试验(ip route)
2016-09-14 11:29 2832ip route add 192.168.8.0/24 via ... -
openstack的topo图
2016-09-07 14:07 638http://haoningabc.iteye.com/blo ... -
openstack的M版本的neutron的实验
2016-09-01 20:00 3147试验步骤: 1.创建内部 ... -
openstack的M版本安装
2016-08-17 13:33 1065参考 http://docs.openstack.org/mi ... -
socket的方式使用qemu建立虚拟机
2016-06-24 17:54 1932qemu的-net参数 -net nic 必须有,基本配置mo ... -
tap的方式使用qemu建立虚拟机NAT网络
2016-06-23 18:03 9901基本概念: vm:虚拟机 ... -
qemu用nat的方式使用tap建立虚拟机
2016-06-23 16:15 11普通桥接参考 http://haoningabc.iteye. ... -
tap的方式使用qemu建立虚拟机桥接网络
2016-06-22 20:53 7883需求:建立一个虚拟机,使网络和内网一样,当一台普通接入内网的服 ... -
websocket和tap使用select关联
2016-06-14 22:01 753c语言的socket基础http://haoningabc.i ... -
socket基础和select(python)
2016-06-14 17:21 1807上接 c语言的socket基础ht ... -
socket基础(c语言)
2016-06-14 16:45 1007不使用select 普通的基础socket连接,对多个客户端的 ... -
tap和tun
2016-06-04 22:42 829tun在网络层 tap在二层 ls ...
相关推荐
TAP Windows适配器V9:当安装软件或登录时,遇到TAP驱动未安装或已损坏的提示时,检查是否安装 TAP Windows适配器V9。 检查方法: 1.按 Windows + R 一起启动运行窗口。 2.输入命令 devmgmt.msc 进入盒子。 击中 ...
tap-windows 虚拟网卡 win10 win11都可以使用,用于创建网络适配器window adapter
Tap3edit则是这个协议的编辑器,它为用户提供了方便的接口来创建、修改和分析TAP3文件。 在使用TAP3-Tap3edit-0.30.tar.gz之前,首先需要确保你的计算机上已经安装了Perl环境,特别是activePerl,这是一个针对...
TAP(Transferred Account Procedure)格式文件用于记录呼叫和相关服务的详细账目信息,以保证不同运营商之间在提供跨网络服务后的财务结算得以正确执行。随着通信技术的迭代发展,TAP格式也在持续升级以适应新的...
TAP交换机、镜像交换机、汇聚分流器、盛科交换机、V530-TAP产品规格书都是网络流量监控和分析的关键设备和技术文档,广泛应用于流量汇聚、负载均衡和流量复制等领域,为网络管理员和技术人员提供了全面的网络可视化...
这通常通过命令行参数完成,如`-nic tap,ifname=tap0,script=no,downscript=no`,其中`ifname`参数指定TAP接口的名称,可以根据实际的设备名进行调整。 3. **设置RT-Thread网络配置**:在RT-Thread中,你需要配置...
10. 操作温度:TAP交换机可以在0ºC - 45ºC的温度范围内操作,具有广泛的应用场景。 11. 保护等级:TAP交换机具有高级别的保护等级,可以提供高可靠性和高安全性的保护功能。 12. 其他硬件尺寸:TAP交换机具有...
TAP 设备的优点在于它可以在不影响网络正常通信的情况下,对网络流量进行监测和分析。同时,TAP 设备也可以在网络故障排除和恶意攻击阻断等领域发挥重要作用。 网络分流器 TAP 的实际应用场景包括: * 网络入侵...
Tap经典部署方案主要涉及到网络测试和抓包技术的应用,它是一种高效、稳定的方法来监控和分析网络流量。在IT行业中,Tap(Tap设备)通常指的是网络嗅探器,用于无损地捕获网络数据包,以便进行故障排查、性能优化或...
在通信领域,TAP3(Transcription Analysis Protocol version 3)是一种用于语音和数据传输分析的标准格式,广泛应用于电信网络的维护和故障排查。Digitel TAP3Edit是一款专业的TAP3文件编辑工具,其最新版本V3.11....
windows tap口驱动,可以配套使用xcap+vmware来调试学习DPDK
工作温度范围通常在0°C至70°C之间,超出此范围可能会影响设备性能和稳定性。 **总结:** Ethernet TAP探针是针对网络通信系统开发的高效调试工具,其核心功能在于提供对目标系统的控制和深度洞察。通过与调试器...
4. **性能监控**:通过监测TAP文件,工具能实时监控网络性能,识别可能影响服务质量的问题,如高延迟、丢包等。 5. **报表生成**:自动生成详细的统计报表,包括用户漫游行为分析、费用结构、热门漫游地区等,为...
SNMP Tap则是SNMP的一种扩展,它提供了对SNMP通信的观察和拦截能力,通常用于调试、监控或安全审计。 在SNMP的接收和发送过程中,有几个关键概念和技术需要理解: 1. **SNMP版本**:SNMP有多个版本,包括SNMPv1、...
首先,`jQuery Tap`插件主要处理的是移动设备上的`touchstart`和`touchend`事件,这两个事件分别对应于手指触摸屏幕和离开屏幕的动作。在触摸设备上,单击事件可能会有延迟,这是为了防止用户无意间的快速滑动被误...
2. **添加观测实例**:在新创建的STP文件中,通过右键点击`Instance`窗口并选择`Create Instance`来创建一个新的观测实例,默认名为`auto_signaltap_0`。 3. **添加观测节点**:在`Edit`菜单中选择`Add nodes`,在...
《Ethernet TAP Quick Start.pdf》文档是一份针对Freescale微控制器和处理器用户的快速上手指南,主要介绍如何使用CodeWarrior Ethernet TAP探针进行网络调试。该指南涵盖了CodeWarrior Ethernet TAP探针的硬件和...
Tap事件是针对触摸设备(如手机和平板)设计的,当用户在屏幕上轻触一个元素时触发。在没有鼠标点击事件的环境下,tap事件成为触发交互的关键。在选项卡设计中,添加tap事件监听可以确保触摸设备用户也能轻松切换...
从提供的压缩包文件名称"specify-reporter-tap-master"来看,这可能包含了"brofist-tap"库的源代码和文档,供开发者深入研究和定制。开发者可以查看源码了解其实现原理,也可以根据自己的需求修改或扩展库的功能。 ...