From 353e314fbf1251f41302e057cc2f4c8f4f4dc741 Mon Sep 17 00:00:00 2001 From: Cla Mattia Galliard Date: Fri, 21 Feb 2025 10:57:40 +0100 Subject: [PATCH] net: arp: Send replies with timeout `K_NO_WAIT` This ensures system stays operational in arp-flood situation. Signed-off-by: Cla Mattia Galliard --- subsys/net/l2/ethernet/arp.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/subsys/net/l2/ethernet/arp.c b/subsys/net/l2/ethernet/arp.c index 964dd9e3eda..16e150141d8 100644 --- a/subsys/net/l2/ethernet/arp.c +++ b/subsys/net/l2/ethernet/arp.c @@ -531,7 +531,10 @@ static void arp_gratuitous_send(struct net_if *iface, NET_DBG("Sending gratuitous ARP pkt %p", pkt); - if (net_if_send_data(iface, pkt) == NET_DROP) { + /* send without timeout, so we do not risk being blocked by tx when + * being flooded + */ + if (net_if_try_send_data(iface, pkt, K_NO_WAIT) == NET_DROP) { net_pkt_unref(pkt); } } @@ -874,7 +877,7 @@ enum net_verdict net_arp_input(struct net_pkt *pkt, /* Send reply */ reply = arp_prepare_reply(net_pkt_iface(pkt), pkt, dst_hw_addr); if (reply) { - net_if_queue_tx(net_pkt_iface(reply), reply); + net_if_try_queue_tx(net_pkt_iface(reply), reply, K_NO_WAIT); } else { NET_DBG("Cannot send ARP reply"); }