2023-04-05

amarao: (Default)
2023-04-05 04:14 pm

namespace у NETLINK_GENERIC

СЯУ что если открыть сокет в netlink, то этот сокет фиксирует namespace, в котором всё было сделано, и последующие unshare на него не действуют. То есть если процесс форкнуть или новый сокет открыть, то на них действуют (включая банальный exec для ping), а вот содержимое интерфейсов через уже открытый (до смены namespace) сокет - старое.

Задним числом очевидно, но я это выяснял 2 часа, ибо на попытку добавить роут pr2modules.netlink.exceptions.NetlinkError: (101, 'Network is unreachable'), а руками все роуты добавлялись.

А причина простая - чтобы пореже раздалбывать себе сеть, все тесты - в namespace, а фикстура с сокетом создаётся до этого. Получается не очень.

Решение - поменять scope у фикстуры с session на function.