web/user/_dhcp.pl вызывается когда абон с неизвестным маком попал на заглушку и дальше ввел корректный пароль. Биллинг знает, что такой-то ip в данный момент принадлежит этому залогиненному клиенту. Просто к слову скажу, что он не создает "привязку к ip" или "привязку ip к мак" - в данный момент ip это просто связующее звено чтобы получить мак. И вот мак привязывается уже к учетке. Я это несколько раз повторял, просто и сейчас повторю от фонаря на память.
Далее в коде встречается:
my $rows = Db->do("UPDATE mac_uid SET uid=0 WHERE uid=? AND ip<>INET_ATON(?)", $uid, $ses::ip);
переводится так: обнулить все id абонов на связках, где иной ip чем текущий.
Другими словами, я делал чтобы на одной учетке был привязан только один мак. Я уже абсолютно точно не помню нахуа, но скорее всего для того чтобы юзеры не могли напривязывать много маков, возможно для каки-то жульничеств.
Но. Потом я эту строку закомментировал. Так что проверь не раскомментирована ли она у тебя
Возможно, где-то еще обнуляется, но там уже гляну позже