`
haoningabc
  • 浏览: 1478653 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

br0和tap0的互相影响

阅读更多
转载
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驱动 TAP-Windows Adapter V9

    TAP Windows适配器V9:当安装软件或登录时,遇到TAP驱动未安装或已损坏的提示时,检查是否安装 TAP Windows适配器V9。 检查方法: 1.按 Windows + R 一起启动运行窗口。 2.输入命令 devmgmt.msc 进入盒子。 击中 ...

    tap-windows-9.21.0

    tap-windows 虚拟网卡 win10 win11都可以使用,用于创建网络适配器window adapter

    TAP3编译工具TAP3-Tap3edit-0.30.tar.gz

    Tap3edit则是这个协议的编辑器,它为用户提供了方便的接口来创建、修改和分析TAP3文件。 在使用TAP3-Tap3edit-0.30.tar.gz之前,首先需要确保你的计算机上已经安装了Perl环境,特别是activePerl,这是一个针对...

    tap3.12规范文档

    TAP(Transferred Account Procedure)格式文件用于记录呼叫和相关服务的详细账目信息,以保证不同运营商之间在提供跨网络服务后的财务结算得以正确执行。随着通信技术的迭代发展,TAP格式也在持续升级以适应新的...

    TAP交换机,镜像交换机,汇聚分流器,盛科交换机,V530-TAP,产品规格书

    TAP交换机、镜像交换机、汇聚分流器、盛科交换机、V530-TAP产品规格书都是网络流量监控和分析的关键设备和技术文档,广泛应用于流量汇聚、负载均衡和流量复制等领域,为网络管理员和技术人员提供了全面的网络可视化...

    RT-Thread QEMU TAP 网卡驱动

    这通常通过命令行参数完成,如`-nic tap,ifname=tap0,script=no,downscript=no`,其中`ifname`参数指定TAP接口的名称,可以根据实际的设备名进行调整。 3. **设置RT-Thread网络配置**:在RT-Thread中,你需要配置...

    TAP交换机,汇聚分流器,盛科,CENTEC,V680,产品规格书

    10. 操作温度:TAP交换机可以在0ºC - 45ºC的温度范围内操作,具有广泛的应用场景。 11. 保护等级:TAP交换机具有高级别的保护等级,可以提供高可靠性和高安全性的保护功能。 12. 其他硬件尺寸:TAP交换机具有...

    网络分流器 tap

    TAP 设备的优点在于它可以在不影响网络正常通信的情况下,对网络流量进行监测和分析。同时,TAP 设备也可以在网络故障排除和恶意攻击阻断等领域发挥重要作用。 网络分流器 TAP 的实际应用场景包括: * 网络入侵...

    Tap经典部署方案

    Tap经典部署方案主要涉及到网络测试和抓包技术的应用,它是一种高效、稳定的方法来监控和分析网络流量。在IT行业中,Tap(Tap设备)通常指的是网络嗅探器,用于无损地捕获网络数据包,以便进行故障排查、性能优化或...

    TAP3编辑工具Digitel_TAP3Edit_V3.11.08_Setup.zip

    在通信领域,TAP3(Transcription Analysis Protocol version 3)是一种用于语音和数据传输分析的标准格式,广泛应用于电信网络的维护和故障排查。Digitel TAP3Edit是一款专业的TAP3文件编辑工具,其最新版本V3.11....

    windows tap口驱动

    windows tap口驱动,可以配套使用xcap+vmware来调试学习DPDK

    div 选项卡 tap

    Tap事件是针对触摸设备(如手机和平板)设计的,当用户在屏幕上轻触一个元素时触发。在没有鼠标点击事件的环境下,tap事件成为触发交互的关键。在选项卡设计中,添加tap事件监听可以确保触摸设备用户也能轻松切换...

    Ethernet TAP Users Guide.pdf

    工作温度范围通常在0°C至70°C之间,超出此范围可能会影响设备性能和稳定性。 **总结:** Ethernet TAP探针是针对网络通信系统开发的高效调试工具,其核心功能在于提供对目标系统的控制和深度洞察。通过与调试器...

    snmp,snmp tap 接收和发送

    SNMP Tap则是SNMP的一种扩展,它提供了对SNMP通信的观察和拦截能力,通常用于调试、监控或安全审计。 在SNMP的接收和发送过程中,有几个关键概念和技术需要理解: 1. **SNMP版本**:SNMP有多个版本,包括SNMPv1、...

    TAP工具--- 国际运营商漫游文件查看工具

    4. **性能监控**:通过监测TAP文件,工具能实时监控网络性能,识别可能影响服务质量的问题,如高延迟、丢包等。 5. **报表生成**:自动生成详细的统计报表,包括用户漫游行为分析、费用结构、热门漫游地区等,为...

    jquery -> tap 插件

    首先,`jQuery Tap`插件主要处理的是移动设备上的`touchstart`和`touchend`事件,这两个事件分别对应于手指触摸屏幕和离开屏幕的动作。在触摸设备上,单击事件可能会有延迟,这是为了防止用户无意间的快速滑动被误...

    SignalTap_II的简易使用方法

    2. **添加观测实例**:在新创建的STP文件中,通过右键点击`Instance`窗口并选择`Create Instance`来创建一个新的观测实例,默认名为`auto_signaltap_0`。 3. **添加观测节点**:在`Edit`菜单中选择`Add nodes`,在...

    Ethernet TAP Quick Start.pdf

    《Ethernet TAP Quick Start.pdf》文档是一份针对Freescale微控制器和处理器用户的快速上手指南,主要介绍如何使用CodeWarrior Ethernet TAP探针进行网络调试。该指南涵盖了CodeWarrior Ethernet TAP探针的硬件和...

    前端开源库-brofist-tap

    从提供的压缩包文件名称"specify-reporter-tap-master"来看,这可能包含了"brofist-tap"库的源代码和文档,供开发者深入研究和定制。开发者可以查看源码了解其实现原理,也可以根据自己的需求修改或扩展库的功能。 ...

Global site tag (gtag.js) - Google Analytics