Message ID | 20230725233517.2614868-4-sdf@google.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | ynl: couple of unrelated fixes | expand |
On Tue, 25 Jul 2023 16:35:16 -0700 Stanislav Fomichev wrote: > Also add small (and simple - no dependencies) makefile rule do update > the UAPI ones. I was thinking people would use: ./tools/net/ynl/ynl-regen.sh -f for this. It is slightly more capable. Can we perhaps hook the new make target to just run that script?
On Wed, Jul 26, 2023 at 4:37 PM Jakub Kicinski <kuba@kernel.org> wrote: > > On Tue, 25 Jul 2023 16:35:16 -0700 Stanislav Fomichev wrote: > > Also add small (and simple - no dependencies) makefile rule do update > > the UAPI ones. > > I was thinking people would use: > > ./tools/net/ynl/ynl-regen.sh -f > > for this. It is slightly more capable. Can we perhaps hook the new make > target to just run that script? Oh, didn't know about this. Something like this maybe? Ugly? diff --git a/tools/net/ynl/Makefile b/tools/net/ynl/Makefile index d664b36deb5b..c36380bf1536 100644 --- a/tools/net/ynl/Makefile +++ b/tools/net/ynl/Makefile @@ -3,6 +3,7 @@ SUBDIRS = lib generated samples all: $(SUBDIRS) + (cd ../../../ && ./tools/net/ynl/ynl-regen.sh -f) $(SUBDIRS): @if [ -f "$@/Makefile" ] ; then \ Or, now that I know about the script I can actually run it manually. But with a makefile imo a bit easier to discover..
On Wed, 26 Jul 2023 16:55:07 -0700 Stanislav Fomichev wrote: > Oh, didn't know about this. Something like this maybe? Ugly? > > diff --git a/tools/net/ynl/Makefile b/tools/net/ynl/Makefile > index d664b36deb5b..c36380bf1536 100644 > --- a/tools/net/ynl/Makefile > +++ b/tools/net/ynl/Makefile > @@ -3,6 +3,7 @@ > SUBDIRS = lib generated samples > > all: $(SUBDIRS) > + (cd ../../../ && ./tools/net/ynl/ynl-regen.sh -f) Hm, I thought the script itself would handle this. I guess I did a stupid. How about we extend the script to default to the full tree: diff --git a/tools/net/ynl/ynl-regen.sh b/tools/net/ynl/ynl-regen.sh index 8d4ca6a50582..bdba24066cf1 100755 --- a/tools/net/ynl/ynl-regen.sh +++ b/tools/net/ynl/ynl-regen.sh @@ -4,15 +4,18 @@ TOOL=$(dirname $(realpath $0))/ynl-gen-c.py force= +search= while [ ! -z "$1" ]; do case "$1" in -f ) force=yes; shift ;; + -p ) search=$2; shift 2 ;; * ) echo "Unrecognized option '$1'"; exit 1 ;; esac done KDIR=$(dirname $(dirname $(dirname $(dirname $(realpath $0))))) +pushd ${search:-$KDIR} >>/dev/null files=$(git grep --files-with-matches '^/\* YNL-GEN \(kernel\|uapi\|user\)') for f in $files; do @@ -30,3 +33,5 @@ for f in $files; do $TOOL --mode ${params[2]} --${params[3]} --spec $KDIR/${params[0]} \ $args -o $f done + +popd >>/dev/null > $(SUBDIRS): > @if [ -f "$@/Makefile" ] ; then \ > > Or, now that I know about the script I can actually run it manually. > But with a makefile imo a bit easier to discover.. Yea, agreed.
diff --git a/include/uapi/linux/netdev.h b/include/uapi/linux/netdev.h index bf71698a1e82..1a2f6e320f1c 100644 --- a/include/uapi/linux/netdev.h +++ b/include/uapi/linux/netdev.h @@ -11,7 +11,7 @@ /** * enum netdev_xdp_act - * @NETDEV_XDP_ACT_BASIC: XDP feautues set supported by all drivers + * @NETDEV_XDP_ACT_BASIC: XDP features 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 @@ -34,6 +34,8 @@ enum netdev_xdp_act { NETDEV_XDP_ACT_RX_SG = 32, NETDEV_XDP_ACT_NDO_XMIT_SG = 64, + /* private: */ + NETDEV_XDP_ACT_MASK = 127, }; diff --git a/tools/net/ynl/Makefile b/tools/net/ynl/Makefile index d664b36deb5b..f4eacafa9665 100644 --- a/tools/net/ynl/Makefile +++ b/tools/net/ynl/Makefile @@ -1,5 +1,10 @@ # SPDX-License-Identifier: GPL-2.0 +DIR_SPEC:=../../../Documentation/netlink/specs +DIR_UAPI:=../../../include/uapi/linux +SPECS:=netdev fou handshake +TOOL:=./ynl-gen-c.py + SUBDIRS = lib generated samples all: $(SUBDIRS) @@ -16,4 +21,9 @@ all: $(SUBDIRS) fi \ done +generate: + for spec in $(SPECS); do \ + $(TOOL) --spec $(DIR_SPEC)/$$spec.yaml --header --mode uapi > $(DIR_UAPI)/$$spec.h; \ + done + .PHONY: clean all $(SUBDIRS) diff --git a/tools/net/ynl/generated/netdev-user.c b/tools/net/ynl/generated/netdev-user.c index 4eb8aefef0cd..68b408ca0f7f 100644 --- a/tools/net/ynl/generated/netdev-user.c +++ b/tools/net/ynl/generated/netdev-user.c @@ -50,6 +50,7 @@ struct ynl_policy_attr netdev_dev_policy[NETDEV_A_DEV_MAX + 1] = { [NETDEV_A_DEV_IFINDEX] = { .name = "ifindex", .type = YNL_PT_U32, }, [NETDEV_A_DEV_PAD] = { .name = "pad", .type = YNL_PT_IGNORE, }, [NETDEV_A_DEV_XDP_FEATURES] = { .name = "xdp-features", .type = YNL_PT_U64, }, + [NETDEV_A_DEV_XDP_ZC_MAX_SEGS] = { .name = "xdp-zc-max-segs", .type = YNL_PT_U32, }, }; struct ynl_policy_nest netdev_dev_nest = { @@ -91,6 +92,11 @@ int netdev_dev_get_rsp_parse(const struct nlmsghdr *nlh, void *data) return MNL_CB_ERROR; dst->_present.xdp_features = 1; dst->xdp_features = mnl_attr_get_u64(attr); + } else if (type == NETDEV_A_DEV_XDP_ZC_MAX_SEGS) { + if (ynl_attr_validate(yarg, attr)) + return MNL_CB_ERROR; + dst->_present.xdp_zc_max_segs = 1; + dst->xdp_zc_max_segs = mnl_attr_get_u32(attr); } } diff --git a/tools/net/ynl/generated/netdev-user.h b/tools/net/ynl/generated/netdev-user.h index 5554dc69bb9c..0952d3261f4d 100644 --- a/tools/net/ynl/generated/netdev-user.h +++ b/tools/net/ynl/generated/netdev-user.h @@ -47,10 +47,12 @@ struct netdev_dev_get_rsp { struct { __u32 ifindex:1; __u32 xdp_features:1; + __u32 xdp_zc_max_segs:1; } _present; __u32 ifindex; __u64 xdp_features; + __u32 xdp_zc_max_segs; }; void netdev_dev_get_rsp_free(struct netdev_dev_get_rsp *rsp);
Also add small (and simple - no dependencies) makefile rule do update the UAPI ones. Signed-off-by: Stanislav Fomichev <sdf@google.com> --- include/uapi/linux/netdev.h | 4 +++- tools/net/ynl/Makefile | 10 ++++++++++ tools/net/ynl/generated/netdev-user.c | 6 ++++++ tools/net/ynl/generated/netdev-user.h | 2 ++ 4 files changed, 21 insertions(+), 1 deletion(-)