diff options
author | mdodd <mdodd@FreeBSD.org> | 2004-03-14 05:24:54 +0000 |
---|---|---|
committer | mdodd <mdodd@FreeBSD.org> | 2004-03-14 05:24:54 +0000 |
commit | 07e9f5afcafa05803364f4238c2794141edf058c (patch) | |
tree | fa04f6c12f731d091e642544a54bdf19c0a8e3c3 /sys/net/if_fddisubr.c | |
parent | 76b946302c8928c38179cf60c7c3f5e5a30a3c33 (diff) | |
download | FreeBSD-src-07e9f5afcafa05803364f4238c2794141edf058c.zip FreeBSD-src-07e9f5afcafa05803364f4238c2794141edf058c.tar.gz |
Handle AF_ARP in *_output()
Obtained from: NetBSD
Diffstat (limited to 'sys/net/if_fddisubr.c')
-rw-r--r-- | sys/net/if_fddisubr.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/sys/net/if_fddisubr.c b/sys/net/if_fddisubr.c index e6c1920..c8abd63 100644 --- a/sys/net/if_fddisubr.c +++ b/sys/net/if_fddisubr.c @@ -146,6 +146,33 @@ fddi_output(ifp, m, dst, rt0) type = htons(ETHERTYPE_IP); break; } + case AF_ARP: + { + struct arphdr *ah; + ah = mtod(m, struct arphdr *); + ah->ar_hrd = htons(ARPHRD_ETHER); + + 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(ETHERTYPE_REVARP); + break; + case ARPOP_REQUEST: + case ARPOP_REPLY: + default: + type = htons(ETHERTYPE_ARP); + break; + } + + if (m->m_flags & M_BCAST) + bcopy(ifp->if_broadcastaddr, edst, FDDI_ADDR_LEN); + else + bcopy(ar_tha(ah), edst, FDDI_ADDR_LEN); + + } + break; #endif /* INET */ #ifdef INET6 case AF_INET6: |