[Somehow, my TB hates your mails - it just presents empty bodies to me when I hit reply. Strange.]
Wolfgang Grandegger wrote:
> This patch enables ARP support for the RT-Proxy Linux device.
> Incoming ARP replys are delivered to both, the RTnet and the
> Linux network stack. The RT-Proxy then gets attached to the
> corresponding RTnet device, rteth0 by default. You can enable
> this feature with the configure option "--enable-proxy-arp".
Maybe the same question here: Do we need an extra knob for this, or are
all proxy scenarios fine this enabled?
>
> Note: this patch requires running "scripts/autogen.sh"
>
> Signed-off-by: Wolfang Grandegger <[EMAIL PROTECTED]>
> Index: rtnet/stack/ipv4/arp.c
> ===================================================================
> --- rtnet.orig/stack/ipv4/arp.c
> +++ rtnet/stack/ipv4/arp.c
> @@ -25,6 +25,9 @@
> #include <stack_mgr.h>
> #include <ipv4/arp.h>
>
> +#ifdef CONFIG_RTNET_ADDON_PROXY_ARP
> +#include <ipv4/ip_input.h>
> +#endif /* CONFIG_RTNET_ADDON_PROXY_ARP */
>
> /***
> * arp_send: Create and send an arp packet. If (dest_hw == NULL),
> @@ -174,6 +177,12 @@ int rt_arp_rcv(struct rtskb *skb, struct
> }
>
> out:
> +#ifdef CONFIG_RTNET_ADDON_PROXY_ARP
> + if (rt_ip_fallback_handler) {
> + rt_ip_fallback_handler(skb);
> + return 0;
> + }
> +#endif
Hmm, I wonder what prevents ARP requests being answered twice: first by
RTnet (a few lines above this hunk), and then potentially also by Linux.
> kfree_rtskb(skb);
> return 0;
> }
> Index: rtnet/addons/rtnetproxy.c
> ===================================================================
> --- rtnet.orig/addons/rtnetproxy.c
> +++ rtnet/addons/rtnetproxy.c
> @@ -105,6 +105,14 @@ static rtdm_task_t rtnetproxy_thread;
>
> static rtdm_sem_t rtnetproxy_sem;
>
> +#ifdef CONFIG_RTNET_ADDON_PROXY_ARP
> +static char* rtdev_attach = "rteth0";
> +module_param(rtdev_attach, charp, 0444);
> +MODULE_PARM_DESC(rtdev_attach, "Attach to the specified RTnet device");
> +
> +struct rtnet_device *rtnetproxy_rtdev;
> +#endif
> +
> /* ***********************************************************************
> * Returns the next pointer from the ringbuffer or zero if nothing is
> * available
> @@ -181,7 +189,10 @@ static inline void send_data_out(struct
> {
>
> struct rtskb *rtskb;
> +#ifndef CONFIG_RTNET_ADDON_PROXY_ARP
> struct dest_route rt;
> + int rc;
> +#endif
>
> struct skb_data_format
> {
> @@ -194,7 +205,6 @@ static inline void send_data_out(struct
> * thus no spaces are allowed! */
>
> struct skb_data_format *pData;
> - int rc;
>
> /* Copy the data from the standard sk_buff to the realtime sk_buff:
> * Both have the same length. */
> @@ -208,6 +218,18 @@ static inline void send_data_out(struct
>
> pData = (struct skb_data_format*) rtskb->data;
>
> +#ifdef CONFIG_RTNET_ADDON_PROXY_ARP
> + rtskb->rtdev = rtnetproxy_rtdev;
> +
> + /* Call the actual transmit function */
> + rtdev_xmit_proxy(rtskb);
> +
> + /* The rtskb is freed somewhere deep in the driver...
> + * No need to do it here. */
> +
> + rtdev_dereference(rtskb->rtdev);
I know this pattern is not new, but looking at it I wonder if this isn't
generation a potential use-after-release (if xmitting causes an
immediate rtskb release)...
Jan
signature.asc
Description: OpenPGP digital signature
------------------------------------------------------------------------- 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 [email protected] https://lists.sourceforge.net/lists/listinfo/rtnet-users

