Try this patch.
Index: if_tun.c
===================================================================
RCS file: /cvs/src/sys/net/if_tun.c,v
retrieving revision 1.73
diff -u -1 -6 -r1.73 if_tun.c
--- if_tun.c 2000/01/29 01:10:24 1.73
+++ if_tun.c 2000/02/15 21:49:40
@@ -620,32 +620,33 @@
m->m_len = min(mlen, uio->uio_resid);
error = uiomove(mtod (m, caddr_t), m->m_len, uio);
*mp = m;
mp = &m->m_next;
if (uio->uio_resid > 0) {
MGET (m, M_DONTWAIT, MT_DATA);
if (m == 0) {
error = ENOBUFS;
break;
}
mlen = MLEN;
}
}
if (error) {
if (top)
m_freem (top);
+ ifp->if_ierrors++;
return error;
}
top->m_pkthdr.len = tlen;
top->m_pkthdr.rcvif = ifp;
if (ifp->if_bpf) {
if (tp->tun_flags & TUN_IFHEAD)
/*
* Conveniently, we already have a 4-byte address
* family prepended to our packet !
*/
bpf_mtap(ifp, top);
else {
/*
* We need to prepend the address family as
@@ -660,32 +661,34 @@
m.m_next = top;
m.m_len = 4;
m.m_data = (char *)⁡
bpf_mtap(ifp, &m);
}
}
if (tp->tun_flags & TUN_IFHEAD) {
if (top->m_len < sizeof(family) &&
(top = m_pullup(top, sizeof(family))) == NULL)
return ENOBUFS;
family = ntohl(*mtod(top, u_int32_t *));
m_adj(top, sizeof(family));
} else
family = AF_INET;
+
+ ifp->if_ipackets++;
return family_enqueue(family, top);
}
/*
* tunpoll - the poll interface, this is only useful on reads
* really. The write detect always returns true, write never blocks
* anyway, it either accepts the packet or drops it.
*/
static int
tunpoll(dev, events, p)
dev_t dev;
int events;
struct proc *p;
{
int s;
On Tue, 15 Feb 2000, Igor Timkin wrote:
> 4.0-CURRENT seems don't count inpput packets/bytes on tun interface
> (3.4-STABLE don't has such problem):
> ivt@newsfeed:/news/etc:2:322>netstat -in
> Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll
> fxp0 1500 <Link#1> 00:a0:c9:a3:5a:85 6312807 4 6938927 2 0
> fxp0 1500 194.186.254/2 194.186.254.21 6312807 4 6938927 2 0
> fxp0 1500 212.192.244.1 212.192.244.21 6312807 4 6938927 2 0
> lo0 16384 <Link#2> 37 0 37 0 0
> lo0 16384 127 127.0.0.1 37 0 37 0 0
> tun0 1500 <Link#3> 0 0 2051136 0 0
> tun0 1500 195.161.2 195.161.2.170 0 0 2051136 0 0
> ivt@newsfeed:/news/etc:2:323>uname -a
> FreeBSD newsfeed.gamma.ru 4.0-CURRENT FreeBSD 4.0-CURRENT #4: Mon Feb 14 08:58:33
>MSK 2000 [EMAIL PROTECTED]:/usr/src/sys/compile/NEWSFEED i386
>
>
>
> To Unsubscribe: send mail to [EMAIL PROTECTED]
> with "unsubscribe freebsd-current" in the body of the message
>
--
| Matthew N. Dodd | '78 Datsun 280Z | '75 Volvo 164E | FreeBSD/NetBSD |
| [EMAIL PROTECTED] | 2 x '84 Volvo 245DL | ix86,sparc,pmax |
| http://www.jurai.net/~winter | This Space For Rent | ISO8802.5 4ever |
Index: if_tun.c
===================================================================
RCS file: /cvs/src/sys/net/if_tun.c,v
retrieving revision 1.73
diff -u -1 -6 -r1.73 if_tun.c
--- if_tun.c 2000/01/29 01:10:24 1.73
+++ if_tun.c 2000/02/15 21:49:40
@@ -620,32 +620,33 @@
m->m_len = min(mlen, uio->uio_resid);
error = uiomove(mtod (m, caddr_t), m->m_len, uio);
*mp = m;
mp = &m->m_next;
if (uio->uio_resid > 0) {
MGET (m, M_DONTWAIT, MT_DATA);
if (m == 0) {
error = ENOBUFS;
break;
}
mlen = MLEN;
}
}
if (error) {
if (top)
m_freem (top);
+ ifp->if_ierrors++;
return error;
}
top->m_pkthdr.len = tlen;
top->m_pkthdr.rcvif = ifp;
if (ifp->if_bpf) {
if (tp->tun_flags & TUN_IFHEAD)
/*
* Conveniently, we already have a 4-byte address
* family prepended to our packet !
*/
bpf_mtap(ifp, top);
else {
/*
* We need to prepend the address family as
@@ -660,32 +661,34 @@
m.m_next = top;
m.m_len = 4;
m.m_data = (char *)⁡
bpf_mtap(ifp, &m);
}
}
if (tp->tun_flags & TUN_IFHEAD) {
if (top->m_len < sizeof(family) &&
(top = m_pullup(top, sizeof(family))) == NULL)
return ENOBUFS;
family = ntohl(*mtod(top, u_int32_t *));
m_adj(top, sizeof(family));
} else
family = AF_INET;
+
+ ifp->if_ipackets++;
return family_enqueue(family, top);
}
/*
* tunpoll - the poll interface, this is only useful on reads
* really. The write detect always returns true, write never blocks
* anyway, it either accepts the packet or drops it.
*/
static int
tunpoll(dev, events, p)
dev_t dev;
int events;
struct proc *p;
{
int s;