Alexey Gorbenko | 24 Jul 13:20 2016
Picon

http://ipxe.org/err/3c2020

I'm facing this problem (using sanboot on the latest ipxe build) with ISO-image on luci web-server but it works fine on nginx. So I suppose the problem is in ability of "resuming download" ("random read access").
Thanks for your work and sorry for the trouble :)

<div>I'm facing this problem (using sanboot on the latest ipxe build) with ISO-image on luci web-server but it works fine on nginx. So I suppose the problem is in ability of "resuming download" ("random read access").<br>Thanks for your work and sorry for the trouble :)<br><br>
</div>
Reto Rayen | 17 Jul 00:15 2016
Picon
Gravatar

IPXE + Coreboot issue

I guys

 

I have the issue, that my ipxe Image is not loading. With a earlier version it worked like a charm on a (Pc Engines APU). But since 1-3 months not anymore. I’m trying to boot Coreboot (SeaBIOS) including a customized ipxe. It worked perfectly about 3 months ago with a «Pc Engines APU» board. But not with a «Pc Engines Alix 2d».

 

Thank you in advance.

 

 

 

I have modified bootorder as follows:

 

Bootorder file:

 

/rom <at> genroms/ipxe

/pci <at> i0cf8/* <at> 11/drive <at> 0/disk <at> 0

/pci <at> i0cf8/* <at> 11/drive <at> 1/disk <at> 0

 

I did added to the coreboot.rom the following:

 

$COREBOOT_DIRECTORY/build/cbfstool build/coreboot.rom add -f ./bootorder -n bootorder -t raw

$COREBOOT_DIRECTORY/build/cbfstool build/coreboot.rom add -f ./payloads/perso/ipxe/src/bin/11063053.rom -n genroms/ipxe -t raw

 

 

The last lines on the console Output are as follows:

 

IMD small region:

  IMD ROOT    0. 0f7dec00 00000400

  GDT         1. 0f7dea00 00000200

BS: BS_WRITE_TABLES times (us): entry 0 run 1189750 exit 0

CBFS: 'Master Header Locator' located CBFS at [100:7ffc0)

CBFS: Locating 'fallback/payload'

CBFS: Found <at> offset da80 size 1bfd8

Loading segment from rom address 0xfff8dbb8

  code (compression=0)

  New segment dstaddr 0xe4060 memsize 0x1bfa0 srcaddr 0xfff8dbf0 filesize 0x1bfa0

Loading segment from rom address 0xfff8dbd4

  Entry Point 0x000ff06e

Bounce Buffer at 0f73d000, 485264 bytes

Loading Segment: addr: 0x00000000000e4060 memsz: 0x000000000001bfa0 filesz: 0x000000000001bfa0

lb: [0x0000000000100000, 0x000000000013b3c8)

Post relocation: addr: 0x00000000000e4060 memsz: 0x000000000001bfa0 filesz: 0x000000000001bfa0

it's not compressed!

[ 0x000e4060, 00100000, 0x00100000) <- fff8dbf0

dest 000e4060, end 00100000, bouncebuffer f73d000

Loaded segments

BS: BS_PAYLOAD_LOAD times (us): entry 0 run 309256 exit 0

Jumping to boot code at 000ff06e(0f7b6000)

CPU0: stack: 00112000 - 00113000, lowest used address 00112c20, stack used: 992 bytes

entry    = 0x000ff06e

lb_start = 0x00100000

lb_size  = 0x0003b3c8

buffer   = 0x0f73d000

SeaBIOS (version rel-1.9.1-0-gb3ef39f)

BUILD: gcc: (coreboot toolchain v1.41 July 14th, 2016) 5.3.0 binutils: (GNU Binutils) 2.26.1

SeaBIOS (version rel-1.9.1-0-gb3ef39f)

BUILD: gcc: (coreboot toolchain v1.41 July 14th, 2016) 5.3.0 binutils: (GNU Binutils) 2.26.1

Found coreboot cbmem console <at> f7be000

Found mainboard PC Engines ALIX.2D

Relocating init from 0x000e5480 to 0x0f768bc0 (size 45984)

Found CBFS header at 0xfff80138

multiboot: eax=0, ebx=0

boot order:

1: /rom <at> genroms/ipxe

2: /pci <at> i0cf8/* <at> 11/drive <at> 0/disk <at> 0

3: /pci <at> i0cf8/* <at> 11/drive <at> 1/disk <at> 0

4:

Found 8 PCI devices (max PCI bus is 00)

Copying SMBIOS entry point from 0x0f7b4000 to 0x000f0800

CPU Mhz=498

Scan for VGA option rom

EHCI init on dev 00:0f.5 (regs=0xfe017010)

WARNING - Timeout at i8042_flush:71!

OHCI init on dev 00:0f.4 (regs=0xfe016000)

Found 0 lpt ports

Found 2 serial ports

ATA controller 1 at 1f0/3f4/0 (irq 14 dev 7a)

ATA controller 2 at 170/374/0 (irq 15 dev 7a)

ata0-0: SanDisk SDCFH-004G ATA-0 Hard-Disk (3815 MiBytes)

Searching bootorder for: /pci <at> i0cf8/* <at> f,2/drive <at> 0/disk <at> 0

All threads complete.

Scan for option roms

Running option rom at c000:0003

pmm call arg1=1

pmm call arg1=0

pmm call arg1=1

pmm call arg1=0

Searching bootorder for: /rom <at> genroms/ipxe

 

Press ESC for boot menu.

 

Searching bootorder for: HALT

drive 0x000f0790: PCHS=7751/16/63 translation=large LCHS=968/128/63 s=7813120

Space available for UMB: c1000-ef000, f0000-f0790

Returned 262144 bytes of ZoneHigh

e820 map has 5 items:

  0: 0000000000000000 - 000000000009fc00 = 1 RAM

  1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED

  2: 00000000000f0000 - 0000000000100000 = 2 RESERVED

  3: 0000000000100000 - 000000000f7b4000 = 1 RAM

  4: 000000000f7b4000 - 000000000f7e0000 = 2 RESERVED

enter handle_19:

  NULL

Booting from ROM...

Booting from c000:0382

<div><div class="WordSection1">
<p class="MsoNormal">I guys</p>
<p class="MsoNormal"><p>&nbsp;</p></p>
<p class="MsoNormal">I have the issue, that my ipxe Image is not loading. With a earlier version it worked like a charm on a (Pc Engines APU). But since 1-3 months not anymore. I&rsquo;m trying to boot Coreboot (SeaBIOS) including a customized ipxe. It worked perfectly about 3 months ago with a &laquo;Pc Engines APU&raquo; board. But not with a &laquo;Pc Engines Alix 2d&raquo;. </p>
<p class="MsoNormal"><p>&nbsp;</p></p>
<p class="MsoNormal">Thank you in advance. </p>
<p class="MsoNormal"><p>&nbsp;</p></p>
<p class="MsoNormal"><p>&nbsp;</p></p>
<p class="MsoNormal"><p>&nbsp;</p></p>
<p class="MsoNormal">I have modified bootorder as follows:</p>
<p class="MsoNormal"><p>&nbsp;</p></p>
<p class="MsoNormal">Bootorder file:</p>
<p class="MsoNormal"><p>&nbsp;</p></p>
<p class="MsoNormal">/rom <at> genroms/ipxe</p>
<p class="MsoNormal">/pci <at> i0cf8/* <at> 11/drive <at> 0/disk <at> 0</p>
<p class="MsoNormal">/pci <at> i0cf8/* <at> 11/drive <at> 1/disk <at> 0</p>
<p class="MsoNormal"><p>&nbsp;</p></p>
<p class="MsoNormal">I did added to the coreboot.rom the following:</p>
<p class="MsoNormal"><p>&nbsp;</p></p>
<p class="MsoNormal">$COREBOOT_DIRECTORY/build/cbfstool build/coreboot.rom add -f ./bootorder -n bootorder -t raw</p>
<p class="MsoNormal">$COREBOOT_DIRECTORY/build/cbfstool build/coreboot.rom add -f ./payloads/perso/ipxe/src/bin/11063053.rom -n genroms/ipxe -t raw</p>
<p class="MsoNormal"><p>&nbsp;</p></p>
<p class="MsoNormal"><p>&nbsp;</p></p>
<p class="MsoNormal">The last lines on the console Output are as follows:</p>
<p class="MsoNormal"><p>&nbsp;</p></p>
<p class="MsoNormal">IMD small region:</p>
<p class="MsoNormal">&nbsp; IMD ROOT&nbsp;&nbsp;&nbsp; 0. 0f7dec00 00000400</p>
<p class="MsoNormal">&nbsp; GDT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. 0f7dea00 00000200</p>
<p class="MsoNormal">BS: BS_WRITE_TABLES times (us): entry 0 run 1189750 exit 0</p>
<p class="MsoNormal">CBFS: 'Master Header Locator' located CBFS at [100:7ffc0)</p>
<p class="MsoNormal">CBFS: Locating 'fallback/payload'</p>
<p class="MsoNormal">CBFS: Found  <at>  offset da80 size 1bfd8</p>
<p class="MsoNormal">Loading segment from rom address 0xfff8dbb8</p>
<p class="MsoNormal">&nbsp; code (compression=0)</p>
<p class="MsoNormal">&nbsp; New segment dstaddr 0xe4060 memsize 0x1bfa0 srcaddr 0xfff8dbf0 filesize 0x1bfa0</p>
<p class="MsoNormal">Loading segment from rom address 0xfff8dbd4</p>
<p class="MsoNormal">&nbsp; Entry Point 0x000ff06e</p>
<p class="MsoNormal">Bounce Buffer at 0f73d000, 485264 bytes</p>
<p class="MsoNormal">Loading Segment: addr: 0x00000000000e4060 memsz: 0x000000000001bfa0 filesz: 0x000000000001bfa0</p>
<p class="MsoNormal">lb: [0x0000000000100000, 0x000000000013b3c8)</p>
<p class="MsoNormal">Post relocation: addr: 0x00000000000e4060 memsz: 0x000000000001bfa0 filesz: 0x000000000001bfa0</p>
<p class="MsoNormal">it's not compressed!</p>
<p class="MsoNormal">[ 0x000e4060, 00100000, 0x00100000) &lt;- fff8dbf0</p>
<p class="MsoNormal">dest 000e4060, end 00100000, bouncebuffer f73d000</p>
<p class="MsoNormal">Loaded segments</p>
<p class="MsoNormal">BS: BS_PAYLOAD_LOAD times (us): entry 0 run 309256 exit 0</p>
<p class="MsoNormal">Jumping to boot code at 000ff06e(0f7b6000)</p>
<p class="MsoNormal">CPU0: stack: 00112000 - 00113000, lowest used address 00112c20, stack used: 992 bytes</p>
<p class="MsoNormal">entry&nbsp;&nbsp;&nbsp; = 0x000ff06e</p>
<p class="MsoNormal">lb_start = 0x00100000</p>
<p class="MsoNormal">lb_size&nbsp; = 0x0003b3c8</p>
<p class="MsoNormal">buffer&nbsp;&nbsp; = 0x0f73d000</p>
<p class="MsoNormal">SeaBIOS (version rel-1.9.1-0-gb3ef39f)</p>
<p class="MsoNormal">BUILD: gcc: (coreboot toolchain v1.41 July 14th, 2016) 5.3.0 binutils: (GNU Binutils) 2.26.1</p>
<p class="MsoNormal">SeaBIOS (version rel-1.9.1-0-gb3ef39f)</p>
<p class="MsoNormal">BUILD: gcc: (coreboot toolchain v1.41 July 14th, 2016) 5.3.0 binutils: (GNU Binutils) 2.26.1</p>
<p class="MsoNormal">Found coreboot cbmem console  <at>  f7be000</p>
<p class="MsoNormal">Found mainboard PC Engines ALIX.2D</p>
<p class="MsoNormal">Relocating init from 0x000e5480 to 0x0f768bc0 (size 45984)</p>
<p class="MsoNormal">Found CBFS header at 0xfff80138</p>
<p class="MsoNormal">multiboot: eax=0, ebx=0</p>
<p class="MsoNormal">boot order:</p>
<p class="MsoNormal">1: /rom <at> genroms/ipxe</p>
<p class="MsoNormal">2: /pci <at> i0cf8/* <at> 11/drive <at> 0/disk <at> 0</p>
<p class="MsoNormal">3: /pci <at> i0cf8/* <at> 11/drive <at> 1/disk <at> 0</p>
<p class="MsoNormal">4: </p>
<p class="MsoNormal">Found 8 PCI devices (max PCI bus is 00)</p>
<p class="MsoNormal">Copying SMBIOS entry point from 0x0f7b4000 to 0x000f0800</p>
<p class="MsoNormal">CPU Mhz=498</p>
<p class="MsoNormal">Scan for VGA option rom</p>
<p class="MsoNormal">EHCI init on dev 00:0f.5 (regs=0xfe017010)</p>
<p class="MsoNormal">WARNING - Timeout at i8042_flush:71!</p>
<p class="MsoNormal">OHCI init on dev 00:0f.4 (regs=0xfe016000)</p>
<p class="MsoNormal">Found 0 lpt ports</p>
<p class="MsoNormal">Found 2 serial ports</p>
<p class="MsoNormal">ATA controller 1 at 1f0/3f4/0 (irq 14 dev 7a)</p>
<p class="MsoNormal">ATA controller 2 at 170/374/0 (irq 15 dev 7a)</p>
<p class="MsoNormal">ata0-0: SanDisk SDCFH-004G ATA-0 Hard-Disk (3815 MiBytes)</p>
<p class="MsoNormal">Searching bootorder for: /pci <at> i0cf8/* <at> f,2/drive <at> 0/disk <at> 0</p>
<p class="MsoNormal">All threads complete.</p>
<p class="MsoNormal">Scan for option roms</p>
<p class="MsoNormal">Running option rom at c000:0003</p>
<p class="MsoNormal">pmm call arg1=1</p>
<p class="MsoNormal">pmm call arg1=0</p>
<p class="MsoNormal">pmm call arg1=1</p>
<p class="MsoNormal">pmm call arg1=0</p>
<p class="MsoNormal">Searching bootorder for: /rom <at> genroms/ipxe</p>
<p class="MsoNormal"><p>&nbsp;</p></p>
<p class="MsoNormal">Press ESC for boot menu.</p>
<p class="MsoNormal"><p>&nbsp;</p></p>
<p class="MsoNormal">Searching bootorder for: HALT</p>
<p class="MsoNormal">drive 0x000f0790: PCHS=7751/16/63 translation=large LCHS=968/128/63 s=7813120</p>
<p class="MsoNormal">Space available for UMB: c1000-ef000, f0000-f0790</p>
<p class="MsoNormal">Returned 262144 bytes of ZoneHigh</p>
<p class="MsoNormal">e820 map has 5 items:</p>
<p class="MsoNormal">&nbsp; 0: 0000000000000000 - 000000000009fc00 = 1 RAM</p>
<p class="MsoNormal">&nbsp; 1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED</p>
<p class="MsoNormal">&nbsp; 2: 00000000000f0000 - 0000000000100000 = 2 RESERVED</p>
<p class="MsoNormal">&nbsp; 3: 0000000000100000 - 000000000f7b4000 = 1 RAM</p>
<p class="MsoNormal">&nbsp; 4: 000000000f7b4000 - 000000000f7e0000 = 2 RESERVED</p>
<p class="MsoNormal">enter handle_19:</p>
<p class="MsoNormal">&nbsp; NULL</p>
<p class="MsoNormal">Booting from ROM...</p>
<p class="MsoNormal">Booting from c000:0382<p></p></p>
</div></div>
Lukas Grossar | 11 Jul 17:06 2016
Picon
Gravatar

[PATCH] [intel] Add PCI ID for I219-V/LM

Signed-off-by: Lukas Grossar <lukas.grossar@...>
---
 src/drivers/net/intel.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/drivers/net/intel.c b/src/drivers/net/intel.c
index 127f5c7..4f8a4cb 100644
--- a/src/drivers/net/intel.c
+++ b/src/drivers/net/intel.c
 <at>  <at>  -1062,6 +1062,8  <at>  <at>  static struct pci_device_id intel_nics[] = {
 	PCI_ROM ( 0x8086, 0x153b, "i217v", "I217-V", 0 ),
 	PCI_ROM ( 0x8086, 0x1559, "i218v", "I218-V", 0),
 	PCI_ROM ( 0x8086, 0x155a, "i218lm", "I218-LM", 0),
+	PCI_ROM ( 0x8086, 0x156f, "i219lm", "I219-LM", 0 ),
+	PCI_ROM ( 0x8086, 0x1570, "i219v", "I219-V", 0 ),
 	PCI_ROM ( 0x8086, 0x157b, "i210-2", "I210", 0 ),
 	PCI_ROM ( 0x8086, 0x15a0, "i218lm-2", "I218-LM", INTEL_NO_PHY_RST ),
 	PCI_ROM ( 0x8086, 0x15a1, "i218v-2", "I218-V", 0 ),
--

-- 
2.9.0

Ladi Prosek | 11 Jul 19:02 2016
Picon

[PATCH] [netdevice] Strip 802.1Q VLAN 0 priority tags

iPXE was unable to receive priority tagged packets specified in
the 802.1Q standard and supported by all major networking stacks.

This commit adds a new function net_pull_tags which is called by
all consumers of incoming packets after stripping their link-layer
headers.

Signed-off-by: Ladi Prosek <lprosek@...>
---

This is another attempt at implementing the VLAN 0 feature. It is
always enabled and independent of the true VLAN_CMD support, as
discussed before. All code paths that process incoming packets now
strip VLAN 0 headers.

If VLAN 0 was Ethernet only, it would conceptually belong in eth_pull.
Since it's "link-layer-independent", I took the liberty to create
a new function to be called between handling the link layer and
network layer headers. Thanks!

 src/arch/x86/interface/pxe/pxe_undi.c |  6 +++++
 src/include/ipxe/netdevice.h          |  2 ++
 src/interface/efi/efi_snp.c           |  7 ++++++
 src/net/netdevice.c                   | 44 +++++++++++++++++++++++++++++++++++
 4 files changed, 59 insertions(+)

diff --git a/src/arch/x86/interface/pxe/pxe_undi.c b/src/arch/x86/interface/pxe/pxe_undi.c
index 2eb6817..2ea1451 100644
--- a/src/arch/x86/interface/pxe/pxe_undi.c
+++ b/src/arch/x86/interface/pxe/pxe_undi.c
 <at>  <at>  -976,6 +976,12  <at>  <at>  static PXENV_EXIT_t pxenv_undi_isr ( struct s_PXENV_UNDI_ISR *undi_isr ) {
 		}
 		ll_hlen = ( len - iob_len ( iobuf ) );

+		/* Strip link-layer-independent headers */
+		if ( ( rc = net_pull_tags ( iobuf, pxe_netdev, &net_proto ) ) != 0 ) {
+			/* Assume unknown net_proto */
+			net_proto = 0;
+		}
+
 		/* Determine network-layer protocol */
 		switch ( net_proto ) {
 		case htons ( ETH_P_IP ):
diff --git a/src/include/ipxe/netdevice.h b/src/include/ipxe/netdevice.h
index a1d207f..cea87f7 100644
--- a/src/include/ipxe/netdevice.h
+++ b/src/include/ipxe/netdevice.h
 <at>  <at>  -719,6 +719,8  <at>  <at>  extern int net_tx ( struct io_buffer *iobuf, struct net_device *netdev,
 extern int net_rx ( struct io_buffer *iobuf, struct net_device *netdev,
 		    uint16_t net_proto, const void *ll_dest,
 		    const void *ll_source, unsigned int flags );
+extern int net_pull_tags ( struct io_buffer *iobuf, struct net_device *netdev,
+			   uint16_t *net_proto );
 extern void net_poll ( void );
 extern struct net_device_configurator *
 find_netdev_configurator ( const char *name );
diff --git a/src/interface/efi/efi_snp.c b/src/interface/efi/efi_snp.c
index e6388bf..d1a1a44 100644
--- a/src/interface/efi/efi_snp.c
+++ b/src/interface/efi/efi_snp.c
 <at>  <at>  -745,6 +745,13  <at>  <at>  efi_snp_receive ( EFI_SIMPLE_NETWORK_PROTOCOL *snp,
 		goto out_bad_ll_header;
 	}

+	/* Strip link-layer-independent headers */
+	if ( ( rc = net_pull_tags ( iobuf, snpdev->netdev, &iob_net_proto ) ) ) {
+		DBGC ( snpdev, "SNPDEV %p could not parse tags: %s\n",
+		       snpdev, strerror ( rc ) );
+		goto out_bad_ll_header;
+	}
+
 	/* Return link-layer header parameters to caller, if required */
 	if ( ll_header_len )
 		*ll_header_len = ll_protocol->ll_header_len;
diff --git a/src/net/netdevice.c b/src/net/netdevice.c
index 9df2119..c53d5e3 100644
--- a/src/net/netdevice.c
+++ b/src/net/netdevice.c
 <at>  <at>  -1028,6 +1028,44  <at>  <at>  int net_rx ( struct io_buffer *iobuf, struct net_device *netdev,
 }

 /**
+ * Strip extra link-layer-independent tags from a received packet
+ *
+ *  <at> v iobuf		I/O buffer
+ *  <at> v netdev		Network device
+ *  <at> v net_proto		Network-layer protocol, in network-byte order
+ *  <at> ret rc		Return status code
+ *
+ * This function should be called after stripping link-layer headers but
+ * before inspecting the network-layer protocol.
+ */
+int net_pull_tags ( struct io_buffer *iobuf, struct net_device *netdev,
+		    uint16_t *net_proto ) {
+	struct vlan_header *vlanhdr;
+	uint16_t tag;
+
+	/* Strip 802.1Q VLAN 0 priority tags if present */
+	while ( *net_proto == htons ( ETH_P_8021Q ) ) {
+		if ( iob_len ( iobuf ) < sizeof ( *vlanhdr ) ) {
+			DBG ( "VLAN header too short at %zd bytes (min %zd bytes)\n",
+			      iob_len ( iobuf ), sizeof ( *vlanhdr ) );
+			return -EINVAL;
+		}
+		vlanhdr = ( struct vlan_header * ) iobuf->data;
+		tag = VLAN_TAG ( ntohs ( vlanhdr->tci ) );
+
+		if ( tag == 0 && ! vlan_find ( netdev, tag ) ) {
+			/* VLAN 0, strip and continue */
+			*net_proto = vlanhdr->net_proto;
+			iob_pull ( iobuf, sizeof ( *vlanhdr ) );
+		} else {
+			/* Real VLAN tag, leave it alone */
+			break;
+		}
+	}
+	return 0;
+}
+
+/**
  * Poll the network stack
  *
  * This polls all interfaces for received packets, and processes
 <at>  <at>  -1078,6 +1116,12  <at>  <at>  void net_poll ( void ) {
 				continue;
 			}

+			/* Remove link-layer-independent headers */
+			if ( ( rc = net_pull_tags ( iobuf, netdev, &net_proto ) ) ) {
+				free_iob ( iobuf );
+				continue;
+			}
+
 			/* Hand packet to network layer */
 			if ( ( rc = net_rx ( iob_disown ( iobuf ), netdev,
 					     net_proto, ll_dest,
--

-- 
2.5.5

Arthur Sinclair-Loutit | 8 Jul 22:56 2016
Picon

xenix server.

Hello.

I am attempting NET boot from my xenix virtual machine, but it seems you wiped the server! It would be nice if
you could by any chance send me what was there before, so that i can emulate it. I would love to try this. So
please consider it!

Kind regards. Arthur.
Sascha Böhme | 5 Jul 23:09 2016
Picon

New Command Idea

Hi all,

 

we successfully tested and DID bare metal recovery by

 

·         sanhook the iSCSI target we backup the wbadmin image to

·         boot wim and choose install
-> Windows installer inspects iBFT and mounts LUN/volumes
J

·         cancel install / go back and choose repair option / System Image Recovery

 

Volume still mounted, repair tool finds backups and you can recover from. No-one seems to know that…

 

Problem: GPT formatted disk will obviously not work for sanboot/sanhook and hence there is nothing in the iBFT.

 

Idea: New command: sandesc iscsi:1.2.3.4::::iqn… that just fills the iBFT with the target for Windows installer without hooking into int 13h.

 

Question: Is there any chance this idea could work?

 

Would not like to dig into code without any chance of success…

 

Thanks reading!

 

Mit freundlichen Grüßen / Best regards


Sascha Böhme

Ing. Büro E. Scharfenberg
Alte Grenzstrasse 153L
45663 Recklinghausen
P: +49 2361 30910
F: +49 2361 309135
M: info-KjnFl86rQU7ZtTHnNEAQahvVK+yQ3ZXh@public.gmane.org
St-Nr: DE-340/5291/0433
Registergericht Recklinghausen
HRB-Nr.: 2389

<div>
<div class="WordSection1">
<p class="MsoNormal">Hi all,<p></p></p>
<p class="MsoNormal"><p>&nbsp;</p></p>
<p class="MsoNormal"><span lang="EN-US">we successfully tested and DID bare metal recovery by<p></p></span></p>
<p class="MsoNormal"><span lang="EN-US"><p>&nbsp;</p></span></p>
<p class="MsoListParagraph"><span lang="EN-US"><span>&middot;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span lang="EN-US">sanhook the iSCSI target we backup the wbadmin image to<p></p></span></p>
<p class="MsoListParagraph"><span lang="EN-US"><span>&middot;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span lang="EN-US">boot wim and choose install<br>
-&gt; Windows installer inspects iBFT and mounts LUN/volumes </span><span lang="EN-US">J</span><span lang="EN-US"><p></p></span></p>
<p class="MsoListParagraph"><span lang="EN-US"><span>&middot;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span lang="EN-US">cancel install / go back and choose repair option / System Image Recovery<p></p></span></p>
<p class="MsoNormal"><span lang="EN-US"><p>&nbsp;</p></span></p>
<p class="MsoNormal"><span lang="EN-US">Volume still mounted, repair tool finds backups and you can recover from. No-one seems to know that&hellip;<p></p></span></p>
<p class="MsoNormal"><span lang="EN-US"><p>&nbsp;</p></span></p>
<p class="MsoNormal"><span lang="EN-US">Problem: GPT formatted disk will obviously not work for sanboot/sanhook and hence there is nothing in the iBFT.<p></p></span></p>
<p class="MsoNormal"><span lang="EN-US"><p>&nbsp;</p></span></p>
<p class="MsoNormal"><span lang="EN-US">Idea: New command: <span>sandesc</span><span> iscsi:1.2.3.4::::iqn&hellip;</span> that just fills the iBFT with the target
 for Windows installer without hooking into int 13h.<p></p></span></p>
<p class="MsoNormal"><span lang="EN-US"><p>&nbsp;</p></span></p>
<p class="MsoNormal"><span lang="EN-US">Question: Is there any chance this idea could work?<p></p></span></p>
<p class="MsoNormal"><span lang="EN-US"><p>&nbsp;</p></span></p>
<p class="MsoNormal"><span lang="EN-US">Would not like to dig into code without any chance of success&hellip;<p></p></span></p>
<p class="MsoNormal"><span lang="EN-US"><p>&nbsp;</p></span></p>
<p class="MsoNormal"><span lang="EN-US">Thanks reading!<p></p></span></p>
<p class="MsoNormal"><span lang="EN-US"><p>&nbsp;</p></span></p>
</div>
<p class="MsoNormal">Mit freundlichen Gr&uuml;&szlig;en / Best regards</p>
<br><p class="MsoNormal">Sascha B&ouml;hme<br></p>
<p class="MsoNormal">Ing. B&uuml;ro E. Scharfenberg<br>
Alte Grenzstrasse 153L<br>
45663 Recklinghausen<br>
P: +49 2361 30910<br>
F: +49 2361 309135<br>
M: info@...<br>
St-Nr: DE-340/5291/0433<br>
Registergericht Recklinghausen<br>
HRB-Nr.: 2389</p>
</div>
Laszlo Ersek | 30 Jun 14:37 2016
Picon

[PATCH] [efi] install the HII config access protocol on a child of the SNP handle

In edk2, there are several drivers that associate HII forms (and
corresponding config access protocol instances) with each individual
network device. (In this context, "network device" means the EFI handle on
which the SNP protocol is installed, and on which the device path ending
with the MAC() node is installed also.) Such edk2 drivers are, for
example: Ip4Dxe, HttpBootDxe, VlanConfigDxe.

In UEFI, any given handle can carry at most one instance of a specific
protocol (see it e.g. in the specification of the
InstallProtocolInterface() boot service). This implies that the class of
drivers mentioned above can't install their EFI_HII_CONFIG_ACCESS_PROTOCOL
instances on the SNP handle directly -- they would conflict with each
other. Accordingly, each of those edk2 drivers creates a "private" child
handle under the SNP handle, and installs its config access protocol (and
corresponding HII package list) on its child handle.

The device path for the child handle is traditionally derived by appending
a Hardware Vendor Device Path node after the MAC() node. The VenHw() nodes
in question consist of a GUID (by definition), and no trailing data (by
choice). The purpose of these VenHw() nodes is only that all the child
nodes can be uniquely identified by device path.

At the moment iPXE does not follow this pattern. It doesn't run into a
conflict when it installs its EFI_HII_CONFIG_ACCESS_PROTOCOL directly on
the SNP handle, but that's only because iPXE is the sole driver not
following the pattern. This behavior seems risky (one might call it a
"latent bug"); better align iPXE with the edk2 custom.

Cc: Michael Brown <mcb30@...>
Cc: Gary Lin <glin@...>
Cc: Ladi Prosek <lprosek@...>
Ref: http://thread.gmane.org/gmane.comp.bios.edk2.devel/13494
Signed-off-by: Laszlo Ersek <lersek@...>
---
 src/include/ipxe/efi/efi_snp.h  |  4 +++
 src/interface/efi/efi_snp_hii.c | 76 ++++++++++++++++++++++++++++++++++++++---
 2 files changed, 76 insertions(+), 4 deletions(-)

diff --git a/src/include/ipxe/efi/efi_snp.h b/src/include/ipxe/efi/efi_snp.h
index 4c5461ec4d01..a9f67cfcbbb0 100644
--- a/src/include/ipxe/efi/efi_snp.h
+++ b/src/include/ipxe/efi/efi_snp.h
 <at>  <at>  -57,6 +57,10  <at>  <at>  struct efi_snp_device {
 	EFI_HII_CONFIG_ACCESS_PROTOCOL hii;
 	/** HII package list */
 	EFI_HII_PACKAGE_LIST_HEADER *package_list;
+	/** EFI child handle for HII association */
+	EFI_HANDLE hii_child_handle;
+	/** Device path of HII child handle */
+	EFI_DEVICE_PATH_PROTOCOL *hii_child_path;
 	/** HII handle */
 	EFI_HII_HANDLE hii_handle;
 	/** Device name */
diff --git a/src/interface/efi/efi_snp_hii.c b/src/interface/efi/efi_snp_hii.c
index 1e87ea15a46e..9f76d61205fb 100644
--- a/src/interface/efi/efi_snp_hii.c
+++ b/src/interface/efi/efi_snp_hii.c
 <at>  <at>  -63,6 +63,7  <at>  <at>  FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 #include <ipxe/efi/efi_hii.h>
 #include <ipxe/efi/efi_snp.h>
 #include <ipxe/efi/efi_strings.h>
+#include <ipxe/efi/efi_utils.h>
 #include <config/branding.h>

 /** EFI platform setup formset GUID */
 <at>  <at>  -655,6 +656,9  <at>  <at>  int efi_snp_hii_install ( struct efi_snp_device *snpdev ) {
 	EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
 	int efirc;
 	int rc;
+	size_t path_prefix_len;
+	VENDOR_DEVICE_PATH *vendor_path;
+	EFI_DEVICE_PATH_PROTOCOL *path_end;

 	/* Do nothing if HII database protocol is not supported */
 	if ( ! efihii ) {
 <at>  <at>  -674,9 +678,47  <at>  <at>  int efi_snp_hii_install ( struct efi_snp_device *snpdev ) {
 		goto err_build_package_list;
 	}

+	/* Create device path and child handle for HII association */
+	path_prefix_len = efi_devpath_len ( snpdev->path );
+	snpdev->hii_child_path = zalloc ( path_prefix_len +
+					  sizeof ( *vendor_path ) +
+					  sizeof ( *path_end ) );
+	if ( ! snpdev->hii_child_path ) {
+		DBGC ( snpdev,
+		       "SNPDEV %p could not allocate HII child device path\n",
+		       snpdev );
+		rc = -ENOMEM;
+		goto err_alloc_child_path;
+	}
+
+	memcpy ( snpdev->hii_child_path, snpdev->path, path_prefix_len );
+
+	vendor_path = ( ( ( void * ) snpdev->hii_child_path ) +
+			path_prefix_len );
+	vendor_path->Header.Type = HARDWARE_DEVICE_PATH;
+	vendor_path->Header.SubType = HW_VENDOR_DP;
+	vendor_path->Header.Length[0] = sizeof ( *vendor_path );
+	efi_snp_hii_random_guid ( &vendor_path->Guid );
+
+	path_end = ( void * ) ( vendor_path + 1 );
+	path_end->Type = END_DEVICE_PATH_TYPE;
+	path_end->SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE;
+	path_end->Length[0] = sizeof ( *path_end );
+
+	if ( ( efirc = bs->InstallMultipleProtocolInterfaces (
+			&snpdev->hii_child_handle,
+			&efi_device_path_protocol_guid, snpdev->hii_child_path,
+			NULL ) ) != 0 ) {
+		rc = -EEFI ( efirc );
+		DBGC ( snpdev,
+		       "SNPDEV %p could not create HII child handle: %s\n",
+		       snpdev, strerror ( rc ) );
+		goto err_hii_child_handle;
+	}
+
 	/* Add HII packages */
 	if ( ( efirc = efihii->NewPackageList ( efihii, snpdev->package_list,
-						snpdev->handle,
+						snpdev->hii_child_handle,
 						&snpdev->hii_handle ) ) != 0 ) {
 		rc = -EEFI ( efirc );
 		DBGC ( snpdev, "SNPDEV %p could not add HII packages: %s\n",
 <at>  <at>  -686,7 +728,7  <at>  <at>  int efi_snp_hii_install ( struct efi_snp_device *snpdev ) {

 	/* Install HII protocol */
 	if ( ( efirc = bs->InstallMultipleProtocolInterfaces (
-			 &snpdev->handle,
+			 &snpdev->hii_child_handle,
 			 &efi_hii_config_access_protocol_guid, &snpdev->hii,
 			 NULL ) ) != 0 ) {
 		rc = -EEFI ( efirc );
 <at>  <at>  -695,15 +737,34  <at>  <at>  int efi_snp_hii_install ( struct efi_snp_device *snpdev ) {
 		goto err_install_protocol;
 	}

+	/* Add as child of handle with SNP instance */
+	if ( ( rc = efi_child_add ( snpdev->handle,
+				    snpdev->hii_child_handle ) ) != 0 ) {
+		DBGC ( snpdev,
+		       "SNPDEV %p could not adopt HII child handle: %s\n",
+		       snpdev, strerror ( rc ) );
+		goto err_efi_child_add;
+	}
+
 	return 0;

+	efi_child_del ( snpdev->handle, snpdev->hii_child_handle );
+ err_efi_child_add:
 	bs->UninstallMultipleProtocolInterfaces (
-			snpdev->handle,
+			snpdev->hii_child_handle,
 			&efi_hii_config_access_protocol_guid, &snpdev->hii,
 			NULL );
  err_install_protocol:
 	efihii->RemovePackageList ( efihii, snpdev->hii_handle );
  err_new_package_list:
+	bs->UninstallMultipleProtocolInterfaces (
+			snpdev->hii_child_handle,
+			&efi_device_path_protocol_guid, snpdev->hii_child_path,
+			NULL );
+ err_hii_child_handle:
+	free ( snpdev->hii_child_path );
+	snpdev->hii_child_path = NULL;
+ err_alloc_child_path:
 	free ( snpdev->package_list );
 	snpdev->package_list = NULL;
  err_build_package_list:
 <at>  <at>  -724,11 +785,18  <at>  <at>  void efi_snp_hii_uninstall ( struct efi_snp_device *snpdev ) {
 		return;

 	/* Uninstall protocols and remove package list */
+	efi_child_del ( snpdev->handle, snpdev->hii_child_handle );
 	bs->UninstallMultipleProtocolInterfaces (
-			snpdev->handle,
+			snpdev->hii_child_handle,
 			&efi_hii_config_access_protocol_guid, &snpdev->hii,
 			NULL );
 	efihii->RemovePackageList ( efihii, snpdev->hii_handle );
+	bs->UninstallMultipleProtocolInterfaces (
+			snpdev->hii_child_handle,
+			&efi_device_path_protocol_guid, snpdev->hii_child_path,
+			NULL );
+	free ( snpdev->hii_child_path );
+	snpdev->hii_child_path = NULL;
 	free ( snpdev->package_list );
 	snpdev->package_list = NULL;
 }
--

-- 
1.8.3.1

Gerd Hoffmann | 24 Jun 14:39 2016
Picon

[PATCH 0/6] ipxe: update roms

  Hi,

Here comes ipxe update for qemu 2.7.  It rebases the ipxe submodule
to latest upstream master.  We pick up support for virtio 1.0.
Also a fix for a EFI bug which causes problems with recent edk2
versions.

There are some more hickups due to network boot changes in edk2
which are not root-caused yet.  They are present with both old
and new ipxe versios, so we have at least no regressions here.
But possibly we will need another (much smaller) bugfix ipxe
update during freeze.

This patch series also adds a boot rom for the new e1000e emulation
and, while being at it, for vmxnet3 too.

Patch 6/6 with the binary update has *not* been sent to the list
as it is pretty big.  If you want the prebuild roms for testing
please fetch them from the git repository at:
  git://git.kraxel.org/qemu work/ipxe

cheers,
  Gerd

Gerd Hoffmann (6):
  ipxe: update submodule from 4e03af8ec to 041863191
  ipxe: add e1000e rom
  ipxe: add vmxnet3 rom
  e1000e: add boot rom
  vmxnet3: add boot rom
  ipxe: update prebuilt binaries

 hw/net/e1000e.c          |   1 +
 hw/net/vmxnet3.c         |   1 +
 include/hw/i386/pc.h     |   4 ++++
 pc-bios/efi-e1000.rom    | Bin 196608 -> 209408 bytes
 pc-bios/efi-e1000e.rom   | Bin 0 -> 209408 bytes
 pc-bios/efi-eepro100.rom | Bin 197120 -> 209920 bytes
 pc-bios/efi-ne2k_pci.rom | Bin 195584 -> 208384 bytes
 pc-bios/efi-pcnet.rom    | Bin 195584 -> 208384 bytes
 pc-bios/efi-rtl8139.rom  | Bin 199168 -> 211456 bytes
 pc-bios/efi-virtio.rom   | Bin 193024 -> 211456 bytes
 pc-bios/efi-vmxnet3.rom  | Bin 0 -> 205312 bytes
 roms/Makefile            |   8 ++++++--
 roms/ipxe                |   2 +-
 13 files changed, 13 insertions(+), 3 deletions(-)
 create mode 100644 pc-bios/efi-e1000e.rom
 create mode 100644 pc-bios/efi-vmxnet3.rom

--

-- 
1.8.3.1

Mike Frysinger | 21 Jun 06:51 2016
Picon
Gravatar

[PATCH] [build] fix PIE disable flag

The flag is "-no-pie", not "-nopie".

Signed-off-by: Mike Frysinger <vapier@...>
---
 src/arch/i386/Makefile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/arch/i386/Makefile b/src/arch/i386/Makefile
index fe3adc9ce436..59ad25b6e0af 100644
--- a/src/arch/i386/Makefile
+++ b/src/arch/i386/Makefile
 <at>  <at>  -75,8 +75,8  <at>  <at>  CFLAGS			+= -Ui386
 # output on stderr instead of checking the exit status.
 #
 ifeq ($(CCTYPE),gcc)
-PIE_TEST = [ -z "`$(CC) -fno-PIE -nopie -x c -c /dev/null -o /dev/null 2>&1`" ]
-PIE_FLAGS := $(shell $(PIE_TEST) && $(ECHO) '-fno-PIE -nopie')
+PIE_TEST = [ -z "`$(CC) -fno-PIE -no-pie -x c -c /dev/null -o /dev/null 2>&1`" ]
+PIE_FLAGS := $(shell $(PIE_TEST) && $(ECHO) '-fno-PIE -no-pie')
 WORKAROUND_CFLAGS += $(PIE_FLAGS)
 endif

--

-- 
2.8.2

Michael Brown | 20 Jun 15:46 2016
Gravatar

Re: iPXE issues

On 20/06/16 14:16, Prout, Ryan C. wrote:
> Attached is an image showing the output of the commands, in addition to a ping attempt towards the gateway.

Thanks.  The "ifstat" output shows a received packet (before the ping 
attempt starts).  Have you used a packet capture to see what's happening 
on the wire?  (For example: do you see any packets transmitted by iPXE?)

Michael
Vasyl Melnyk | 19 Jun 16:16 2016
Picon

wimboot improvement

Hello,

I have an idea how to improve wimboot a little.

Bcd and boot.sdi can be also obtained from boot.wim the same way as bootmgr.exe. So, if no bcd or boot.sdi is specified it would be logical to get them from boot.wim too.

bcd path is \Windows\Boot\DVD\PCAT\bcd for non-UEFI boot and \Windows\Boot\DVD\EFI\bcd for UEFI boot.

Boot.sdi path is \Windows\Boot\DVD\PCAT\boot.sdi and \Windows\Boot\DVD\EFI\boot.sdi but they are the same.

Regards,
Vasyl
<div><span class="xfm_82110582">Hello,<div>
<br><div>I have an idea how to improve wimboot a little.</div>
</div>
<div><br></div>
<div>Bcd and boot.sdi can be also obtained from boot.wim the same way as bootmgr.exe. So, if no bcd or boot.sdi is specified it would be logical to get them from boot.wim too.</div>
<div><br></div>
<div>bcd path is \Windows\Boot\DVD\PCAT\bcd for non-UEFI boot and&nbsp;\Windows\Boot\DVD\EFI\bcd for UEFI boot.</div>
<div><br></div>
<div>Boot.sdi path is \Windows\Boot\DVD\PCAT\boot.sdi and \Windows\Boot\DVD\EFI\boot.sdi but they are the same.</div>
<div><br></div>
<div>Regards,</div>
<div>Vasyl</div></span></div>

Gmane