Driver/snull/snull_get_tx_buffer()

Last-modified: 2007-09-18 (火) 11:34:52

129 :/*
130 : * Buffer/pool management.
131 : */
132 :struct snull_packet *snull_get_tx_buffer(struct net_device *dev)
133 :{
134 : struct snull_priv *priv = netdev_priv(dev);
135 : unsigned long flags;
136 : struct snull_packet *pkt;
137 :
138 : spin_lock_irqsave(&priv->lock, flags);
139 : pkt = priv->ppool;

パケットの取得

140 : priv->ppool = pkt->next;

次のパケットのポインタを合わせておく

141 : if (priv->ppool == NULL) {

もし次のポインタがNULLならばデータは終わり

142 : printk (KERN_INFO "Pool empty\n");
143 : netif_stop_queue(dev);
144 : }
145 : spin_unlock_irqrestore(&priv->lock, flags);
146 : return pkt;

取得したpktを返してあげる。この時点でnetwork interface待ち列は無効になっているかもしれない。
→無効になっているとしたら最後のパケットということ。

147 :}