Opened 4 years ago

Closed 4 years ago

#347 closed задача (готово)

Описание ПО MC04-DSL-VIP.

Reported by: mixyil1.1 Owned by: alx
Priority: средний Milestone:
Component: any Keywords:
Cc:

Description (last modified by mixyil1.1)

Еще несколько вопросов от института "Агат" по MC04-DSL-VIP.

1.Пояснить, для чего используются функции void ua_reload_ssl_cert() и bool createWebAdmin().
2.Дать разъяснение и подробное описание главных функций (main) в файлах fpgactl.cpp, i2c.cpp, sip_ua.cpp, spictl.cpp.
3.Привести описание функции void vmy_log(unsigned int source, int priority, const char *message, va_list ap) и назначение функций int getRestartTime(), static void restart_callback(void *data), static void restartSetupCallback(void *data), void cmd_restart(const Json &request, Json &response), void cmd_reboot(const Json &request, Json &response).
4.Дать пояснение, зачем в функции void my_log(unsigned int source, int priority, const char *message, ...) используется переменное количество параметров.
5.В изделии использован ряд библиотек с открытым доступом к исходному коду, необходимо указать те их них, в которые были внесены изменения, а также те, что остались нетронутыми и использованы в том виде, в котором они были загружены из официальных репозиториев.
6.В изделии используется загрузчик u-Boot, нет информации о том, были ли произведены какие-либо манипуляции с исходным кодом загрузчика и их влияние на безопасность информации.

Change History (9)

comment:1 by mixyil1.1, 4 years ago

Description: modified (diff)
Summary: Описание ПО VE-02.Описание ПО MC04-DSL-VIP.

comment:2 by mixyil1.1, 4 years ago

Component: VE-02any

in reply to:  description ; comment:3 by alx, 4 years ago

Replying to mixyil1.1:

1.Пояснить, для чего используются функции void ua_reload_ssl_cert() и bool createWebAdmin().

Функция ua_reload_ssl_cert() не используется ни для чего.

createWebAdmin() - перегруженный метод класса MyReproRunner. Его назначение - не создавать веб-сервер repro, который создает метод createWebAdmin() базового класса ReproRunner. Веб-сервер repro нам не нужен, так как у блока MC04-DSL-VIP имеется собственный веб-сервер.

2.Дать разъяснение и подробное описание главных функций (main) в файлах fpgactl.cpp, i2c.cpp, sip_ua.cpp, spictl.cpp.

Непонятно, что именно просит разъяснить институт "Агат" по поводу данных функций. Попроси их, пожалуйста, уточнить вопрос. Описание даю:

fpgactl.cpp:

Сначала main() выполняет парсинг аргументов командной строки. Если в аргументах имеется опция -h, выдается справка и выполнение завершается. Если опции -h нет, проверяется наличие среди аргуметов имени файла. Если имя файла задано, выполняется конфигурация ПЛИС из указанного файла.

i2c.cpp:

Сначала main() проверяет число аргументов командной строки, и если их недостаточно, выдает справку и завершается. Затем выполняется проверка первого аргумента.

  • Если первый аргумент - "read", выполняется чтение из устройства и регистра, адреса которых заданы вторым и третьим аргументами соответственно.
  • Есла первый аргумент - "write", выполняется запись значения, указанного в четвертом аргументе, в устройство и регистр, адреса которых заданы вторым и третьим аргументами соответственно.

sip_ua.cpp:

