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 ? ' ' : '.'); }
if (skb->dev && skb->dev->hard_header_len && skb->mac.raw != skb->nh.raw) { unsigned char *p = skb->mac.raw; int i;  if (skb->dev->type == ARPHRD_SIT && (p -= ETH_HLEN) < skb->head) p = NULL;  if (p != NULL) for (i = 0; i < skb->dev->hard_header_len; i++) printk("%02x", p[i]); printk(" ");  if (skb->dev->type == ARPHRD_SIT) { struct iphdr *iph = (struct iphdr *)skb->mac.raw; printk("TUNNEL=%u.%u.%u.%u->%u.%u.%u.%u ", NIPQUAD(iph->saddr), NIPQUAD(iph->daddr));
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);}