Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0-only */
2 : : /*
3 : : * Copyright (c) 2022 Meta Platforms, Inc. and affiliates.
4 : : */
5 : :
6 : : #include "bpfilter/verdict.h"
7 : :
8 : : #include <errno.h>
9 : : #include <stddef.h>
10 : :
11 : : #include "bpfilter/helper.h"
12 : : #include "bpfilter/logger.h"
13 : :
14 : : static const char *_bf_redirect_dir_strs[] = {
15 : : [BF_REDIRECT_INGRESS] = "in",
16 : : [BF_REDIRECT_EGRESS] = "out",
17 : : };
18 : : static_assert_enum_mapping(_bf_redirect_dir_strs, _BF_REDIRECT_DIR_MAX);
19 : :
20 : 6 : const char *bf_redirect_dir_to_str(enum bf_redirect_dir dir)
21 : : {
22 [ + + ]: 6 : if (dir < 0 || dir >= _BF_REDIRECT_DIR_MAX)
23 : : return "<bf_redirect_dir unknown>";
24 : :
25 : 4 : return _bf_redirect_dir_strs[dir];
26 : : }
27 : :
28 : 17 : int bf_redirect_dir_from_str(const char *str, enum bf_redirect_dir *dir)
29 : : {
30 : : assert(dir);
31 : :
32 [ + + ]: 31 : for (size_t i = 0; i < _BF_REDIRECT_DIR_MAX; ++i) {
33 [ + + ]: 28 : if (bf_streq(_bf_redirect_dir_strs[i], str)) {
34 : 14 : *dir = i;
35 : 14 : return 0;
36 : : }
37 : : }
38 : :
39 : : return -EINVAL;
40 : : }
41 : :
42 : : static const char *_bf_verdict_strs[] = {
43 : : [BF_VERDICT_ACCEPT] = "ACCEPT",
44 : : [BF_VERDICT_DROP] = "DROP",
45 : : [BF_VERDICT_REDIRECT] = "REDIRECT",
46 : : [BF_VERDICT_CONTINUE] = "CONTINUE",
47 : : };
48 : : static_assert_enum_mapping(_bf_verdict_strs, _BF_VERDICT_MAX);
49 : :
50 : 86 : const char *bf_verdict_to_str(enum bf_verdict verdict)
51 : : {
52 [ + + ]: 86 : if (verdict < 0 || verdict >= _BF_VERDICT_MAX)
53 : : return "<bf_verdict unknown>";
54 : :
55 : 84 : return _bf_verdict_strs[verdict];
56 : : }
57 : :
58 : 1713 : int bf_verdict_from_str(const char *str, enum bf_verdict *verdict)
59 : : {
60 : : assert(verdict);
61 : :
62 [ + + ]: 2253 : for (size_t i = 0; i < _BF_VERDICT_MAX; ++i) {
63 [ + + ]: 2250 : if (bf_streq(_bf_verdict_strs[i], str)) {
64 : 1710 : *verdict = i;
65 : 1710 : return 0;
66 : : }
67 : : }
68 : :
69 : : return -EINVAL;
70 : : }
|