namespace у NETLINK_GENERIC
Apr. 5th, 2023 04:14 pmСЯУ что если открыть сокет в netlink, то этот сокет фиксирует namespace, в котором всё было сделано, и последующие unshare на него не действуют. То есть если процесс форкнуть или новый сокет открыть, то на них действуют (включая банальный exec для ping), а вот содержимое интерфейсов через уже открытый (до смены namespace) сокет - старое.
Задним числом очевидно, но я это выяснял 2 часа, ибо на попытку добавить роут pr2modules.netlink.exceptions.NetlinkError: (101, 'Network is unreachable'), а руками все роуты добавлялись.
А причина простая - чтобы пореже раздалбывать себе сеть, все тесты - в namespace, а фикстура с сокетом создаётся до этого. Получается не очень.
Решение - поменять scope у фикстуры с session на function.
Задним числом очевидно, но я это выяснял 2 часа, ибо на попытку добавить роут pr2modules.netlink.exceptions.NetlinkError: (101, 'Network is unreachable'), а руками все роуты добавлялись.
А причина простая - чтобы пореже раздалбывать себе сеть, все тесты - в namespace, а фикстура с сокетом создаётся до этого. Получается не очень.
Решение - поменять scope у фикстуры с session на function.