Hyper-V第1世代の仮想マシンでレガシーネットワークアダプターが使えるようになった

この記事は、NetBSD Advent Calendar 2017のすっかり遅くなった17日目の記事です。

はじめに

PR kern/49323という2014年10月に send-prして何もできないままになっていた、Hyper-V第1世代の仮想マシンで レガシーネットワークアダプターが使えない問題が、2017年11月にnakayama@さん によって修正されました。

これによって、100 Mbpsではありますが、支障なくネットワーク接続できるように なったので、私は大変喜んでいます。 nakayama@さんありがとうございます。

Hyper-VとBSD

私は大変喜んではいるのですが、Hyper-Vのサポートについては、 FreeBSDやOpenBSDでは既に準仮想化デバイスも含め、 順調にサポートが進んでいるようです。

私も仕事でHyper-Vを使わないといけない場合には、 FreeBSD/amd64を使っています。 でも、Hyper-V第2世代仮想マシンは、FreeBSD/amd64 11.1のISOイメージを 起動させることはできませんでした。

NetBSDと言うと、Google Summer of Codeで課題になったことはあったようですが、 進まなかったのか、結果がsrcツリーにcommitされてはいません。

いつものように、世界で自分しか困っていないパターンなのかもしれません…。

Hyper-V仮想マシンの様子

Hyper-V第1世代の仮想マシンを用意し、ネットワークアダプターを削除して、 レガシーネットワークアダプターを追加するだけです。 acpicpu0の後で、fd0を初期化する辺りで なかなか進まず、気分的にあきらめそうになりますが、 我慢して待ては進みます。 カーネルのブートメッセージは以下のようになります。


Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
    2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017
    The NetBSD Foundation, Inc.  All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
    The Regents of the University of California.  All rights reserved.

NetBSD 8.99.9 (GENERIC) #0: Sun Dec 17 17:49:04 UTC 2017
 mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/amd64/compile/GENERIC
