ifconfig - quem decidiu que o endereço MAC deveria ser minúsculo?

ifconfig - quem decidiu que o endereço MAC deveria ser minúsculo?

Em alguns computadores Linux, ifconfigexibe os dígitos hexadecimais do endereço MAC ("HWaddr") em letras maiúsculas. Em outros computadores Linux, os dígitos [af] estão em letras minúsculas.

Por que a diferença? Existem duas versões concorrentes do programa? Existe uma opção em algum lugar para controlá-lo?

Responder1

Existem vários motivos possíveis.

 Diferentes tipos de interface

Uma possibilidade: ifconfigdelegar a impressão do endereço de hardware à implementação da interface. A impressão real é executada por uma função na interfaceestrutura da interface específica em net-tools-1.60(deaqui), chamado por lib/interface.c, linha 678:

printf(_("HWaddr %s  "), hw->print(ptr->hwaddr));

Consulte o código-fonte para nettools-1.60obter lib/hw.cuma lista de tipos de interface suportados: Existem implementações separadas para Ethernet, fibra, token ring, etc.

Agora, para a função de impressão real: Exemplo lib/ether.c::

/* Display an Ethernet address in readable format. */
static char *pr_ether(unsigned char *ptr)
{
    static char buff[64];

    snprintf(buff, sizeof(buff), "%02X:%02X:%02X:%02X:%02X:%02X",
         (ptr[0] & 0377), (ptr[1] & 0377), (ptr[2] & 0377),
         (ptr[3] & 0377), (ptr[4] & 0377), (ptr[5] & 0377)
    );
    return (buff);
}

Os diferentes tipos de interfaces de rede podem ser implementados para exibir o mesmo tipo de informação de maneira diferente, usando xs minúsculos na string de formatação (ou seja, %02xem vez de %02X). Por exemplo, a interface IrDA usa dígitos hexadecimais minúsculos ( lib/irda.c):

/*
 * Function irda_print (ptr)
 *
 *    Print hardware address of interface
 *
 */
static char *irda_print(unsigned char *ptr)
{
    static char buff[8];

    sprintf(&buff[strlen(buff)], "%02x:%02x:%02x:%02x", ptr[3], ptr[2], 
        ptr[1], ptr[0]);

    return (buff);
}

Patches paraifconfig

Outra possibilidade, e provavelmente a razão aqui: as distribuições frequentemente alteram os pacotes de software. O trecho de código acima é do original net-tools-1.60, vamos dar uma olhada no Debian, ou melhor, em seu patch net-tools-1.60-23.diff(doaqui):

+--- net-tools.orig/lib/ether.c
++++ net-tools/lib/ether.c
[...]
+@@ -39,7 +39,7 @@ static char *pr_ether(unsigned char *ptr
+ {
+     static char buff[64];
+ 
+-    snprintf(buff, sizeof(buff), "%02X:%02X:%02X:%02X:%02X:%02X",
++    snprintf(buff, sizeof(buff), "%02x:%02x:%02x:%02x:%02x:%02x",
+        (ptr[0] & 0377), (ptr[1] & 0377), (ptr[2] & 0377),
+        (ptr[3] & 0377), (ptr[4] & 0377), (ptr[5] & 0377)
+   );

Então o Debian corrigiu o código-fonte ifconfigde sua distribuição, que também pode ser adquirido pelo Ubuntu (Wikipédia: "Os pacotes do Ubuntu são baseados em pacotes do ramo instável do Debian").

informação relacionada