ifconfig - MAC アドレスは小文字にすべきだと決めたのは誰ですか?

ifconfig - MAC アドレスは小文字にすべきだと決めたのは誰ですか?

一部の Linux コンピュータでは、ifconfigMAC アドレス ("HWaddr") の 16 進数字が大文字で表示されます。他の Linux コンピュータでは、[af] の数字は小文字です。

なぜ違いがあるのでしょうか? プログラムには競合する 2 つのバージョンがあるのでしょうか? どこかにそれを制御するオプションがあるのでしょうか?

答え1

考えられる理由はいくつかあります。

 さまざまなインターフェースタイプ

1つの可能性:ifconfigハードウェアアドレスの印刷をインターフェース実装に委任する。実際の印刷は、(から)interfaceの特定のインターフェースの構造体の関数によって実行されます。net-tools-1.60ここ)、によって呼び出されますlib/interface.c、行 678:

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

nettools-1.60サポートされているインターフェース タイプの一覧については、のソース コードを参照してくださいlib/hw.c。イーサネット、ファイバー、トークン リングなどには個別の実装があります。

実際の印刷機能について説明します。例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);
}

x異なる種類のネットワーク インターフェイスでは、書式文字列で の代わりに小文字の を使用することで (つまり の%02x代わりに) 、同じ種類の情報を異なる方法で表示するように実装できます%02X。たとえば、IrDA インターフェイスでは小文字の 16 進数 ( 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);
}

パッチをifconfig

もう一つの可能​​性、そしておそらくその理由は、ディストリビューションがソフトウェアパッケージを頻繁に変更することです。上記のコードスニペットは元のものですnet-tools-1.60が、Debianの、というかそのパッチを見てみましょうnet-tools-1.60-23.diffここ):

+--- 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)
+   );

そこでDebianはソースコードをパッチしてifconfigディストリビューションに導入したが、これはUbuntuにも採用されるかもしれない(ウィキペディア: "UbuntuパッケージはDebianの不安定なブランチのパッケージに基づいています()。

関連情報