Обновил сегодня модуль и что получаю.
Оператор открывает учетную запись этого абонента и нажимает кнопку "добавить мак". В поле мак-адрес вписывает мак абона и нажимает "сохранить". При этом после сохранения видно, что в поле "порт" и "мак устройства" добавились корректные данные (те, которые я написал выше device_mac и device_port)
mac не привязан
SELECT * FROM `mac_uid` WHERE mac='ec086bd996e7';
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+
| id | mac | ip | uid | time | device_mac | device_port | oneconnect |
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+
| 6434302 | ec086bd996e7 | 180489656 | 0 | 1518698735 | 0012cf7ef380 | 1/21 | 0 |
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+
Добавляю чисто мак, без указания устройства и порта. Как мы видим устройство и порт не подтягивается, а ip сохраняется тот который выдан.
SELECT * FROM `mac_uid` WHERE mac='ec086bd996e7';
+---------+--------------+-----------+-----+------------+------------+-------------+------------+
| id | mac | ip | uid | time | device_mac | device_port | oneconnect |
+---------+--------------+-----------+-----+------------+------------+-------------+------------+
| 6434377 | ec086bd996e7 | 180489656 | 4 | 1518698915 | | | 0 |
+---------+--------------+-----------+-----+------------+------------+-------------+------------+
Проходит аккаунтинг и что мы видим? Связка удалилась и ip поменялся.
SELECT * FROM `mac_uid` WHERE mac='ec086bd996e7';
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+
| id | mac | ip | uid | time | device_mac | device_port | oneconnect |
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+
| 6434377 | ec086bd996e7 | 180488872 | 0 | 1518699128 | 0012cf7ef380 | 1/21 | 0 |
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+
Дальше, если указать мак, устройство и порт. То все хорошо, подвязывается нужный ip и клиент работает без передергиваний.
SELECT * FROM `mac_uid` WHERE mac='ec086bd996e7';
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+
| id | mac | ip | uid | time | device_mac | device_port | oneconnect |
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+
| 6434454 | ec086bd996e7 | 180488872 | 4 | 1518699308 | 0012cf7ef380 | 1/21 | 0 |
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+
Если добавлять мак со всеми полями включая галку один на порту. То вываливается с ошибкой "Создание привязки не выполнено" и запись в mac_uid WHERE mac=? AND uid=0 затирается.
Debug
0.115583
181 Db.pm::rollback
rollback (fail: DELETE FROM mac_uid WHERE mac=? AND uid=0)
При повторном добавлении, добавляется но без ip. Клиентское устройство приходится передергивать.
SELECT * FROM `mac_uid` WHERE mac='ec086bd996e7';
+---------+--------------+----+-----+------+--------------+-------------+------------+
| id | mac | ip | uid | time | device_mac | device_port | oneconnect |
+---------+--------------+----+-----+------+--------------+-------------+------------+
| 6434656 | ec086bd996e7 | 0 | 4 | 0 | 0012cf7ef380 | 1/21 | 2 |
+---------+--------------+----+-----+------+--------------+-------------+------------+
Как я понимаю где-то не правильно учитывается oneconnect. Т.к. если галку не ставить то все добавляется успешно и ip правильный. Но в основном у всех один на порту. Поэтому это критично.
Так же забегая наперед, хотелось бы добавить функцию "один на устройстве" аналог один на порту, но учитывается только мак устройства при авторизации. Большая часть клиентов на pon так и работают, порт устройства прилетающего в опиции 82 меняется на 1, тем самым эмулируя "один на устройстве" хотя в реальности там есть физический номер порта который хотелось бы видеть в связке но не учитывать т.к. он меняется периодически.