net/netfilter/nft_bitwise.c
Source file repositories/reference/linux-study-clean/net/netfilter/nft_bitwise.c
File Facts
- System
- Linux kernel
- Corpus path
net/netfilter/nft_bitwise.c- Extension
.c- Size
- 13288 bytes
- Lines
- 555
- 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.
- Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/kernel.hlinux/init.hlinux/module.hlinux/netlink.hlinux/netfilter.hlinux/netfilter/nf_tables.hnet/netfilter/nf_tables_core.hnet/netfilter/nf_tables.hnet/netfilter/nf_tables_offload.h
Detected Declarations
struct nft_bitwisefunction nft_bitwise_eval_mask_xorfunction nft_bitwise_eval_lshiftfunction nft_bitwise_eval_rshiftfunction nft_bitwise_eval_andfunction nft_bitwise_eval_orfunction nft_bitwise_eval_xorfunction nft_bitwise_evalfunction nft_bitwise_init_mask_xorfunction nft_bitwise_init_shiftfunction nft_bitwise_init_boolfunction nft_bitwise_initfunction nft_bitwise_dump_mask_xorfunction nft_bitwise_dump_shiftfunction nft_bitwise_dump_boolfunction nft_bitwise_dumpfunction nft_bitwise_offloadfunction nft_bitwise_extract_u32_datafunction nft_bitwise_fast_initfunction nft_bitwise_fast_dumpfunction nft_bitwise_fast_offloadfunction nft_bitwise_select_ops
Annotated Snippet
struct nft_bitwise {
u8 sreg;
u8 sreg2;
u8 dreg;
enum nft_bitwise_ops op:8;
u8 len;
struct nft_data mask;
struct nft_data xor;
struct nft_data data;
};
static void nft_bitwise_eval_mask_xor(u32 *dst, const u32 *src,
const struct nft_bitwise *priv)
{
unsigned int i;
for (i = 0; i < DIV_ROUND_UP(priv->len, sizeof(u32)); i++)
dst[i] = (src[i] & priv->mask.data[i]) ^ priv->xor.data[i];
}
static void nft_bitwise_eval_lshift(u32 *dst, const u32 *src,
const struct nft_bitwise *priv)
{
u32 shift = priv->data.data[0];
unsigned int i;
u32 carry = 0;
for (i = DIV_ROUND_UP(priv->len, sizeof(u32)); i > 0; i--) {
u32 tmp_src = src[i - 1];
dst[i - 1] = (tmp_src << shift) | carry;
carry = tmp_src >> (BITS_PER_TYPE(u32) - shift);
}
}
static void nft_bitwise_eval_rshift(u32 *dst, const u32 *src,
const struct nft_bitwise *priv)
{
u32 shift = priv->data.data[0];
unsigned int i;
u32 carry = 0;
for (i = 0; i < DIV_ROUND_UP(priv->len, sizeof(u32)); i++) {
u32 tmp_src = src[i];
dst[i] = carry | (tmp_src >> shift);
carry = tmp_src << (BITS_PER_TYPE(u32) - shift);
}
}
static void nft_bitwise_eval_and(u32 *dst, const u32 *src, const u32 *src2,
const struct nft_bitwise *priv)
{
unsigned int i, n;
for (i = 0, n = DIV_ROUND_UP(priv->len, sizeof(u32)); i < n; i++)
dst[i] = src[i] & src2[i];
}
static void nft_bitwise_eval_or(u32 *dst, const u32 *src, const u32 *src2,
const struct nft_bitwise *priv)
{
unsigned int i, n;
for (i = 0, n = DIV_ROUND_UP(priv->len, sizeof(u32)); i < n; i++)
dst[i] = src[i] | src2[i];
}
static void nft_bitwise_eval_xor(u32 *dst, const u32 *src, const u32 *src2,
const struct nft_bitwise *priv)
{
unsigned int i, n;
for (i = 0, n = DIV_ROUND_UP(priv->len, sizeof(u32)); i < n; i++)
dst[i] = src[i] ^ src2[i];
}
void nft_bitwise_eval(const struct nft_expr *expr,
struct nft_regs *regs, const struct nft_pktinfo *pkt)
{
const struct nft_bitwise *priv = nft_expr_priv(expr);
const u32 *src = ®s->data[priv->sreg], *src2;
u32 *dst = ®s->data[priv->dreg];
if (priv->op == NFT_BITWISE_MASK_XOR) {
nft_bitwise_eval_mask_xor(dst, src, priv);
return;
}
if (priv->op == NFT_BITWISE_LSHIFT) {
nft_bitwise_eval_lshift(dst, src, priv);
Annotation
- Immediate include surface: `linux/kernel.h`, `linux/init.h`, `linux/module.h`, `linux/netlink.h`, `linux/netfilter.h`, `linux/netfilter/nf_tables.h`, `net/netfilter/nf_tables_core.h`, `net/netfilter/nf_tables.h`.
- Detected declarations: `struct nft_bitwise`, `function nft_bitwise_eval_mask_xor`, `function nft_bitwise_eval_lshift`, `function nft_bitwise_eval_rshift`, `function nft_bitwise_eval_and`, `function nft_bitwise_eval_or`, `function nft_bitwise_eval_xor`, `function nft_bitwise_eval`, `function nft_bitwise_init_mask_xor`, `function nft_bitwise_init_shift`.
- Atlas domain: Networking Core / Sockets, Protocols, Packet Path, And Network Policy.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.