Можем ли мы иметь ноль в качестве идентификатора многоадресной группы netlink? - PullRequest
1 голос
/ 22 сентября 2019

Сбой 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;
}
...