Hi Laszlo,

I have not built nor tested an OVMF configuration, so my recommendation is to 
work with Gerd Hoffman to:
    1.  Get his configuration working
    2.  Get sockets working
    3.  Remove the pieces that you do not want from Gerd's configuration

As for sockets, it was designed to use the UEFI 2 networking stack so you 
should be using IFCONFIG instead of IPCONFIG.  From these emails, I would 
suggest using a static IP address. Once the IP address is assigned to the 
adapter and verified with the command "ifconfig -l" then it should be possible 
to run the socket test applications.  Note that for DNS lookup to work the 
shell's default device needs to contain the file /Efi/StdLib/etc/resolv.conf 
and it needs to point to your DNS servers.

Lee

-----Original Message-----
From: Laszlo Ersek [mailto:ler...@redhat.com] 
Sent: Thursday, January 17, 2013 8:54 AM
To: edk2-devel@lists.sourceforge.net
Subject: [edk2] running the StdLib socket test apps in OVMF [was: ovmf pxeboot]

On 01/17/13 16:00, Gerd Hoffmann wrote:
> 
> I'm running ovmf with networking enabled and ipxe efi roms.  Network 
> driver seems to work properly.  In efi shell I can ifconfig the 
> interface with a static ip address and ping the default gateway.

I tried something similar, but didn't get this far.

(1) Following OvmfPkg/README, I downloaded and extracted the e1000 driver from 
<http://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&DwnldID=17515&lang=eng>
(btw, extracting the driver from a package available only as a 32-bit Windows 
binary was quite a big hoop to jump through).

(2) I had to modify the FD.MEMFD layout to build OvmfPkg with "-D 
NETWORK_ENABLE -D FD_SIZE_2MB -D SECURE_BOOT_ENABLE" (reported by Gerd); see 
the first patch.

I don't understand how FD.MEMFD is used when composing FD.OVMF, but when I 
removed that section from the fdf altogether, the resultant flash device hung 
very quickly after boot.

(3) I applied the second patch so that I'd be able to see where the crash in 
name resolution was happening (discussed earlier on the list), and the third 
patch because it was necessary to build AppPkg / StdLib (that problem was also 
discussed recently on the list). I managed to build StdLib & AppPkg with

    build -p AppPkg/AppPkg.dsc

(4) I prepared a disk image using "virt-make-fs", with the following directory 
structure:

    Efi
    Efi/Boot
    Efi/StdLib
    Efi/StdLib/etc
    Efi/StdLib/etc/host.conf
    Efi/StdLib/etc/hosts
    Efi/StdLib/etc/networks
    Efi/StdLib/etc/protocols
    Efi/StdLib/etc/resolv.conf
    Efi/StdLib/etc/services
    Efi/StdLib/tmp
    Efi/Tools
    Efi/Tools/DataSink.efi
    Efi/Tools/DataSource.efi
    Efi/Tools/Enquire.efi
    Efi/Tools/GetAddrInfo.efi
    Efi/Tools/GetHostByAddr.efi
    Efi/Tools/GetHostByDns.efi
    Efi/Tools/GetHostByName.efi
    Efi/Tools/GetNameInfo.efi
    Efi/Tools/GetNetByAddr.efi
    Efi/Tools/GetNetByName.efi
    Efi/Tools/GetServByName.efi
    Efi/Tools/GetServByPort.efi
    Efi/Tools/Hello.efi
    Efi/Tools/Main.efi
    Efi/Tools/OobRx.efi
    Efi/Tools/OobTx.efi
    Efi/Tools/RawIp4Rx.efi
    Efi/Tools/RawIp4Tx.efi
    Efi/Tools/RecvDgram.efi
    Efi/Tools/SetHostName.efi
    Efi/Tools/SetSockOpt.efi
    Efi/Tools/SocketDxe.efi
    Efi/Tools/WebServer.efi

I pointed "resolv.conf" at "nameserver 192.168.122.1" (dnsmasq on the host).

(5) When booting this disk with the OVMF build from (2), I can see the 
following traffic on virbr0:

17:27:26.660574 IP 0.0.0.0.bootpc > 255.255.255.255.bootps:
                BOOTP/DHCP, Request from 52:54:00:17:3a:5a, length 347
