コード例 #1
0
ファイル: nft_redir_ipv6.c プロジェクト: AshishNamdev/linux
static void nft_redir_ipv6_eval(const struct nft_expr *expr,
				struct nft_regs *regs,
				const struct nft_pktinfo *pkt)
{
	struct nft_redir *priv = nft_expr_priv(expr);
	struct nf_nat_range range;

	memset(&range, 0, sizeof(range));
	if (priv->sreg_proto_min) {
		range.min_proto.all =
			*(__be16 *)&regs->data[priv->sreg_proto_min],
		range.max_proto.all =
			*(__be16 *)&regs->data[priv->sreg_proto_max],
		range.flags |= NF_NAT_RANGE_PROTO_SPECIFIED;
	}

	range.flags |= priv->flags;

	regs->verdict.code =
		nf_nat_redirect_ipv6(pkt->skb, &range, nft_hook(pkt));
}
コード例 #2
0
ファイル: nft_redir_ipv6.c プロジェクト: Abioy/kasan
static void nft_redir_ipv6_eval(const struct nft_expr *expr,
				struct nft_data data[NFT_REG_MAX + 1],
				const struct nft_pktinfo *pkt)
{
	struct nft_redir *priv = nft_expr_priv(expr);
	struct nf_nat_range range;
	unsigned int verdict;

	memset(&range, 0, sizeof(range));
	if (priv->sreg_proto_min) {
		range.min_proto.all =
			*(__be16 *)&data[priv->sreg_proto_min].data[0];
		range.max_proto.all =
			*(__be16 *)&data[priv->sreg_proto_max].data[0];
		range.flags |= NF_NAT_RANGE_PROTO_SPECIFIED;
	}

	range.flags |= priv->flags;

	verdict = nf_nat_redirect_ipv6(pkt->skb, &range, pkt->ops->hooknum);
	data[NFT_REG_VERDICT].verdict = verdict;
}
コード例 #3
0
ファイル: xt_REDIRECT.c プロジェクト: 020gzh/linux
static unsigned int
redirect_tg6(struct sk_buff *skb, const struct xt_action_param *par)
{
	return nf_nat_redirect_ipv6(skb, par->targinfo, par->hooknum);
}