blob: 984104b8514432b0ce5f8fe7e394857bd8119eae [file] [log] [blame]
# GDB macros for use with Quagga.
#
# Macros in this file are specific to ospfd/. Definitions here depend on the
# lib.txt macros file, which must also be loaed.
#
# The macro file can be loaded with 'source <filename>'. They can then be
# called by the user. Macros that explore more complicated structs generally
# take pointer arguments.
define dump_ospf_lsa_flags
set $flags = $arg0
printf "%u: ", $flags
if $flags & 0x1
echo Self,
end
if $flags & 0x2
echo Self-checked,
end
if $flags & 0x4
echo Recvd,
end
if $flags & 0x8
echo Apprvd,
end
if $flags & 0x10
echo Discard,
end
if $flags & 0x20
echo Local-Xlt,
end
if $flags & 0x40
echo Premature-Aged,
end
if $flags & 0x40
echo In-Maxage,
end
echo \n
end
define dump_ospf_lsa_data
set $lsad = (struct lsa_header *)$arg0
echo ID / AdvRtr: \t\t
dump_s_addr &$lsad->id.s_addr
echo \ : \
dump_s_addr &$lsad->adv_router.s_addr
echo \n
def_ntohs &$lsad->ls_age
printf "Type: %2u Age: %4u,", $lsad->type, $_
def_ntohs &$lsad->length
printf " length: %2u", $_
def_ntohl &$lsad->ls_seqnum
printf " Seqnum: 0x%08x", $_
def_ntohs &$lsad->checksum
printf " csum: 0x%04x\n", $_
# return the age
def_ntohs &$lsad->ls_age
end
define dump_ospf_lsa
set $lsa = (struct ospf_lsa *)$arg0
#print/x *$lsa
dump_ospf_lsa_data $lsa->data
set $relage = $_ + (relative_time.tv_sec - $lsa->tv_recv.tv_sec)
printf "Relative age: %4u\n", $relage
dump_ospf_lsa_flags $lsa->flags
echo tv_recv: \
dump_timeval &$lsa->tv_recv
echo \ tv_orig: \
dump_timeval &$lsa->tv_orig
echo \n
printf "lock %2u", $lsa->lock
printf " stat %2d", $lsa->stat
printf " rtx count: %u", $lsa->retransmit_counter
printf " rfsh list: %d", $lsa->refresh_list
printf "\n\n"
end
define walk_ospf_lsdb
set $node = (struct route_node *)$arg0
set $top = (struct route_node *)$arg0
set $visited = 0
while ($node != 0)
set $prevl = $node
if ($node->info != 0)
dump_ospf_lsa $node->info
set $visited = $visited + 1
end
walk_route_table_next $top $node
set $node = $_
# we've gotten back to the top, finish
if ($node == $top)
set $node = 0
end
end
printf "Visited: %u\n", $visited
end
document walk_ospf_lsdb
Walk through an OSPF LSDB (or subset thereof) and dump all the LSAs
contained there-in.
Argument: A (struct route_node *) pointing to the top of the
LSDB route-table which should be dumped.
end
define ospf_backbone_lsdb_top
set $type = $arg0
set $ospf = ospf_master->ospf->head->data
output/x ((struct ospf *)$ospf)->backbone->lsdb->type[$type]->db->top
echo \n
end
document ospf_backbone_lsdb_top
Dump location of the LSDB in the backbone area for the given LSA type
Argument: Integer LSA type
end