Фукнция main() выполняет следующее:

  • Устанавливается обработчик сигналов SIGTERM и SIGINT.
  • Устанавливается игнорирование сигнала SIGPIPE.
  • Выполняется парсинг аргументов командной строки. Если присутствует опция -h, выдается справка и фукнция завершается.
  • Проверяется, нет ли уже запущенного провесса sip_ua: если имеется pid-файл, и указанный в нем процесс имеет имя "sip_ua", функция завершается.
  • Если нет опции -d, выполняется демонизация:
    • порождается новый процесс, родительский завершается;
    • создается новая сессия;
    • текущий рабочий каталог устанавливается в "/";
    • закрываются файловые дескрипторы 0, 1 и 2.
  • Создается pid-файл.
  • Инициализируется генератор случайных чисел.
  • Инициализируется логгинг.
  • Выполняется ожидание (до 60 секунд), когда завершится активная работа фоновых процессов (когда процесс idle будет выполняться более 90% времени).
  • Открывается /dev/comcerto_wdt, устанавливается таймаут 32 секунды.
  • Создается каталог /tmp/ssl.
  • Инициализируется планировщик программы и создается экземпляр планировщика.
  • Инициализируется массив опроса файловых дескрипторов.
  • Создается очередь событий. Дескриптор очереди помещается в массив опроса дескрипторов.
  • Активируется интерфейс eth0.
  • Инициализируется MSP.
  • Создается локальный агент синхронизации регистраций.
  • Удаляется адрес IPv4 с интерфейса eth0.
  • Запускается прокси-сервер repro.
  • Запускается поток опроса ПЛИС.
  • Запускается поток юзер-агента SIP и ожидается его готовность.
  • Создается менеджер виртуальных каналов.
  • Запоминаются текущие адреса IPv4 и IPv6 (для обнаружения последующих их изменений).
  • Текущий адрес IPv6 передается в MSP.
  • Определяется модификация платы VE-02 на предмет наличия разъема SFP.
  • Выполняется основной цикл программы. В основном цикле:
    • Если установлены флаги "живости" MSP и потока опроса ПЛИС, выполняется сброс таймера watchdog.
    • Проверяется, был ли вставлен модуль SFP. Если да, проверяется, имеется ли в нем микросхема phy. Если да, ей устанавливаются параметры auto-negotiation.
    • Проверяется результат auto-negotiation GEMAC0 (скорость и дуплекс) и, если согласованный режим не совпадает с текущим, меняется текущий режим.
    • Проверяется результат auto-negotiation GEMAC1 (скорость и дуплекс) и, если согласованный режим не совпадает с текущим, меняется текущий режим.
    • Проверяются текущие адреса IPv4 и IPv6. В случае обнаружения изменения новый адрес передается в MSP и добавляется в список доменов прокси-сервера (старый удаляется из списка), в очередь событий добавляется событие, извещающее канальные окончания об изменении адреса.
    • Выполняются задачи планировщика.
    • Вычисляется время до выполнения ближайшей следующей задачи планировщика, но не более 300 мс, выполняется опрос файловых дескрипторов с вычисленный таймаутом.
    • Для дескрипторов в состоянии готовности вызываются соответсвующие обработчики. При готовности дескриптора очереди событий:
      • читается событие из очереди;
      • если установлены флаги "живости" MSP и потока опроса ПЛИС, выполняется сброс таймера watchdog.
      • если таймслот получателя события меньше нуля, и событие имеет тип eSettings, выполняется старт или остановка клиента DHCP.
      • если таймслот получателя события меньше нуля:
        • событие передается для обработки всем канальным окончаниям последовательно, а также менеджеру виртуальных каналов;
        • если событие не было обработано на первом проходе, выполняется второй проход, аналогичный первому;
        • если на втором проходе событие также не было обрработано, и был выставлен флаг необходимости дополнительного прохода, выполняется дополнительный третий проход
      • если таймслот получателя события неотрицательный, и событие имеет тип eSettings, вызывается функция createChannel() для создания (при необходимости) канального окончания;
      • если таймслот получателя события неотрицательный, вызывается обработчик события канального окончания указанного таймслота (или менеджера виртуальных каналов, если таймслот больше 999).

После завершения основного цикла программы:

  • Удаляются все канальные окончания.
  • Удаляется менеджер виртуальных каналов.
  • Уничтожается MSP.
  • Выдерживается задержка несколько секунд для завершения транзакций юзер-агента.
  • Останавливается прокси-сервер repro.
  • Уничтожается агент синхронизации регистраций.
  • Останавливается юзер-агент.
  • Останавливается опрос ПЛИС.
  • Уничтожается очередь событий.
  • Уничтожается планировщик.
  • Останавливается журналирование.
  • Удаляется pid-файл.
  • Закрывается /dev/comcerto_wdt
  • Функция завершается.

spictl.cpp:

