This is the good one.

>From 19a61adb4ce04889c1fe772b16bbdc32abfb8c22 Mon Sep 17 00:00:00 2001
From: dev <[email protected]>
Date: Wed, 2 Oct 2019 11:56:00 +0200
Subject: [PATCH] Allow RTNet to be builtin kernel

---
 kernel/drivers/net/Kconfig        |   1 -
 kernel/drivers/net/addons/Kconfig |   4 +-
 kernel/drivers/net/stack/Makefile |  16 ++---
 utils/net/rtnet.in                | 148 +++++++++++++++++++++++---------------
 4 files changed, 101 insertions(+), 68 deletions(-)

diff --git a/kernel/drivers/net/Kconfig b/kernel/drivers/net/Kconfig
index ac3bced..49d2402 100644
--- a/kernel/drivers/net/Kconfig
+++ b/kernel/drivers/net/Kconfig
@@ -1,7 +1,6 @@
 menu "RTnet"

 config XENO_DRIVERS_NET
-    depends on m
     select NET
     tristate "RTnet, TCP/IP socket interface"

diff --git a/kernel/drivers/net/addons/Kconfig 
b/kernel/drivers/net/addons/Kconfig
index baa6cbc..616ed40 100644
--- a/kernel/drivers/net/addons/Kconfig
+++ b/kernel/drivers/net/addons/Kconfig
@@ -2,7 +2,7 @@ menu "Add-Ons"
     depends on XENO_DRIVERS_NET

 config XENO_DRIVERS_NET_ADDON_RTCAP
-    depends on XENO_DRIVERS_NET && m
+    depends on XENO_DRIVERS_NET
     select ETHERNET
     tristate "Real-Time Capturing Support"
     default n
@@ -18,7 +18,7 @@ config XENO_DRIVERS_NET_ADDON_RTCAP
     For further information see Documentation/README.rtcap.

 config XENO_DRIVERS_NET_ADDON_PROXY
-    depends on XENO_DRIVERS_NET_RTIPV4 && m
+    depends on XENO_DRIVERS_NET_RTIPV4
     select ETHERNET
     tristate "IP protocol proxy for Linux"
     default n
diff --git a/kernel/drivers/net/stack/Makefile 
b/kernel/drivers/net/stack/Makefile
index d055dc2..f8db6fa 100644
--- a/kernel/drivers/net/stack/Makefile
+++ b/kernel/drivers/net/stack/Makefile
@@ -1,13 +1,5 @@
 ccflags-y += -Idrivers/xenomai/net/stack/include -Ikernel/

-obj-$(CONFIG_XENO_DRIVERS_NET_RTIPV4) += ipv4/
-
-obj-$(CONFIG_XENO_DRIVERS_NET_RTPACKET) += packet/
-
-obj-$(CONFIG_XENO_DRIVERS_NET_RTMAC) += rtmac/
-
-obj-$(CONFIG_XENO_DRIVERS_NET_RTCFG) += rtcfg/
-
 obj-$(CONFIG_XENO_DRIVERS_NET) += rtnet.o

 rtnet-y :=  \
@@ -23,4 +15,12 @@ rtnet-y :=  \
        stack_mgr.o \
        eth.o

+obj-$(CONFIG_XENO_DRIVERS_NET_RTIPV4) += ipv4/
+
+obj-$(CONFIG_XENO_DRIVERS_NET_RTPACKET) += packet/
+
+obj-$(CONFIG_XENO_DRIVERS_NET_RTMAC) += rtmac/
+
+obj-$(CONFIG_XENO_DRIVERS_NET_RTCFG) += rtcfg/
+
 rtnet-$(CONFIG_XENO_DRIVERS_NET_RTWLAN) += rtwlan.o
