Ruby と bit-struct を使用して、テスト セットアップでネットワーク インターフェイスを構成しています。これはほとんどの IOCTL 呼び出しで正常に機能しますが、SIOCGIFCONF を呼び出す方法がわかりません。
次に例を示します。
インターフェイスの MAC アドレスを取得したい場合は、次のように記述します。
class LinuxIfreqMacAddr < BitStruct
char :name, 128
unsigned :type, 16, :endian => :native
hex_octets :macaddr, 48
pad :padding, 64
end
ifr = LinuxIfreqMacAddr.new
ifr.name = "eth0"
s.ioctl(SIOCGIFHWADDR, ifr) # s is a socket
puts ifr.macaddr
これは問題なく動作し、eth0 の MAC アドレスが表示されます。しかし、"struct ifconf" (SIOCGIFCONF で使用される) の署名には、バッファを渡す必要があります。
署名は次のとおりです。
struct ifconf {
int ifc_len;
char __user *ifcu_buf;
};
Ruby から SIOCGIFCONF ioctl コマンドを 4096 バイトのバッファで呼び出すにはどうすればよいですか?