forked from torvalds/linux
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: $ ./gen.py --spec netdev.yaml --do dev_get --json='{"ifindex": 2}' {'ifindex': 2, 'xdp-features': 31} $ ./gen.py --spec netdev.yaml --dump dev_get [{'ifindex': 1, 'xdp-features': 0}, {'ifindex': 2, 'xdp-features': 31}] 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. 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>
- Loading branch information
1 parent
00b8f39
commit bab8ed8
Showing
9 changed files
with
460 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,72 @@ | ||
name: netdev | ||
|
||
doc: | ||
netdev configuration over generic netlink. | ||
|
||
definitions: | ||
- | ||
type: enum | ||
name: xdp-feat | ||
entries: [ aborted, drop, pass, redirect, | ||
ndo-xmit, xsk-zerocopy, | ||
hw-offload, rx-sg, ndo-xmit-sg | ||
] | ||
|
||
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-feat | ||
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,66 @@ | ||
/* 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_ABORTED_BIT, | ||
NETDEV_XDP_ACT_DROP_BIT, | ||
NETDEV_XDP_ACT_PASS_BIT, | ||
NETDEV_XDP_ACT_TX_BIT, | ||
NETDEV_XDP_ACT_REDIRECT_BIT, | ||
NETDEV_XDP_ACT_NDO_XMIT_BIT, | ||
NETDEV_XDP_ACT_XSK_ZEROCOPY_BIT, | ||
NETDEV_XDP_ACT_HW_OFFLOAD_BIT, | ||
NETDEV_XDP_ACT_RX_SG_BIT, | ||
NETDEV_XDP_ACT_NDO_XMIT_SG_BIT | ||
}; | ||
|
||
#define NETDEV_XDP_ACT_ABORTED BIT(NETDEV_XDP_ACT_ABORTED_BIT) | ||
#define NETDEV_XDP_ACT_DROP BIT(NETDEV_XDP_ACT_DROP_BIT) | ||
#define NETDEV_XDP_ACT_PASS BIT(NETDEV_XDP_ACT_PASS_BIT) | ||
#define NETDEV_XDP_ACT_TX BIT(NETDEV_XDP_ACT_TX_BIT) | ||
#define NETDEV_XDP_ACT_REDIRECT BIT(NETDEV_XDP_ACT_REDIRECT_BIT) | ||
#define NETDEV_XDP_ACT_NDO_XMIT BIT(NETDEV_XDP_ACT_NDO_XMIT_BIT) | ||
#define NETDEV_XDP_ACT_XSK_ZEROCOPY BIT(NETDEV_XDP_ACT_XSK_ZEROCOPY_BIT) | ||
#define NETDEV_XDP_ACT_HW_OFFLOAD BIT(NETDEV_XDP_ACT_HW_OFFLOAD_BIT) | ||
#define NETDEV_XDP_ACT_RX_SG BIT(NETDEV_XDP_ACT_RX_SG_BIT) | ||
#define NETDEV_XDP_ACT_NDO_XMIT_SG BIT(NETDEV_XDP_ACT_NDO_XMIT_SG_BIT) | ||
|
||
#define NETDEV_XDP_ACT_BASIC (NETDEV_XDP_ACT_DROP | \ | ||
NETDEV_XDP_ACT_PASS | \ | ||
NETDEV_XDP_ACT_TX | \ | ||
NETDEV_XDP_ACT_ABORTED) | ||
#define NETDEV_XDP_ACT_FULL (NETDEV_XDP_ACT_BASIC | \ | ||
NETDEV_XDP_ACT_REDIRECT) | ||
#define NETDEV_XDP_ACT_ZC (NETDEV_XDP_ACT_FULL | \ | ||
NETDEV_XDP_ACT_XSK_ZEROCOPY) | ||
|
||
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
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.