click and todevice packet lengths

John Bicket jbicket at mit.edu
Sat Jun 28 00:06:02 EDT 2003


Hi Eddie,
I tried the following two changes, but they both caused panics.

--john

-    /*
-     * Ensure minimum ethernet packet size (14 hdr + 46 data).
-     * I can't figure out where Linux does this, so I don't
-     * know the correct procedure.
-     */
-    if (skb1->len < 60) {
-      if (skb_tailroom(skb1) < 60 - skb1->len) {
-          printk("ToDevice: too small: len %d tailroom %d\n",
-                 skb1->len, skb_tailroom(skb1));
-          kfree_skb(skb1);
-          return -1;
-      }
-      skb_put(skb1, 60 - skb1->len);
-    }
-


    /*
     * Ensure minimum ethernet packet size (14 hdr + 46 data).
     * I can't figure out where Linux does this, so I don't
     * know the correct procedure.
     */
    if (skb1->len < 60) {
-      if (skb_tailroom(skb1) < 60 - skb1->len) {
-          printk("ToDevice: too small: len %d tailroom %d\n",
-                 skb1->len, skb_tailroom(skb1));
-          kfree_skb(skb1);
-          return -1;
-      }
      skb_put(skb1, 60 - skb1->len);
    }



Eddie Kohler [kohler at icir.org] wrote:
>> Hi Eddie and everyone,
>> 
>> I've encountered this situation where I get
>> "ToDevice: too small: len %d tailroom %d\n" (queue_packet()) in dmesg.
>> This results from the following situation:
>
>You know, John, I'm not sure that warning matters. In particular I'm not
>sure that Linux device drivers actually break when passed packets too small
>for Ethernet.
>
>Would you mind terribly applying this patch and seeing if anything breaks?
>
>Eddie
>
>
>Index: elements/linuxmodule/todevice.cc
>===================================================================
>RCS file: /home/am0/click/cvsroot/release/one/elements/linuxmodule/todevice.cc,v
>retrieving revision 1.133
>diff -u -u -r1.133 todevice.cc
>--- elements/linuxmodule/todevice.cc	10 Jun 2003 04:53:35 -0000	1.133
>+++ elements/linuxmodule/todevice.cc	10 Jun 2003 06:59:11 -0000
>@@ -296,21 +296,6 @@
> {
>     struct sk_buff *skb1 = p->skb();
>   
>-    /*
>-     * Ensure minimum ethernet packet size (14 hdr + 46 data).
>-     * I can't figure out where Linux does this, so I don't
>-     * know the correct procedure.
>-     */
>-    if (skb1->len < 60) {
>-	if (skb_tailroom(skb1) < 60 - skb1->len) {
>-	    printk("ToDevice: too small: len %d tailroom %d\n",
>-		   skb1->len, skb_tailroom(skb1));
>-	    kfree_skb(skb1);
>-	    return -1;
>-	}
>-	skb_put(skb1, 60 - skb1->len);
>-    }
>-
>     int ret;
> #if HAVE_LINUX_POLLING
>     if (_dev->polling > 0)




More information about the click mailing list