-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
netdev-genl: create a simple family for netdev stuff
Add a Netlink spec-compatible family for netdevs. This is a very simple implementation without much thought going into it. It allows us to reap all the benefits of Netlink specs, one can use the generic client to issue the commands: $ ./cli.py --spec netdev.yaml --dump dev_get [{'ifindex': 1, 'xdp-features': set()}, {'ifindex': 2, 'xdp-features': {'basic', 'ndo-xmit', 'redirect'}}, {'ifindex': 3, 'xdp-features': {'rx-sg'}}] the generic python library does not have flags-by-name support, yet, but we also don't have to carry strings in the messages, as user space can get the names from the spec. Acked-by: Jesper Dangaard Brouer <brouer@redhat.com> Co-developed-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Co-developed-by: Kumar Kartikeya Dwivedi <memxor@gmail.com> Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com> Co-developed-by: Marek Majtyka <alardam@gmail.com> Signed-off-by: Marek Majtyka <alardam@gmail.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org> Link: https://lore.kernel.org/r/327ad9c9868becbe1e601b580c962549c8cd81f2.1675245258.git.lorenzo@kernel.org Signed-off-by: Alexei Starovoitov <ast@kernel.org>
- Loading branch information
Jakub Kicinski
authored and
Alexei Starovoitov
committed
Feb 3, 2023
1 parent
1508090
commit d3d854f
Showing
10 changed files
with
477 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
name: netdev | ||
|
||
doc: | ||
netdev configuration over generic netlink. | ||
|
||
definitions: | ||
- | ||
type: flags | ||
name: xdp-act | ||
entries: | ||
- | ||
name: basic | ||
doc: | ||
XDP feautues set supported by all drivers | ||
(XDP_ABORTED, XDP_DROP, XDP_PASS, XDP_TX) | ||
- | ||
name: redirect | ||
doc: | ||
The netdev supports XDP_REDIRECT | ||
- | ||
name: ndo-xmit | ||
doc: | ||
This feature informs if netdev implements ndo_xdp_xmit callback. | ||
- | ||
name: xsk-zerocopy | ||
doc: | ||
This feature informs if netdev supports AF_XDP in zero copy mode. | ||
- | ||
name: hw-offload | ||
doc: | ||
This feature informs if netdev supports XDP hw oflloading. | ||
- | ||
name: rx-sg | ||
doc: | ||
This feature informs if netdev implements non-linear XDP buffer | ||
support in the driver napi callback. | ||
- | ||
name: ndo-xmit-sg | ||
doc: | ||
This feature informs if netdev implements non-linear XDP buffer | ||
support in ndo_xdp_xmit callback. | ||
|
||
attribute-sets: | ||
- | ||
name: dev | ||
attributes: | ||
- | ||
name: ifindex | ||
doc: netdev ifindex | ||
type: u32 | ||
value: 1 | ||
checks: | ||
min: 1 | ||
- | ||
name: pad | ||
type: pad | ||
- | ||
name: xdp-features | ||
doc: Bitmask of enabled xdp-features. | ||
type: u64 | ||
enum: xdp-act | ||
enum-as-flags: true | ||
|
||
operations: | ||
list: | ||
- | ||
name: dev-get | ||
doc: Get / dump information about a netdev. | ||
value: 1 | ||
attribute-set: dev | ||
do: | ||
request: | ||
attributes: | ||
- ifindex | ||
reply: &dev-all | ||
attributes: | ||
- ifindex | ||
- xdp-features | ||
dump: | ||
reply: *dev-all | ||
- | ||
name: dev-add-ntf | ||
doc: Notification about device appearing. | ||
notify: dev-get | ||
mcgrp: mgmt | ||
- | ||
name: dev-del-ntf | ||
doc: Notification about device disappearing. | ||
notify: dev-get | ||
mcgrp: mgmt | ||
- | ||
name: dev-change-ntf | ||
doc: Notification about device configuration being changed. | ||
notify: dev-get | ||
mcgrp: mgmt | ||
|
||
mcast-groups: | ||
list: | ||
- | ||
name: mgmt |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
/* Do not edit directly, auto-generated from: */ | ||
/* Documentation/netlink/specs/netdev.yaml */ | ||
/* YNL-GEN uapi header */ | ||
|
||
#ifndef _UAPI_LINUX_NETDEV_H | ||
#define _UAPI_LINUX_NETDEV_H | ||
|
||
#define NETDEV_FAMILY_NAME "netdev" | ||
#define NETDEV_FAMILY_VERSION 1 | ||
|
||
/** | ||
* enum netdev_xdp_act | ||
* @NETDEV_XDP_ACT_BASIC: XDP feautues set supported by all drivers | ||
* (XDP_ABORTED, XDP_DROP, XDP_PASS, XDP_TX) | ||
* @NETDEV_XDP_ACT_REDIRECT: The netdev supports XDP_REDIRECT | ||
* @NETDEV_XDP_ACT_NDO_XMIT: This feature informs if netdev implements | ||
* ndo_xdp_xmit callback. | ||
* @NETDEV_XDP_ACT_XSK_ZEROCOPY: This feature informs if netdev supports AF_XDP | ||
* in zero copy mode. | ||
* @NETDEV_XDP_ACT_HW_OFFLOAD: This feature informs if netdev supports XDP hw | ||
* oflloading. | ||
* @NETDEV_XDP_ACT_RX_SG: This feature informs if netdev implements non-linear | ||
* XDP buffer support in the driver napi callback. | ||
* @NETDEV_XDP_ACT_NDO_XMIT_SG: This feature informs if netdev implements | ||
* non-linear XDP buffer support in ndo_xdp_xmit callback. | ||
*/ | ||
enum netdev_xdp_act { | ||
NETDEV_XDP_ACT_BASIC = 1, | ||
NETDEV_XDP_ACT_REDIRECT = 2, | ||
NETDEV_XDP_ACT_NDO_XMIT = 4, | ||
NETDEV_XDP_ACT_XSK_ZEROCOPY = 8, | ||
NETDEV_XDP_ACT_HW_OFFLOAD = 16, | ||
NETDEV_XDP_ACT_RX_SG = 32, | ||
NETDEV_XDP_ACT_NDO_XMIT_SG = 64, | ||
}; | ||
|
||
enum { | ||
NETDEV_A_DEV_IFINDEX = 1, | ||
NETDEV_A_DEV_PAD, | ||
NETDEV_A_DEV_XDP_FEATURES, | ||
|
||
__NETDEV_A_DEV_MAX, | ||
NETDEV_A_DEV_MAX = (__NETDEV_A_DEV_MAX - 1) | ||
}; | ||
|
||
enum { | ||
NETDEV_CMD_DEV_GET = 1, | ||
NETDEV_CMD_DEV_ADD_NTF, | ||
NETDEV_CMD_DEV_DEL_NTF, | ||
NETDEV_CMD_DEV_CHANGE_NTF, | ||
|
||
__NETDEV_CMD_MAX, | ||
NETDEV_CMD_MAX = (__NETDEV_CMD_MAX - 1) | ||
}; | ||
|
||
#define NETDEV_MCGRP_MGMT "mgmt" | ||
|
||
#endif /* _UAPI_LINUX_NETDEV_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
// SPDX-License-Identifier: BSD-3-Clause | ||
/* Do not edit directly, auto-generated from: */ | ||
/* Documentation/netlink/specs/netdev.yaml */ | ||
/* YNL-GEN kernel source */ | ||
|
||
#include <net/netlink.h> | ||
#include <net/genetlink.h> | ||
|
||
#include "netdev-genl-gen.h" | ||
|
||
#include <linux/netdev.h> | ||
|
||
/* NETDEV_CMD_DEV_GET - do */ | ||
static const struct nla_policy netdev_dev_get_nl_policy[NETDEV_A_DEV_IFINDEX + 1] = { | ||
[NETDEV_A_DEV_IFINDEX] = NLA_POLICY_MIN(NLA_U32, 1), | ||
}; | ||
|
||
/* Ops table for netdev */ | ||
static const struct genl_split_ops netdev_nl_ops[2] = { | ||
{ | ||
.cmd = NETDEV_CMD_DEV_GET, | ||
.doit = netdev_nl_dev_get_doit, | ||
.policy = netdev_dev_get_nl_policy, | ||
.maxattr = NETDEV_A_DEV_IFINDEX, | ||
.flags = GENL_CMD_CAP_DO, | ||
}, | ||
{ | ||
.cmd = NETDEV_CMD_DEV_GET, | ||
.dumpit = netdev_nl_dev_get_dumpit, | ||
.flags = GENL_CMD_CAP_DUMP, | ||
}, | ||
}; | ||
|
||
static const struct genl_multicast_group netdev_nl_mcgrps[] = { | ||
[NETDEV_NLGRP_MGMT] = { "mgmt", }, | ||
}; | ||
|
||
struct genl_family netdev_nl_family __ro_after_init = { | ||
.name = NETDEV_FAMILY_NAME, | ||
.version = NETDEV_FAMILY_VERSION, | ||
.netnsok = true, | ||
.parallel_ops = true, | ||
.module = THIS_MODULE, | ||
.split_ops = netdev_nl_ops, | ||
.n_split_ops = ARRAY_SIZE(netdev_nl_ops), | ||
.mcgrps = netdev_nl_mcgrps, | ||
.n_mcgrps = ARRAY_SIZE(netdev_nl_mcgrps), | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
/* SPDX-License-Identifier: BSD-3-Clause */ | ||
/* Do not edit directly, auto-generated from: */ | ||
/* Documentation/netlink/specs/netdev.yaml */ | ||
/* YNL-GEN kernel header */ | ||
|
||
#ifndef _LINUX_NETDEV_GEN_H | ||
#define _LINUX_NETDEV_GEN_H | ||
|
||
#include <net/netlink.h> | ||
#include <net/genetlink.h> | ||
|
||
#include <linux/netdev.h> | ||
|
||
int netdev_nl_dev_get_doit(struct sk_buff *skb, struct genl_info *info); | ||
int netdev_nl_dev_get_dumpit(struct sk_buff *skb, struct netlink_callback *cb); | ||
|
||
enum { | ||
NETDEV_NLGRP_MGMT, | ||
}; | ||
|
||
extern struct genl_family netdev_nl_family; | ||
|
||
#endif /* _LINUX_NETDEV_GEN_H */ |
Oops, something went wrong.