From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 20DA1C282C0 for ; Wed, 23 Jan 2019 14:25:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id ED2142184D for ; Wed, 23 Jan 2019 14:25:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726825AbfAWOZB (ORCPT ); Wed, 23 Jan 2019 09:25:01 -0500 Received: from mx1.redhat.com ([209.132.183.28]:50884 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726218AbfAWOZB (ORCPT ); Wed, 23 Jan 2019 09:25:01 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 48443C7919; Wed, 23 Jan 2019 14:25:01 +0000 (UTC) Received: from localhost (ovpn-200-36.brq.redhat.com [10.40.200.36]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9564F6C204; Wed, 23 Jan 2019 14:24:56 +0000 (UTC) Date: Wed, 23 Jan 2019 15:24:51 +0100 From: Jesper Dangaard Brouer To: Maciej Fijalkowski Cc: Daniel Borkmann , ast@kernel.org, netdev@vger.kernel.org, jakub.kicinski@netronome.com, brouer@redhat.com Subject: Re: [PATCH bpf-next v2 2/8] libbpf: Add a helper for retrieving a prog via index Message-ID: <20190123152451.7fcdb226@redhat.com> In-Reply-To: <20190123144159.000051bd@gmail.com> References: <20190121091041.14666-1-maciejromanfijalkowski@gmail.com> <20190121091041.14666-3-maciejromanfijalkowski@gmail.com> <91d162e0-3d15-c1d8-1e80-8d0a4f561540@iogearbox.net> <20190123144159.000051bd@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Wed, 23 Jan 2019 14:25:01 +0000 (UTC) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On Wed, 23 Jan 2019 14:41:59 +0100 Maciej Fijalkowski wrote: > On Wed, 23 Jan 2019 11:41:11 +0100 > Daniel Borkmann wrote: > > > On 01/21/2019 10:10 AM, Maciej Fijalkowski wrote: > > > xdp_redirect_cpu has a 6 different XDP programs that can be attached to > > > network interface. This sample has a option --prognum that allows user > > > for specifying which particular program from a given set will be > > > attached to network interface. > > > In order to make it easier when converting the mentioned sample to > > > libbpf usage, add a function to libbpf that will return program's fd for > > > a given index. > > > > > > Note that there is already a bpf_object__find_prog_by_idx, which could > > > be exported and might be used for that purpose, but it operates on the > > > number of ELF section and here we need an index from a programs array > > > within the bpf_object. > > > > Series in general looks good to me. Few minor comments, mainly in relation > > to the need for libbpf extensions. > > > > Would it not be a better interface to the user to instead choose the prog > > based on section name and then retrieve it via bpf_object__find_program_by_title() > > instead of prognum (which feels less user friendly) at least? > > > > I couldn't decide which one from: > * adding a libbpf helper > * changing the xdp_redirect_cpu behaviour > > would be more invasive when I was converting this sample to libbpf > support. > > Your suggestion sounds good, but I'm wondering about the actual > implementation. I suppose that we would choose the program via > command line. Some program section names in this sample are a bit > long and it might be irritating for user to type in for example > "xdp_cpu_map5_lb_hash_ip_pairs", no? Or maybe we can live with this. > In case of typo and program being not found it would be good to print > out the section names to choose from in usage(). Please feel free to deprecate or remove the xdp_redirect_cpu --prognum option. I would prefer if this was indeed converted to selecting the program based on the name in the _kern.c file, instead of a number. Listing the avail programs will be helpful, and you can also shorten/rename the program names. For easy of use, consider doing like 'ip' tool from[1] iproute2, and find the first best matching string. Copy pasted code below signature for inspiration. -- Best regards, Jesper Dangaard Brouer MSc.CS, Principal Kernel Engineer at Red Hat LinkedIn: http://www.linkedin.com/in/brouer [1] git://git.kernel.org/pub/scm/network/iproute2/iproute2.git lib/utils.c int matches(const char *cmd, const char *pattern) { int len = strlen(cmd); if (len > strlen(pattern)) return -1; return memcmp(pattern, cmd, len); } ip/ip.c static const struct cmd { const char *cmd; int (*func)(int argc, char **argv); } cmds[] = { { "address", do_ipaddr }, { "addrlabel", do_ipaddrlabel }, { "maddress", do_multiaddr }, { "route", do_iproute }, { "rule", do_iprule }, { "neighbor", do_ipneigh }, { "neighbour", do_ipneigh }, { "ntable", do_ipntable }, { "ntbl", do_ipntable }, { "link", do_iplink }, { "l2tp", do_ipl2tp }, { "fou", do_ipfou }, { "ila", do_ipila }, { "macsec", do_ipmacsec }, { "tunnel", do_iptunnel }, { "tunl", do_iptunnel }, { "tuntap", do_iptuntap }, { "tap", do_iptuntap }, { "token", do_iptoken }, { "tcpmetrics", do_tcp_metrics }, { "tcp_metrics", do_tcp_metrics }, { "monitor", do_ipmonitor }, { "xfrm", do_xfrm }, { "mroute", do_multiroute }, { "mrule", do_multirule }, { "netns", do_netns }, { "netconf", do_ipnetconf }, { "vrf", do_ipvrf}, { "sr", do_seg6 }, { "help", do_help }, { 0 } }; static int do_cmd(const char *argv0, int argc, char **argv) { const struct cmd *c; for (c = cmds; c->cmd; ++c) { if (matches(argv0, c->cmd) == 0) return -(c->func(argc-1, argv+1)); } fprintf(stderr, "Object \"%s\" is unknown, try \"ip help\".\n", argv0); return EXIT_FAILURE; }