jay7x / jay7x/puppet-sfboot

Broken when in-kernel OSS driver is in use

Open
#10 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
Ruby
Stars
0
Forks
0
PR merge metrics
No merged PRs in 30d

Description

Somehow all my test machines has onload installed that bundles its own NIC kernel driver..

When used against in-kernel OSS driver, `sfboot` behaves quite differently. For example Debian 12 with 2x Solarflare SFN8522-R2 adapters:

```plain
# sfboot -l
Solarflare boot configuration utility [v8.3.3]
Copyright 2002-2023 Advanced Micro Devices, Inc.
Adapter list:
eno16595np0
eno16605np1
eno16495np0
eno16505np1
# sfboot
Solarflare boot configuration utility [v8.3.3]
Copyright 2002-2023 Advanced Micro Devices, Inc.

eno16595np0:
Boot image UEFI only
Physical Functions on this port 1
PF MSI-X interrupt limit 32
Virtual Functions on each PF 0
VF MSI-X interrupt limit 8
Port mode Default
Firmware variant Full feature / virtualization
Insecure filters Default
MAC spoofing Default
Change MAC Default
VLAN tags None
Switch mode Default
RX descriptor cache size 32
TX descriptor cache size 16
Total number of VIs 2048
Event merge timeout Default
EVT cut thru Default

eno16605np1:
Interface-specific boot options are not available. Adapter-wide options are
available via eno16595np0 (00-0F-53-XX-XX-XX).

eno16495np0:
Boot image UEFI only
Physical Functions on this port 1
PF MSI-X interrupt limit 32
Virtual Functions on each PF 0
VF MSI-X interrupt limit 8
Port mode Default
Firmware variant Full feature / virtualization
Insecure filters Default
MAC spoofing Default
Change MAC Default
VLAN tags None
Switch mode Default
RX descriptor cache size 32
TX descriptor cache size 16
Total number of VIs 2048
Event merge timeout Default
EVT cut thru Default

eno16505np1:
Interface-specific boot options are not available. Adapter-wide options are
available via eno16495np0 (00-0F-53-XX-XX-XX).
```

Those "empty" NIC blocks breaks parser in this way:

```plain
Resources failed to apply for node.example.tld
Sfboot_global[global]: Provider returned data that does not match the Type Schema for `sfboot_global[global]`
Value type mismatch:
* boot_image: (expects a match for Enum['all', 'disabled', 'optionrom', 'uefi'], got Undef)
* port_mode: (expects a match for Variant[Enum['default'], String[1]], got Undef)
* firmware_variant: (expects a match for Enum['auto', 'capture-packed-stream', 'dpdk', 'full-feature', 'ultra-low-latency'], got Undef)
* insecure_filters: (expects a match for Enum['default', 'disabled', 'enabled'], got Undef)
* mac_spoofing: (expects a match for Enum['default', 'disabled', 'enabled'], got Undef)
* change_mac: (expects a match for Enum['default', 'disabled', 'enabled'], got Undef)
* rx_dc_size: (expects an Integer value, got Undef)
* tx_dc_size: (expects an Integer value, got Undef)
* vi_count: (expects an Integer value, got Undef)
* event_merge_timeout: (expects a match for Variant[Enum['default'], Integer[0]], got Undef)
```

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by reproducing the reported `sfboot -l` output with in-kernel OSS drivers and trace the parser handling the interface-specific blocks. Confirm how the empty NIC blocks become undefined values, then verify that they no longer produce schema mismatches while populated adapter blocks retain their configuration.

Written by the indexing model from the issue text.

Assessment

Tech stack
ruby
Domain
devops
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.