summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/net/if_ef.c11
-rw-r--r--sys/net/if_ethersubr.c4
2 files changed, 9 insertions, 6 deletions
diff --git a/sys/net/if_ef.c b/sys/net/if_ef.c
index e2ede08..ad28d5d 100644
--- a/sys/net/if_ef.c
+++ b/sys/net/if_ef.c
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 1999, Boris Popov
+ * Copyright (c) 1999, 2000 Boris Popov
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -92,7 +92,7 @@ static int efcount;
extern int (*ef_inputp)(struct ifnet*, struct ether_header *eh, struct mbuf *m);
extern int (*ef_outputp)(struct ifnet *ifp, struct mbuf **mp,
- struct sockaddr *dst, short *tp);
+ struct sockaddr *dst, short *tp, int *hlen);
/*
static void ef_reset (struct ifnet *);
@@ -104,7 +104,7 @@ static int ef_ioctl(struct ifnet *, u_long, caddr_t);
static void ef_start(struct ifnet *);
static int ef_input(struct ifnet*, struct ether_header *, struct mbuf *);
static int ef_output(struct ifnet *ifp, struct mbuf **mp,
- struct sockaddr *dst, short *tp);
+ struct sockaddr *dst, short *tp, int *hlen);
static int ef_load(void);
static int ef_unload(void);
@@ -430,7 +430,8 @@ ef_input(struct ifnet *ifp, struct ether_header *eh, struct mbuf *m)
}
static int
-ef_output(struct ifnet *ifp, struct mbuf **mp, struct sockaddr *dst, short *tp)
+ef_output(struct ifnet *ifp, struct mbuf **mp, struct sockaddr *dst, short *tp,
+ int *hlen)
{
struct mbuf *m = *mp;
u_char *cp;
@@ -470,6 +471,7 @@ ef_output(struct ifnet *ifp, struct mbuf **mp, struct sockaddr *dst, short *tp)
*cp++ = 0xE0;
*cp++ = 0xE0;
*cp++ = 0x03;
+ *hlen += 3;
break;
case ETHER_FT_SNAP:
M_PREPEND(m, 8, M_WAIT);
@@ -480,6 +482,7 @@ ef_output(struct ifnet *ifp, struct mbuf **mp, struct sockaddr *dst, short *tp)
type = htons(m->m_pkthdr.len);
cp = mtod(m, u_char *);
bcopy("\xAA\xAA\x03\x00\x00\x00\x81\x37", cp, 8);
+ *hlen += 8;
break;
default:
return EPFNOSUPPORT;
diff --git a/sys/net/if_ethersubr.c b/sys/net/if_ethersubr.c
index 3a3b09a..0bf8070 100644
--- a/sys/net/if_ethersubr.c
+++ b/sys/net/if_ethersubr.c
@@ -73,7 +73,7 @@
#include <netipx/ipx_if.h>
int (*ef_inputp)(struct ifnet*, struct ether_header *eh, struct mbuf *m);
int (*ef_outputp)(struct ifnet *ifp, struct mbuf **mp,
- struct sockaddr *dst, short *tp);
+ struct sockaddr *dst, short *tp, int *hlen);
#endif
#ifdef NS
@@ -194,7 +194,7 @@ ether_output(ifp, m, dst, rt0)
#ifdef IPX
case AF_IPX:
if (ef_outputp) {
- error = ef_outputp(ifp, &m, dst, &type);
+ error = ef_outputp(ifp, &m, dst, &type, &hlen);
if (error)
goto bad;
} else
OpenPOWER on IntegriCloud