+
+ u32 *daddr = &(ih->daddr);
+ u32 *saddr = &(ih->saddr);
+ unsigned short proto = ntohs(eh->h_proto);
+
+ uint use_dnat = dev == dev1 ? dnat_enabled.eth1:dnat_enabled.eth2;
+
+ if (unlikely(proto != ETH_P_IP ))
+ return RX_HANDLER_PASS;
+
+#ifdef DEBUG
+ printk("use_dnat %d proto %x ETH_P_IP %x Dest MAC - IP %d.%d.%d.%d MAC %x:%x:%x:%x:%x:%x\n",use_dnat,proto,ETH_P_IP,(u8)daddr[0],(u8)daddr[1],(u8)daddr[2],(u8)daddr[3],eh->h_dest[0],eh->h_dest[1],eh->h_dest[2],eh->h_dest[3],eh->h_dest[4],eh->h_dest[5]);
+#endif
+ if ( (use_dnat == 1) && (proto == ETH_P_IP) )
+ {
+ unsigned int *t_addr = dev == dev1 ? &octet0[0]:&octet1[0];
+ u8 *s_addr = dev == dev1 ? &s_octet0[0]:&s_octet1[0];
+
+
+ ((u8 *)daddr)[0] = (u8)t_addr[0];
+ ((u8 *)daddr)[1] = (u8)t_addr[1];
+ ((u8 *)daddr)[2] = (u8)t_addr[2];
+ ((u8 *)daddr)[3] = (u8)t_addr[3];
+
+ t_addr = dev == dev1 ? &mac0[0]:&mac1[0];
+
+ eh->h_dest[0] = (unsigned char)t_addr[0];
+ eh->h_dest[1] = (unsigned char)t_addr[1];
+ eh->h_dest[2] = (unsigned char)t_addr[2];
+ eh->h_dest[3] = (unsigned char)t_addr[3];
+ eh->h_dest[4] = (unsigned char)t_addr[4];
+ eh->h_dest[5] = (unsigned char)t_addr[5];
+
+#ifdef DEBUG
+ printk("After DNAT: Dest MAC - IP %d.%d.%d.%d MAC %x:%x:%x:%x:%x:%x\n",daddr[0],daddr[1],daddr[2],daddr[3],eh->h_dest[0],eh->h_dest[1],eh->h_dest[2],eh->h_dest[3],eh->h_dest[4],eh->h_dest[5]);
+#endif
+
+ eh->h_source[0] = (unsigned char)dev->dev_addr[0];
+ eh->h_source[1] = (unsigned char)dev->dev_addr[1];
+ eh->h_source[2] = (unsigned char)dev->dev_addr[2];
+ eh->h_source[3] = (unsigned char)dev->dev_addr[3];
+ eh->h_source[4] = (unsigned char)dev->dev_addr[4];
+ eh->h_source[5] = (unsigned char)dev->dev_addr[5];
+
+ ((u8 *)saddr)[0] = s_addr[0];
+ ((u8 *)saddr)[1] = s_addr[1];
+ ((u8 *)saddr)[2] = s_addr[2];
+ ((u8 *)saddr)[3] = s_addr[3];
+
+ skb->ip_summed = CHECKSUM_COMPLETE;
+ skb->csum = skb_checksum_complete(skb);
+ ih->check = 0;
+ ih->check = ip_fast_csum((unsigned char *)ih, ih->ihl);
+
+#ifdef DEBUG
+ printk("After DNAT: Source MAC - IP %d.%d.%d.%d MAC %u:%u:%u:%u:%u:%u\n",saddr[0],saddr[1],saddr[2],saddr[3],eh->h_source[0],eh->h_source[1],eh->h_source[2],eh->h_source[3],eh->h_source[4],eh->h_source[5]);
+#endif
+ }
+