Exemple #1
0
size_t
pfq_skb_pool_flush(struct pfq_skb_pool *pool)
{
	size_t n, total = 0;
	for(n = 0; n < pool->size; n++)
	{
		if (pool->skbs[n]) {
			total++;
			SPARSE_INC(&memory_stats.os_free);
			kfree_skb(pool->skbs[n]);
			pool->skbs[n] = NULL;
		}
	}

	pool->p_idx = 0;
	pool->c_idx = 0;
	return total;
}
Exemple #2
0
struct sk_buff *
pfq_vlan_untag(struct sk_buff *skb)
{
        struct vlan_hdr *vhdr;
        u16 vlan_tci;

        if (unlikely(vlan_tx_tag_present(skb))) {
                /* vlan_tci is already set-up so leave this for another time */
                return skb;
        }

        if (unlikely(!pskb_may_pull(skb, VLAN_HLEN)))
                goto err_free;

        vhdr = (struct vlan_hdr *) skb->data;
        vlan_tci = ntohs(vhdr->h_vlan_TCI);

        __vlan_hwaccel_put_tag(skb, vlan_tci);

        skb_pull_rcsum(skb, VLAN_HLEN);
        pfq_vlan_set_encap_proto(skb, vhdr);

        skb = pfq_vlan_reorder_header(skb);
        if (unlikely(!skb))
                goto err_free;

        skb_reset_network_header(skb);
        skb_reset_transport_header(skb);
        return skb;

err_free:

	SPARSE_INC(&memory_stats.os_free);
        kfree_skb(skb);
        return NULL;
}