Example #1
0
int mirror_func (struct sk_buff *skb,
             struct net_device *dev,
             struct packet_type *pt,
             struct net_device *orig_dev)
{
        struct sk_buff *nskb;
        int i = 0;

        if (/*  skb_shared(skb) && */is_ports(dev)) 
        {
                nskb = skb_clone(skb, GFP_ATOMIC);
                if (!nskb)
                        goto out;
                nskb->dev = mirror;
                nskb->len += nskb->mac_len;
                nskb->data -= nskb->mac_len;
                printk("send skb size[%d]maclen[%d]\n", nskb->len, nskb->mac_len);
                for (i=0; i<nskb->len; i++)
                {
                    printk("%.2x ", nskb->data[i]);
                }
                printk("count[%d]\n", i);
                dev_queue_xmit(nskb);
        }
out:
        kfree_skb (skb);
        return NET_RX_SUCCESS;
}
Example #2
0
int
mirror_func (struct sk_buff *skb,
             struct net_device *dev,
             struct packet_type *pt,
             struct net_device *orig_dev)
{
        struct sk_buff *nskb;

        if (skb_shared(skb) && is_ports(dev)) {
                nskb = skb_clone(skb, GFP_ATOMIC);
                if (!nskb)
                        goto out;
                nskb->dev = mirror;
                nskb->len += nskb->mac_len;
                nskb->data -= nskb->mac_len;
                dev_queue_xmit(nskb);
        }
out:
        kfree_skb (skb);
        return NET_RX_SUCCESS;
}