mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-27 16:20:09 +01:00
sriov: allow reading empty eswitch paramaters via Devlink
Probably not all drivers and devices return all parameters. Set them to "unknown" if they are missing and let the caller to decide what to do. In our case, if the sriov setting has a value different to "preserve" it will try to set it (and will probably fail). But if the missing parameter is set to "preserve" in the sriov setting we can continue, just ignoring it.
This commit is contained in:
parent
27eaf34fcf
commit
7346c5b556
3 changed files with 16 additions and 6 deletions
|
|
@ -281,6 +281,7 @@ typedef enum {
|
|||
/* Mirrors libnm's NMSriovEswitchMode.
|
||||
* Values >= 0 mirror kernel's enum devlink_eswitch_mode. */
|
||||
_NM_SRIOV_ESWITCH_MODE_PRESERVE = -1,
|
||||
_NM_SRIOV_ESWITCH_MODE_UNKNOWN = -1, /*< skip >*/
|
||||
_NM_SRIOV_ESWITCH_MODE_LEGACY = 0,
|
||||
_NM_SRIOV_ESWITCH_MODE_SWITCHDEV = 1,
|
||||
} _NMSriovEswitchMode;
|
||||
|
|
@ -289,6 +290,7 @@ typedef enum {
|
|||
/* Mirrors libnm's NMSriovEswitchInlineMode.
|
||||
* Values >= 0 mirror kernel's enum devlink_eswitch_inline_mode. */
|
||||
_NM_SRIOV_ESWITCH_INLINE_MODE_PRESERVE = -1,
|
||||
_NM_SRIOV_ESWITCH_INLINE_MODE_UNKNOWN = -1, /*< skip >*/
|
||||
_NM_SRIOV_ESWITCH_INLINE_MODE_NONE = 0,
|
||||
_NM_SRIOV_ESWITCH_INLINE_MODE_LINK = 1,
|
||||
_NM_SRIOV_ESWITCH_INLINE_MODE_NETWORK = 2,
|
||||
|
|
@ -299,6 +301,7 @@ typedef enum {
|
|||
/* Mirrors libnm's NMSriovEswitchEncapMode.
|
||||
* Values >= 0 mirror kernel's enum devlink_eswitch_encap_mode. */
|
||||
_NM_SRIOV_ESWITCH_ENCAP_MODE_PRESERVE = -1,
|
||||
_NM_SRIOV_ESWITCH_ENCAP_MODE_UNKNOWN = -1, /*< skip >*/
|
||||
_NM_SRIOV_ESWITCH_ENCAP_MODE_NONE = 0,
|
||||
_NM_SRIOV_ESWITCH_ENCAP_MODE_BASIC = 1,
|
||||
} _NMSriovEswitchEncapMode;
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ typedef enum {
|
|||
*/
|
||||
typedef enum {
|
||||
NM_SRIOV_ESWITCH_MODE_PRESERVE = -1,
|
||||
NM_SRIOV_ESWITCH_MODE_UNKNOWN = -1, /*< skip >*/
|
||||
NM_SRIOV_ESWITCH_MODE_LEGACY = 0,
|
||||
NM_SRIOV_ESWITCH_MODE_SWITCHDEV = 1,
|
||||
} NMSriovEswitchMode;
|
||||
|
|
@ -82,6 +83,7 @@ typedef enum {
|
|||
*/
|
||||
typedef enum {
|
||||
NM_SRIOV_ESWITCH_INLINE_MODE_PRESERVE = -1,
|
||||
NM_SRIOV_ESWITCH_INLINE_MODE_UNKNOWN = -1, /*< skip >*/
|
||||
NM_SRIOV_ESWITCH_INLINE_MODE_NONE = 0,
|
||||
NM_SRIOV_ESWITCH_INLINE_MODE_LINK = 1,
|
||||
NM_SRIOV_ESWITCH_INLINE_MODE_NETWORK = 2,
|
||||
|
|
@ -98,6 +100,7 @@ typedef enum {
|
|||
*/
|
||||
typedef enum {
|
||||
NM_SRIOV_ESWITCH_ENCAP_MODE_PRESERVE = -1,
|
||||
NM_SRIOV_ESWITCH_ENCAP_MODE_UNKNOWN = -1, /*< skip >*/
|
||||
NM_SRIOV_ESWITCH_ENCAP_MODE_NONE = 0,
|
||||
NM_SRIOV_ESWITCH_ENCAP_MODE_BASIC = 1,
|
||||
} NMSriovEswitchEncapMode;
|
||||
|
|
|
|||
|
|
@ -237,18 +237,22 @@ devlink_parse_eswitch_mode(const struct nl_msg *msg, void *data)
|
|||
NMDevlinkEswitchParams *params = data;
|
||||
struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
|
||||
struct nlattr *tb[G_N_ELEMENTS(eswitch_policy)];
|
||||
struct nlattr *nla;
|
||||
|
||||
if (nla_parse_arr(tb, genlmsg_attrdata(gnlh, 0), genlmsg_attrlen(gnlh, 0), eswitch_policy) < 0)
|
||||
return NL_SKIP;
|
||||
|
||||
if (!tb[DEVLINK_ATTR_ESWITCH_MODE] || !tb[DEVLINK_ATTR_ESWITCH_INLINE_MODE]
|
||||
|| !tb[DEVLINK_ATTR_ESWITCH_ENCAP_MODE])
|
||||
return NL_SKIP;
|
||||
nla = tb[DEVLINK_ATTR_ESWITCH_MODE];
|
||||
params->mode = nla ? (_NMSriovEswitchMode) nla_get_u16(nla) : _NM_SRIOV_ESWITCH_MODE_UNKNOWN;
|
||||
|
||||
params->mode = (_NMSriovEswitchMode) nla_get_u16(tb[DEVLINK_ATTR_ESWITCH_MODE]);
|
||||
params->encap_mode = (_NMSriovEswitchEncapMode) nla_get_u8(tb[DEVLINK_ATTR_ESWITCH_ENCAP_MODE]);
|
||||
nla = tb[DEVLINK_ATTR_ESWITCH_INLINE_MODE];
|
||||
params->inline_mode =
|
||||
(_NMSriovEswitchInlineMode) nla_get_u8(tb[DEVLINK_ATTR_ESWITCH_INLINE_MODE]);
|
||||
nla ? (_NMSriovEswitchInlineMode) nla_get_u8(nla) : _NM_SRIOV_ESWITCH_INLINE_MODE_UNKNOWN;
|
||||
|
||||
nla = tb[DEVLINK_ATTR_ESWITCH_ENCAP_MODE];
|
||||
params->encap_mode =
|
||||
nla ? (_NMSriovEswitchEncapMode) nla_get_u8(nla) : _NM_SRIOV_ESWITCH_ENCAP_MODE_UNKNOWN;
|
||||
|
||||
return NL_OK;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue