Это сообщение довольно тонкое; он даже не говорит вам, что на самом деле проблема.
Это как-то связано с фильтрацией источника многоадресной рассылки .
Обычно при многоадресной рассылке машина IPv4 присоединяется к группе многоадресной рассылки по протоколу IGMP - вот почему вы видите igmp
в строке журнала - который сообщает всему сетевому оборудованию вокруг него, что он хочет получить что-либо. отправлено в эту группу многоадресной рассылки. RFC3678 определяет способ изменить это, говоря такие вещи, как «... но только если он исходит из этого набора IP-адресов» или «... но не если он исходит из IP 1.2.3.4».
Почему вы должны видеть это на интернет-маршрутизаторе, меня сбивает с толку. Многоадресная рассылка обычно не работает через Интернет. Так всегда было задумано, но провайдеры и магистральные сети никогда не делали ничего, чтобы позволить это. (По той же причине, по которой мы все еще ждем IPv6, в нескольких минутах от полуночи IPv4.")
Поэтому, если вы точно не знаете, что у вас есть приложения, использующие многоадресную рассылку на этом маршрутизаторе, я бы посмотрел, есть ли способ просто отключить его.
Остерегайтесь, если этот маршрутизатор является чем-то вроде домашнего Комбинация Wi-Fi / коммутатор / маршрутизатор, вы, вероятно, не захотите отключать эту функцию. Вероятно, вы предотвратите многоадресную рассылку в локальной сети. Многоадресная рассылка в локальной сети все еще относительно редка по сравнению с широковещательной и одноадресной, но обычно привыкает незаметно, поэтому вы можете даже не знать, что используете его. В то время как вы можете быть совершенно уверены в том, используете ли вы многоадресную передачу через Интернет, потому что вам, вероятно, придется спросить своего интернет-провайдера, могут ли они и, чтобы включить его для вас, предполагается, что он всегда работает в локальных сетях, особенно в бизнес-классе. В результате многие бизнес-приложения просто предполагают, что они могут это сделать. Norton Ghost многоадресная рассылка изображений, например, при восстановлении фантомных изображений на нескольких машинах.
Частичный ответ:
Если ваш devmem
взят из busybox, он использует /dev/mem для чтения и записи значений, поэтому вы должны получить такие же результаты.
Тем не менее, обратите внимание, что единицей skip
являются блоки(bs
байтов ), поэтому bs=16 count=1 skip=2149646336
будет читаться не по адресу 0x80210000, а по адресу 0x802100000, что, вероятно, переносится на 0x02100000.
Поскольку MSB ваших пропусков равен единице, если где-то в исходном коде и/или компиляторе есть путаница со знаком/без знака, это также может все испортить.
Итак, первое, что я бы сделал, это проверил чтение по адресу 0x80210000, используя что-то вроде bs=16 skip=134352896
. Если это все еще не работает, второе, что я бы сделал, это написал небольшую программу на C, которая напрямую читает /dev/mem
и проверяет, работает ли и .
Это действительно ошибка знака(для версии busybox):
if (skip) {
if (lseek(ifd, skip * ibs, SEEK_CUR) < 0) {
do {
ssize_t n = safe_read(ifd, ibuf, ibs);
if (n < 0)
goto die_infile;
if (n == 0)
break;
} while (--skip != 0);
}
}
lseek()
возвращает смещение файла (2149646336 ), которое преобразуется в int32
, делая его отрицательным (-2145320960 ), поэтому dd
считает, что это код ошибки. Затем он считывает все байты из файла до заданного смещения, пытаясь реализовать базовый поиск. Это означает чтение всех байтов на шине от 0 до вашего адреса, что может привести только к неприятностям.
Вы можете попытаться исправить dd
, проверив, является ли возвращаемое значение допустимым кодом ошибки (что-то между -1 и -4095 ), но написание собственной программы на C, вероятно, будет быстрее, чем повторная компиляция busybox.
Кстати, devmem
использует mmap()
для чтения /dev/mem
, что немного отличается.