struct ipv6hdr *ipv6h = skb->nh.ipv6h;  
ip6t_log_packet(unsigned int hooknum,		const struct sk_buff *skb,		const struct net_device *in,		const struct net_device *out,		const struct ip6t_log_info *loginfo,		const char *level_string,		const char *prefix){	struct ipv6hdr *ipv6h = skb->nh.ipv6h;	spin_lock_bh(&log_lock);	printk(level_string);	printk("%sIN=%s OUT=%s ",		prefix == NULL ? loginfo->prefix : prefix,		in ? in->name : "",		out ? out->name : "");	if (in && !out) {		/* MAC logging for input chain only. */		printk("MAC=");		if (skb->dev && skb->dev->hard_header_len && skb->mac.raw != (void*)ipv6h) {			if (skb->dev->type != ARPHRD_SIT){			  int i;			  unsigned char *p = skb->mac.raw;			  for (i = 0; i < skb->dev->hard_header_len; i++,p++)				printk("%02x%c", *p,			       		i==skb->dev->hard_header_len - 1			       		? ' ':':');			} else {			  int i;			  unsigned char *p = skb->mac.raw;			  if ( p - (ETH_ALEN*2+2) > skb->head ){			    p -= (ETH_ALEN+2);			    for (i = 0; i < (ETH_ALEN); i++,p++)				printk("%02x%s", *p,					i == ETH_ALEN-1 ? "->" : ":");			    p -= (ETH_ALEN*2);			    for (i = 0; i < (ETH_ALEN); i++,p++)				printk("%02x%c", *p,					i == ETH_ALEN-1 ? ' ' : ':');			  }			  			  if ((skb->dev->addr_len == 4) &&			      skb->dev->hard_header_len > 20){			    printk("TUNNEL=");			    p = skb->mac.raw + 12;			    for (i = 0; i < 4; i++,p++)				printk("%3d%s", *p,					i == 3 ? "->" : ".");			    for (i = 0; i < 4; i++,p++)				printk("%3d%c", *p,					i == 3 ? ' ' : '.');			  }			}		} else			printk(" ");	}	dump_packet(loginfo, skb, (u8*)skb->nh.ipv6h - skb->data, 1);	printk("\n");	spin_unlock_bh(&log_lock);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/047601bf7c803724bbab9a4fdbad9481cecc12e0/ip6t_LOG.c/clean/net/ipv6/netfilter/ip6t_LOG.c