Я пытаюсь настроить старый модуль ядра (написанный для ядра 2.6.x) для ядра 4.6.x.
Код имеет объявление структуры, как показано ниже:
struct tcpsp_sysctl_table {
struct ctl_table_header *sysctl_header;
struct ctl_table tcpsp_vars[NET_TCPSP_LAST];
struct ctl_table tcpsp_dir[2];
struct ctl_table root_dir[2];
};
Инициализация структуры записывается как:
static struct tcpsp_sysctl_table tcpsp_table = {
NULL,
{{NET_TCPSP_TO_ES, "timeout_established",
&tcpsp_timeout_tbl.timeout[TCPSP_S_ESTABLISHED],
sizeof(int), 0644, NULL, &proc_dointvec_jiffies},
{NET_TCPSP_TO_SS, "timeout_synsent",
&tcpsp_timeout_tbl.timeout[TCPSP_S_SYN_SENT],
sizeof(int), 0644, NULL, &proc_dointvec_jiffies},
{NET_TCPSP_TO_SR, "timeout_synrecv",
&tcpsp_timeout_tbl.timeout[TCPSP_S_SYN_RECV],
sizeof(int), 0644, NULL, &proc_dointvec_jiffies},
{NET_TCPSP_TO_FW, "timeout_finwait",
&tcpsp_timeout_tbl.timeout[TCPSP_S_FIN_WAIT],
sizeof(int), 0644, NULL, &proc_dointvec_jiffies},
{NET_TCPSP_TO_TW, "timeout_timewait",
&tcpsp_timeout_tbl.timeout[TCPSP_S_TIME_WAIT],
sizeof(int), 0644, NULL, &proc_dointvec_jiffies},
{NET_TCPSP_TO_CL, "timeout_close",
&tcpsp_timeout_tbl.timeout[TCPSP_S_CLOSE],
sizeof(int), 0644, NULL, &proc_dointvec_jiffies},
{NET_TCPSP_TO_CW, "timeout_closewait",
&tcpsp_timeout_tbl.timeout[TCPSP_S_CLOSE_WAIT],
sizeof(int), 0644, NULL, &proc_dointvec_jiffies},
{NET_TCPSP_TO_LA, "timeout_lastack",
&tcpsp_timeout_tbl.timeout[TCPSP_S_LAST_ACK],
sizeof(int), 0644, NULL, &proc_dointvec_jiffies},
{NET_TCPSP_TO_LI, "timeout_listen",
&tcpsp_timeout_tbl.timeout[TCPSP_S_LISTEN],
sizeof(int), 0644, NULL, &proc_dointvec_jiffies},
{NET_TCPSP_TO_SA, "timeout_synack",
&tcpsp_timeout_tbl.timeout[TCPSP_S_SYNACK],
sizeof(int), 0644, NULL, &proc_dointvec_jiffies},
{NET_TCPSP_DEBUG_LEVEL, "debug_level",
&sysctl_tcpsp_debug_level, sizeof(int), 0644, NULL,
&proc_dointvec},
{0}},
{{NET_TCPSP, "tcpsp", NULL, 0, 0555, tcpsp_table.tcpsp_vars},
{0}},
{{CTL_NET, "net", NULL, 0, 0555, tcpsp_table.tcpsp_dir},
{0}}
};
Когда я компилирую модули, я получаю ошибку, связанную с этими строками кода:
Ошибка: позиционная инициализация поля в'struct' объявлена с атрибутом обозначено_init [-Werror = обозначено-init]
{{NET_TCPSP_TO_ES, "timeout_established",
Это связано с новым программированием в стиле C или существуетлюбая проблема синтаксиса.Я не могу понять, что происходит.