Проблема была связана с вопросом, который я задал здесь, о сбое сервера IP / GRE, скомпилированный в ядре, но интерфейс gre0 не существует .
Я решил первый вопрос, позволив драйверу демультиплексора GRE в gre.c
зарегистрировать обработчик протокола GRE в ядре. Но я обнаружил, что когда приходит пакет GRE, обработчик GRE не указывает на какую-либо функцию ip_gre.c
(драйвер демультиплексора GRE предназначен для проверки версии GRE в пакете и передачи ведра правильному обработчику протокола, но в в моем случае он указывает NULL).
Я прокомментировал фрагмент кода, в котором gre.c
регистрирует обработчик протокола GRE, и я раскомментировал фрагмент кода, в котором ip_gre.c
регистрирует GRE обработчик протокола. Теперь, когда приходит пакет GRE, он хорошо декапсулируется и передается на следующий уровень, теперь я могу без проблем пинговать с ПК1 на ПК2. Я думаю, что эта проблема возникает у многих людей на их встроенных устройствах, потому что я поискал в Google сообщение об ошибке https://www.google.com/search?q=ipgre+init%3A+can%27t+add + протокол , когда драйвер IP GRE не может запуститься, потому что драйвер демультиплексора GRE еще зарегистрировал обработчик GRE, и я обнаружил несколько устройств с этой ошибкой.