|
Virtual Net Kernel Module 1.0.0
Модуль ядра Linux на C, который создаёт виртуальный сетевой интерфейс, позволяет задавать IPv4 через `procfs/sysctl` и отвечает на `ping`.
|
Проект выполнен в рамках тестового задания для компании НДМ Системы.
Тестовое задание: модуль ядра Linux на C, который создаёт виртуальный сетевой интерфейс, позволяет задавать IPv4 через procfs/sysctl и отвечает на ping.
vnet0.ip_addr в procfs/sysctl:/proc/sys/net/vnet/ip_addr10.0.0.1 и т.д.)Makefile: сборка, загрузка, тест, логи, статус.virtual_net.c, virtual_net.h — исходный код модуля.Makefile — сборка/загрузка/тестовые команды..vscode/* — настройки Cursor/VS Code (задачи и IntelliSense).linux-headers-$(uname -r) или аналог).gcc, make, kmod.iproute2 (ip), ping.sudo для загрузки/выгрузки модуля и настройки интерфейса.Установка зависимостей (Debian/RHEL-family) через Makefile:
Модуль реализует жизненный цикл init/exit через макросы module_init/module_exit.
virtual_net_init)**:sysctl в /proc/sys/net/vnet/ip_addr.vnet0 с помощью alloc_etherdev.register_netdev).UP.modify_vif_ip_userspace.vnet_xmit)**:net_device_ops.sk_buff) и обрабатывает его в зависимости от протокола:ARP Reply.vnet0, создает копию пакета, меняет IP и тип ICMP на ECHO_REPLY, пересчитывает контрольные суммы и возвращает пакет в стек ядра (netif_rx).spinlock (vnet_ip_lock) для потокобезопасного доступа к строке IP-адреса.procfs (vnet_sysctl_handler)**:sysctl реагирует на запись в /proc/sys/net/vnet/ip_addr.userspace утилиту ip для надежности и соответствия стандартным практикам.Процесс сборки и запуска полностью автоматизирован через Makefile.
Ключевые цели Makefile:
Команда
Назначение
make all
Компилирует модуль (vnet.ko)
make test
Рекомендуется: make all + make load + базовая настройка интерфейса
make load
Загружает модуль в ядро (sudo insmod)
make unload
Выгружает модуль из ядра (sudo rmmod)
make status
Показывает статус модуля, интерфейса и IP-адреса
Для диагностики проблем используйте следующие команды:
Типичные проблемы и решения:
Ping не работает**: Убедитесь, что интерфейс поднят (ip link set vnet0 up) и ему назначен правильный IP-адрес.Module already loaded**: Выполните make unload перед повторной загрузкой.Permission denied**: Большинство команд требуют прав sudo.В проекте используется Doxygen для генерации API-документации на основе комментариев в коде.
Генерация документации:
bash make docs @section autotoc_md11 или doxygen Doxyfile
Документация будет сгенерирована в директории ./docs/html.
Просмотр документации:
bash make docs-serve @section autotoc_md12 Документация доступна по адресу: http://127.0.0.1:8000
Документация включает описание всех функций, структур и макросов, используемых в проекте, что значительно упрощает понимание кода.
В проекте уже подготовлены:
.vscode/tasks.json — задачи make all, make clean, make compile_commands..vscode/c_cpp_properties.json — конфигурация C/C++ для модуля ядра..vscode/settings.json — подключение compile_commands.json.Для корректной индексации C/C++:
Автор: Dmitry Chernikov
Этот модуль распространяется под лицензией MIT. Полный текст лицензии доступен в файле LICENSE.