diff options
author | mdodd <mdodd@FreeBSD.org> | 2004-03-21 06:34:34 +0000 |
---|---|---|
committer | mdodd <mdodd@FreeBSD.org> | 2004-03-21 06:34:34 +0000 |
commit | f7356ef2fa763505e4568f6088a9d9d5ffd3864b (patch) | |
tree | 0b234f3b67a39b695abc71b337aa05704dfbdc0e /sys/net | |
parent | 8aaef875435a8226f0b86fad7ae7a33b4d615a99 (diff) | |
download | FreeBSD-src-f7356ef2fa763505e4568f6088a9d9d5ffd3864b.zip FreeBSD-src-f7356ef2fa763505e4568f6088a9d9d5ffd3864b.tar.gz |
Handle AF_ARP.
Diffstat (limited to 'sys/net')
-rw-r--r-- | sys/net/if_arcsubr.c | 27 |
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: |