Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Register
  • Sign in
  • N noc
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Locked Files
  • Issues 453
    • Issues 453
    • List
    • Boards
    • Service Desk
    • Milestones
    • Iterations
    • Requirements
  • Merge requests 25
    • Merge requests 25
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
    • Test Cases
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Container Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Code review
    • Insights
    • Issue
    • Repository
  • External wiki
    • External wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • noc
  • noc
  • Issues
  • #1071
Closed
Open
Issue created Aug 04, 2019 by Dmitry Volodin@dvOwner

Extended MAC Discovery

Часто возникает задача определения точки подключения к сети для оконечных уствойств, таких как:

  • Видеокамеры
  • VOIP-телефоны
  • Принт-серверы
  • Рабочие станции
  • IoT-датчики

Часто устройства являются ограниченно управляемыми и не поддерживают топологические протоколы (lldp, cdp, etc). Последним методом автоматической линковки остается линковка по MAC-адресам. Существующий алгоритм линковки по MAC'ам работает на уровне сегмента и требует, чтобы линкуемое оборудование отдавало таблицу MAC'адресов, что в случае тупых оконечных устройств часто невозможно. В связи с этим предлагается дополнительный быстрый способ линковки по MAC'адресам.

Основной принцип

Вводится понятие "прямая линковка по MAC". Прямая линковка возможна, когда мы уверены, что между конкретным портом коммутатора доступа и конкретным портом оконечного устройства нет никаких промежуточных железок.

Для прямой линковки нам необходимо:

  • Промаркировать порты коммутатора доступа, как пригодные для прямой линковки
  • Промаркировать один порт оконечного устройства, как пригодный и предпочтительный для прямой линковки
  • Получить таблицу MAC'адресов с коммутатора доступа
  • Провести привязку портов

Расширение IGetInterfaces

В словаре interfaces добавляется дополнительный опциональный аттрибут:

"hints": StringListParameter(choices=[
  "uplink",
  "uni",
  "nni"
])

Поле hints позволяет разработчикам скрипта get_interfaces отдать дополнительную информацию об особенностях работы порта. Например, многие домашние wifi-роутеры имеют отдельный WAN-порт для подключения к сети Internet и блок LAN-портов, образующих внутренний простейший bridge. Порты не равноправны между собой и имеют разное назначение. Или VOIP-телефоны часто имеют один порт для подключения к сети и дополнительный порт для подкдючения компьютера.

Предлагаемые значения hints на первом этапе:

  • uplink - порт предназначен для подключения к вышестоящей сети
  • uni - user network interface. Порт для подключения конечных юзеров
  • nni - network-to-network interface. Внутрисетевой интерфейс

Расширение коллекции Interface

Добавляется поле hints и заполняем его по результатам interface discovery

Расширение ConfDB

Добавляем в синтаксисе раздел

interfaces
    <name>
       hints

Расширение Interface Classification Rule

Добавляется возможность указывать hints как условие для матчера

Расширение Interface Profile

Существующая настройка

mac_discovery_policy = StringField(
    choices=[("d", "Disabled"), ("m", "Management VLAN"), ("e", "Enabled")], default="d"
)

И заменяется на значения:

  • Disabled - отключено
  • Management VLAN - для совместимости
  • Transit - бывший Enabled
  • Direct Downlink - разрешить direct mac в роли порта коммутатора доступа
  • Chained Downlink - direct mac с возможностью построения цепочек
  • Direct Uplink - разрешить direct mac в роли оконечного устройства

Расширение MAC check

После сбора MAC'адресов, в случае, если на железке есть интерфейсы с признаком Direct Downlink или Chained Downlink сохраняем для этих портов артефакт mac_direct_downlink

Проверка mac_direct

Активируется, если существует артефакт mac_direct_downlink.

Для случая Direct Downlink:

  • Находим на всех портах оборудование по chassis id
  • Проверяем, что у него есть строго один порт direct uplink
  • Проверяем, что на один порт direct downlink приходится не более одного порта direct uplink
  • Осуществляем линковку методом direct mac. Если там уже есть direct_mac с другой железкой - заменяем
  • Все неподтвержденные линки direct mac отцепляем принудительно

Для случая Chained Downlink:

  • Если на порту не более одного MAC'а, то поведение эквивалентно Direct Downlink
  • Если больше одного MAC'а - проверям:
    • что для каждого из них существует строго один порт Direct Uplink
    • все объекты имеют разный level в managed object profile
  • Сортируем объекты по level в порядке убывания
  • Проверяем, что все объекты, кроме последнего, имеют строго один порт Direct Downlink
  • Собираем цепочки по принципу uplink/downlink методом direct mac. Если там уже есть direct_mac с другой железкой - заменяем
  • Все неподтвержденные линки direct mac отцепляем принудительно

direct uplink можно линковать только с direct downlink или с chained downlink

Замечания

@aversant

  • [Учтено, см. Chained Downlink] Ситуация при которой соединение выглядит как PC <-> Phone <-> Switch, как будет решаться. За портом будут светиться MAC адреса компьюетера и телефона, у PC будет один аплинк, у телефона будет 1 аплинк и 1 порт без подсказки. Вижу здесь 2 варианта:
    • ввести возможность одного промежуточного устройства (т.е. при которой мы за портом находим 2 устройства, и явно видно что одно линкуется через второе)
    • данный вариант реализовывать не прямой, а Cloud линковкой
  • mac_discovery_policy сейчас отввчает за сбор MAC адресов с интерфейса. Видимо, необходимо поменять её назначение, иначе получается двойственная ситуация, если я хочу собрать маки но не линковать, то такой опции нет.
  • Пункт Все неподтвержденные линки direct mac отцепляем принудительно, полагаю здесь стоит использовать механизм устаревания линков, иначе мы получим много флапов. Комп выключили на ночь и мы его разлинковали, железка упала и мы её разлинковали, это будет грустно
Assignee
Assign to
Time tracking