[netdevice] Add maximum packet length as a net device property
authorMichael Brown <mcb30@etherboot.org>
Tue, 14 Oct 2008 23:49:59 +0000 (00:49 +0100)
committerMichael Brown <mcb30@etherboot.org>
Thu, 16 Oct 2008 04:11:47 +0000 (05:11 +0100)
Currently this length is set at device allocation time, and is never
changed.

src/drivers/net/ipoib.c
src/include/gpxe/ethernet.h
src/include/gpxe/ipoib.h
src/include/gpxe/netdevice.h

index 16b2a0c..9c9bc91 100644 (file)
@@ -33,9 +33,6 @@
  * IP over Infiniband
  */
 
-/** IPoIB MTU */
-#define IPOIB_MTU 2048
-
 /** Number of IPoIB data send work queue entries */
 #define IPOIB_DATA_NUM_SEND_WQES 2
 
@@ -727,7 +724,7 @@ static void ipoib_refill_recv ( struct ipoib_device *ipoib,
        int rc;
 
        while ( qset->recv_fill < qset->recv_max_fill ) {
-               iobuf = alloc_iob ( IPOIB_MTU );
+               iobuf = alloc_iob ( IPOIB_PKT_LEN );
                if ( ! iobuf )
                        break;
                if ( ( rc = ib_post_recv ( ibdev, qset->qp, iobuf ) ) != 0 ) {
index 158fe06..ff0fd6c 100644 (file)
@@ -9,6 +9,7 @@
 
 #include <stdint.h>
 #include <gpxe/netdevice.h>
+#include <gpxe/if_ether.h>
 
 extern struct ll_protocol ethernet_protocol;
 
@@ -26,6 +27,7 @@ static inline struct net_device * alloc_etherdev ( size_t priv_size ) {
        netdev = alloc_netdev ( priv_size );
        if ( netdev ) {
                netdev->ll_protocol = &ethernet_protocol;
+               netdev->max_pkt_len = ETH_FRAME_LEN;
        }
        return netdev;
 }
index bcbdc4c..3ec464e 100644 (file)
@@ -8,6 +8,9 @@
 
 #include <gpxe/infiniband.h>
 
+/** IPoIB packet length */
+#define IPOIB_PKT_LEN 2048
+
 /** IPoIB MAC address length */
 #define IPOIB_ALEN 20
 
@@ -68,6 +71,7 @@ static inline struct net_device * alloc_ipoibdev ( size_t priv_size ) {
        netdev = alloc_netdev ( priv_size );
        if ( netdev ) {
                netdev->ll_protocol = &ipoib_protocol;
+               netdev->max_pkt_len = IPOIB_PKT_LEN;
        }
        return netdev;
 }
index cdc8cba..9f39e0c 100644 (file)
@@ -241,6 +241,11 @@ struct net_device {
         * This is the bitwise-OR of zero or more NETDEV_XXX constants.
         */
        unsigned int state;
+       /** Maximum packet length
+        *
+        * This length includes any link-layer headers.
+        */
+       size_t max_pkt_len;
        /** TX packet queue */
        struct list_head tx_queue;
        /** RX packet queue */