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 :}