17:27:26.660733 IP 192.168.122.1.1024 > 255.255.255.255.bootpc:
                BOOTP/DHCP, Reply, length 334
17:27:42.660855 IP 0.0.0.0.bootpc > 255.255.255.255.bootps:
                BOOTP/DHCP, Request from 52:54:00:17:3a:5a, length 347
17:27:42.661034 IP 192.168.122.1.1024 > 255.255.255.255.bootpc:
                BOOTP/DHCP, Reply, length 334
17:27:53.367868 IP 0.0.0.0 > 224.0.0.1: igmp query v2
17:27:53.367890 IP6 3731:362e:652d:7268:656c:3633:961f:dd31
                > ff02::1: HBH ICMP6, multicast listener querymax
                resp delay: 1000 addr: ::, length 24

and dnsmasq logs

  DHCPDISCOVER(virbr0) 52:54:00:17:3a:5a
  DHCPOFFER(virbr0) 192.168.122.82 52:54:00:17:3a:5a
  DHCPDISCOVER(virbr0) 52:54:00:17:3a:5a
  DHCPOFFER(virbr0) 192.168.122.82 52:54:00:17:3a:5a
  DHCPDISCOVER(virbr0) 52:54:00:17:3a:5a
  DHCPOFFER(virbr0) 192.168.122.82 52:54:00:17:3a:5a
  DHCPDISCOVER(virbr0) 52:54:00:17:3a:5a
  DHCPOFFER(virbr0) 192.168.122.82 52:54:00:17:3a:5a

(The MAC matches the emulated e1000 NIC's MAC.)

(6) In the UEFI shell, the card is listed as follows:

  Shell> dh -p net
  Handle dump by protocol 'Net'
   92: DevPath (..3,0x0)/MAC(525400173A5A,0x0))
       Load Net Pxebc MNPSb ARPSb DHCPv4Sb TCPv4Sb IPv4Sb IPv4Config
       UDPv4Sb MTFTPv4Sb

which, according to the Shell Command Reference Manual, correspond to the 
protocols

  Load        Load File Protocol
  Net         Simple Network Protocol
  Pxebc       PXE Base Code Protocol
  MNPSb       Managed Network Service Binding Protocol
  ARPSb       ARP Service Binding Protocol
  DHCPv4Sb    DHCPv4 Service Binding Protocol
  TCPv4Sb     TCPv4 Service Binding Protocol
  IPv4Sb      IPv4 Service Binding Protocol
  IPv4Config  IPv4 Configuration Protocol
  UDPv4Sb     UDPv4 Service Binding Protocol
  MTFTPv4Sb   MTFTPv4 Service Binding Protocol

This is the only device supporting "Net" (Simple Network Protocol).

(7) The "ipconfig" command reports

  Shell> ipconfig
  MAC Address: 52 54 00 17 3A 5A
  Broadcast MAC: FF FF FF FF FF FF
  ipconfig: Locate protocol error - 'PXE DHCP4 protocol'

Manual configuration ("ipconfig 192.168.122.82 -m 255.255.255.0") fails with 
the exact same error.

(8) The example socket apps GetHostByDns, GetHostByName neither crash nor work:

  fs0:\Efi\Tools> GetHostByName redhat.com
  ERROR - host not found, h_errno: 1

  fs0:\Efi\Tools> GetHostByDns redhat.com
  ERROR - host not found, h_errno: 2

However they (occasionally) seem to re-initiate the traffic visible in (5).

(9) The DataSource utility (which would send to port 1234) doesn't seem to 
produce any host-visible traffic. It also doesn't increase iptables counters.

  fs0:\Efi\Tools> DataSource
    <remote IP address> [Use TCP]

  fs0:\Efi\Tools> DataSource 192.168.122.1 UseTcp
  Connecting to 192.168.122.1:1234
  Connecting to 192.168.122.1:1234
  Connecting to 192.168.122.1:1234
  Connecting to 192.168.122.1:1234
  Connecting to 192.168.122.1:1234
  Connecting to 192.168.122.1:1234
  ...


Has anyone set up networking in OVMF (without ipxe)?

Thanks!
Laszlo

------------------------------------------------------------------------------
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. ON SALE this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122712
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to