O que o Catalyst 2960X calcula no dump do SFP: código de vendor, nome e MD5, e por que a cópia do dump não passa
Cuido da rede de uma operadora, o parque de módulos é misto, então regularmente preciso preparar módulos para switches específicos. Quero de uma vez entender a mecânica da checagem, em vez de ficar tentando dumps no chute.
Com o que estou trabalhando:
- Cisco Catalyst 2960X-24PS-L, o mais exigente do parque
- QTECH QSW-3750-28TX-AC e D-Link DGS-3420, neles os mesmos módulos sobem numa boa
- módulos SNR-SFP+SR e SFP-10G-BX
No dump do módulo que é aceito no Catalyst, logo no início vejo o byte do código de vendor e em seguida o nome em ASCII:
0E 43 49 53 43 4F ...
O que já tentei: tirei o dump de um módulo que sobe no C2960X-24PS-L, e reescrevi em outro módulo só o nome do vendor desse dump. No QTECH e no D-Link, depois disso, tudo sobe, mas o Catalyst não aceita esse módulo, mesmo os bytes corrigidos batendo com o doador byte a byte.
Daí a pergunta sobre o mecanismo da checagem. O que exatamente o Cisco calcula e sobre quais bytes, onde no módulo fica o resultado, e por que reescrever o nome do vendor a partir de um dump funcional não é suficiente? Pra mim importa a lógica, o resto eu resolvo sozinho.
Comments 6
A mecânica ali é simples e já foi desvendada há tempos. Não se verifica um campo isolado, mas uma dupla: o byte do código de vendor mais os bytes do nome do vendor. Dessa sequência se calcula o MD5, e o resultado fica no próprio módulo; o switch calcula a mesma coisa e compara.
Reproduz com utilitários padrão, não precisa de nada especial:
Você substitui pelo seu código e pelo seu nome de vendor e chega no valor que deveria estar no módulo. Dos códigos que realmente aparecem nos dumps: 02 - Finisar, 0E - Methode, 11 aparece com regularidade, mas ninguém nunca identificou de quem é. Se o par código-nome está coerente e o hash bate com ele, o módulo passa no C2960X-24PS-L.
Complementando o anterior: mostra o que realmente está no receptor. Qual byte de código de vendor ficou ali e qual nome está do lado? Pelo que você descreveu, você transferiu o nome, mas deixou o código ou o próprio hash do módulo original, e aí a dupla desalinha e o Catalyst recusa isso com toda a razão. Confira as três coisas de uma vez, não só o campo que aparece na saída do switch.
Conferi, tudo bate com a sua versão. No doador é 0E e depois CISCO, e no receptor eu realmente reescrevi o nome, mas o código de vendor ficou o original, e o hash também era o antigo. Rodei as duas combinações por xxd -r -p e md5sum: no doador o valor bate com o que está no módulo, no meu montado à mão não bate.
Ou seja, é preciso transferir a dupla inteira, não campo por campo. Agora pelo menos ficou claro onde olhar e o que conferir antes de colocar o módulo na porta.
Uma consequência importante que sempre esquecem: se o código de vendor e o nome não estiverem coerentes, o módulo não passa no Catalyst nem mesmo quando o switch tem módulos não suportados liberados. É exatamente por isso que dumps de terceiros funcionam de vez em quando - foram corrigidos parcialmente, e a checagem olha para a dupla.
Daí uma conclusão prática sobre o volume: num dump de 256 bytes, os primeiros 128 bytes são os que importam, dali pra frente é a zona do fabricante. Não faz sentido carregar a imagem inteira, mas a primeira metade precisa ser transferida de forma coerente, incluindo campos que não aparecem a olho nu na saída do switch.
Aliás, nem tudo se resolve com dump. No Medick SFP-10G-BX não tem memória, e sim um microcontrolador C8051F392: ele emula A0 e A2 e perfeitamente pode guardar uma senha ou um handshake de vendor. Ali você pode conferir a dupla até o bit que quiser, por fora simplesmente não vão aceitar. De ferramenta viva eu uso SNR SFP Writer e SFPTotal Plus, e colegas meus ainda têm umas caseiras em cima do CH341.
Uma pequena correção, para não confundir quem chegar aqui depois. Esse MD5 não tem nenhuma relação com os checksums do MSA: CC_BASE e CC_EXT do SFF-8472 são calculados por soma simples de bytes e se recalculam num instante. A checagem do vendor vive por cima deles e segue regras próprias, e recusa o módulo bem no momento em que os checksums do MSA estão certinhos - daí a sensação de que o dump está correto e o módulo mesmo assim não é aceito.
A Cisco, aliás, está longe de ser o pior caso aqui: a mecânica pelo menos é compreensível e reproduzível. O mais difícil de todos é HP e Aruba, onde a memória se comporta de forma interativa e exige chaves - aí só com dump você não se vira mais.