* 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.
* %sccs.include.redist.c%
* @(#)hd_debug.c 7.5 (Berkeley) %G%
int lasttracelogged
, freezetrace
;
hd_trace (hdp
, direction
, frame
)
register struct Hdlc_frame
*frame
;
register int nr
, pf
, ns
, i
;
struct Hdlc_iframe
*iframe
= (struct Hdlc_iframe
*) frame
;
hd_savetrace (hdp
, direction
, frame
);
if (hdp
-> hd_xcp
-> xc_ltrace
) {
switch (hd_decode (hdp
, frame
)) {
printf ("SABM : PF=%d\n", pf
);
printf ("DISC : PF=%d\n", pf
);
printf ("DM : PF=%d\n", pf
);
register struct Frmr_frame
*f
= (struct Frmr_frame
*)frame
;
printf ("FRMR : PF=%d, TEXT=", pf
);
for (s
= (char *) frame
, i
= 0; i
< 5; ++i
, ++s
)
printf ("%x ", (int) * s
& 0xff);
printf ("control=%x v(s)=%d v(r)=%d w%d x%d y%d z%d\n",
f
->frmr_control
, f
->frmr_ns
, f
->frmr_nr
,
f
->frmr_w
, f
->frmr_x
, f
->frmr_y
, f
->frmr_z
);
printf ("UA : PF=%d\n", pf
);
printf ("RR : N(R)=%d, PF=%d\n", nr
, pf
);
printf ("RNR : N(R)=%d, PF=%d\n", nr
, pf
);
printf ("REJ : N(R)=%d, PF=%d\n", nr
, pf
);
for(m
= dtom (frame
); m
; m
= m
-> m_next
)
printf ("IFRAME : N(R)=%d, PF=%d, N(S)=%d, DATA(%d)=",
for (s
= (char *)iframe
->i_field
, i
= 0; i
< 3; ++i
, ++s
)
printf ("%x ", (int) *s
& 0xff);
for (s
= (char *) frame
, i
= 0; i
< 5; ++i
, ++s
)
printf ("%x ", (int) *s
& 0xff);
hd_savetrace (hdp
, dir
, frame
)
struct Hdlc_frame
*frame
;
register struct hdlctrace
*htp
;
htp
= &hdtrace
[lasttracelogged
];
lasttracelogged
= (lasttracelogged
+ 1) % NTRACE
;
htp
->ht_frame
= m_copy (m
, 0, m
->m_len
);
register struct hdlctrace
*htp
;
printf ("retransmit queue:");
printf (" %x", hdp
-> hd_retxq
[i
]);
ltrace
= hdp
-> hd_xcp
-> xc_ltrace
;
hdp
-> hd_xcp
-> xc_ltrace
= 1;
for (i
= 0; i
< NTRACE
; i
++) {
htp
= &hdtrace
[(lasttracelogged
+ i
) % NTRACE
];
if (htp
->ht_hdp
!= hdp
|| htp
->ht_frame
== 0)
printf ("%d/%d ", htp
->ht_time
.tv_sec
& 0xff,
htp
->ht_time
.tv_usec
/ 10000);
hd_trace (htp
->ht_hdp
, htp
->ht_dir
,
mtod (htp
->ht_frame
, struct Hdlc_frame
*));
hdp
-> hd_xcp
-> xc_ltrace
= ltrace
;