Junos 升级后 EX4200 报告 SFP+ EEPROM 编程有误,而同一链路上的 MX960 仍能正常显示 DOM
我们在几条 80 公里的 DWDM 链路上用 EX4200,两端都是第三方光模块,因为原厂 DWDM 模块的价格根本不在预算之内。这套方案用了好多年都没问题。可是自从 EX 系列升级到 Junos 12.3 后,模块还插在原来的端口上,链路也还在,但交换机已经不肯承认这些模块是光模块了。
- EX4200,Junos 12.3(同一机箱上 11.4 版本时 DOM 工作正常)
- Integra SFPP-C51-80-10GD,DWDM 80 公里 SFP+
- 同一条链路对端的 MX960,型号完全一样,DOM 依然完整
user@ex4200> show interfaces diagnostics optics xe-0/1/0
Physical interface: xe-0/1/0
Unknown cable
messages 日志在插入模块时只打出这一行:SFP+ of type 0 EEPROM is Mis Programmed。
我已经排除了以下这些:
- 重新插拔了光模块,也换到了同一机箱的另一个端口,没有变化;
- 在实验室里试了一台备用的 EX3300 和一台 QFX5100,表现都一样,所以不是某一台设备坏了;
- 又检查了对端,同一批次同一型号的模块在 MX960 上能给出完整的诊断信息。
所以是 EX 的驱动开始强制检查 EEPROM 里某个字段,而旧版本根本不管这个吗?如果是这样,能对光模块本身做点什么补救,还是说这事只能去找供应商谈?
Comments 6
那行日志不是什么泛泛的抱怨,它是驱动在明确告诉你哪项检查没通过。
A0 页的第 3 到第 10 字节,装的是 SFF-8472 里规定的光模块合规代码(compliance codes)——也就是标注 10GBASE-SR、LR、ER、各种 SONET 代码、光纤通道代码等等的那些位。在你这种光模块上,这八个字节全是零,所以消息里才叫它 type 0。规范要求这个字段里至少要有一位被置位;全零的合规字段不算是一个有效的模块描述。老版本的 EX 代码根本不检查这个,直接就去解析诊断页了,新版驱动会先校验这个字段,校验不过就拒绝把这个模块当成已知的 10G 光模块处理。这就是为什么会报 unknown cable,DOM 也没了。MX 那条代码路径不做这个检查,所以同样的型号在那边还是好用的。
先自己验证一下再去找人理论:进 shell,在那个端口上执行 xcvrpeek page A0,然后看偏移 3 到 10 这几个字节。如果全是零,事情就坐实了。
真正麻烦的是原地修复。理论上 xcvrpoke 可以把这些字节写回去。但实际上很多厂商把 A0 页锁死了,写操作会返回 EIO,这一步在交换机这边是没法解决的。剩下能做的就是找供应商:要么让他们出货时就写好真实的合规代码,要么让他们出货时不锁 A0 页,你自己就能把这些位设上。如果这两点他们都做不到,那这就是一个披着 Junos 外衣的供应商问题。
在大家开始瞎猜之前,有两点值得先确认清楚。
第一,两台设备各自确切的版本号。你说 EX 升到了 12.3,那 MX960 跑的是什么版本?如果它还停留在更老的版本线上,那这两台设备其实没什么可比性,现在这个差异说明不了任何问题。
第二,MX 那边的模块,是不是真的和 SFPP-C51-80-10GD 同一批次,还是型号一样但来自不同的订单?不同批次之间的差异往往比大家想的要大。
请贴一下两端的
show interfaces diagnostics optics输出,以及拔插模块时 messages 日志打出的全部内容,而不只是你已经贴的那一行。两端用的是同一型号,SFPP-C51-80-10GD,同一批订单,序列号也是连着的。
在 MX960 上,
show interfaces diagnostics optics给出了完整的一套数据:温度、激光偏置电流、TX 功率、RX 功率。在 EX4200 上,同一条命令只打出接口的头信息,然后就是 unknown cable 那一行,别的什么都没有。重新插拔模块,日志里只会多出一行SFP+ of type 0 EEPROM is Mis Programmed,别的都没有,不管我换到哪个端口都是一样。让我不解的是,在升级之前,就是同一个模块、同一个机箱、同一个端口,DOM 一直显示得好好的,一句抱怨都没有。
值得补充一句,只读那一半在另一个阵营里同样存在。在思科上,
show idprom interface <if> detail不用进任何 shell 就能把识别字节全部打出来,这在把模块正式接到 Juniper 设备之前,用一台备用交换机检查整批货时很方便。读操作在哪都是无害的。从主机端写就是另一回事了:xcvrpoke 是内部工具,官方并不支持用它来修复模块,而且前面也说了,差不多一半的情况下它会被厂商锁给挡住。用它来证明 EEPROM 到底出了什么问题,然后把这个证据交给卖给你光模块的人。
同一类问题,症状完全不同,留个记录以防有人搜索时看到这里。
我们把一个无名的 1G BiDi WDM SFP 插进一台 EX4600 的 ge-0/0/1,结果这个接口干脆就不存在。
show interfaces terse里看不到它,对它执行任何命令都返回error: device ge-0/0/1 not found。日志里写的是OPTIC State changed for port: 0/0/1,接着是Fibre channel transceiver plugged in without Fibre channel configuration!!。这个模块的 EEPROM 编码让 Junos 把它归类成了光纤通道(Fibre Channel)收发器而不是千兆以太网,所以根本没有为它创建以太网接口。任何配置都解决不了这个问题,只有一个编码正确的模块才行。而且这不只是低价那一档的问题。曾经有一批思杰(Citrix)品牌的 10G SFP+,插在 NetScaler MPX 和 SDX 设备(也是同一家厂商自己的产品)上,开机时就会打出
*** Unsupported SFP+/SFP type !。良品在标签上带有 A2 版本标记,不良品都走了 RMA 退换。编码出问题在任何价位的产品上都可能发生。确认属实,谢谢你给出这么精确的偏移地址。
我检查过的每一个 SFPP-C51-80-10GD 模块,包括还没开封的,用 xcvrpeek 读 A0 页,偏移 3 到 10 都是零。xcvrpoke 直接返回 EIO,说明 A0 页是锁着的,我们这边没有任何办法补救。
拿着这些字节偏移和日志里的那一行去找供应商,他们认了,正在给这批货重新编码写入真实的合规代码;已经装在 MX960 上的那些就不动了,反正那个平台上什么都不报错。上面那条解释标记为最佳答案。