mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-07-22 02:35:25 +00: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
|
@ -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…
Reference in a new issue