net-next: add dev_loopback_xmit() to avoid duplicate code
Add dev_loopback_xmit() in order to deduplicate functions ip_dev_loopback_xmit() (in net/ipv4/ip_output.c) and ip6_dev_loopback_xmit() (in net/ipv6/ip6_output.c). I was about to reinvent the wheel when I noticed that ip_dev_loopback_xmit() and ip6_dev_loopback_xmit() do exactly what I need and are not IP-only functions, but they were not available to reuse elsewhere. ip6_dev_loopback_xmit() does not have line "skb_dst_force(skb);", but I understand that this is harmless, and should be in dev_loopback_xmit(). Signed-off-by: Michel Machado <michel@digirati.com.br> CC: "David S. Miller" <davem@davemloft.net> CC: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru> CC: James Morris <jmorris@namei.org> CC: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org> CC: Patrick McHardy <kaber@trash.net> CC: Eric Dumazet <edumazet@google.com> CC: Jiri Pirko <jpirko@redhat.com> CC: "Michał Mirosław" <mirq-linux@rere.qmqm.pl> CC: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
de063b7040
commit
95603e2293
@@ -2475,6 +2475,23 @@ static void skb_update_prio(struct sk_buff *skb)
|
||||
static DEFINE_PER_CPU(int, xmit_recursion);
|
||||
#define RECURSION_LIMIT 10
|
||||
|
||||
/**
|
||||
* dev_loopback_xmit - loop back @skb
|
||||
* @skb: buffer to transmit
|
||||
*/
|
||||
int dev_loopback_xmit(struct sk_buff *skb)
|
||||
{
|
||||
skb_reset_mac_header(skb);
|
||||
__skb_pull(skb, skb_network_offset(skb));
|
||||
skb->pkt_type = PACKET_LOOPBACK;
|
||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
WARN_ON(!skb_dst(skb));
|
||||
skb_dst_force(skb);
|
||||
netif_rx_ni(skb);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(dev_loopback_xmit);
|
||||
|
||||
/**
|
||||
* dev_queue_xmit - transmit a buffer
|
||||
* @skb: buffer to transmit
|
||||
|
||||
Reference in New Issue
Block a user