Add FDDI source address spoofing via pseudo_AF_HDRCMPLT.

This commit is contained in:
thorpej 1998-05-01 03:44:52 +00:00
parent cb160f72a3
commit 7e223b244a
1 changed files with 18 additions and 5 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: if_fddisubr.c,v 1.16 1998/04/29 21:37:54 matt Exp $ */
/* $NetBSD: if_fddisubr.c,v 1.17 1998/05/01 03:44:52 thorpej Exp $ */
/*
* Copyright (c) 1995, 1996
@ -158,8 +158,8 @@ fddi_output(ifp, m0, dst, rt0)
struct rtentry *rt0;
{
u_int16_t etype;
int s, error = 0;
u_char edst[6];
int s, error = 0, hdrcmplt = 0;
u_char esrc[6], edst[6];
register struct mbuf *m = m0;
register struct rtentry *rt;
register struct fddi_header *fh;
@ -401,6 +401,15 @@ fddi_output(ifp, m0, dst, rt0)
} break;
#endif /* LLC */
case pseudo_AF_HDRCMPLT:
{
struct ether_header *eh;
hdrcmplt = 1;
eh = (struct ether_header *)dst->sa_data;
bcopy((caddr_t)eh->ether_shost, (caddr_t)esrc, sizeof (esrc));
/* FALLTHROUGH */
}
case AF_UNSPEC:
{
struct ether_header *eh;
@ -486,8 +495,12 @@ fddi_output(ifp, m0, dst, rt0)
#if NBPFILTER > 0
queue_it:
#endif
bcopy((caddr_t)FDDIADDR(ifp), (caddr_t)fh->fddi_shost,
sizeof(fh->fddi_shost));
if (hdrcmplt)
bcopy((caddr_t)esrc, (caddr_t)fh->fddi_shost,
sizeof(fh->fddi_shost));
else
bcopy((caddr_t)FDDIADDR(ifp), (caddr_t)fh->fddi_shost,
sizeof(fh->fddi_shost));
s = splimp();
/*
* Queue message on interface, and start output if interface