History log of /openbmc/phosphor-networkd/src/ncsi_netlink_main.cpp (Results 1 – 14 of 14)
Revision Date Author Comments
# 0963c4b7 06-Mar-2025 Jeremy Kerr <jk@codeconstruct.com.au>

ncsi-netlink: ncsi-cmd fallback: move -c argument before operation

If a channel argument was used for ncsi-netlink, and we're falling-back
to the ncsi-cmd wrapper, we will place the "-c" argument af

ncsi-netlink: ncsi-cmd fallback: move -c argument before operation

If a channel argument was used for ncsi-netlink, and we're falling-back
to the ncsi-cmd wrapper, we will place the "-c" argument after the "raw"
command:

```
root@p10bmc:~# strace -e trace=execve ncsi-netlink -x 2 -p 0 -c 0 -o 5000000157200001
execve("/usr/bin/ncsi-netlink", ["ncsi-netlink", "-x", "2", "-p", "0", "-c", "0", "-o", "5000000157200001"], 0x7e98acc8 /* 20 vars */) = 0
<7> ncsi-netlink [..] -o is deprecated by ncsi-cmd
execve("/usr/local/bin/ncsi-cmd", ["ncsi-cmd", "-i", "2", "-p", "0", "raw", "-c", "0", "50", "00000157200001"], 0x7e945ccc /* 20 vars */) = -1 ENOENT (No such file or directory)
execve("/usr/bin/ncsi-cmd", ["ncsi-cmd", "-i", "2", "-p", "0", "raw", "-c", "0", "50", "00000157200001"], 0x7e945ccc /* 20 vars */) = 0
Invalid command type value
+++ exited with 1 +++
```

Instead, move the "raw" argument out of the initial list, and add it
once we have processed the channel.

Tested: we can now call the ncsi-netlink wrapper with -c:

```
root@p10bmc:~# strace -e trace=execve ncsi-netlink -x 2 -p 0 -c 0 -o 5000000157200001
execve("/usr/bin/ncsi-netlink", ["ncsi-netlink", "-x", "2", "-p", "0", "-c", "0", "-o", "5000000157200001"], 0x7e80fcd8 /* 19 vars */) = 0
<7> ncsi-netlink [..] -o is deprecated by ncsi-cmd
execve("/usr/local/bin/ncsi-cmd", ["ncsi-cmd", "-i", "2", "-p", "0", "-c", "0", "raw", "50", "00000157200001"], 0x7ef61cec /* 19 vars */) = -1 ENOENT (No such file or directory)
execve("/usr/bin/ncsi-cmd", ["ncsi-cmd", "-i", "2", "-p", "0", "-c", "0", "raw", "50", "00000157200001"], 0x7ef61cec /* 19 vars */) = 0
```

Which results in the OEM NCSI command being transmitted:

```
07:04:12 [TRACE] rx: NcsiPacket { mc: 0, iid: 29, type: Unknown (50), chan: p0c00, flags: 00, payload: 7: [00, 00, 01, 57, 20, 00, 01] }
```

Reported-by: George Keishing <gkeishin@gmail.com>
Fixes: bad17c0 ("ncsi-cmd: Add a new executable for issuing NCSI commands")
Change-Id: I196ec1b52d34e6b260e9696e4bd1e7c7482a6402
Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au>

show more ...


# bad17c0b 21-Nov-2024 Jeremy Kerr <jk@codeconstruct.com.au>

ncsi-cmd: Add a new executable for issuing NCSI commands

At the moment, the ncsi-netlink utility does two things:

- allows management of the kernel NCSI state, such as the channel and
package m

ncsi-cmd: Add a new executable for issuing NCSI commands

At the moment, the ncsi-netlink utility does two things:

- allows management of the kernel NCSI state, such as the channel and
package masks

- allows issuing NCSI messages to the NCSI-capable NIC, through the
NCSI_CMD_SEND_CMD interface

While these two things do share the same kernel API, they have somewhat
different objectives: one is controlling local state, the other is
controlling remote (ie, the NIC) state.

In future, we want to allow non-netlink-based NCSI transports for
issuing commands to the NIC, which makes the ncsi-netlink name somewhat
inaccurate for those.

So, introduce a new tool, 'ncsi-cmd', for issuing NCSI commands over the
netlink interface.

This has similar command-line semantics to the existing
'ncsi-netlink [...] -o <PAYLOAD>' usage, but has a few changes for a
more ergonomic UI:

Firstly, the type (or "opcode") byte is no longer packed into the
payload data, because it's not really payload.

Secondly, we use --interface/-i rather than --index/-x, with a note that
interfaces are specified by index. This allows for future changes that
allow specifying interfaces by name.

