Сбой genl_bind (), я использую ядро linux 4.12.В этом коде я вижу, что условие никогда не выполняется -
if (group >= f->mcgrp_offset &&
group < f->mcgrp_offset + f->n_mcgrps)
Кроме того, указатель функции -> mcast_bind всегда равен нулю.Я не уверен, что мне здесь не хватает.Я вижу, что группа 1 проходит.Мой вопрос для многоадресной сети Netlink мы можем иметь ноль в качестве идентификатора группы многоадресной рассылки.Я не уверен, что мне здесь не хватает.Мой код пространства ядра имеет группу mcast, равную нулю, а приложение пространства пользователя имеет nl.group = 0xffff.Это проблема?Должны ли мы иметь только ненулевой идентификатор группы?Почему я получаю ошибку привязки, если здесь есть проблема.Какой идентификатор группы я должен использовать, который не зарезервирован ядром?
static int genl_bind(struct net *net, int group)
{
struct genl_family *f;
int err = -ENOENT;
unsigned int id;
down_read(&cb_lock);
idr_for_each_entry(&genl_fam_idr, f, id) {
if (group >= f->mcgrp_offset &&
group < f->mcgrp_offset + f->n_mcgrps) {
int fam_grp = group - f->mcgrp_offset;
if (!f->netnsok && net != &init_net)
err = -ENOENT;
else if (f->mcast_bind)
err = f->mcast_bind(net, fam_grp);
else
err = 0;
break;
}
}
up_read(&cb_lock);
return err;
}