Сначала main() проверяет число аргументов командной строки, и если оно меньше двух, выводит справку и завершается. Затем выполняется парсинг аргументов командной строки. Все аргументы, не являющиеся опциями, трактуются как числа и помещаются в массив передаваемых данных. Затем функция открывает устройство spidev и выполняет транзакцию SPI, передавая указанные пользователем данные. Принятые данные печатаются в stdout.

3.Привести описание функции void vmy_log(unsigned int source, int priority, const char *message, va_list ap)

Функция vmy_log() проверяет, что установлен флаг аргумента source в глобальной переменной my_log_mask и что аргумент priority не превышает значения глобальной переменной my_log_priority, и если да, вызывает vsyslog(), передавая ей аргументы priority и message.

и назначение функций int getRestartTime(), static void restart_callback(void *data), static void restartSetupCallback(void *data), void cmd_restart(const Json &request, Json &response), void cmd_reboot(const Json &request, Json &response).

Функций getRestartTime(), restart_callback(), restartSetupCallback() и cmd_reboot() в проекте нет.

Функция cmd_restart() предназначена для перезапуска процесса sip_ua.

4.Дать пояснение, зачем в функции void my_log(unsigned int source, int priority, const char *message, ...) используется переменное количество параметров.

Переменное число параметров используется в этой функции для возможности выводить в системный журнал произвольное число значений.

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

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

Библиотека                   Код библиотеки тронут/нетронут?
----------                   -------------------------------
/lib/libm.so.0                       нет данных
/lib/libm-0.9.30.2.so                нет данных
/lib/libdl-0.9.30.2.so               нет данных
/lib/libresolv.so.0                  нет данных
/lib/libuci.so                       нет данных
/lib/libgcc_s.so.1                   нет данных
/lib/libuci.so.0.7                   нет данных
/lib/libutil-0.9.30.2.so             нет данных
/lib/libnsl-0.9.30.2.so              нет данных
/lib/libuClibc-0.9.30.2.so           нет данных
/lib/libpthread.so.0                 нет данных
/lib/libpthread-0.9.30.2.so          нет данных
/lib/libcrypt-0.9.30.2.so            нет данных
/lib/librt-0.9.30.2.so               нет данных
/lib/libnsl.so.0                     нет данных
/lib/libutil.so.0                    нет данных
/lib/libresolv-0.9.30.2.so           нет данных
/lib/libcrypt.so.0                   нет данных
/lib/libdl.so.0                      нет данных
/lib/libc.so.0                       нет данных
/lib/librt.so.0                      нет данных
/usr/lib/libosipparser2.so.11        нетронут
/usr/lib/libmsp.so.0.1.0             нет данных
/usr/lib/libopkg.so.1.0.0            тронут
/usr/lib/libmsp.so                   нет данных
/usr/lib/libpri.so                   нетронут
/usr/lib/librutil.so                 нет данных
/usr/lib/libz.so.1                   нет данных
/usr/lib/libdb_cxx-4.so              нет данных
/usr/lib/libosip2.so.11.0.0          нетронут
/usr/lib/libstdc++.so.6.0.21         нет данных
/usr/lib/libnetsnmpagent.so.30.0.3   нет данных
/usr/lib/libstdc++.so.6              нет данных
/usr/lib/libnetsnmpmibs.so.30        нет данных
/usr/lib/libnetsnmpagent.so.30       нет данных
/usr/lib/libpcrecpp.so.0.0.1         нетронут
/usr/lib/libpcreposix.so.0           нетронут
/usr/lib/libopkg.so.1                тронут
/usr/lib/libmicrohttpd.so            нетронут
/usr/lib/libpcrecpp.so.0             нетронут
/usr/lib/libnetsnmpmibs.so.30.0.3    нет данных
/usr/lib/libpri.so.1.4               нетронут
/usr/lib/libeXosip2.so.11.0.0        тронут
/usr/lib/libosip2.so                 нетронут
/usr/lib/libcares.so.2.3.0           нетронут
/usr/lib/libnetsnmp.so.30.0.3        нет данных
/usr/lib/libnetsnmp.so.30            нет данных
/usr/lib/libssl.so.1.0.0             нет данных
/usr/lib/libpcre.so.1.2.10           нетронут
/usr/lib/libcares.so.2               нетронут
/usr/lib/libdum-1.10.so              нет данных
/usr/lib/libdb-4.7.so                нет данных
/usr/lib/libosipparser2.so           нетронут
/usr/lib/libdb_cxx.so                нет данных
/usr/lib/libstdc++.so.6.0.21-gdb.py  нет данных
/usr/lib/libosip2.so.11              нетронут
/usr/lib/libz.so                     нет данных
/usr/lib/libeXosip2.so.11            тронут
/usr/lib/libcrypto.so.1.0.0          нет данных
/usr/lib/librepro-1.10.so            нет данных
/usr/lib/libpcre.so.1                нетронут
/usr/lib/libosipparser2.so.11.0.0    нетронут
/usr/lib/libopkg.so                  тронут
/usr/lib/libeXosip2.so               тронут
/usr/lib/librutil-1.10.so            нет данных
/usr/lib/libdb_cxx-4.7.so            нет данных
/usr/lib/libdb-4.so                  нет данных
/usr/lib/libmsp.so.0                 нет данных
/usr/lib/libmicrohttpd.so.10         нетронут
/usr/lib/libnetsnmphelpers.so.30     нет данных
/usr/lib/libpcreposix.so.0.0.6       нетронут
/usr/lib/libz.so.1.2.8               нет данных
/usr/lib/libnetsnmphelpers.so.30.0.3 нет данных
/usr/lib/librepro.so                 нет данных
/usr/lib/libdb.so                    нет данных
/usr/lib/libresip.so                 нет данных
/usr/lib/libmicrohttpd.so.10.20.0    нетронут
/usr/lib/libresip-1.10.so            нет данных
/usr/lib/libdum.so                   нет данных

