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


Reply via email to