Na minha opinião, o valor tem que ser exatamente 16.
A Magic Packet Technology ( whitepaper , publicação # 20213) foi desenvolvido entre a AMD e Hewlett Packard por volta de 1995. A partir da página 2:
"Since an Ethernet controller already has built-in address matching circuitry..." they propose reusing it, adding a counter "to count up the 16 duplications of the IEEE address".
Eles raciocinam que o WOL deve ser trivial, deixando a implementação real em aberto. Isso não parece ser historicamente arbitrário ("Oh, 16 parece longo o suficiente"), porque:
-
Construa o que você tem / o que você sabe. Por exemplo, vamos supor que gostamos de potências de 2 e, portanto, dígitos hexadecimais. Convenientemente, um dígito hexadecimal (4 bits) contém valores positivos de 0 a 15. Nosso processador verifica todas as contas e define um "sinalizador" de estouro se tentarmos adicionar 1 a um valor já "máximo" (como 15). Porque isso é muito comum, podemos até ter uma instrução especial para condições de estouro, então no pseudocódigo:
Initialize a single counter that holds values from 0-15. Set it to 0. Watch the network. When I see the signal: Loop: Do I see my address at the right spot? Yes: Add 1 to counter. Did I just overflow? (15+1 = 0?) Yes: Jump out of loop to "wake up" code. ...otherwise Loop again.
-
Linhas de sinal de chip. A referência da AMD a "circuitos" leva ao fim profundo, então tudo que você precisa saber é que podemos imaginar um caso simples em que um "bit definido como 1" corresponde a uma voltagem "alta" em algum lugar em um chip, visível em um "PIN".
Arduinos são um bom exemplo: configure um bit de memória para 1 e o Arduino define um pino de saída como "alto". Esta mudança de voltagem é frequentemente demonstrada através da condução de LEDs, mas através da magia dos transistores ela pode ativar, interromper ou "acordar" automaticamente outros circuitos ou chips.
Vamos supor uma representação hexagonal mais natural (dois dígitos hexadecimais, como FF, frequentemente vistos em IP, máscaras e endereços MAC) e amarre o "pino de saída 5" do nosso Arduino à "posição de bit 5" em nosso contador:
Memory Value Event
0000 0000 00 Nothing, so keep adding 1...
0000 1111 0F Nothing, but add 1...
0001 0000 10 Arduino pin 5 high. New voltage interrupts other circuits.
Como o local da memória está ligado a esse pino, é elegante e todo o hardware: continue adicionando 1, sem necessidade de interferir no código do driver ou do desenvolvedor do BIOS. Você é apenas um fabricante de circuitos. Você vai fornecer um pino que vai alto, para ser consumido pelo silício de outro fabricante de chips, que é o que todo mundo está fazendo. No mundo real, é um pouco mais complicado (por exemplo, a especificação ENC28J60 expõe em detalhes horripilantes), mas essa é a essência.
Depois disso, a obviedade humana parece mais um efeito colateral do que a meta. Para computadores, 4 cópias do seu MAC devem ser suficientes, mas agora esse contador não vai transbordar e não é mais simples. Portanto, parece mais provável que o objetivo seja implementá-lo com o maior número possível de projetistas de silício, driver e BIOS, e 16 dá a todos a opção de "transbordar" E sinalização direta, sem reformular e reorganizar.
Jogando o advogado do diabo para detecção humana, que tal o próximo número mais alto com a mesma flexibilidade: 256? Isso não funciona: o segmento de dados sozinho produz um pacote WOL que é maior que um quadro Ethernet ( at o tempo poderia ser.
Então, para mim, isso significa que 16 é o único valor que o segmento WOL pode ser
.