]>
git.proxmox.com Git - mirror_iproute2.git/blob - tc/tc_exec.c
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version
7 * 2 of the License, or (at your option) any later version.
9 * Authors: Daniel Borkmann <daniel@iogearbox.net>
19 #include "tc_common.h"
21 static struct exec_util
*exec_list
;
24 static void usage(void)
27 "Usage: tc exec [ EXEC_TYPE ] [ help | OPTIONS ]\n"
29 "EXEC_TYPE := { bpf | etc. }\n"
30 "OPTIONS := ... try tc exec <desired EXEC_KIND> help\n");
33 static int parse_noeopt(struct exec_util
*eu
, int argc
, char **argv
)
36 fprintf(stderr
, "Unknown exec \"%s\", hence option \"%s\" is unparsable\n",
44 static struct exec_util
*get_exec_kind(const char *name
)
50 for (eu
= exec_list
; eu
; eu
= eu
->next
)
51 if (strcmp(eu
->id
, name
) == 0)
54 snprintf(buf
, sizeof(buf
), "%s/e_%s.so", get_tc_lib(), name
);
55 dlh
= dlopen(buf
, RTLD_LAZY
);
59 dlh
= BODY
= dlopen(NULL
, RTLD_LAZY
);
65 snprintf(buf
, sizeof(buf
), "%s_exec_util", name
);
75 eu
= calloc(1, sizeof(*eu
));
77 strncpy(eu
->id
, name
, sizeof(eu
->id
) - 1);
78 eu
->parse_eopt
= parse_noeopt
;
85 int do_exec(int argc
, char **argv
)
88 char kind
[FILTER_NAMESZ
] = {};
91 fprintf(stderr
, "No command given, try \"tc exec help\".\n");
95 if (matches(*argv
, "help") == 0) {
100 strncpy(kind
, *argv
, sizeof(kind
) - 1);
102 eu
= get_exec_kind(kind
);
107 return eu
->parse_eopt(eu
, argc
, argv
);