BeryJu/gravity

Boot file name is missing from DHCP ACK impacting uefi network booting

Closed this issue · 0 comments

orajab commented

After long debug why booting in uefi is not working I found that Boot file name attribute is not added to DHCP (ACK) frame

here is the capture from wireshare

Frame 20: 355 bytes on wire (2840 bits), 355 bytes captured (2840 bits) on interface \Device\NPF_{3BEAEBE1-5199-45A0-8715-2F99DC8A7213}, id 0
    Section number: 1
    Interface id: 0 (\Device\NPF_{3BEAEBE1-5199-45A0-8715-2F99DC8A7213})
        Interface name: \Device\NPF_{3BEAEBE1-5199-45A0-8715-2F99DC8A7213}
        Interface description: VMware Network Adapter mngnet
    Encapsulation type: Ethernet (1)
    Arrival Time: Feb 18, 2024 20:52:26.650874000 Arabian Standard Time
    UTC Arrival Time: Feb 18, 2024 16:52:26.650874000 UTC
    Epoch Arrival Time: 1708275146.650874000
    [Time shift for this packet: 0.000000000 seconds]
    [Time delta from previous captured frame: 0.011994000 seconds]
    [Time delta from previous displayed frame: 0.011994000 seconds]
    [Time since reference or first frame: 6.676187000 seconds]
    Frame Number: 20
    Frame Length: 355 bytes (2840 bits)
    Capture Length: 355 bytes (2840 bits)
    [Frame is marked: False]
    [Frame is ignored: False]
    [Protocols in frame: eth:ethertype:ip:udp:dhcp]
    [Coloring Rule Name: UDP]
    [Coloring Rule String: udp]
Ethernet II, Src: VMware_9a:93:18 (00:0c:29:9a:93:18), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
    Destination: Broadcast (ff:ff:ff:ff:ff:ff)
        Address: Broadcast (ff:ff:ff:ff:ff:ff)
        .... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)
        .... ...1 .... .... .... .... = IG bit: Group address (multicast/broadcast)
    Source: VMware_9a:93:18 (00:0c:29:9a:93:18)
        Address: VMware_9a:93:18 (00:0c:29:9a:93:18)
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
    Type: IPv4 (0x0800)
Internet Protocol Version 4, Src: 172.16.0.1, Dst: 255.255.255.255
    0100 .... = Version: 4
    .... 0101 = Header Length: 20 bytes (5)
    Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
        0000 00.. = Differentiated Services Codepoint: Default (0)
        .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)
    Total Length: 341
    Identification: 0x4646 (17990)
    010. .... = Flags: 0x2, Don't fragment
        0... .... = Reserved bit: Not set
        .1.. .... = Don't fragment: Set
        ..0. .... = More fragments: Not set
    ...0 0000 0000 0000 = Fragment Offset: 0
    Time to Live: 64
    Protocol: UDP (17)
    Header Checksum: 0x4741 [validation disabled]
    [Header checksum status: Unverified]
    Source Address: 172.16.0.1
    Destination Address: 255.255.255.255
User Datagram Protocol, Src Port: 67, Dst Port: 68
    Source Port: 67
    Destination Port: 68
    Length: 321
    Checksum: 0x7f0b [unverified]
    [Checksum Status: Unverified]
    [Stream index: 1]
    [Timestamps]
        [Time since first frame: 3.996961000 seconds]
        [Time since previous frame: 3.996961000 seconds]
    UDP payload (313 bytes)
Dynamic Host Configuration Protocol (ACK)
    Message type: Boot Reply (2)
    Hardware type: Ethernet (0x01)
    Hardware address length: 6
    Hops: 0
    Transaction ID: 0x6e32e74b
    Seconds elapsed: 0
    Bootp flags: 0x8000, Broadcast flag (Broadcast)
        1... .... .... .... = Broadcast flag: Broadcast
        .000 0000 0000 0000 = Reserved flags: 0x0000
    Client IP address: 0.0.0.0
    Your (client) IP address: 172.16.0.10
    Next server IP address: 172.16.0.1
    Relay agent IP address: 0.0.0.0
    Client MAC address: VMware_10:57:a9 (00:0c:29:10:57:a9)
    Client hardware address padding: 00000000000000000000
    Server host name not given
    **Boot file name not given** < --------------------------------- missing
    Magic cookie: DHCP
    Option: (1) Subnet Mask (255.255.192.0)
        Length: 4
        Subnet Mask: 255.255.192.0
    Option: (3) Router
        Length: 4
        Router: 192.168.0.1
    Option: (6) Domain Name Server
        Length: 4
        Domain Name Server: 172.16.0.1
    Option: (15) Domain Name
        Length: 15
        Domain Name: testcluster.lan.
    Option: (51) IP Address Lease Time
        Length: 4
        IP Address Lease Time: 1 day (86400)
    Option: (53) DHCP Message Type (ACK)
        Length: 1
        DHCP: ACK (5)
    Option: (54) DHCP Server Identifier (172.16.0.1)
        Length: 4
        DHCP Server Identifier: 172.16.0.1
    Option: (66) TFTP Server Name
        Length: 10
        TFTP Server Name: 172.16.0.1
    **Option: (67) Bootfile name
        Length: 8
        Bootfile name: ipxe.efi**
    Option: (255) End
        Option End: 255

