Что отвечает за настройку широковещательного адреса по умолчанию?
Широковещательный адрес, по-видимому, неправильно настроен на каком-то (старом) встроенном устройстве 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.
Если вы не можете получить какие-либо новые двоичные файлы на коробке, то на самом деле вы ничего не можете сделать, кроме как установить для трансляции правильное значение самостоятельно.