Что отвечает за настройку широковещательного адреса по умолчанию?

Широковещательный адрес, по-видимому, неправильно настроен на каком-то (старом) встроенном устройстве Linux, которое я настраивал (но больше не владею им), потому что оно не соответствует ожидаемому значению, учитывая IP-адрес и маску сети (например, оно имеет передача 192.168.70.255 вместо 192.168.71.255 для 192.168.70.243/255.255.254.0). Он запускает ядро ​​2.4.31 с busybox 0.60.5. Конфигурация сети просто выполняется с помощью этого фрагмента оболочки:

ifconfig eth0 $IPADDR netmask $NETMASK
if [ -n "$GATEWAY" ]; then
    route add default gw $GATEWAY
fi

Таким образом, широковещательный адрес явно не настроен. Вопрос в том, что ответственно за это плохое поведение? Это ifconfig busybox, который не устанавливает широковещательный адрес правильно, или это ядро, которое настроило его плохо?

Примечание: возможно, что ни один из них не несет ответственности, но что-то еще мешает в процессе загрузки (и плохо его перенастраивает), поскольку на устройстве работает пользовательское программное обеспечение, которое я не знаю. Я получу больше информации, как только получу их.

4 ответа

Решение

Начало расследования по теме, которую я обнаружил с strace что изменение адреса трансляции с ifconfig приводит к дополнительному ioctl() вызов (SIOCSIFBRDADDR - Установите InterFace BRoadcast ADDRess), который не появляется на обычной трассировке, если вы пропустите параметр широковещания. Таким образом, похоже, что ifconfig не работает с широковещательным адресом в случае по умолчанию и оставляет это на усмотрение ядра.

Возможно ли, что широковещательная рассылка генерируется динамически из комбинации IP/Mask и что вы на самом деле неправильно ввели маску сети?

Держу пари, это не ядро.

Если у вас есть доступ оболочки к машине, попробуйте рекурсивно выполнить поиск в /etc для этой строки:

  grep -R "192.168.70.255" * 

Это должно сказать вам, где конфиг, который нужно изменить.

На самом деле, прочитав вопрос на этот раз, моя внутренняя реакция заключается в том, что проблема заключается в том, что BusyBox делает неправильные предположения или, возможно, живет в какой-то параллельной вселенной, где классовая маршрутизация не исчезла. Вы не говорите, сколько лет ядру или busybox, но вы можете проверить, в чем виновата ошибка, если сможете получить более свежую версию busybox, копию ip или strace на коробке. ip или более новый busybox позволят вам установить ip и маску сети с помощью инструмента с известным хорошим поведением. Если это все еще не так, это, вероятно, ядро. Если это правильно, это busybox. С помощью strace вы можете увидеть, что делает syscalls busybox.

Если вы не можете получить какие-либо новые двоичные файлы на коробке, то на самом деле вы ничего не можете сделать, кроме как установить для трансляции правильное значение самостоятельно.

Другие вопросы по тегам