]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[iscsi] Include 802.1Q VLAN identifier in iBFT
authorStefan Hajnoczi <stefanha@redhat.com>
Fri, 1 Mar 2013 15:32:16 +0000 (16:32 +0100)
committerMichael Brown <mcb30@ipxe.org>
Fri, 1 Mar 2013 16:22:23 +0000 (16:22 +0000)
The iBFT NIC section has a VLAN field which must be filled in so that
iSCSI booting works over VLANs.

Unfortunately it is unclear from the IBM specification linked in
ibft.c whether the VLAN field is just the 802.1Q VLAN Identifier or
the full 802.1Q TCI.  For now just fill in the VID, the Priority Code
Point and Drop Eligible Indicator could be set in the future if it
turns out they should be present too.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/block/ibft.c

index f160963773010fdd96e1f25d288c130edf207cbc..75ca51a9c138eedd3e68d7e91245cc08beaa0851 100644 (file)
@@ -37,6 +37,7 @@ FILE_LICENCE ( BSD2 );
 #include <ipxe/in.h>
 #include <ipxe/netdevice.h>
 #include <ipxe/ethernet.h>
+#include <ipxe/vlan.h>
 #include <ipxe/dhcp.h>
 #include <ipxe/iscsi.h>
 #include <ipxe/ibft.h>
@@ -264,6 +265,8 @@ static int ibft_fill_nic ( struct ibft_nic *nic,
        DBG ( "iBFT NIC subnet = /%d\n", nic->subnet_mask_prefix );
 
        /* Extract values from net-device configuration */
+       nic->vlan = cpu_to_le16 ( vlan_tag ( netdev ) );
+       DBG ( "iBFT NIC VLAN = %02x\n", le16_to_cpu ( nic->vlan ) );
        if ( ( rc = ll_protocol->eth_addr ( netdev->ll_addr,
                                            nic->mac_address ) ) != 0 ) {
                DBG ( "Could not determine iBFT MAC: %s\n", strerror ( rc ) );