mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 17:12:50 -04:00
ipvlan: ipvlan_handle_mode_l2() refactoring
Reduce indentation level, and add a likely() clause as we expect to process more unicast packets than multicast ones. No functional change, this eases the following patch review. Signed-off-by: Eric Dumazet <edumazet@google.com> Link: https://patch.msgid.link/20260409085238.1122947-2-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
b258cba1e0
commit
441ec8b5bd
@@ -744,34 +744,32 @@ static rx_handler_result_t ipvlan_handle_mode_l3(struct sk_buff **pskb,
|
||||
static rx_handler_result_t ipvlan_handle_mode_l2(struct sk_buff **pskb,
|
||||
struct ipvl_port *port)
|
||||
{
|
||||
struct sk_buff *skb = *pskb;
|
||||
struct sk_buff *nskb, *skb = *pskb;
|
||||
struct ethhdr *eth = eth_hdr(skb);
|
||||
rx_handler_result_t ret = RX_HANDLER_PASS;
|
||||
|
||||
if (unlikely(skb->pkt_type == PACKET_LOOPBACK))
|
||||
return RX_HANDLER_PASS;
|
||||
|
||||
if (is_multicast_ether_addr(eth->h_dest)) {
|
||||
if (ipvlan_external_frame(skb, port)) {
|
||||
struct sk_buff *nskb = skb_clone(skb, GFP_ATOMIC);
|
||||
/* Perform like l3 mode for non-multicast packet */
|
||||
if (likely(!is_multicast_ether_addr(eth->h_dest)))
|
||||
return ipvlan_handle_mode_l3(pskb, port);
|
||||
|
||||
/* External frames are queued for device local
|
||||
* distribution, but a copy is given to master
|
||||
* straight away to avoid sending duplicates later
|
||||
* when work-queue processes this frame. This is
|
||||
* achieved by returning RX_HANDLER_PASS.
|
||||
*/
|
||||
if (nskb) {
|
||||
ipvlan_skb_crossing_ns(nskb, NULL);
|
||||
ipvlan_multicast_enqueue(port, nskb, false);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* Perform like l3 mode for non-multicast packet */
|
||||
ret = ipvlan_handle_mode_l3(pskb, port);
|
||||
/* External frames are queued for device local
|
||||
* distribution, but a copy is given to master
|
||||
* straight away to avoid sending duplicates later
|
||||
* when work-queue processes this frame.
|
||||
* This is achieved by returning RX_HANDLER_PASS.
|
||||
*/
|
||||
if (!ipvlan_external_frame(skb, port))
|
||||
return RX_HANDLER_PASS;
|
||||
|
||||
nskb = skb_clone(skb, GFP_ATOMIC);
|
||||
if (nskb) {
|
||||
ipvlan_skb_crossing_ns(nskb, NULL);
|
||||
ipvlan_multicast_enqueue(port, nskb, false);
|
||||
}
|
||||
|
||||
return ret;
|
||||
return RX_HANDLER_PASS;
|
||||
}
|
||||
|
||||
rx_handler_result_t ipvlan_handle_frame(struct sk_buff **pskb)
|
||||
|
||||
Reference in New Issue
Block a user