total memory = 1023 MB
avail memory = 971 MB
WARNING: module error: module `cd9660' pushed by boot loader already exists
timecounter: Timecounters tick every 10.000 msec
Kernelized RAIDframe activated
running cgd selftest aes-xts-256 aes-xts-512 done
timecounter: Timecounter "i8254" frequency 1193182 Hz quality 100
Microsoft Corporation Virtual Machine (7.0)
mainbus0 (root)
ACPI: RSDP 0x00000000000F5BF0 000014 (v00 ACPIAM)
ACPI: RSDT 0x000000003FFF0000 000040 (v01 VRTUAL MICROSFT 06001702 MSFT 00000097)
ACPI: FACP 0x000000003FFF0200 000081 (v02 VRTUAL MICROSFT 06001702 MSFT 00000097)
ACPI: DSDT 0x000000003FFF1D24 003CBE (v01 MSFTVM MSFTVM02 00000002 INTL 02002026)
ACPI: FACS 0x000000003FFFF000 000040
ACPI: WAET 0x000000003FFF1A80 000028 (v01 VRTUAL MICROSFT 06001702 MSFT 00000097)
ACPI: SLIC 0x000000003FFF1AC0 000176 (v01 VRTUAL MICROSFT 06001702 MSFT 00000097)
ACPI: OEM0 0x000000003FFF1CC0 000064 (v01 VRTUAL MICROSFT 06001702 MSFT 00000097)
ACPI: SRAT 0x000000003FFF0800 0000E0 (v02 VRTUAL MICROSFT 00000001 MSFT 00000001)
ACPI: APIC 0x000000003FFF0300 000452 (v01 VRTUAL MICROSFT 06001702 MSFT 00000097)
ACPI: OEMB 0x000000003FFFF040 000064 (v01 VRTUAL MICROSFT 06001702 MSFT 00000097)
ACPI: 1 ACPI AML tables successfully acquired and loaded
ioapic0 at mainbus0 apid 0: pa 0xfec00000, version 0x11, 24 pins
cpu0 at mainbus0 apid 0
cpu0: Intel(R) Core(TM) i3-2348M CPU @ 2.30GHz, id 0x206a7
cpu0: package 0, core 0, smt 0
acpi0 at mainbus0: Intel ACPICA 20171110
acpi0: X/RSDT: OemId , AslId 
LNKA: ACPI: Found matching pin for 0.8.INTA at func 0: 11
LNKA: ACPI: Found matching pin for 0.10.INTA at func 0: 11
acpi0: SCI interrupting at int 9
timecounter: Timecounter "ACPI-Safe" frequency 3579545 Hz quality 900
attimer1 at acpi0 (TMR, PNP0100): io 0x40-0x43 irq 0
pckbc1 at acpi0 (PS2K, PNP0303) (kbd port): io 0x60,0x64 irq 1
pckbc2 at acpi0 (PS2M, PNP0F03) (aux port): irq 12
pcppi1 at acpi0 (SPKR, PNP0800): io 0x61
spkr0 at pcppi1: PC Speaker
wsbell at spkr0 not configured
midi0 at pcppi1: PC speaker
sysbeep0 at pcppi1
UAR1 (PNP0501) at acpi0 not configured
UAR2 (PNP0501) at acpi0 not configured
FDC (PNP0700) at acpi0 not configured
SYSR (PNP0C02) at acpi0 not configured
OSYS (PNP0C02) at acpi0 not configured
VMB8 (VMBUS) at acpi0 not configured
SYSM (PNP0C01) at acpi0 not configured
GENC (HYPER_V_GEN_COUNTER_V1) at acpi0 not configured
ACPI: Enabled 1 GPEs in block 00 to 0F
pckbd0 at pckbc1 (kbd slot)
pckbc1: using irq 1 for kbd slot
wskbd0 at pckbd0: console keyboard
pms0 at pckbc1 (aux slot)
pckbc1: using irq 12 for aux slot
wsmouse0 at pms0 mux 0
attimer1: attached to pcppi1
pci0 at mainbus0 bus 0: configuration mode 1
pci0: This pci host supports neither MSI nor MSI-X.
pci0: i/o space, memory space enabled, rd/line, rd/mult, wr/inv ok
pchb0 at pci0 dev 0 function 0: vendor 8086 product 7192 (rev. 0x03)
pcib0 at pci0 dev 7 function 0: vendor 8086 product 7110 (rev. 0x01)
piixide0 at pci0 dev 7 function 1: Intel 82371AB IDE controller (PIIX4) (rev. 0x01)
piixide0: bus-master DMA support present
piixide0: primary channel wired to compatibility mode
piixide0: primary channel interrupting at ioapic0 pin 14
atabus0 at piixide0 channel 0
piixide0: secondary channel wired to compatibility mode
piixide0: secondary channel interrupting at ioapic0 pin 15
atabus1 at piixide0 channel 1
piixpm0 at pci0 dev 7 function 3: vendor 8086 product 7113 (rev. 0x02)
timecounter: Timecounter "piixpm0" frequency 3579545 Hz quality 900
piixpm0: 24-bit timer
piixpm0: SMBus disabled
vga0 at pci0 dev 8 function 0: vendor 1414 product 5353 (rev. 0x00)
wsdisplay0 at vga0 kbdmux 1: console (80x25, vt100 emulation), using wskbd0
wsmux1: connecting to wsdisplay0
drm at vga0 not configured
tlp0 at pci0 dev 10 function 0: DECchip 21140A Ethernet, pass 2.0
tlp0: interrupting at ioapic0 pin 11
tlp0: Ethernet address 00:15:5d:00:7d:01
tlp0: 100baseTX, 100baseTX-FDX
isa0 at pcib0
com0 at isa0 port 0x3f8-0x3ff irq 4: ns16550a, working fifo
com1 at isa0 port 0x2f8-0x2ff irq 3: ns16550a, working fifo
fdc0 at isa0 port 0x3f0-0x3f7 irq 6 drq 2
acpicpu0 at cpu0: ACPI CPU
acpicpu0: C1: HLT, lat   0 us, pow     0 mW
timecounter: Timecounter "clockinterrupt" frequency 100 Hz quality 0
fd0 at fdc0 drive 0: 1.44MB, 80 cyl, 2 head, 18 sec
wd0 at atabus0 drive 0
wd0: &t;Virtual HD>
wd0: drive supports 128-sector PIO transfers, LBA48 addressing
wd0: 127 GB, 264224 cyl, 16 head, 63 sec, 512 bytes/sect x 266338304 sectors
IPsec: Initialized Security Association Processing.
wd0: 32-bit data port
wd0: drive supports PIO mode 4, DMA mode 2, WRITE DMA FUA
wd0(piixide0:0:0): using PIO mode 4, DMA mode 2 (using DMA), WRITE DMA FUA EXT
atapibus0 at atabus1: 2 targets
cd0 at atapibus0 drive 0: <Virtual CD, , > cdrom removable
cd0: 32-bit data port
cd0: drive supports PIO mode 4, DMA mode 2
cd0(piixide0:1:0): using PIO mode 4, DMA mode 2 (using DMA)
boot device: cd0
root on cd0a dumps on cd0b
root file system type: cd9660
kern.module.path=/stand/amd64/8.99.9/modules
tlp0としてレガシーネットワークアダプターが認識されました。

以下のようにdhcpcd(8)を使ってアドレスを取得しましたが、 以前のようにエラーにはならず、その後のftpでのダウンロードも 問題なくできました。


# dhcpcd tlp0
# ifconfig tlp0
tlp0: flags=0x8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        ec_capabilities=1<VLAN_MTU>
        ec_enabled=0
        address: 00:15:5d:00:7d:01
        media: Ethernet 100baseTX
        status: active
        inet 172.17.248.236/28 broadcast 172.17.248.239 flags 0x0
        inet6 fe80::79e6:af53:6f8e:e91%tlp0/64 flags 0x0 scopeid 0x1

まとめ

Hyper-V第1世代の仮想マシンでレガシーネットワークアダプターを NetBSDから使えるようになりました。

ですが、レガシーでない方のネットワークアダプター、 Hyper-V第2世代の仮想マシンのサポートなどやるべきことはたくさんありそうです。

Comments

Popular posts from this blog

#5000へCメールを送れないau端末でezweb.ne.jpの電子メールアドレスをIMAP4/SMTPで扱う方法

PostgreSQLのOracle Foreign Data WrapperをWindowsで使う

Vaio Pro 11/13用のサードパーティーのACアダプター