summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brown2006-05-27 15:39:45 +0200
committerMichael Brown2006-05-27 15:39:45 +0200
commit6c50564724bcce292fbe76010d637390c17d407a (patch)
tree39e874e0e1fd4eac5a9dbc05330092322f1c2a67
parentTidied up debugging messages (diff)
downloadipxe-6c50564724bcce292fbe76010d637390c17d407a.tar.gz
ipxe-6c50564724bcce292fbe76010d637390c17d407a.tar.xz
ipxe-6c50564724bcce292fbe76010d637390c17d407a.zip
Make PKB_ZLEN the minimum possible size of packet buffer (to allow for
hardware that can't autopad).
-rw-r--r--src/include/gpxe/pkbuff.h9
-rw-r--r--src/net/pkbuff.c4
2 files changed, 13 insertions, 0 deletions
diff --git a/src/include/gpxe/pkbuff.h b/src/include/gpxe/pkbuff.h
index 92244fd59..6c504029f 100644
--- a/src/include/gpxe/pkbuff.h
+++ b/src/include/gpxe/pkbuff.h
@@ -28,6 +28,15 @@ struct ll_protocol;
*/
#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.
diff --git a/src/net/pkbuff.c b/src/net/pkbuff.c
index 964fbf623..ac3088301 100644
--- a/src/net/pkbuff.c
+++ b/src/net/pkbuff.c
@@ -39,6 +39,10 @@ struct pk_buff * alloc_pkb ( size_t len ) {
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 );