6.В изделии используется загрузчик u-Boot, нет информации о том, были ли произведены какие-либо манипуляции с исходным кодом загрузчика и их влияние на безопасность информации.

У института "Агат" в связи с этим есть какой-то вопрос?

in reply to:  3 ; comment:4 by mixyil1.1, 4 years ago

Replying to alx:

6.В изделии используется загрузчик u-Boot, нет информации о том, были ли произведены какие-либо манипуляции с исходным кодом загрузчика и их влияние на безопасность информации.

У института "Агат" в связи с этим есть какой-то вопрос?

Вопрос видимо в том, применялись ли какие-либо пачти к исходным кодам.

in reply to:  4 comment:5 by alx, 4 years ago

Replying to mixyil1.1:

6.В изделии используется загрузчик u-Boot, нет информации о том, были ли произведены какие-либо манипуляции с исходным кодом загрузчика и их влияние на безопасность информации.

У института "Агат" в связи с этим есть какой-то вопрос?

Вопрос видимо в том, применялись ли какие-либо пачти к исходным кодам.

Да, применялись.

comment:6 by mixyil1.1, 4 years ago

Следующий вопрос - список применяемых пачтей.

in reply to:  6 comment:7 by alx, 4 years ago

Replying to mixyil1.1:

Следующий вопрос - список применяемых пачтей.

am29lv040b.c.patch
board.c.patch
c300evm.h.patch
cfi_flash.c.patch
cmd_gemac.c.patch
cmd_mem.c.patch
cmd_serdes.c.patch
comcerto_gem.c.patch
comcerto_gem.h.patch
comcerto_spi.c.patch
config.mk.patch
examples.patch
fpga.c.patch
lowlevel_init.S.patch
Makefile.patch
nand_base.c.patch
tftp.c.patch
watchdog.patch

comment:8 by alx, 4 years ago

Уточню, что в предыдущем комментарии я привел список патчей, которые накладываю я сам.

Информации о том, какие патчи были наложены на исходный код загрузчика U-Boot компанией Mindspeed, от которой они и были получены, у меня нет.

comment:9 by alx, 4 years ago

Resolution: готово
Status: newclosed

Судя по тому, что институт "Агат" за неделю так и не уточнил, какое именно разъяснение ему требуется, он удовлетворен уже полученными ответами. Буду считать, что поставленные в тикете задачи мной выполнены.

Note: See TracTickets for help on using tickets.