diff -rNu ./linux-orig/net/ipv4/arp.c ./linux/net/ipv4/arp.c
--- ./linux-orig/net/ipv4/arp.c	Sun Apr 14 17:26:14 2002
+++ ./linux/net/ipv4/arp.c	Sun Apr 14 17:11:36 2002
@@ -196,6 +196,7 @@
 	case ARPHRD_ETHER:
 	case ARPHRD_FDDI:
 	case ARPHRD_IEEE802:
+	case ARPHRD_IEEE80211:
 		ip_eth_mc_map(addr, haddr);
 		return 0; 
 	case ARPHRD_IEEE802_TR:
@@ -542,6 +543,11 @@
 		arp->ar_pro = __constant_htons(ETH_P_IP);
 		break;
 
+	case ARPHRD_IEEE80211:
+		arp->ar_hrd = htons(ARPHRD_ETHER);
+		arp->ar_pro = __constant_htons(ETH_P_IP);
+		break;
+
 #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
 	case ARPHRD_AX25:
 		arp->ar_hrd = __constant_htons(ARPHRD_AX25);
@@ -635,6 +641,7 @@
 			goto out;
 		break;
 #ifdef CONFIG_NET_ETHERNET
+	case ARPHRD_IEEE80211:
 	case ARPHRD_ETHER:
 		/*
 		 * ETHERNET devices will accept ARP hardware types of either
@@ -682,7 +689,8 @@
 		 * and 1 (Ethernet).
 		 */
 		if (arp->ar_hrd != __constant_htons(ARPHRD_ETHER) &&
-		    arp->ar_hrd != __constant_htons(ARPHRD_IEEE802))
+		    arp->ar_hrd != __constant_htons(ARPHRD_IEEE802) &&
+		    arp->ar_hrd != __constant_htons(ARPHRD_IEEE80211))
 			goto out;
 		if (arp->ar_pro != __constant_htons(ETH_P_IP))
 			goto out;
@@ -926,8 +934,11 @@
 		if (!dev)
 			return -EINVAL;
 	}
-	if (r->arp_ha.sa_family != dev->type)	
+	if (r->arp_ha.sa_family != dev->type)
+{
+printk (KERN_INFO "%s: ---- ARP PROBLEM\n", __FUNCTION__);
 		return -EINVAL;
+}
 
 	neigh = __neigh_lookup_errno(&arp_tbl, &ip, dev);
 	err = PTR_ERR(neigh);
diff -rNu ./linux-orig/net/ipv4/ipconfig.c ./linux/net/ipv4/ipconfig.c
--- ./linux-orig/net/ipv4/ipconfig.c	Sun Apr 14 17:26:15 2002
+++ ./linux/net/ipv4/ipconfig.c	Sun Apr 14 17:11:36 2002
@@ -679,6 +679,8 @@
 		b->htype = dev->type;
 	else if (dev->type == ARPHRD_IEEE802_TR) /* fix for token ring */
 		b->htype = ARPHRD_IEEE802;
+	else if (dev->type == ARPHRD_IEEE80211) /* fix for wireless lan */
+		b->htype = ARPHRD_ETHER;
 	else {
 		printk("Unknown ARP type 0x%04x for device %s\n", dev->type, dev->name);
 		b->htype = dev->type; /* can cause undefined behavior */
diff -rNu ./linux-orig/net/ipv6/addrconf.c ./linux/net/ipv6/addrconf.c
--- ./linux-orig/net/ipv6/addrconf.c	Sun Apr 14 17:26:17 2002
+++ ./linux/net/ipv6/addrconf.c	Sun Apr 14 17:11:40 2002
@@ -686,6 +686,7 @@
 	case ARPHRD_ETHER:
 	case ARPHRD_FDDI:
 	case ARPHRD_IEEE802_TR:
+	case ARPHRD_IEEE80211:
 		if (dev->addr_len != ETH_ALEN)
 			return -1;
 		memcpy(eui, dev->dev_addr, 3);
@@ -1224,7 +1225,8 @@
 
 	if ((dev->type != ARPHRD_ETHER) && 
 	    (dev->type != ARPHRD_FDDI) &&
-	    (dev->type != ARPHRD_IEEE802_TR)) {
+	    (dev->type != ARPHRD_IEEE802_TR) &&
+	    (dev->type != ARPHRD_IEEE80211)) {
 		/* Alas, we support only Ethernet autoconfiguration. */
 		return;
 	}
@@ -2020,6 +2022,7 @@
 		case ARPHRD_ETHER:
 		case ARPHRD_FDDI:
 		case ARPHRD_IEEE802_TR:	
+		case ARPHRD_IEEE80211:	
 			addrconf_dev_config(dev);
 			break;
 		default:;
diff -rNu ./linux-orig/net/ipv6/ndisc.c ./linux/net/ipv6/ndisc.c
--- ./linux-orig/net/ipv6/ndisc.c	Sun Apr 14 17:26:17 2002
+++ ./linux/net/ipv6/ndisc.c	Sun Apr 14 17:11:40 2002
@@ -165,6 +165,7 @@
 	case ARPHRD_ETHER:
 	case ARPHRD_IEEE802:	/* Not sure. Check it later. --ANK */
 	case ARPHRD_FDDI:
+	case ARPHRD_IEEE80211:
 		ipv6_eth_mc_map(addr, buf);
 		return 0;
 	case ARPHRD_IEEE802_TR:
