1. 三端口交换机基础:桥接模式与端口模式的深度抉择
在嵌入式网络设计中,德州仪器(TI)的CPSW(以太网交换机子系统)是一个集成了MAC、交换和路由功能的强大外设,而其核心智能——ALE(地址查找引擎)——则是决定数据包命运的“交通大脑”。我们常说的三端口交换机,通常指CPSW的两个外部物理端口(Port 1, Port 2)加上一个内部的主机端口(Host Port,即CPU侧)。这个主机端口的工作模式,是决定整个网络拓扑和性能的关键开关。
主机端口有两种根本性的工作模式:桥接模式和端口模式。这不仅仅是两个配置选项,它们代表了两种截然不同的网络设计哲学。
桥接模式,顾名思义,是将主机CPU视为一个透明的“桥梁”。在这种模式下,主机端口被纳入交换域。这意味着,从外部端口收到的、目的MAC地址未知的单播帧(Unknown Unicast),会被广播到包括主机端口在内的所有其他端口。为什么需要这样?想象一个典型的应用场景:你的嵌入式设备通过一个外部端口连接到一个Wi-Fi模块或另一个多端口交换机,形成了一个扩展的网络。为了让Wi-Fi网络或下游交换机后面的设备能够被“发现”,主机CPU必须能“看到”这些未知的单播流量,以便通过上层协议(如ARP)进行响应或学习,再将其转发到正确的网络分支。此时,你需要设置CPSW_ALE_CONTROL[8]寄存器位,即EN_HOST_UNI_FLOOD位为1。这个位就是控制主机端口是否参与未知单播泛洪的总开关。只有当你的设计意图是桥接两个或多个独立网络时,才应该启用它。否则,大量未知单播帧涌向CPU,会造成不必要的系统中断和资源浪费。
端口模式则是一种更隔离、更高效的工作方式。在这种模式下,主机端口被当作一个独立的终端节点。未知的单播流量不会被泛洪到主机端口,只有明确目的地址为主机MAC或广播/组播(根据配置)的帧才会被送达CPU。这极大地减轻了主机的处理负担,适用于主机仅作为网络终端或管理节点的场景,例如设备仅需与特定服务器通信,无需感知网络内其他设备的发现过程。
在实际配置中,你甚至可以让这个三端口交换机退化成类似一个两端口交换机的行为,仅使用ALE表来记录主机信息。此时,两个外部端口之间的数据转发,完全可以依赖默认的VLAN规则来完成,而无需占用宝贵的ALE表条目。这对于流量模式固定、仅需简单隔离的场景非常高效。
更进一步,在诸如工业物联网等对安全要求极高的场景,你可以将交换机配置为全认证环境。通过基于802.1X的协议,所有网络节点(设备)必须在ALE中注册其MAC地址后才能通信。此时,ALE表里填满的都是经过认证的、可信的设备地址,任何未注册设备的流量都会被直接丢弃。这为网络提供了端口级的安全准入控制。
1.1 核心控制位:EN_HOST_UNI_FLOOD的实战配置
理解理论后,关键在于实操。EN_HOST_UNI_FLOOD位的配置直接体现在寄存器操作上。在AM64x/AM243x的SDK驱动中,你通常不会直接操作寄存器,而是通过API进行配置。
例如,在使用TI的PRU-ICSSG或CPSW驱动时,初始化流程中会涉及ALE控制寄存器的设置。你需要根据你的网络拓扑来决定这个位的值。下面是一个概念性的决策流程和代码片段示意:
决策流程:
- 问自己:我的设备是否需要将两个网络(如有线LAN和Wi-Fi)桥接在一起,让它们像同一个局域网一样互相发现?
- 是-> 启用桥接模式 (
EN_HOST_UNI_FLOOD = 1)。 - 否-> 进入下一步。
- 是-> 启用桥接模式 (
- 再问自己:我的主机CPU是否需要响应网络中的ARP请求等用于设备发现的协议?
- 是-> 你可能仍然需要让主机“看到”某些广播/组播(如ARP广播),但未必需要泛洪所有未知单播。此时需要仔细设计VLAN和组播过滤,
EN_HOST_UNI_FLOOD通常设为0,但需配合其他ALE表条目。 - 否-> 使用端口模式 (
EN_HOST_UNI_FLOOD = 0),最大化主机性能。
- 是-> 你可能仍然需要让主机“看到”某些广播/组播(如ARP广播),但未必需要泛洪所有未知单播。此时需要仔细设计VLAN和组播过滤,
配置示例(基于SDK概念):
// 假设我们使用TI SDK的Enet驱动框架 #include <enet.h> #include <enet_cpsw.h> Enet_Handle hEnet; CpswAle_Cfg aleCfg; // ... 初始化Enet,获取句柄 ... // 获取当前ALE配置 Enet_cpswGetAleCfg(hEnet, &aleCfg); // 根据网络设计设置主机端口模式 if (isBridgingNetwork) { // 桥接模式:允许未知单播泛洪到主机端口 aleCfg.controlReg.bitFields.enHostUniFlood = 1; printf(“配置ALE:主机端口工作于桥接模式,用于网络扩展。\n”); } else { // 端口模式:主机端口不接收未知单播 aleCfg.controlReg.bitFields.enHostUniFlood = 0; printf(“配置ALE:主机端口工作于端口模式,隔离未知流量。\n”); } // 应用ALE配置 Enet_cpswSetAleCfg(hEnet, &aleCfg);注意事项与避坑指南:
- 性能影响:在桥接模式下,如果网络中存在大量未知目的地的单播流量(例如某些协议发现报文),CPU中断负载会显著增加。务必评估你的网络流量模型。
- 安全考量:桥接模式意味着主机暴露在更多的网络探测流量下。在安全敏感的应用中,即使需要桥接,也应结合VLAN和防火墙策略进行隔离。
- 与VLAN的协同:
EN_HOST_UNI_FLOOD的行为会受到VLAN成员关系的约束。即使该位使能,未知单播也只会泛洪到属于同一VLAN的端口。因此,VLAN配置是更细粒度的流量控制工具。 - 默认状态:在未明确配置的情况下,需要查阅芯片数据手册以确认该位的上电默认值。不要假设其状态,最好在初始化代码中显式配置。
2. VLAN间路由与OAM操作:硬件加速的智能转发
当网络复杂度上升,需要划分多个VLAN以实现广播域隔离时,VLAN间的通信就成了问题。传统上,这需要CPU介入进行三层路由,但CPSW的ALE支持线速的VLAN间路由,能将部分路由工作卸载到硬件,极大提升性能。
2.1 硬件VLAN间路由原理与配置
ALE实现硬件路由的核心机制是分类器。你可以为特定的路由规则(例如:从VLAN 10到VLAN 20,目标IP为某网段)设置一个ALE分类器条目。当数据包匹配该分类器时,ALE不会将包上送给主机CPU进行软件路由,而是直接根据关联的出口操作码,指示CPSW在出口对数据包进行修改。
这个修改过程非常精巧,CPSW会根据操作码,查询一个每端口(Per-Port)的操作表,执行诸如替换目的MAC地址、替换源MAC地址、修改VLAN标签等操作。这模拟了路由器的工作:改变二层帧头,将包从一个VLAN“路由”到另一个VLAN。它甚至可以检查并更新IP头中的TTL(生存时间)字段。
关键点在于:这个分类器只对原本要发送给主机的数据包生效。也就是说,硬件路由“劫持”了原本需要CPU处理的包,由交换机硬件代为完成路由转发。如果启用了TTL检查且TTL值无效(0或1),数据包则不会被硬件路由,而是照常送给主机处理,由网络协议栈发送ICMP超时消息。
配置流程解析:假设我们需要配置一条从VLAN 100到VLAN 200的硬件路由。
- 添加VLAN条目:首先,确保ALE表中有VLAN 100和VLAN 200的条目,并正确设置了成员端口。
- 创建分类器:配置一个ALE分类器,匹配条件为:目标IP地址(或MAC+VID组合)。这通常涉及设���IPv4/IPv6或MAC+VLAN类型的ALE表条目,并将其索引与一个分类器ID关联。
- 设置出口操作:为该分类器指定一个出口操作码。这个操作码对应到CPSW的出口操作表,表中定义了具体的动作:新的目标MAC(下一跳MAC)、新的源MAC(路由器接口MAC)、新的VLAN ID(200)。
- 关联端口与动作:在出口操作表中,指定哪些端口应用此操作(通常是目标VLAN的成员端口)。
// 伪代码,展示硬件路由配置逻辑 CpswAle_SetRouteEntryParams routeParams; CpswAle_OutgoingActionParams actionParams; // 1. 假设我们已经添加了VLAN 100和200 // Enet_cpswAddVlan(...); // 2. 设置路由分类器参数:匹配从任意端口来的,目标IP为192.168.1.1,且属于VLAN 100的流量 routeParams.vlanId = 100; routeParams.ipAddr = ENET_IPADDR(192, 168, 1, 1); // 目标IP routeParams.type = CPSW_ALE_ENTRYTYPE_IPV4; // IPv4分类器 routeParams.classifierEnable = TRUE; routeParams.classifierId = 0; // 使用分类器0 // 3. 设置出口动作参数:将包修改后从VLAN 200转发出去 actionParams.dstMacAddr = nextHopMacAddr; // 下一跳设备的MAC actionParams.srcMacAddr = myRouterInterfaceMac; // 本设备路由接口的MAC actionParams.vlanId = 200; // 新的VLAN ID actionParams.ttlCheckEnable = TRUE; // 启用TTL检查 actionParams.opCode = CPSW_ALG_OPCODE_ROUTE; // 路由操作码 // 4. 将分类器与出口动作绑定,并写入ALE表及出口操作表 Enet_cpswAddAleEntry(hEnet, &routeParams, &actionParams);2.2 OAM环回操作:链路诊断利器
OAM(操作、管理和维护)环回是网络诊断的重要功能。ALE支持在端口级别启用OAM环回模式。当某个端口被置于此模式时,它接收到的非管理帧(非生成树协议BPDU等)会被“回显”发送回同一个端口,并且在出口执行一个特殊的操作码(0xFF),这个操作会交换源和目的MAC地址。
启用OAM环回的条件很严格,必须同时满足:
- 端口处于OAM环回模式。
- 接收到的帧不是管理帧。
- 端口处于转发状态。
- 帧的目的MAC地址不等于源MAC地址(防止回环风暴)。
- 帧没有错误。
这个功能对于现场调试和链路连通性测试极其有用。例如,你可以从一个网络测试仪向设备的某个端口发送测试帧,如果端口启用了OAM环回且链路正常,测试仪将收到回显的帧,从而确认该端口的物理层和数据链路层功能完好。
配置与注意事项:
// 伪代码:启用端口1的OAM环回 Cpsw_PortOamLoopbackCfg oamCfg; oamCfg.portNum = 1; // 端口号 oamCfg.enable = TRUE; // 使能环回 Enet_cpswSetPortOamLoopback(hEnet, &oamCfg); // **重要注意事项**: // 1. 管理帧不受影响:生成树协议等管理帧不会被环回,保证了控制平面的稳定性。 // 2. 学习行为停止:处于OAM环回模式的端口,不会从环回的流量中学习MAC地址,防止污染地址表。 // 3. 错误帧处理:即使端口在OAM模式,收到有错误的帧也会按照正常非OAM模式处理(例如,如果配置了拷贝错误帧,则送给主机)。 // 4. **务必谨慎使用**:在生产网络中启用OAM环回会导致该端口无法正常转发业务流量,仅用于诊断。 // 5. 测试完成后,必须记得禁用环回:oamCfg.enable = FALSE;3. ALE地址表管理:从原理到实践的精细控制
ALE表是交换机的“大脑记忆体”,它存储了所有转发决策所需的条目。理解其条目结构和学习机制,是进行高级网络配置和故障排查的基础。
3.1 地址表条目类型详解
ALE表并非单一结构,它包含了多种类型的条目,每种类型都有特定的位域布局。软件必须确保不会写入重复的地址条目,否则行为将是未定义的。保留位必须写0。
源地址学习是ALE自动构建转发表的核心机制。学习发生在收到源地址为单播或组播(包括广播)的数据包时。一个有趣的细节是:在ALE处理开始前,组播源地址的组播位(bit 40)会被清零,这意味着ALE内部将组播源地址视为单播地址来处理学习。全1的组播地址(广播地址)也可以被加入表中。
一个被学习的单播源地址,会以特定的控制位状态被加入表中:
- Ageable (可老化) = 1:该地址会受老化机制管理。
- Touch (已接触) = 1:表示该地址刚被“看到”。
- BLOCK (阻塞) = 0:不阻塞该地址。
- SECURE (安全) = 0:不启用端口安全特性。
特殊处理:如果收到的数据包其源地址等于目的地址(例如某些环回测试或错误帧),ALE会尝试学习或更新该地址,但该数据包会被直接丢弃。这是一个重要的安全和学习稳定性设计。
主要的条目类型包括:
- 00 - 空闲条目:表项为空,可用。
- 01 - 地址条目:最基本的MAC地址条目,根据地址的bit 40区分为单播或组播。
- 10 - VLAN条目:仅定义VLAN,包含成员端口、强制入口检查等VLAN属性。
- 11 - VLAN地址条目:MAC地址与VLAN ID的绑定条目,用于在VLAN内进行精确的MAC地址转发。
3.2 单播、组播与OUI地址条目精讲
单播地址条目是网络中最常见的。其关键控制位有:
- PORT_NUMBER:指示该单播地址对应的设备位于哪个端口。单播帧只转发到一个端口。
- BLOCK:如果置位,匹配该源或目的地址的帧将被丢弃。注意:如果BLOCK和SECURE同时置位,含义就变了,它们表示这是一个单播管理帧,并用于确定转发状态测试条件。
- SECURE:端口安全功能。如果置位,则只有从
PORT_NUMBER指定的端口收到的、源地址匹配的帧才被接受,从其他端口收到的则被丢弃,且不更新地址表。这用于将MAC地址锁定在特定端口,防止MAC地址欺骗。 - AGEABLE/TOUCH:这对位共同管理地址老化。
AGEABLE=1表示地址可老化。TOUCH位在地址每次作为源地址出现时被置1。老化进程会定期扫描所有AGEABLE=1的条目,如果TOUCH=0(表示在此期间未被使用),则删除该条目;如果TOUCH=1,则将其清零,等待下一个老化周期。这保证了活跃地址得以保留,闲置地址被清理。
组播地址条目用于控制组播流的转发。其核心字段是PORT_MASK(端口掩码),指示组播帧应转发到哪些端口。FWDSTLVL(转发状态级别)字段则设定了转发条件,例如,可以要求接收端口和发送端口都必须处于“转发”状态,组播帧才能被转发,这在与生成树协议协同工作时非常有用。
OUI地址条目是一种特殊的高效匹配方式。OUI是MAC地址的前24位,代表厂商标识。通过添加OUI条目,你可以对来自某个特定厂商的所有设备(共享相同OUI)实施统一的策略,例如阻塞或限制其流量,而无需为每个设备的48位MAC地址都添加一条规则,节省了ALE表空间。
3.3 VLAN相关条目与高级控制
VLAN/地址条目结合了VLAN ID和MAC地址,是实现基于端口的VLAN和MAC地址绑定的基础。其字段与普通地址条目类似,但多了一个12位的VLAN_ID字段。
内/外层VLAN条目是纯VLAN配置的核心。它们定义了VLAN本身的属性:
- VLAN_MEMBER_LIST:该VLAN的成员端口列表。这是最基本的VLAN隔离实现。
- NO_LEARN_MASK:设置在掩码中的端口,将不会学习来自该VLAN的未知源MAC地址。这对于连接不可信网络或上行链路的端口非常有用。
- VLAN_FORCE_INGRESS_CHECK:强制入口检查。如果接收端口不是该VLAN的成员,则数据包被丢弃。这提供了严格的入口过滤。
- FORCE_UNTAGGED_EGRESS:强制无标签出口。对于指定的端口,出口帧的VLAN标签将被移除。这用于连接不支持VLAN标签的传统设备。
- REG_MCAST_FLOOD_INDEX / UREGMSK:分别控制已注册组播和未注册组播的泛洪范围,实现精细的组播流量控制。
实操心得:ALE表资源管理ALE表的大小是有限的(例如4096条)。在复杂网络中,需要精心管理:
- 优先使用VLAN条目和OUI条目:它们能覆盖大量设备,节省单播地址条目。
- 合理使用
NO_LEARN_MASK:在连接汇聚交换机或防火墙的端口上禁用学习,防止大量下游地址耗尽ALE表。 - 设置合适的老化时间:老化时间太短会导致ARP频繁刷新,增加CPU负担;太长则会导致无效地址滞留。在设备移动性低的工业网络,可以设置较长的老化时间(如300秒)。
- 静态条目是关键:对于重要的服务器、网关设备,使用静态地址条目(
AGEABLE=0),防止其被老化删除,确保关键路径永远可达。
4. 高级功能:组播范围、老化、策略与镜像
4.1 组播地址范围与IgnMbits的妙用
ALE支持灵活的组播地址范围匹配,这是通过IgnMbits(忽略位)字段实现的。你可以忽略组播MAC地址的低位部分(最多10位),从而匹配一个地址范围,而非单个地址。
例如,一个组播MAC地址01:00:5E:00:00:00(IPv4组播映射)。如果你设置IgnMbits来忽略低23位,那么该条目将匹配从01:00:5E:00:00:00到01:00:5E:7F:FF:FF的所有地址,这正好覆盖了整个IPv4组播MAC地址空间(01:00:5E:00:00:00到01:00:5E:7F:FF:FF)。这让你用一条ALE条目就能管理所有IPv4组播流量,极其高效。
配置时需要注意:当设置忽略位后,需要按照文档中的C代码示例,对组播地址值进行掩码清理和设置,确保被忽略的位在比较时被视为“不关心”。
4.2 老化机制与定时器配置
ALE支持自动老化。其过程是周期性的:
- 每当一个可老化地址作为源地址出现时,其
TOUCH位被置1。 - 老化定时器到期(或软件触发立即老化),老化进程启动。
- 进程扫描所有可老化地址条目,检查
TOUCH位。- 如果
TOUCH=0,标记该条目为空闲。 - 如果
TOUCH=1,清除TOUCH位。
- 如果
- 定时器重新开始。
这意味着一个未被使用的地址,会在老化间隔后的1到2个周期内被删除。老化间隔通过寄存器配置,需要根据网络动态性来权衡设置。
4.3 策略与分类:流量管理的瑞士军刀
ALE的策略和分类器功能极其强大,可以基于十多个字段(端口、优先级、MAC、VLAN、IP、协议类型等)对数据包进行匹配和分类。每个策略器本质上是一个硬件匹配引擎。
策略功能实现了类似RFC 2698的三色标记器,可以进行流量监管。你可以设置承诺信息速率和峰值信息速率,数据包被标记为绿、黄、红。红色包可以被丢弃,黄色包可以在拥塞时丢弃,绿色包优先通过。这用于保证关键业务的带宽。
分类功能则更侧重于“打标签”。它使用策略器硬件但不进行限速,而是根据匹配结果,为数据包分配一个“流ID”或“线程ID”。这个ID可以被后续的队列调度、服务质量模块使用,实现基于应用的差异化服务。
例如,你可以配置一个分类器,将所有来自特定IP子网、且DSCP值为EF(加速转发)的流量,分类到高优先级的流ID。然后,在出口队列配置中,让高优先级流ID的队列获得更多带宽或更低的延迟。
4.4 端口镜像:网络监控与调试
ALE支持三种镜像模式,是网络监控和故障排查的必备功能:
- 基于目的端口镜像:所有最终要转发到某个特定端口(如端口1)的流量,都被复制一份发送到镜像端口(如端口3)。用于监控去往特定设备的所有流量。
- 基于源端口镜像:所有从某个特定端口(如端口2)进入的流量,都被复制一份发送到镜像端口。用于监控来自特定链路的所有流量。
- 基于表项镜像:所有匹配特定ALE表项(如特定MAC地址、特定VLAN)的流量,被复制到镜像端口。用于监控特定用户或特定VLAN的流量。
配置镜像的关键点:
- 镜像流量是尽力而为的,当交换机缓冲区紧张时,镜像包可能被丢弃,以保证正常转发流量。
- 镜像端口本身可以是任何端口,不一定是被监控VLAN的成员。ALE会在应用入口和出口过滤后,再将流量复制到镜像端口。
- 要避免环路:如果镜像端口也是被监控流量的源或目的端口,则不会产生重复的镜像包。
5. 实战配置案例与常见问题排查
5.1 综合配置案例:构建一个安全的工业物联网网关
需求:设备有两个外部以太网口(Port1, Port2)和一个CPU主机口。Port1连接工厂车间网络(VLAN 10,设备众多),Port2连接控制室网络(VLAN 20,关键服务器)。CPU运行网关应用和MQTT客户端。
- 目标1:隔离车间网络(VLAN 10)和控制室网络(VLAN 20)。
- 目标2:CPU需要与两个网络通信,并作为VLAN 10和20之间的路由器。
- 目标3:车间网络设备不可信,需要防止MAC地址欺骗。
- 目标4:监控所有去往控制室服务器的流量。
配置步骤:
- 模式选择:CPU主机端口配置为桥接模式(
EN_HOST_UNI_FLOOD=1),因为CPU需要响应两个网络的ARP请求,并作为路由网关。 - 创建VLAN:
- 添加VLAN 10条目,成员端口:Port1, Host。设置
FORCE_UNTAGGED_EGRESS在Port1,因为车间交换机可能不支持VLAN Tag。 - 添加VLAN 20条目,成员端口:Port2, Host。Port2可以保留Tag,与控制室交换机对接。
- 添加VLAN 10条目,成员端口:Port1, Host。设置
- 添加静态地址:
- 为控制室服务器在VLAN 20中添加静态单播地址条目(
AGEABLE=0),端口指向Port2。 - 为CPU自身在VLAN 10和VLAN 20中各添加一个静态MAC地址条目(
AGEABLE=0),端口指向Host。
- 为控制室服务器在VLAN 20中添加静态单播地址条目(
- 配置端口安全:
- 在VLAN 10的单播地址条目中,为关键设备启用
SECURE位,将其MAC地址锁定在Port1。 - 在VLAN 10的VLAN条目中,为Port1设置
NO_LEARN_MASK,防止车间网络的大量未知设备MAC地址占满ALE表。
- 在VLAN 10的单播地址条目中,为关键设备启用
- 配置硬件路由:
- 添加一个分类器,匹配目标IP为控制室服务器、且来自VLAN 10的流量。
- 为该分类器设置出口操作:将源MAC改为CPU在VLAN 20的MAC,目标MAC改为服务器MAC,VLAN ID改为20。
- 配置镜像:
- 启用基于目的端口镜像,
MIRROR_DP设为Port2,MIRROR_TOP设为Port1(假设Port1连接一个网络分析仪)。监控所有去往控制室的流量。
- 启用基于目的端口镜像,
5.2 常见问题排查速查表
| 问题现象 | 可能原因 | 排查步骤与解决方法 |
|---|---|---|
| 主机无法收到ARP回复 | 主机端口模式错误。 | 检查EN_HOST_UNI_FLOOD位。若主机需要与网络设备通信,应设为桥接模式(1)。检查VLAN成员关系,确保主机端口在正确的VLAN中。 |
| 两个VLAN间无法通信 | 硬件路由未配置或配置错误。 | 1. 确认两个VLAN条目已正确创建且主机端口是成员。 2. 检查ALE分类器条目是否添加,匹配条件是否正确(IP、VLAN)。 3. 检查关联的出口操作表,目的MAC、源MAC、新VLAN ID是否正确。 4. 使用镜像功能,抓包查看经过交换机的帧头是否被正确修改。 |
| ALE表很快被填满 | 地址学习不受控,或存在网络环路。 | 1. 在上行或连接大量设备的端口对应的VLAN条目中,启用NO_LEARN_MASK。2. 检查并启用生成树协议,防止广播风暴导致MAC地址漂移。 3. 适当调短老化时间。 4. 使用 CPSW_ALE_TBLCTL寄存器读取ALE表内容,分析哪些地址在频繁学习/更新。 |
| 特定设备通信时断时续 | MAC地址被老化,或存在MAC地址冲突/欺骗。 | 1. 为该关键设备添加静态地址条目(AGEABLE=0)。2. 启用端口安全( SECURE位),将该设备的MAC地址与特定端口绑定。3. 排查网络中是否存在IP地址冲突或非法DHCP服务器。 |
| 组播流量无法转发 | 组播地址条目未添加,或端口掩码/转发状态错误。 | 1. 确认是否添加了对应的组播MAC地址条目(或使用IgnMbits的范围条目)。2. 检查 PORT_MASK是否包含了需要接收组播的端口。3. 检查 FWDSTLVL是否与端口当前状态(转发/阻塞/学习)匹配。在启用STP的网络中,可能需要设置为Forwarding/Learning或Forwarding。 |
| 镜像端口抓不到包 | 镜像配置错误,或镜像流量被丢弃。 | 1. 确认镜像模式(源/目的/表项)选择正确,MIRROR_DP/MIRROR_TOP等参数设置无误。2. 确认镜像端口是启用且连接正常的。 3. 镜像流量可能因交换机拥塞被丢弃,尝试在低负载时测试。 4. 确保被监控的流量确实经过了CPSW交换,而不是通过主机本地回环。 |
| 配置了BLOCK但流量仍通过 | BLOCK和SECURE位组合含义误解。 | 检查BLOCK和SECURE是否同时为1。若同时为1,则表示这是一个“单播管理帧”的转发状态条件,而非阻塞功能。如需阻塞,应设置BLOCK=1且SECURE=0。 |
调试ALE最有力的工具是直接读取其内存表。TI的SDK通常提供Enet_cpswDumpAleTable()之类的函数,或者你可以通过寄存器接口直接读取CPSW_ALE_TBLW0等表项寄存器。将读出的原始数据与上述条目结构对比,是定位配置问题最直接的方法。记住,所有配置最终都体现在这一个个71位的表项里,理解它们,你就掌握了CPSW ALE的灵魂。