@@ -64,27 +64,16 @@ LOG_MODULE_REGISTER(net_core, CONFIG_NET_CORE_LOG_LEVEL);
64
64
#include "net_stats.h"
65
65
66
66
#if defined(CONFIG_NET_NATIVE )
67
- static inline enum net_verdict process_data (struct net_pkt * pkt ,
68
- bool is_loopback )
67
+ static inline enum net_verdict process_data (struct net_pkt * pkt )
69
68
{
70
69
int ret ;
71
- bool locally_routed = false;
72
-
73
- net_pkt_set_l2_processed (pkt , false);
74
70
75
71
/* Initial call will forward packets to SOCK_RAW packet sockets. */
76
72
ret = net_packet_socket_input (pkt , ETH_P_ALL );
77
73
if (ret != NET_CONTINUE ) {
78
74
return ret ;
79
75
}
80
76
81
- /* If the packet is routed back to us when we have reassembled an IPv4 or IPv6 packet,
82
- * then do not pass it to L2 as the packet does not have link layer headers in it.
83
- */
84
- if (net_pkt_is_ip_reassembled (pkt )) {
85
- locally_routed = true;
86
- }
87
-
88
77
/* If there is no data, then drop the packet. */
89
78
if (!pkt -> frags ) {
90
79
NET_DBG ("Corrupted packet (frags %p)" , pkt -> frags );
@@ -93,8 +82,9 @@ static inline enum net_verdict process_data(struct net_pkt *pkt,
93
82
return NET_DROP ;
94
83
}
95
84
96
- if (!is_loopback && ! locally_routed ) {
85
+ if (!net_pkt_is_l2_processed ( pkt ) ) {
97
86
ret = net_if_recv_data (net_pkt_iface (pkt ), pkt );
87
+ net_pkt_set_l2_processed (pkt , true);
98
88
if (ret != NET_CONTINUE ) {
99
89
if (ret == NET_DROP ) {
100
90
NET_DBG ("Packet %p discarded by L2" , pkt );
@@ -106,8 +96,6 @@ static inline enum net_verdict process_data(struct net_pkt *pkt,
106
96
}
107
97
}
108
98
109
- net_pkt_set_l2_processed (pkt , true);
110
-
111
99
/* L2 has modified the buffer starting point, it is easier
112
100
* to re-initialize the cursor rather than updating it.
113
101
*/
@@ -148,10 +136,10 @@ static inline enum net_verdict process_data(struct net_pkt *pkt,
148
136
return NET_DROP ;
149
137
}
150
138
151
- static void processing_data (struct net_pkt * pkt , bool is_loopback )
139
+ static void processing_data (struct net_pkt * pkt )
152
140
{
153
141
again :
154
- switch (process_data (pkt , is_loopback )) {
142
+ switch (process_data (pkt )) {
155
143
case NET_CONTINUE :
156
144
if (IS_ENABLED (CONFIG_NET_L2_VIRTUAL )) {
157
145
/* If we have a tunneling packet, feed it back
@@ -421,7 +409,8 @@ int net_try_send_data(struct net_pkt *pkt, k_timeout_t timeout)
421
409
* to RX processing.
422
410
*/
423
411
NET_DBG ("Loopback pkt %p back to us" , pkt );
424
- processing_data (pkt , true);
412
+ + net_pkt_set_l2_processed (pkt , true);
413
+ processing_data (pkt );
425
414
ret = 0 ;
426
415
goto err ;
427
416
}
@@ -481,7 +470,6 @@ int net_try_send_data(struct net_pkt *pkt, k_timeout_t timeout)
481
470
482
471
static void net_rx (struct net_if * iface , struct net_pkt * pkt )
483
472
{
484
- bool is_loopback = false;
485
473
size_t pkt_len ;
486
474
487
475
pkt_len = net_pkt_get_len (pkt );
@@ -493,12 +481,12 @@ static void net_rx(struct net_if *iface, struct net_pkt *pkt)
493
481
if (IS_ENABLED (CONFIG_NET_LOOPBACK )) {
494
482
#ifdef CONFIG_NET_L2_DUMMY
495
483
if (net_if_l2 (iface ) == & NET_L2_GET_NAME (DUMMY )) {
496
- is_loopback = true;
484
+ net_pkt_set_l2_processed ( pkt , true) ;
497
485
}
498
486
#endif
499
487
}
500
488
501
- processing_data (pkt , is_loopback );
489
+ processing_data (pkt );
502
490
503
491
net_print_statistics ();
504
492
net_pkt_print ();
0 commit comments