Вопрос или проблема
Я довольно нов в сетевом программировании. Я работаю над реализацией IEEE1905.1 на C. Я понимаю, что также будут создаваться LLDPDU.
Но бывает так, что сосед получает два LLDPDU с одинаковым идентификатором шасси и идентификатором порта. Таким образом, удалённая таблица LLDP будет изменяться при получении LLDPDU на соседнем устройстве.
Это нормально или я могу отключить LLDPDU, создаваемые 1905.1?
int iLLDPStatus = GetLLDPModuleStatus();
int i1905Status = Get1905ModuleStatus();
if (LLDPStatus) /* LLDP включен */
{
SendLLDP(); /* Обязательные TLV и другие TLV (Dot1, Dot3, MED) */
}
else if (i1905Status) /* LLDP отключен, IEEE1905 включен */
{
SendLLDPfrom1905(); /* Только обязательные TLV */
}
Ответ или решение
Возможность отключения LLDPDU, создаваемых IEEE 1905.1
В контексте реализации IEEE 1905.1 на языке C, вы поднимаете важный вопрос о возможности отключения LLDPDU (Link Layer Discovery Protocol Data Units), которые могут конфликтовать с аналогичными пакетами, отправляемыми вашим устройством. Это может привести к проблемам в удаленной таблице LLDP, что, в свою очередь, затрудняет правильное определение соседей в сети.
Основные аспекты работы LLDP и IEEE 1905.1
-
LLDP и его назначение: LLDP — это протокол, который позволяет устройствам сети обмениваться информацией о своих идентификаторах, характеристиках и статусах. Он работает на канальном уровне и используется для построения базы данных соседних устройств.
-
IEEE 1905.1: Этот стандарт объединяет различные технологии сетевого взаимодействия, такие как Ethernet и Wi-Fi, что позволяет им работать совместно. IEEE 1905.1 также определяет свои собственные структуры данных и процессы обмена, включая возможность генерации LLDPDU.
Проблема дублирующихся LLDPDU
Как вы отметили, получение нескольких LLDPDU с одинаковыми идентификаторами шасси (Chassis ID) и порта (Port ID) может вызвать путаницу на стороне устройства-оппонента. Это может привести к некорректному обновлению таблицы соседей и, следовательно, к проблемам взаимодействия между устройствами.
Возможность отключения LLDPDU
В приведенном вами коде есть логика, которая контролирует, отправляются ли LLDPDU в зависимости от статуса модулей LLDP и IEEE 1905.1. Рассмотрим следующий фрагмент:
int iLLDPStatus = GetLLDPModuleStatus();
int i1905Status = Get1905ModuleStatus();
if (LLDPStatus) /* LLDP is enabled */
{
SendLLDP(); /* Mandatory TLVs and Other TLVs(Dot1, DOt3, MED) */
}
else if (i1905Status) /* LLDP is disabled, IEEE1905 is enabled */
{
SendLLDPfrom1905(); /* Mandatory TLVs only */
}
В этом коде вы видите, что при включенном LLDP отправляются полные LLDPDU. Если LLDP отключен, но включен 1905.1, отправляются только обязательные TLV (Type-Length-Value) без дополнительных данных LLDP. Это означает, что вы уже имеете механизм для управления отправкой LLDPDU.
Рекомендации по реализации
-
Отключение LLDPDU в IEEE 1905.1: Убедитесь, что ваша логика правильно обрабатывает варианты, чтобы избежать дублирования информации. Если LLDP включает в себя обширные и дополнительные TLV, может быть полезно применение простой логики для отправки только нужных пакетов.
-
Конфигурация сети: Если дублирование LLDPDU становится серьезной проблемой, рассмотрите возможность настройки сети, чтобы согласовать параметры протоколов между устройствах. Например, если некоторые устройства работают только с IEEE 1905.1, целесообразно автоматически отключить генерирование LLDPDU.
-
Тестирование: Обязательно проведите тестирование сценариев, чтобы удостовериться, что статус LLDP и 1905.1 работает как планировалось, и что конфликты не вызывают проблем на других устройствах.
Заключение
Ваша реализация позволяет контролировать создание LLDPDU в зависимости от статуса LLDP и IEEE 1905.1. Отключение ненужных LLDPDU может помочь избежать путаницы на уровне соседей и повысить общую стабильность вашей сети. Обязательно учитывайте настройки и требования всех устройств в вашей сети для достижения наилучших результатов.