Make PKB_ZLEN the minimum possible size of packet buffer (to allow for
authorMichael Brown <mcb30@etherboot.org>
Sat, 27 May 2006 13:39:45 +0000 (13:39 +0000)
committerMichael Brown <mcb30@etherboot.org>
Sat, 27 May 2006 13:39:45 +0000 (13:39 +0000)
hardware that can't autopad).

src/include/gpxe/pkbuff.h
src/net/pkbuff.c

index 92244fd..6c50402 100644 (file)
@@ -28,6 +28,15 @@ struct ll_protocol;
  */
 #define PKBUFF_ALIGN 2048
 
  */
 #define PKBUFF_ALIGN 2048
 
+/**
+ * Minimum packet buffer length
+ *
+ * alloc_pkb() will round up the allocated length to this size if
+ * necessary.  This is used on behalf of hardware that is not capable
+ * of auto-padding.
+ */
+#define PKB_ZLEN 64
+
 /** A packet buffer
  *
  * This structure is used to represent a network packet within gPXE.
 /** A packet buffer
  *
  * This structure is used to represent a network packet within gPXE.
index 964fbf6..ac30883 100644 (file)
@@ -39,6 +39,10 @@ struct pk_buff * alloc_pkb ( size_t len ) {
        struct pk_buff *pkb = NULL;
        void *data;
 
        struct pk_buff *pkb = NULL;
        void *data;
 
+       /* Pad to minimum length */
+       if ( len < PKB_ZLEN )
+               len = PKB_ZLEN;
+
        /* Align buffer length */
        len = ( len + __alignof__( *pkb ) - 1 ) & ~( __alignof__( *pkb ) - 1 );
        
        /* Align buffer length */
        len = ( len + __alignof__( *pkb ) - 1 ) & ~( __alignof__( *pkb ) - 1 );