Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2f1d774f authored by Alexei Starovoitov's avatar Alexei Starovoitov
Browse files

Merge branch 'bpftool_sockmap'



John Fastabend says:

====================
The first patch adds support for attaching programs to maps. This is
needed to support sock{map|hash} use from bpftool. Currently, I carry
around custom code to do this so doing it using standard bpftool will
be great.

The second patch adds a compat mode to ignore non-zero entries in
the map def. This allows using bpftool with maps that have a extra
fields that the user knows can be ignored. This is needed to work
correctly with maps being loaded by other tools or directly via
syscalls.

v3: add bash completion and doc updates for --mapcompat
====================

Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parents 7d1f12b8 c034a177
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@ MAP COMMANDS
|	**bpftool** **prog dump jited**  *PROG* [{**file** *FILE* | **opcodes**}]
|	**bpftool** **prog pin** *PROG* *FILE*
|	**bpftool** **prog load** *OBJ* *FILE* [**type** *TYPE*] [**map** {**idx** *IDX* | **name** *NAME*} *MAP*] [**dev** *NAME*]
|       **bpftool** **prog attach** *PROG* *ATTACH_TYPE* *MAP*
|       **bpftool** **prog detach** *PROG* *ATTACH_TYPE* *MAP*
|	**bpftool** **prog help**
|
|	*MAP* := { **id** *MAP_ID* | **pinned** *FILE* }
@@ -37,6 +39,7 @@ MAP COMMANDS
|		**cgroup/bind4** | **cgroup/bind6** | **cgroup/post_bind4** | **cgroup/post_bind6** |
|		**cgroup/connect4** | **cgroup/connect6** | **cgroup/sendmsg4** | **cgroup/sendmsg6**
|	}
|       *ATTACH_TYPE* := { **msg_verdict** | **skb_verdict** | **skb_parse** }


DESCRIPTION
@@ -90,6 +93,14 @@ DESCRIPTION

		  Note: *FILE* must be located in *bpffs* mount.

        **bpftool prog attach** *PROG* *ATTACH_TYPE* *MAP*
                  Attach bpf program *PROG* (with type specified by *ATTACH_TYPE*)
                  to the map *MAP*.

        **bpftool prog detach** *PROG* *ATTACH_TYPE* *MAP*
                  Detach bpf program *PROG* (with type specified by *ATTACH_TYPE*)
                  from the map *MAP*.

	**bpftool prog help**
		  Print short help message.

+5 −1
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ SYNOPSIS
	| **pin** | **event_pipe** | **help** }

	*PROG-COMMANDS* := { **show** | **list** | **dump jited** | **dump xlated** | **pin**
	| **load** | **help** }
	| **load** | **attach** | **detach** | **help** }

	*CGROUP-COMMANDS* := { **show** | **list** | **attach** | **detach** | **help** }

@@ -57,6 +57,10 @@ OPTIONS
	-p, --pretty
		  Generate human-readable JSON output. Implies **-j**.

	-m, --mapcompat
		  Allow loading maps with unknown map definitions.


SEE ALSO
========
	**bpftool-map**\ (8), **bpftool-prog**\ (8), **bpftool-cgroup**\ (8)
+19 −2
Original line number Diff line number Diff line
@@ -184,7 +184,7 @@ _bpftool()

    # Deal with options
    if [[ ${words[cword]} == -* ]]; then
        local c='--version --json --pretty --bpffs'
        local c='--version --json --pretty --bpffs --mapcompat'
        COMPREPLY=( $( compgen -W "$c" -- "$cur" ) )
        return 0
    fi
@@ -292,6 +292,23 @@ _bpftool()
                    fi
                    return 0
                    ;;
                attach|detach)
                    if [[ ${#words[@]} == 7 ]]; then
                        COMPREPLY=( $( compgen -W "id pinned" -- "$cur" ) )
                        return 0
                    fi

                    if [[ ${#words[@]} == 6 ]]; then
                        COMPREPLY=( $( compgen -W "msg_verdict skb_verdict skb_parse" -- "$cur" ) )
                        return 0
                    fi

                    if [[ $prev == "$command" ]]; then
                        COMPREPLY=( $( compgen -W "id pinned" -- "$cur" ) )
                        return 0
                    fi
                    return 0
                    ;;
                load)
                    local obj

@@ -347,7 +364,7 @@ _bpftool()
                    ;;
                *)
                    [[ $prev == $object ]] && \
                        COMPREPLY=( $( compgen -W 'dump help pin load \
                        COMPREPLY=( $( compgen -W 'dump help pin attach detach load \
                            show list' -- "$cur" ) )
                    ;;
            esac
+6 −1
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ json_writer_t *json_wtr;
bool pretty_output;
bool json_output;
bool show_pinned;
int bpf_flags;
struct pinned_obj_table prog_table;
struct pinned_obj_table map_table;

@@ -341,6 +342,7 @@ int main(int argc, char **argv)
		{ "pretty",	no_argument,	NULL,	'p' },
		{ "version",	no_argument,	NULL,	'V' },
		{ "bpffs",	no_argument,	NULL,	'f' },
		{ "mapcompat",	no_argument,	NULL,	'm' },
		{ 0 }
	};
	int opt, ret;
@@ -355,7 +357,7 @@ int main(int argc, char **argv)
	hash_init(map_table.table);

	opterr = 0;
	while ((opt = getopt_long(argc, argv, "Vhpjf",
	while ((opt = getopt_long(argc, argv, "Vhpjfm",
				  options, NULL)) >= 0) {
		switch (opt) {
		case 'V':
@@ -379,6 +381,9 @@ int main(int argc, char **argv)
		case 'f':
			show_pinned = true;
			break;
		case 'm':
			bpf_flags = MAPS_RELAX_COMPAT;
			break;
		default:
			p_err("unrecognized option '%s'", argv[optind - 1]);
			if (json_output)
+2 −1
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@
#define HELP_SPEC_PROGRAM						\
	"PROG := { id PROG_ID | pinned FILE | tag PROG_TAG }"
#define HELP_SPEC_OPTIONS						\
	"OPTIONS := { {-j|--json} [{-p|--pretty}] | {-f|--bpffs} }"
	"OPTIONS := { {-j|--json} [{-p|--pretty}] | {-f|--bpffs} | {-m|--mapcompat}"
#define HELP_SPEC_MAP							\
	"MAP := { id MAP_ID | pinned FILE }"

@@ -89,6 +89,7 @@ extern const char *bin_name;
extern json_writer_t *json_wtr;
extern bool json_output;
extern bool show_pinned;
extern int bpf_flags;
extern struct pinned_obj_table prog_table;
extern struct pinned_obj_table map_table;

Loading