Skip to content

Commit 3b0e134

Browse files
committed
tests: net: npf: test NPF_ORIG_IFACE_[UN]MATCH rules
Add a test for the NPF_ORIG_IFACE_MATCH and NPF_ORIG_IFACE_UNMATCH rules. Signed-off-by: Benjamin Cabé <benjamin@zephyrproject.org>
1 parent eb80530 commit 3b0e134

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

tests/net/npf/src/main.c

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,12 @@ static NPF_IFACE_UNMATCH(unmatch_iface_b, &dummy_iface_b);
145145
static NPF_RULE(accept_iface_a, NET_OK, match_iface_a);
146146
static NPF_RULE(accept_all_but_iface_b, NET_OK, unmatch_iface_b);
147147

148+
static NPF_ORIG_IFACE_MATCH(match_orig_iface_a, &dummy_iface_a);
149+
static NPF_ORIG_IFACE_UNMATCH(unmatch_orig_iface_b, &dummy_iface_b);
150+
151+
static NPF_RULE(accept_orig_iface_a, NET_OK, match_orig_iface_a);
152+
static NPF_RULE(accept_all_but_orig_iface_b, NET_OK, unmatch_orig_iface_b);
153+
148154
static void *test_npf_iface(void)
149155
{
150156
struct net_pkt *pkt_iface_a, *pkt_iface_b;
@@ -195,6 +201,58 @@ static void *test_npf_iface(void)
195201
return NULL;
196202
}
197203

204+
ZTEST(net_pkt_filter_test_suite, test_npf_orig_iface)
205+
{
206+
struct net_pkt *pkt_iface_a, *pkt_iface_b;
207+
208+
pkt_iface_a = build_test_pkt(0, 200, &dummy_iface_a);
209+
pkt_iface_b = build_test_pkt(0, 200, &dummy_iface_b);
210+
211+
/* Set orig_iface to different values to test orig_iface matching */
212+
net_pkt_set_orig_iface(pkt_iface_a, &dummy_iface_a);
213+
net_pkt_set_orig_iface(pkt_iface_b, &dummy_iface_b);
214+
215+
/* test with no rules */
216+
zassert_true(net_pkt_filter_recv_ok(pkt_iface_a), "");
217+
zassert_true(net_pkt_filter_recv_ok(pkt_iface_b), "");
218+
219+
/* install rules */
220+
npf_append_recv_rule(&accept_orig_iface_a);
221+
npf_append_recv_rule(&npf_default_drop);
222+
223+
/* test with rules in place */
224+
zassert_true(net_pkt_filter_recv_ok(pkt_iface_a), "");
225+
zassert_false(net_pkt_filter_recv_ok(pkt_iface_b), "");
226+
227+
/* remove first orig_iface rule */
228+
zassert_true(npf_remove_recv_rule(&accept_orig_iface_a), "");
229+
230+
/* fails if removed a second time */
231+
zassert_false(npf_remove_recv_rule(&accept_orig_iface_a), "");
232+
233+
/* test with only default drop rule in place */
234+
zassert_false(net_pkt_filter_recv_ok(pkt_iface_a), "");
235+
zassert_false(net_pkt_filter_recv_ok(pkt_iface_b), "");
236+
237+
/* insert second orig_iface rule */
238+
npf_insert_recv_rule(&accept_all_but_orig_iface_b);
239+
240+
/* test with new rule in place */
241+
zassert_true(net_pkt_filter_recv_ok(pkt_iface_a), "");
242+
zassert_false(net_pkt_filter_recv_ok(pkt_iface_b), "");
243+
244+
/* remove all rules */
245+
zassert_true(npf_remove_recv_rule(&accept_all_but_orig_iface_b), "");
246+
zassert_true(npf_remove_recv_rule(&npf_default_drop), "");
247+
248+
/* should accept any packets again */
249+
zassert_true(net_pkt_filter_recv_ok(pkt_iface_a), "");
250+
zassert_true(net_pkt_filter_recv_ok(pkt_iface_b), "");
251+
252+
net_pkt_unref(pkt_iface_a);
253+
net_pkt_unref(pkt_iface_b);
254+
}
255+
198256
/*
199257
* Example 1 in NPF_RULE() documentation.
200258
*/

0 commit comments

Comments
 (0)