With this patch non-real-time UDP packets a routed to the Linux
network stack. You can enable this feature with the configure
option "--enable-proxy-udp".

Note: this patch requires running "scripts/autogen.sh"

Signed-off-by: Wolfang Grandegger <[EMAIL PROTECTED]>
Index: rtnet/stack/ipv4/ip_input.c
===================================================================
--- rtnet.orig/stack/ipv4/ip_input.c
+++ rtnet/stack/ipv4/ip_input.c
@@ -70,6 +70,13 @@ static inline void rt_ip_local_deliver(s
         } else {
             /* Get the destination socket */
             if ((sock = ipprot->dest_socket(skb)) == NULL) {
+#ifdef CONFIG_RTNET_ADDON_PROXY_UDP
+                if (rt_ip_fallback_handler) {
+                    __rtskb_push(skb, iph->ihl*4);
+                    rt_ip_fallback_handler(skb);
+                    return;
+                }
+#endif
                 kfree_rtskb(skb);
                 return;
             }
Index: rtnet/stack/ipv4/ip_fragment.c
===================================================================
--- rtnet.orig/stack/ipv4/ip_fragment.c
+++ rtnet/stack/ipv4/ip_fragment.c
@@ -33,6 +33,11 @@
 
 #include <ipv4/ip_fragment.h>
 
+#ifdef CONFIG_RTNET_ADDON_PROXY_UDP
+#include <ipv4/ip_input.h>
+#endif /* CONFIG_RTNET_ADDON_PROXY_UDP */
+
+#define FRAG_DBG
 
 /*
  * This defined sets the number of incoming fragmented IP messages that
@@ -185,6 +190,14 @@ static struct rtskb *add_to_collector(st
         rtdm_lock_put_irqrestore(&p_coll->frags.lock, context);
     }
 
+#ifdef CONFIG_RTNET_ADDON_PROXY_UDP
+    if (rt_ip_fallback_handler) {
+           __rtskb_push(skb, iph->ihl*4);
+           rt_ip_fallback_handler(skb);
+           return NULL;
+    }
+#endif
+
 #ifdef FRAG_DBG
     rtdm_printk("RTnet: Unordered IP fragment (saddr:%x, daddr:%x)"
                 " - dropped\n", iph->saddr, iph->daddr);
@@ -276,6 +289,13 @@ struct rtskb *rt_ip_defrag(struct rtskb 
     {
         /* Get the destination socket */
         if ((sock = ipprot->dest_socket(skb)) == NULL) {
+#ifdef CONFIG_RTNET_ADDON_PROXY_UDP
+                if (rt_ip_fallback_handler) {
+                    __rtskb_push(skb, iph->ihl*4);
+                    rt_ip_fallback_handler(skb);
+                    return NULL;
+                }
+#endif
             /* Drop the rtskb */
             kfree_rtskb(skb);
             return NULL;
Index: rtnet/configure.ac
===================================================================
--- rtnet.orig/configure.ac
+++ rtnet/configure.ac
@@ -1189,6 +1189,19 @@ if test "$CONFIG_RTNET_ADDON_PROXY" = "y
     AC_DEFINE(CONFIG_RTNET_ADDON_PROXY,1,[rtnetproxy support])
 fi
 
+AC_MSG_CHECKING([whether to enable rtnetproxy UDP support])
+AC_ARG_ENABLE(proxy-udp,
+    AS_HELP_STRING([--enable-proxy-udp], [enable UDP support for IP protocol 
proxy driver @<:@default=no@:>@]),
+    [case "$enableval" in
+        y | yes) CONFIG_RTNET_ADDON_PROXY_UDP=y ;;
+        *) CONFIG_RTNET_ADDON_PROXY_UDP=n ;;
+    esac])
+AC_MSG_RESULT([${CONFIG_RTNET_ADDON_PROXY_UDP:-n}])
+AM_CONDITIONAL(CONFIG_RTNET_ADDON_PROXY_UDP,[test 
"$CONFIG_RTNET_ADDON_PROXY_UDP" = "y"])
+if test "$CONFIG_RTNET_ADDON_PROXY_UDP" = "y"; then
+    AC_DEFINE(CONFIG_RTNET_ADDON_PROXY_UDP,1,[rtnetproxy UDP support])
+fi
+
 
 #dnl ======================================================================
 #dnl             RTDM select (disabled until RTDM actually supports this)

-- 


-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
RTnet-users mailing list
RTnet-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rtnet-users

Reply via email to