here is the Ack frame captured for ISC DHCP which works fine

Frame 9: 342 bytes on wire (2736 bits), 342 bytes captured (2736 bits) on interface \Device\NPF_{3BEAEBE1-5199-45A0-8715-2F99DC8A7213}, id 0
    Section number: 1
    Interface id: 0 (\Device\NPF_{3BEAEBE1-5199-45A0-8715-2F99DC8A7213})
        Interface name: \Device\NPF_{3BEAEBE1-5199-45A0-8715-2F99DC8A7213}
        Interface description: VMware Network Adapter mngnet
    Encapsulation type: Ethernet (1)
    Arrival Time: Feb 18, 2024 20:48:05.117724000 Arabian Standard Time
    UTC Arrival Time: Feb 18, 2024 16:48:05.117724000 UTC
    Epoch Arrival Time: 1708274885.117724000
    [Time shift for this packet: 0.000000000 seconds]
    [Time delta from previous captured frame: 0.001877000 seconds]
    [Time delta from previous displayed frame: 0.001877000 seconds]
    [Time since reference or first frame: 3.996813000 seconds]
    Frame Number: 9
    Frame Length: 342 bytes (2736 bits)
    Capture Length: 342 bytes (2736 bits)
    [Frame is marked: False]
    [Frame is ignored: False]
    [Protocols in frame: eth:ethertype:ip:udp:dhcp]
    [Coloring Rule Name: UDP]
    [Coloring Rule String: udp]
Ethernet II, Src: VMware_9a:93:18 (00:0c:29:9a:93:18), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
    Destination: Broadcast (ff:ff:ff:ff:ff:ff)
        Address: Broadcast (ff:ff:ff:ff:ff:ff)
        .... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)
        .... ...1 .... .... .... .... = IG bit: Group address (multicast/broadcast)
    Source: VMware_9a:93:18 (00:0c:29:9a:93:18)
        Address: VMware_9a:93:18 (00:0c:29:9a:93:18)
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
    Type: IPv4 (0x0800)
Internet Protocol Version 4, Src: 172.16.0.1, Dst: 255.255.255.255
    0100 .... = Version: 4
    .... 0101 = Header Length: 20 bytes (5)
    Differentiated Services Field: 0x10 (DSCP: Unknown, ECN: Not-ECT)
        0001 00.. = Differentiated Services Codepoint: Unknown (4)
        .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)
    Total Length: 328
    Identification: 0x0000 (0)
    000. .... = Flags: 0x0
        0... .... = Reserved bit: Not set
        .0.. .... = Don't fragment: Not set
        ..0. .... = More fragments: Not set
    ...0 0000 0000 0000 = Fragment Offset: 0
    Time to Live: 128
    Protocol: UDP (17)
    Header Checksum: 0x8d84 [validation disabled]
    [Header checksum status: Unverified]
    Source Address: 172.16.0.1
    Destination Address: 255.255.255.255
User Datagram Protocol, Src Port: 67, Dst Port: 68
    Source Port: 67
    Destination Port: 68
    Length: 308
    Checksum: 0x39a0 [unverified]
    [Checksum Status: Unverified]
    [Stream index: 2]
    [Timestamps]
        [Time since first frame: 2.980739000 seconds]
        [Time since previous frame: 2.980739000 seconds]
    UDP payload (300 bytes)
Dynamic Host Configuration Protocol (ACK)
    Message type: Boot Reply (2)
    Hardware type: Ethernet (0x01)
    Hardware address length: 6
    Hops: 0
    Transaction ID: 0x22282c5a
    Seconds elapsed: 0
    Bootp flags: 0x8000, Broadcast flag (Broadcast)
        1... .... .... .... = Broadcast flag: Broadcast
        .000 0000 0000 0000 = Reserved flags: 0x0000
    Client IP address: 0.0.0.0
    Your (client) IP address: 172.16.0.10
    Next server IP address: 0.0.0.0
    Relay agent IP address: 0.0.0.0
    Client MAC address: VMware_10:57:a9 (00:0c:29:10:57:a9)
    Client hardware address padding: 00000000000000000000
    Server host name not given
    **Boot file name: ipxe.efi** <------------------------------- provided by  ISC DHCP and look below in the options is not provided and it seems its not required for uefi network booting 
    Magic cookie: DHCP
    Option: (53) DHCP Message Type (ACK)
        Length: 1
        DHCP: ACK (5)
    Option: (54) DHCP Server Identifier (172.16.0.1)
        Length: 4
        DHCP Server Identifier: 172.16.0.1
    Option: (51) IP Address Lease Time
        Length: 4
        IP Address Lease Time: 10 minutes (600)
    Option: (1) Subnet Mask (255.255.192.0)
        Length: 4
        Subnet Mask: 255.255.192.0
    Option: (6) Domain Name Server
        Length: 4
        Domain Name Server: 172.16.0.1
    Option: (15) Domain Name
        Length: 14
        Domain Name: testcluster.lan
    Option: (255) End
        Option End: 255
    Padding: 00000000000000000000000000000000