* Copyright (c) University of British Columbia, 1984
* Copyright (c) 1990 The Regents of the University of California.
* This code is derived from software contributed to Berkeley by
* the Laboratory for Computation Vision and the Computer Science Department
* of the University of British Columbia.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* @(#)pk_acct.c 7.6 (Berkeley) 6/26/91
* Turn on packet accounting
register struct vnode
*vp
= NULL
;
struct vnode
*oacctp
= pkacctp
;
struct proc
*p
= curproc
;
nd
.ni_segflg
= UIO_USERSPACE
;
if (error
= vn_open (&nd
, p
, FWRITE
, 0644))
if (vp
-> v_type
!= VREG
) {
error
= vn_close (oacctp
, FWRITE
, p
-> p_ucred
, p
);
* Write a record on the accounting file.
register struct pklcd
*lcp
;
register struct vnode
*vp
;
register struct sockaddr_x25
*sa
;
register char *src
, *dst
;
static struct x25acct acbuf
;
bzero ((caddr_t
)&acbuf
, sizeof (acbuf
));
if (lcp
-> lcd_ceaddr
!= 0)
else if (lcp
-> lcd_craddr
!= 0) {
acbuf
.x25acct_callin
= 1;
if (sa
-> x25_opts
.op_flags
& X25_REVERSE_CHARGE
)
acbuf
.x25acct_revcharge
= 1;
acbuf
.x25acct_stime
= lcp
-> lcd_stime
;
acbuf
.x25acct_etime
= time
.tv_sec
- acbuf
.x25acct_stime
;
acbuf
.x25acct_uid
= curproc
-> p_cred
-> p_ruid
;
acbuf
.x25acct_psize
= sa
-> x25_opts
.op_psize
;
acbuf
.x25acct_net
= sa
-> x25_net
;
dst
= acbuf
.x25acct_addr
;
for (len
= 0; *src
; len
++)
acbuf
.x25acct_addrlen
= len
;
bcopy (sa
-> x25_udata
, acbuf
.x25acct_udata
,
sizeof (acbuf
.x25acct_udata
));
acbuf
.x25acct_txcnt
= lcp
-> lcd_txcnt
;
acbuf
.x25acct_rxcnt
= lcp
-> lcd_rxcnt
;
(void) vn_rdwr(UIO_WRITE
, vp
, (caddr_t
)&acbuf
, sizeof (acbuf
),
(off_t
)0, UIO_SYSSPACE
, IO_UNIT
|IO_APPEND
,
curproc
-> p_ucred
, (int *)0,