Finally, to make it clear that we can issue more than just OEM
commands, we have separate subcommands: "oem" and "raw". These are
similar, just that "oem" implies the standard OEM type value of 0x50.
So, the following are equivalent:

ncsi-cmd -i2 -p0 oem 010203

ncsi-cmd -i2 -p0 raw 0x50 010203

But now we have a cleaner interface for not-OEM commands:

ncsi-cmd -i12 -p0 raw 0x15

For issuing command type 0x15, "Get Version ID".

We remove the send logic from ncsi-netlink, but leave a compatibility
shim that will exec() ncsi-cmd with the appropriate arguments instead.

Change-Id: Ied240db0d545d5770df0927da354c65b82ee9508
Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au>

show more ...


# 2d0b48da 16-Sep-2024 Jeremy Kerr <jk@codeconstruct.com.au>

ncsi: make Interface virtual

Now that we have encapsulation for passing NCSI commands and responses
to/from an interface, we can make the Interface object virtual, and have
the Netlink implementatio

ncsi: make Interface virtual

Now that we have encapsulation for passing NCSI commands and responses
to/from an interface, we can make the Interface object virtual, and have
the Netlink implementation as a subclass.

We keep the netlink-specific operations in NetlinkInterface; getInfo(),
setChannel(), clearInterface(), and the channel/package mask operations
are all netlink-specific items to control kernel state.

Change-Id: I30b9cec41712d2e32d12685dd8406e08c6dea1f0
Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au>

show more ...


# b788524a 15-Sep-2024 Jeremy Kerr <jk@codeconstruct.com.au>

ncsi: encapsulate NC-SI commands with NCSICommand / NCSIResponse structs

... and rename Interface::sendOemCommand to Interface::sendCommand.

This provides a more clear facility to pass command and

ncsi: encapsulate NC-SI commands with NCSICommand / NCSIResponse structs

... and rename Interface::sendOemCommand to Interface::sendCommand.

This provides a more clear facility to pass command and response objects
around, for future command and transport implementations.

Change-Id: I46e594ab6467ed87cfc27189c3ec4bd321726ee5
Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au>

show more ...


# 147086d0 27-Aug-2024 Jeremy Kerr <jk@codeconstruct.com.au>

ncsi: return command response from sendOemCommand

Rather than expecting the response to be handled from the command
callback, return it as the return value from sendOemCommand().

This addresses the

ncsi: return command response from sendOemCommand

Rather than expecting the response to be handled from the command
callback, return it as the return value from sendOemCommand().

This addresses the todo in the sendOemCommand implementation.

Change-Id: I144128f50341d4ff7d8e248cb4dfa1427ead515b
Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au>

show more ...


# 7f7c085e 07-Aug-2024 Jeremy Kerr <jk@codeconstruct.com.au>

ncsi: return interface info from Interface::getInfo()

Rather than expecting the ncsi_util callback to print the interface
info, return the interface info, and print that.

This allows for a specific

ncsi: return interface info from Interface::getInfo()

Rather than expecting the ncsi_util callback to print the interface
info, return the interface info, and print that.

This allows for a specific output formatting function in
ncsi_netlink_main.c, rather than printing directly from the libnl
callback. We reformat for a more structured display of the
package/channel layouts.

We use std::optional for the return value here; it would be nice to use
std::expected instead, and get a full error code, but that's not quite
working with clang-18 at present. Even if we have an error code though,
we're just going to return EXIT_FAILURE anyway.

Tested: Invoked on a simlated dual-channel NCSI package:

# ncsi-netlink -x 2 --info
<7> Get Info , PACKAGE : 0xffffffffffffffff, INTERFACE: 0x7e8bf9bc
<7> Package id : 0
<7> package is forced
<7> Channel id : 0
<7> version 1.2 (p0c00)
<7> link state 0x40022f
<7> Channel id : 1
<7> version 1.2 (p0c01)
<7> link state 0x40022f

Change-Id: Idb62cc6695da67f4415ed9b0e7950c506018d630
Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au>

show more ...


# bc22f81c 29-Jul-2024 Jeremy Kerr <jk@codeconstruct.com.au>

ncsi: move ncsi operations to Interface class

The existing NCSI operations are quite Interface-specific (ie., rely on
netlink-specific constructs), so move these to methods on the Interface
class.

ncsi: move ncsi operations to Interface class

The existing NCSI operations are quite Interface-specific (ie., rely on
netlink-specific constructs), so move these to methods on the Interface
class.

We'll add alternative implementations in a future change.

Change-Id: I3ea5fcd64969a2c164503057e35881010ad141a0
Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au>

show more ...


# 8d9af023 26-Jul-2024 Jeremy Kerr <jk@codeconstruct.com.au>

ncsi: Create Interface type to wrap a network interface instance

Define an interface as a new type, just containing the ifindex
currently.

