mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 14:04:26 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- /dev/null
 | |
| +++ b/extensions/libxt_FLOWOFFLOAD.c
 | |
| @@ -0,0 +1,72 @@
 | |
| +#include <stdio.h>
 | |
| +#include <xtables.h>
 | |
| +#include <linux/netfilter/xt_FLOWOFFLOAD.h>
 | |
| +
 | |
| +enum {
 | |
| +    O_HW,
 | |
| +};
 | |
| +
 | |
| +static void offload_help(void)
 | |
| +{
 | |
| +	printf(
 | |
| +"FLOWOFFLOAD target options:\n"
 | |
| +" --hw				Enable hardware offload\n"
 | |
| +	);
 | |
| +}
 | |
| +
 | |
| +static const struct xt_option_entry offload_opts[] = {
 | |
| +	{.name = "hw", .id = O_HW, .type = XTTYPE_NONE},
 | |
| +	XTOPT_TABLEEND,
 | |
| +};
 | |
| +
 | |
| +static void offload_parse(struct xt_option_call *cb)
 | |
| +{
 | |
| +	struct xt_flowoffload_target_info *info = cb->data;
 | |
| +
 | |
| +	xtables_option_parse(cb);
 | |
| +	switch (cb->entry->id) {
 | |
| +	case O_HW:
 | |
| +		info->flags |= XT_FLOWOFFLOAD_HW;
 | |
| +		break;
 | |
| +	}
 | |
| +}
 | |
| +
 | |
| +static void offload_print(const void *ip, const struct xt_entry_target *target, int numeric)
 | |
| +{
 | |
| +	const struct xt_flowoffload_target_info *info =
 | |
| +		(const struct xt_flowoffload_target_info *)target->data;
 | |
| +
 | |
| +	printf(" FLOWOFFLOAD");
 | |
| +	if (info->flags & XT_FLOWOFFLOAD_HW)
 | |
| +		printf(" hw");
 | |
| +}
 | |
| +
 | |
| +static void offload_save(const void *ip, const struct xt_entry_target *target)
 | |
| +{
 | |
| +	const struct xt_flowoffload_target_info *info =
 | |
| +		(const struct xt_flowoffload_target_info *)target->data;
 | |
| +
 | |
| +	if (info->flags & XT_FLOWOFFLOAD_HW)
 | |
| +		printf(" --hw");
 | |
| +}
 | |
| +
 | |
| +static struct xtables_target offload_tg_reg[] = {
 | |
| +	{
 | |
| +		.family		= NFPROTO_UNSPEC,
 | |
| +		.name		= "FLOWOFFLOAD",
 | |
| +		.revision	= 0,
 | |
| +		.version	= XTABLES_VERSION,
 | |
| +		.size		= XT_ALIGN(sizeof(struct xt_flowoffload_target_info)),
 | |
| +		.userspacesize	= sizeof(struct xt_flowoffload_target_info),
 | |
| +		.help		= offload_help,
 | |
| +		.print		= offload_print,
 | |
| +		.save		= offload_save,
 | |
| +		.x6_parse	= offload_parse,
 | |
| +		.x6_options	= offload_opts,
 | |
| +	},
 | |
| +};
 | |
| +
 | |
| +void _init(void)
 | |
| +{
 | |
| +	xtables_register_targets(offload_tg_reg, ARRAY_SIZE(offload_tg_reg));
 | |
| +}
 | |
| --- /dev/null
 | |
| +++ b/include/linux/netfilter/xt_FLOWOFFLOAD.h
 | |
| @@ -0,0 +1,17 @@
 | |
| +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
 | |
| +#ifndef _XT_FLOWOFFLOAD_H
 | |
| +#define _XT_FLOWOFFLOAD_H
 | |
| +
 | |
| +#include <linux/types.h>
 | |
| +
 | |
| +enum {
 | |
| +	XT_FLOWOFFLOAD_HW	= 1 << 0,
 | |
| +
 | |
| +	XT_FLOWOFFLOAD_MASK	= XT_FLOWOFFLOAD_HW
 | |
| +};
 | |
| +
 | |
| +struct xt_flowoffload_target_info {
 | |
| +	__u32 flags;
 | |
| +};
 | |
| +
 | |
| +#endif /* _XT_FLOWOFFLOAD_H */
 |