Hi Rob,
In the entry data structure, there is a field called 'attr'. This
contains various attributes, including the AS PATH:
see bgpdump_attr.h:
struct attr
{
<snip>
struct aspath *aspath;
}
struct aspath
{
u_int8_t asn_len;
int length;
int count;
caddr_t data;
char *str;
};
The 'data' is the raw attribute, but libbgpdump also helpfully fills in
'str' as a decoded string representation of the AS Path (using function
process_attr_aspath_string).
So to access it, quoting from what bgpdump.c and example.c does:
if (entry->attr && entry->attr->len) {
if( (entry->attr->flag & ATTR_FLAG_BIT(BGP_ATTR_AS_PATH) ) !=0) {
printf("ASPATH: %s\n",entry->attr->aspath->str);
}
}
Hope this helps, if you need some more help with it, just let me know.
Colin
(bgpdump maintainer)
On 06-11-2023 19:59, Rob Ballantyne wrote:
Hello All,
I’ve just started looking at libbgpdump for a project where I will be
parsing MRT/BGP data.
I’ve managed, following the example/advice I’ve seen, to get a basic
loop running through an update file from the repository working.
However, I don’t seem to be able to find the ASPATH component in the
parsed data structure.
I can see the type/subtype of the data block is
BGPDUMP_TYPE_ZEBRA_BGP/BGPDUMP_SUBTYPE_ZEBRA_BGP_MESSAGE.I can also see
that the BGPDUMP_BODY is a discriminated union based on these values. I
can see that BGPDUMP_ENTRY.attr should probably contain an ASPATH but it
doesn’t seem to be set ever.
Should I be expecting the ASPATH to be set in this case? Should I be
doing something different (calling some init function after discovering
the BGPDUMP_BODY is of the right type?).
Thanks!
Rob