LINUX.ORG.RU

network namespaces: выделение и хранение ID

 , ,


0

1

Читаю код в net/core/net_namespace.c который отвечает за присвоение netns уникального ID:

   rtnl_net_newid()
      -> nsid = nla_get_s32(tb[NETNSA_NSID]);
      -> alloc_netid(net, peer, nsid);
           -> idr_alloc(&net->netns_ids, peer, ...);
      -> rtnl_net_notifyid(net, RTM_NEWNSID, err);

То есть этот код выполняется в ответ на:

$ ip netns add ns1
$ ip netns set ns1 789

Однако я не нашел в коде, где именно хранится аллоцированный ID, то есть нигде в 'struct net' nsid не сохраняют явным образом. В таком случае, где его хранят?

★★

lib/idr.c:

/**
 * idr_alloc - allocate new idr entry
 * @idr: the (initialized) idr
 * @ptr: pointer to be associated with the new id
 * @start: the minimum id (inclusive)
 * @end: the maximum id (exclusive, <= 0 for max)
 * @gfp_mask: memory allocation flags
 *
 * [...]
 */
int idr_alloc(struct idr *idr, void *ptr, int start, int end, gfp_t gfp_mask)

@idr: the (initialized) idr

idr_alloc(&net->netns_ids, peer, ...)

net->netns_ids

Не?

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

То есть ID как-то «ассоциируется» с объектом-указателем, который в данном случае «struct net *peer» ?

cruz7 ★★
() автор топика
Ответ на: комментарий от cruz7

Там написано, что это:

Small id to pointer translation service.
Из функций есть idr_for_each(), который видимо и используется для «получения» id (он в callback передаётся).

xaizek ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.