diff --git a/utils/net/rtnet.in b/utils/net/rtnet.in
index f81a7bb..3c3cab9 100644
--- a/utils/net/rtnet.in
+++ b/utils/net/rtnet.in
@@ -31,44 +31,62 @@ EOF
 }

 init_rtnet() {
-    modprobe rtnet >/dev/null || exit 1
-    modprobe rtipv4 >/dev/null || exit 1
-    modprobe $RT_DRIVER $RT_DRIVER_OPTIONS >/dev/null || exit 1
+    if [ ! -d /proc/rtnet ]; then
+        modprobe rtnet >/dev/null || exit 1
+    fi

-    for dev in $REBIND_RT_NICS; do
-       if [ -d /sys/bus/pci/devices/$dev/driver ]; then
-           echo $dev > /sys/bus/pci/devices/$dev/driver/unbind
-       fi
-       echo $dev > /sys/bus/pci/drivers/$RT_DRIVER/bind
-    done
+    if [ ! -d /proc/rtnet/ipv4 ]; then
+        modprobe rtipv4 >/dev/null || exit 1
+        for PROTOCOL in $RT_PROTOCOLS; do
+            modprobe rt$PROTOCOL >/dev/null || exit 1
+        done
+    fi

-    for PROTOCOL in $RT_PROTOCOLS; do
-       modprobe rt$PROTOCOL >/dev/null || exit 1
-    done
+    $(cat /proc/rtnet/devices | grep -q rteth0)
+    if [ $? -eq 1 ]; then
+        modprobe $RT_DRIVER $RT_DRIVER_OPTIONS >/dev/null || exit 1
+
+        for dev in $REBIND_RT_NICS; do
+            if [ -d /sys/bus/pci/devices/$dev/driver ]; then
+                echo $dev > /sys/bus/pci/devices/$dev/driver/unbind
+            fi
+            echo $dev > /sys/bus/pci/drivers/$RT_DRIVER/bind
+        done
+    fi

     if [ $RT_LOOPBACK = "yes" ]; then
-       modprobe rt_loopback >/dev/null || exit 1
+        $(cat /proc/rtnet/devices | grep -q rtlo)
+        if [ $? -eq 1 ]; then
+
+            modprobe rt_loopback >/dev/null || exit 1
+        fi
     fi

-    if [ $RTCAP = "yes" ]; then
-       modprobe rtcap >/dev/null || exit 1
+    if [ $RTCAP = "yes" -a ! -d /sys/modules/rtcap ]; then
+        modprobe rtcap >/dev/null || exit 1
     fi

     if [ $RT_LOOPBACK = "yes" ]; then
-       $RTIFCONFIG rtlo up 127.0.0.1
+        $RTIFCONFIG rtlo up 127.0.0.1
     fi

     if [ $RTCAP = "yes" ]; then
-       ifconfig rteth0 up
-       ifconfig rteth0-mac up
-       if [ $RT_LOOPBACK = "yes" ]; then
-           ifconfig rtlo up
-       fi
+        ifconfig rteth0 up
+        ifconfig rteth0-mac up
+        if [ $RT_LOOPBACK = "yes" ]; then
+            ifconfig rtlo up
+        fi
     fi

-    modprobe rtcfg >/dev/null
-    modprobe rtmac >/dev/null
-    modprobe tdma >/dev/null
+    if [ ! -d /proc/rtnet/rtcfg ]; then
+        modprobe rtcfg >/dev/null
+    fi
+    if [ ! -d /proc/rtnet/rtmac ]; then
+        modprobe rtmac >/dev/null
+    fi
+    if [ ! -f /proc/tdma ]; then
+        modprobe tdma >/dev/null
+    fi
 }

 submit_cfg() {
@@ -329,43 +347,59 @@ case "$1" in
        ;;

     master)
-       shift
-       init_rtnet
-       TDMA_SLAVES=$*
-       start_master
-       ;;
+        shift
+        init_rtnet
+        TDMA_SLAVES=$*
+        start_master
+        ;;

     capture)
-       modprobe rtnet >/dev/null || exit 1
-       modprobe $RT_DRIVER $RT_DRIVER_OPTIONS >/dev/null || exit 1
-       modprobe rtcap >/dev/null || exit 1
-       $RTIFCONFIG rteth0 up promisc
-       ifconfig rteth0 up
-       ifconfig rteth0-mac up
-       ;;
+        if [ ! -d /proc/rtnet ]; then
+            modprobe rtnet >/dev/null || exit 1
+        fi
+        $(cat /proc/rtnet/devices | grep -q rteth0)
+        if [ $? -eq 1 ]; then
+            modprobe $RT_DRIVER $RT_DRIVER_OPTIONS >/dev/null || exit 1
+        fi
+        if [ ! -d /sys/modules/rtcap ]; then
+            modprobe rtcap >/dev/null || exit 1
+        fi
+        $RTIFCONFIG rteth0 up promisc
+        ifconfig rteth0 up
+        ifconfig rteth0-mac up
+        ;;

     loopback)
-       modprobe rtnet >/dev/null || exit 1
-       modprobe rtipv4 >/dev/null || exit 1
-
-       for PROTOCOL in $RT_PROTOCOLS; do
-           modprobe rt$PROTOCOL >/dev/null || exit 1
-       done
-
-       modprobe rt_loopback >/dev/null || exit 1
-
-       if [ $RTCAP = "yes" ]; then
-           modprobe rtcap >/dev/null || exit 1
-       fi
-
-       $RTIFCONFIG rtlo up 127.0.0.1
-
-       if [ $RTCAP = "yes" ]; then
-           ifconfig rtlo up
-       fi
-       ;;
+        if [ ! -d /proc/rtnet ]; then
+            modprobe rtnet >/dev/null || exit 1
+        fi
+        if [ ! -d /proc/rtnet/ipv4 ]; then
+            modprobe rtipv4 >/dev/null || exit 1
+            for PROTOCOL in $RT_PROTOCOLS; do
+                modprobe rt$PROTOCOL >/dev/null || exit 1
+            done
+        fi
+
+        if [ $RT_LOOPBACK = "yes" ]; then
+            $(cat /proc/rtnet/devices | grep -q rtlo)
+            if [ $? -eq 1 ]; then
+
+                modprobe rt_loopback >/dev/null || exit 1
+            fi
+        fi
+
+        if [ $RTCAP = "yes" -a ! -d /sys/modules/rtcap ]; then
+            modprobe rtcap >/dev/null || exit 1
+        fi
+
+        $RTIFCONFIG rtlo up 127.0.0.1
+
+        if [ $RTCAP = "yes" ]; then
+            ifconfig rtlo up
+        fi
+        ;;

     *)
-       usage
-       exit 1
+        usage
+        exit 1
 esac
--
2.1.4


Reply via email to