include/net/netfilter/nf_dup_netdev.h

Source file repositories/reference/linux-study-clean/include/net/netfilter/nf_dup_netdev.h

File Facts

System
Linux kernel
Corpus path
include/net/netfilter/nf_dup_netdev.h
Extension
.h
Size
1289 bytes
Lines
54
Domain
Networking Core
Bucket
Sockets, Protocols, Packet Path, And Network Policy
Inferred role
Networking Core: implementation source
Status
source implementation candidate

Why This File Exists

Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.

Dependency Surface

Detected Declarations

Annotated Snippet

#ifndef _NF_DUP_NETDEV_H_
#define _NF_DUP_NETDEV_H_

#include <net/netfilter/nf_tables.h>
#include <linux/netdevice.h>
#include <linux/sched.h>

void nf_dup_netdev_egress(const struct nft_pktinfo *pkt, int oif);
void nf_fwd_netdev_egress(const struct nft_pktinfo *pkt, int oif);

#define NF_RECURSION_LIMIT	2

#ifndef CONFIG_PREEMPT_RT
static inline bool nf_dev_xmit_recursion(void)
{
	return unlikely(__this_cpu_read(softnet_data.xmit.nf_dup_skb_recursion) >
			NF_RECURSION_LIMIT);
}

static inline void nf_dev_xmit_recursion_inc(void)
{
	__this_cpu_inc(softnet_data.xmit.nf_dup_skb_recursion);
}

static inline void nf_dev_xmit_recursion_dec(void)
{
	__this_cpu_dec(softnet_data.xmit.nf_dup_skb_recursion);
}
#else
static inline bool nf_dev_xmit_recursion(void)
{
	return unlikely(current->net_xmit.nf_dup_skb_recursion > NF_RECURSION_LIMIT);
}

static inline void nf_dev_xmit_recursion_inc(void)
{
	current->net_xmit.nf_dup_skb_recursion++;
}

static inline void nf_dev_xmit_recursion_dec(void)
{
	current->net_xmit.nf_dup_skb_recursion--;
}
#endif

struct nft_offload_ctx;
struct nft_flow_rule;

int nft_fwd_dup_netdev_offload(struct nft_offload_ctx *ctx,
			       struct nft_flow_rule *flow,
			       enum flow_action_id id, int oif);
#endif

Annotation

Implementation Notes