@@ -145,6 +145,12 @@ static NPF_IFACE_UNMATCH(unmatch_iface_b, &dummy_iface_b);
145
145
static NPF_RULE (accept_iface_a , NET_OK , match_iface_a ) ;
146
146
static NPF_RULE (accept_all_but_iface_b , NET_OK , unmatch_iface_b ) ;
147
147
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
+
148
154
static void * test_npf_iface (void )
149
155
{
150
156
struct net_pkt * pkt_iface_a , * pkt_iface_b ;
@@ -195,6 +201,58 @@ static void *test_npf_iface(void)
195
201
return NULL ;
196
202
}
197
203
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
+
198
256
/*
199
257
* Example 1 in NPF_RULE() documentation.
200
258
*/
0 commit comments