summaryrefslogtreecommitdiffstats
path: root/sys/net/if_arcsubr.c
diff options
context:
space:
mode:
authormdodd <mdodd@FreeBSD.org>2004-03-21 06:34:34 +0000
committermdodd <mdodd@FreeBSD.org>2004-03-21 06:34:34 +0000
commitf7356ef2fa763505e4568f6088a9d9d5ffd3864b (patch)
tree0b234f3b67a39b695abc71b337aa05704dfbdc0e /sys/net/if_arcsubr.c
parent8aaef875435a8226f0b86fad7ae7a33b4d615a99 (diff)
downloadFreeBSD-src-f7356ef2fa763505e4568f6088a9d9d5ffd3864b.zip
FreeBSD-src-f7356ef2fa763505e4568f6088a9d9d5ffd3864b.tar.gz
Handle AF_ARP.
Diffstat (limited to 'sys/net/if_arcsubr.c')
-rw-r--r--sys/net/if_arcsubr.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/sys/net/if_arcsubr.c b/sys/net/if_arcsubr.c
index 1912dc3..dba312b 100644
--- a/sys/net/if_arcsubr.c
+++ b/sys/net/if_arcsubr.c
@@ -142,6 +142,33 @@ arc_output(ifp, m, dst, rt0)
atype = (ifp->if_flags & IFF_LINK0) ?
ARCTYPE_IP_OLD : ARCTYPE_IP;
break;
+ case AF_ARP:
+ {
+ struct arphdr *ah;
+ ah = mtod(m, struct arphdr *);
+ ah->ar_hrd = htons(ARPHRD_ARCNET);
+
+ loop_copy = -1; /* if this is for us, don't do it */
+
+ switch(ntohs(ah->ar_op)) {
+ case ARPOP_REVREQUEST:
+ case ARPOP_REVREPLY:
+ type = htons(ARCTYPE_REVARP);
+ break;
+ case ARPOP_REQUEST:
+ case ARPOP_REPLY:
+ default:
+ type = htons(ARCTYPE_ARP);
+ break;
+ }
+
+ if (m->m_flags & M_BCAST)
+ bcopy(ifp->if_broadcastaddr, adst, ARC_ADDR_LEN);
+ else
+ bcopy(ar_tha(ah), adst, ARC_ADDR_LEN);
+
+ }
+ break;
#endif
#ifdef INET6
case AF_INET6:
OpenPOWER on IntegriCloud