Hyper-Vでudevが利用できなかったため、ネットワーク周りについて調査した
まだ解決していない
結論(というかこれから調べる&試すこと)として
・udevにudevadmの情報を利用する(udevadm testでチェック)
・udevの動きを調べる(bus-infoを参照している?起動後にチェックさせる?)
・レガシネットワークを利用(「DEC DC21140A」をエミュレーションする?)
・debian7のudev設定など確認
ネットワークドライバはhv_netvsc
bus-infoがとれていないことがわかる
root@debian9:/home/shimizu# ethtool -i eth0 driver: hv_netvsc version: firmware-version: N/A expansion-rom-version: bus-info: supports-statistics: no supports-test: no supports-eeprom-access: no supports-register-dump: no supports-priv-flags: no root@debian9:/home/shimizu# udevadm info -a --path=/sys/class/net/eth0 Udevadm info starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07/VMBUS:01/vmbus_16/net/eth0': KERNEL=="eth0" SUBSYSTEM=="net" DRIVER=="" ATTR{addr_assign_type}=="0" ATTR{addr_len}=="6" ATTR{address}=="00:0d:3a:50:39:a9" ATTR{broadcast}=="ff:ff:ff:ff:ff:ff" ATTR{carrier}=="1" ATTR{carrier_changes}=="3" ATTR{dev_id}=="0x0" ATTR{dev_port}=="0" ATTR{dormant}=="0" ATTR{flags}=="0x1003" ATTR{gro_flush_timeout}=="0" ATTR{ifalias}=="" ATTR{ifindex}=="2" ATTR{iflink}=="2" ATTR{link_mode}=="0" ATTR{mtu}=="1500" ATTR{netdev_group}=="0" ATTR{operstate}=="up" ATTR{tx_queue_len}=="1000" ATTR{type}=="1" looking at parent device '/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07/VMBUS:01/vmbus_16': KERNELS=="vmbus_16" SUBSYSTEMS=="vmbus" DRIVERS=="hv_netvsc" ATTRS{class_id}=="{f8615163-df3e-46c5-913f-f2d2f965ed0e}" ATTRS{client_monitor_conn_id}=="65552" ATTRS{client_monitor_latency}=="1000" ATTRS{client_monitor_pending}=="0" ATTRS{device_id}=="{000d3a50-39a9-000d-3a50-39a9000d3a50}" ATTRS{id}=="16" ATTRS{in_intr_mask}=="0" ATTRS{in_read_bytes_avail}=="0" ATTRS{in_read_index}=="262528" ATTRS{in_write_bytes_avail}=="520192" ATTRS{in_write_index}=="262528" ATTRS{monitor_id}=="4" ATTRS{out_intr_mask}=="0" ATTRS{out_read_bytes_avail}=="0" ATTRS{out_read_index}=="428120" ATTRS{out_write_bytes_avail}=="520192" ATTRS{out_write_index}=="428120" ATTRS{server_monitor_conn_id}=="9" ATTRS{server_monitor_latency}=="1000" ATTRS{server_monitor_pending}=="0" ATTRS{state}=="3" looking at parent device '/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07/VMBUS:01': KERNELS=="VMBUS:01" SUBSYSTEMS=="acpi" DRIVERS=="" ATTRS{hid}=="VMBUS" ATTRS{path}=="\_SB_.PCI0.SBRG.VMB8" ATTRS{power_state}=="D0" ATTRS{status}=="15" ATTRS{uid}=="0" looking at parent device '/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07': KERNELS=="device:07" SUBSYSTEMS=="acpi" DRIVERS=="" ATTRS{adr}=="0x00070000" ATTRS{path}=="\_SB_.PCI0.SBRG" looking at parent device '/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00': KERNELS=="PNP0A03:00" SUBSYSTEMS=="acpi" DRIVERS=="" ATTRS{adr}=="0x00000000" ATTRS{hid}=="PNP0A03" ATTRS{path}=="\_SB_.PCI0" ATTRS{uid}=="0" looking at parent device '/devices/LNXSYSTM:00/LNXSYBUS:00': KERNELS=="LNXSYBUS:00" SUBSYSTEMS=="acpi" DRIVERS=="" ATTRS{hid}=="LNXSYBUS" ATTRS{path}=="\_SB_" looking at parent device '/devices/LNXSYSTM:00': KERNELS=="LNXSYSTM:00" SUBSYSTEMS=="acpi" DRIVERS=="" ATTRS{hid}=="LNXSYSTM" ATTRS{path}=="\" root@debian9:/home/shimizu# cat /lib/systemd/network/99-default.link [Link] NamePolicy=kernel database onboard slot path MACAddressPolicy=persistent
hv_netvsc
hv_vmbusに依存している
root@debian9:/home/shimizu# lsmod | grep hv ### 左からモジュール名、サイズ、参照回数、そのモジュールを利用しているモジュール名 ### hv_utils 20480 0 hv_netvsc 36864 0 hv_storvsc 20480 2 scsi_mod 200704 4 sg,libata,sd_mod,hv_storvsc hv_vmbus 73728 6 hyperv_keyboard,hv_netvsc,hid_hyperv,hv_utils,hyperv_fb,hv_storvsc root@debian9:/home/shimizu# modinfo hv_netvsc filename: /lib/modules/4.1.0-2-amd64/kernel/drivers/net/hyperv/hv_netvsc.ko description: Microsoft Hyper-V network driver license: GPL alias: vmbus:635161f83edfc546913ff2d2f965ed0e depends: hv_vmbus intree: Y vermagic: 4.1.0-2-amd64 SMP mod_unload modversions parm: ring_size:Ring buffer size (# of pages) (int) parm: debug:Debug level (0=none,...,16=all) (int)
起動時の動き
root@debian9:/home/shimizu# dmesg | grep "hv_netvsc" [ 1.303988] hv_vmbus: registering driver hv_netvsc [ 1.334760] hv_netvsc: hv_netvsc channel opened successfully [ 1.478279] hv_netvsc vmbus_16: Send section size: 6144, Section count:2560 [ 1.482204] hv_netvsc vmbus_16: Device MAC 00:0d:3a:xx:xx:xx link state up
udev動作
Debian vs Ubuntu: ネットワークインタフェースの名前より
・カーネルがデバイスを検出すると、ユーザーランドの udevd は /lib/udev/rules.d/ および /etc/udev/rules.d/ に格納された
rules スクリプトを 名前の辞書順で順次実行していく
・どの実装も自分が呼び出されるより先にネットワークインタフェースの名前が決定していた場合にはそれを上書きしない
・Debian8についてsystemd/udev の予測可能な名前の機能はデフォルトで無効にしており、独自でeth*と名付けるようにudevを変更している
root@debian9:/home/shimizu# systemctl status systemd-udevd.service ● systemd-udevd.service - udev Kernel Device Manager Loaded: loaded (/lib/systemd/system/systemd-udevd.service; static; vendor preset: enabled) Active: active (running) since 水 2015-12-23 21:26:54 JST; 1 weeks 1 days ago Docs: man:systemd-udevd.service(8) man:udev(7) Main PID: 161 (systemd-udevd) Status: "Processing..." CGroup: /system.slice/systemd-udevd.service └─161 /lib/systemd/systemd-udevd 12月 23 21:26:54 debian9 systemd[1]: Starting udev Kernel Device Manager... 12月 23 21:26:54 debian9 systemd[1]: Started udev Kernel Device Manager. root@debian9:/home/shimizu# cat /lib/udev/rules.d/80-net-setup-link.rules # do not edit this file, it will be overwritten on update SUBSYSTEM!="net", GOTO="net_setup_link_end" IMPORT{builtin}="path_id" ACTION!="add", GOTO="net_setup_link_end" IMPORT{builtin}="net_setup_link" NAME=="", ENV{ID_NET_NAME}!="", NAME="$env{ID_NET_NAME}" LABEL="net_setup_link_end"
参考URL
Linuxで使っているNICのドライバやバージョンを調べる方法いろいろ
udev で SCSI デバイス名を固定する
udevによるデバイスの命名の固定化