| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- --- /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 */
|