Time Issue on OpenBSD 4.2 with rc.69 (Was: Re: Sparc64 OpenBSD4.1 Compile issue)
Eric Pancer
epancer at pobox.com
Fri Feb 8 18:11:30 EST 2008
Carter -
Ok, my gdb results are below.
On Fri, 2008-02-08 at 11:00:49 -0500, Carter Bullard proclaimed...
> So the key is on line 2551, in ArgusGenerateRecord(). When it copies
> the tv_sec
> from the flow control block to the packet output buffer, is it getting
> the right value.
> So do this at the break point on line 2551:
# gdb argus
GNU gdb 6.3
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-unknown-openbsd4.2"...
(gdb) break ArgusProcessPacket
Breakpoint 1 at 0x1c0070dd: file ArgusModeler.c, line 1138.
(gdb) run -w /tmp/ff.out
Starting program: /usr/local/argus/sbin/argus -w /tmp/ff.out
ArgusWarning: argus[10629]: 08 Feb 08 17:03:07.315247 started
ArgusWarning: argus[10629]: 08 Feb 08 17:03:07.315844
ArgusGetInterfaceStatus: interface em0 is up
Breakpoint 1, ArgusProcessPacket (src=0x819f801c, p=0x8ac10012 "",
length=170, tvp=0x8a5da174, type=1) at ArgusModeler.c:1138
1138 struct ArgusModelerStruct *model = src->ArgusModel;
(gdb) print sizeof(*tvp)
$1 = 8
(gdb) print *tvp
$2 = {tv_sec = 1202511787, tv_usec = 315744}
(gdb) break 1297
Breakpoint 2 at 0x1c00789e: file ArgusModeler.c, line 1297.
(gdb) cont
Continuing.
Breakpoint 2, ArgusProcessPacket (src=0x819f801c, p=0x8ac10012 "", length=170,
tvp=0x8a5da174, type=0) at ArgusModeler.c:1297
1297 return (retn);
(gdb) print flow->qhdr
Cannot access memory at address 0x0
(gdb) print model->ArgusGlobalTime
$3 = {tv_sec = 1202511787, tv_usec = 315744}
(gdb) delete
Delete all breakpoints? (y or n) y
(gdb) list ArgusGenerateRecord
2402 */
2403
2404 struct ArgusRecord *
2405 ArgusGenerateRecord (struct ArgusModelerStruct *model, struct ArgusRecordStruct *rec,
2406 unsigned char state, struct ArgusRecord *retn)
2407 {
2408
2409 if (rec) {
2410 if (rec->hdr.type & ARGUS_FAR) {
2411 unsigned int ind, dsrindex, *dsrptr;
(gdb) break 2522
Breakpoint 3 at 0x1c00a707: file ArgusModeler.c, line 2522.
(gdb) cont
Continuing.
Breakpoint 3, ArgusGenerateRecord (model=0x8bf3801c, rec=0x8ac1ac38,
state=0 '\0', retn=0x888b306c) at ArgusModeler.c:2522
2522 if (model->ArgusReportAllTime) {
(gdb) print *dtime
$4 = {hdr = {type = 3 '\003', subtype = 2 '\002', dsr_un = {fl = {data = 792},
vl8 = {qual = 24 '\030', len = 3 '\003'}, vl16 = {len = 792}}}, src = {
start = {tv_sec = 1202511787, tv_usec = 315744}, end = {
tv_sec = 1202511822, tv_usec = 957994}}, dst = {start = {
tv_sec = 1202511787, tv_usec = 316154}, end = {tv_sec = 1202511823,
tv_usec = 71675}}}
(gdb) break 2551
Breakpoint 4 at 0x1c00a81d: file ArgusModeler.c, line 2551.
(gdb) cont
Continuing.
Breakpoint 4, ArgusGenerateRecord (model=0x8bf3801c, rec=0x8ac1ac38,
state=0 '\0', retn=0x888b306c) at ArgusModeler.c:2551
2551 *dsrptr++ = dtime->src.start.tv_usec;
(gdb) print sizeof(dtime->src.start)
$5 = 8
(gdb) x/2x &dtime->src.start
0x8ac1ad08: 0x47acdfab 0x0004d160
(gdb) print dsrptr
$6 = (unsigned int *) 0x888b3098
(gdb) n
2552 break;
(gdb) n
2546 for (x = 0; x < 4; x++) {
(gdb) x/2x 0x8ac1ad08
0x8ac1ad08: 0x47acdfab 0x0004d160
End of # `gdb argus'
> The next step will be to run ra() under gdb, and stop in the routine
> ArgusGenerateRecordStruct(), to see what numbers get unpacked
> into the time structs.
$ gdb ra
GNU gdb 6.3
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-unknown-openbsd4.2"...
(gdb) l ArgusGenerateRecordStruct
2559
2560 struct ArgusRecordStruct ArgusGenerateRecordBuffer;
2561
2562 struct ArgusRecordStruct *
2563 ArgusGenerateRecordStruct (struct ArgusParserStruct *parser, struct
ArgusInput *input, struct ArgusRecord *argus)
2564 {
2565 struct ArgusRecordStruct *retn = NULL;
2566 unsigned int ArgusReverse = 0, status = 0;
2567
2568 if (argus == NULL) {
(gdb) break 3079
Breakpoint 1 at 0x1c04eae1: file argus_client.c, line 3079.
(gdb) run -S 10.15.223.177
Starting program: /usr/local/argus/bin/ra -S 10.15.223.177
[Switching to process 17026, thread 0x869ac000]
Breakpoint 1, ArgusGenerateRecordStruct (parser=0x7e26601c,
input=0x88c4e01c,
argus=0x7c20701c) at argus_client.c:3079
3079 retn->dsrs[ARGUS_TIME_INDEX] = (struct
ArgusDSRHeader*) &retn->canon.time;
(gdb) print retn->canon.time
$1 = {hdr = {type = 3 '\003', subtype = 9 '\t', dsr_un = {fl = {data = 792},
vl8 = {qual = 24 '\030', len = 3 '\003'}, vl16 = {len = 792}}}, src =
{
start = {tv_sec = 670348, tv_usec = 60}, end = {tv_sec = 670348,
tv_usec = 60}}, dst = {start = {tv_sec = 0, tv_usec = 0}, end = {
tv_sec = 0, tv_usec = 0}}}
(gdb) break RaProcessRecord
Breakpoint 2 at 0x1c002d6b: file ra.c, line 188.
(gdb) c
Continuing.
Breakpoint 2, RaProcessRecord (parser=0x7e26601c, argus=0x88c4e268) at
ra.c:188
188 if (argus->hdr.type & ARGUS_MAR) {
(gdb) print argus->canon.time
$2 = {hdr = {type = 3 '\003', subtype = 9 '\t', dsr_un = {fl = {data = 792},
vl8 = {qual = 24 '\030', len = 3 '\003'}, vl16 = {len = 792}}}, src =
{
start = {tv_sec = 670348, tv_usec = 60}, end = {tv_sec = 670348,
tv_usec = 60}}, dst = {start = {tv_sec = 0, tv_usec = 0}, end = {
tv_sec = 0, tv_usec = 0}}}
(gdb) l ArgusPrintStartDate
1843 }
1844 }
1845
1846 void
1847 ArgusPrintStartDate (struct ArgusParserStruct *parser, char *buf, struct ArgusRecordStruct *argus, int len)
1848 {
1849 struct timeval tvpbuf, *tvp = &tvpbuf;
1850 char tbuf[256];
1851
1852 len += parser->pflag;
(gdb) break 1867
Breakpoint 3 at 0x1c0198a4: file argus_util.c, line 1867.
(gdb) c
Continuing.
Breakpoint 3, ArgusPrintStartDate (parser=0x7e26601c, buf=0x3c01f6e0 "",
argus=0x88c4e268, len=18) at argus_util.c:1867
1867 ArgusPrintTime(parser, tbuf, tvp);
(gdb) print *tvp
$3 = {tv_sec = 670348, tv_usec = 60}
(gdb) print sizeof(*tvp)
$4 = 8
(gdb)
End of `gdb ra'
- Eric
More information about the argus
mailing list