This will allow future Interface implementations that don'

ncsi: Create Interface type to wrap a network interface instance

Define an interface as a new type, just containing the ifindex
currently.

This will allow future Interface implementations that don't interact
directly with a local Linux network interface.

Tested: "get info" (--info) and "send OEM command" (--oem-payload)
operations tested against kernel NCSI layer, to a test NC-SI device.

Change-Id: If0471ac3fa41e08bb916e9279d4fe5b668860b03
Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au>

show more ...


# 5a456061 15-Feb-2024 Johnathan Mantey <johnathanx.mantey@intel.com>

Add Set Package and Channel Mask to ncsi-netlink utility

The NCSI driver has added two commands for setting the Package Mask
and the Channel Mask within a package. The ncsi-netlink utility does
not

Add Set Package and Channel Mask to ncsi-netlink utility

The NCSI driver has added two commands for setting the Package Mask
and the Channel Mask within a package. The ncsi-netlink utility does
not support these new commands.

Add the ability to set the package and the channel mask values.

Tested:
Instrumented the NCSI kernel driver to print mask values.
Issued 'ncsi-netlink -x 3 -j 0x3' and saw the NCSI driver print the
new package mask.
Issued 'ncsi-netlink -x 3 -p 0 -k 0x3' and saw the NCSI driver
print the new channel mask.

Change-Id: Icd2188e789de43f631fe26d9e751d564ba5f822f
Signed-off-by: Johnathan Mantey <johnathanx.mantey@intel.com>

show more ...


# 1ebea28c 15-Feb-2024 Johnathan Mantey <johnathanx.mantey@intel.com>

Make Send Command feature more flexible

The sendOemCommand command, used to send NCSI_CMD_SEND_CMD payloads,
is hardcoded to only send one command.

Update the sendOemCommand function to allow the s

Make Send Command feature more flexible

The sendOemCommand command, used to send NCSI_CMD_SEND_CMD payloads,
is hardcoded to only send one command.

Update the sendOemCommand function to allow the sub-operation to be
passed as a command line argument. This is done by prepending the
sub-operation byte to the front of the Send Cmd payload.

Doing this allows sub-operations without any payload bytes to be
called. For example "-o 0a", where the sub-operation for Send Cmd is
the 0x0a value.

Tested:
Sent 'ncsi-netlink -x 3 -p 0 -c 0 -o 50000001572100' and confirmed
the 0x50 byte worked the same way as the original hard-coded value.
Sent 'ncsi-netlink -x 3 -p 0 -c 0 -o 0a' and confirmed the 0x0a
sub-operation functioned on the submitters SUT.

Change-Id: I20f093fd8296f549fce03dc5729b8e5fedcab313
Signed-off-by: Johnathan Mantey <johnathanx.mantey@intel.com>

show more ...


# 89d734b9 10-May-2023 Patrick Williams <patrick@stwcx.xyz>

clang-format: copy latest and re-format

clang-format-16 has some backwards incompatible changes that require
additional settings for best compatibility and re-running the formatter.
Copy the latest

clang-format: copy latest and re-format

clang-format-16 has some backwards incompatible changes that require
additional settings for best compatibility and re-running the formatter.
Copy the latest .clang-format from the docs repository and reformat the
repository.

Change-Id: Ia4966a0790437eb0fc011c747f3be2a52884e4d8
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>

show more ...


# d423bebf 18-Apr-2023 Jagpal Singh Gill <paligill@gmail.com>

logging: switch ncsi-netlink to lg2

Tested: Build passes with "ninja -C build".
Change-Id: Iac053348b1125d15bcf65e27487c6814fa85650a
Signed-off-by: Jagpal Singh Gill <paligill@gmail.com>


# fa1f5c03 17-Sep-2020 Eddie James <eajames@linux.ibm.com>

Add support for sending NCSI command

Provide a means to send an OEM command to an NIC via NCSI netlink.
This may be invoked from a systemd Unit file to configure NIC
behavior.

Some NICs provide OEM

Add support for sending NCSI command

Provide a means to send an OEM command to an NIC via NCSI netlink.
This may be invoked from a systemd Unit file to configure NIC
behavior.

Some NICs provide OEM commands to influence their behavior, for
example maintaining full speed even when the host is down instead
of negotiating a lower speed for power.

Signed-off-by: Eddie James <eajames@linux.ibm.com>
Change-Id: Id920b618422e8fbfc51984fbf932045bfb5e56e6

show more ...


# 1bbe3d1e 14-May-2021 William A. Kennington III <wak@google.com>

build: Split c++ sources into a subdirectory

Change-Id: Iedea50c688189ae4953195105e323f7173d17a4b
Signed-off-by: William A. Kennington III <wak@google.com>