Не получается передать много данных в модуль ядра iptables через расширение для iptables.
Модуль назвал iptable (таблица ip адресов) для фильтрации перебором. На входе имя файла списка IP c флагами SRC или DST
Ошибка при добавлении правила: dmesg: x_tables: ip_tables: iptable.1 match: invalid size 135176 (kernel) != (user) 4104
В модуле ядра объявлено:
struct xt_iptable_mtinfo {
        __u8 iptable0[0x10000]; 
        __u8 flags;
};
описано как:
static struct xt_match iptable_mt4_reg[] __read_mostly = {
        {
                .name      = "iptable",
                .revision  = 1,
                .family    = NFPROTO_IPV4,
                .match     = iptable_mt4,
                .matchsize = sizeof(struct xt_iptable_mtinfo),
                .me        = THIS_MODULE,
        },
};
Дальше расширение для iptables
libxt_iptables.c Повторное описание структуры:
struct ipt_iptable_info {
        __u8 iptable0[0x10000];
        /* Flags from above */
        __u8 flags;
};
static const struct xt_option_entry iptable_mt_opts[] =
{
        {.name = "src-maskfile",  .id = O_SRC_MASK, .type = XTTYPE_STRING, .flags = XTOPT_INVERT},
        {.name = "dst-maskfile",  .id = O_DST_MASK, .type = XTTYPE_STRING, .flags = XTOPT_INVERT},
        XTOPT_TABLEEND,
};
Описано:
static struct xtables_match iptable_mt_reg[] = {
        {
                .next          = NULL,
                .version       = XTABLES_VERSION,
                .name          = "iptable",
                .revision      = 1,
                .family        = NFPROTO_UNSPEC,
                .size          = XT_ALIGN(sizeof(struct ipt_iptable_info)),
                .userspacesize = XT_ALIGN(sizeof(struct ipt_iptable_info)),
                .help          = iptable_help,    
                .print         = iptable_print,   
                .parse         = iptable_parse, 
                .save          = iptable_save,   
                .x6_options    = iptable_mt_opts, 
                .final_check   = iptable_mt_check, 
        },
};
Зарегано:
xtables_register_matches(iptable_mt_reg, ARRAY_SIZE(iptable_mt_reg));
Почему то ядро хочет больший размер конфигурации, а iptables выдает мало. Как будто обрезает структуру при работе с libiptc.
Возможно связано с ограничениями системных вызовов или чем то другим. Может кто сталкивался с написанием match - ей.
