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