Net-BGPdump
view release on metacpan or search on metacpan
MC(BGPDUMP_SUBTYPE_ZEBRA_BGP_STATE_CHANGE_AS4);
// BGP states
MC(BGP_STATE_IDLE);
MC(BGP_STATE_CONNECT);
MC(BGP_STATE_ACTIVE);
MC(BGP_STATE_OPENSENT);
MC(BGP_STATE_OPENCONFIRM);
MC(BGP_STATE_ESTABLISHED);
// zebra message types
MC(BGP_MSG_UPDATE);
MC(BGP_MSG_OPEN);
MC(BGP_MSG_NOTIFY);
MC(BGP_MSG_KEEPALIVE);
MC(BGP_MSG_ROUTE_REFRESH_01);
MC(BGP_MSG_ROUTE_REFRESH);
}
Net::BGPdump
_open(class, filename)
char *class
char *filename
CODE:
PERL_UNUSED_VAR(class);
RETVAL = bgpdump_open_dump(filename);
OUTPUT:
RETVAL
void
close(THIS)
Net::BGPdump THIS
CODE:
cfr_close(THIS->f);
void
_destroy(THIS)
Net::BGPdump THIS
CODE:
bgpdump_close_dump(THIS);
int
closed(THIS)
Net::BGPdump THIS
CODE:
RETVAL = THIS->f->closed;
OUTPUT:
RETVAL
int
eof(THIS)
Net::BGPdump THIS
CODE:
RETVAL = THIS->eof;
OUTPUT:
RETVAL
void
file_type(THIS)
Net::BGPdump THIS
PPCODE:
switch (THIS->f->format) {
case 0:
// not opened
break;
case 1:
mXPUSHs(newSVpv("uncompressed", 0));
break;
case 2:
mXPUSHs(newSVpv("bzip2", 0));
break;
case 3:
mXPUSHs(newSVpv("gzip", 0));
break;
default:
croak("unknown file format: %d", THIS->f->format);
}
int
records(THIS)
Net::BGPdump THIS
CODE:
RETVAL = THIS->parsed;
OUTPUT:
RETVAL
int
parsed_ok(THIS)
Net::BGPdump THIS
CODE:
RETVAL = THIS->parsed_ok;
OUTPUT:
RETVAL
int
parsed_fail(THIS)
Net::BGPdump THIS
CODE:
RETVAL = THIS->parsed - THIS->parsed_ok;
OUTPUT:
RETVAL
char *
filename(THIS)
Net::BGPdump THIS
CODE:
RETVAL = THIS->filename;
OUTPUT:
RETVAL
void
filter_read(THIS, ipv6, lo_time, hi_time)
Net::BGPdump THIS
int ipv6
time_t lo_time
time_t hi_time
PREINIT:
BGPDUMP_ENTRY *entry;
PPCODE:
do {
entry = bgpdump_read_next(THIS);
if (entry == NULL)
continue;
if (lo_time > 0 && entry->time < lo_time)
goto next_entry;
if (hi_time > 0 && entry->time >= hi_time)
goto next_entry;
switch(entry->type) {
case BGPDUMP_TYPE_MRTD_BGP:
mXPUSHs(_xs_mrtd_bgp_build(aTHX_ entry));
break;
case BGPDUMP_TYPE_ZEBRA_BGP:
if (ipv6 >= 0) {
switch(entry->subtype)
{
case BGPDUMP_SUBTYPE_ZEBRA_BGP_MESSAGE:
case BGPDUMP_SUBTYPE_ZEBRA_BGP_MESSAGE_AS4:
switch(entry->body.zebra_message.address_family)
{
#ifdef BGPDUMP_HAVE_IPV6
case AFI_IP6:
if (ipv6 == 0)
goto next_entry;
break;
#endif
case AFI_IP:
default:
if (ipv6 != 0)
goto next_entry;
break;
}
break;
case BGPDUMP_SUBTYPE_ZEBRA_BGP_STATE_CHANGE:
case BGPDUMP_SUBTYPE_ZEBRA_BGP_STATE_CHANGE_AS4:
switch(entry->body.zebra_state_change.address_family)
{
#ifdef BGPDUMP_HAVE_IPV6
case AFI_IP6:
if (ipv6 == 0)
goto next_entry;
break;
#endif
case AFI_IP:
default:
if (ipv6 != 0)
goto next_entry;
break;
}
break;
}
}
mXPUSHs(_xs_zebra_bgp_build(aTHX_ entry));
break;
case BGPDUMP_TYPE_TABLE_DUMP_V2:
if (ipv6 >= 0) {
switch (entry->subtype)
{
case BGPDUMP_SUBTYPE_TABLE_DUMP_V2_RIB_IPV6_UNICAST:
case BGPDUMP_SUBTYPE_TABLE_DUMP_V2_RIB_IPV6_MULTICAST:
if (ipv6 != 0)
goto next_entry;
break;
}
BGPDUMP_TABLE_DUMP_V2_PREFIX *e;
e = &entry->body.mrtd_table_dump_v2_prefix;
if (e->afi == AFI_IP) {
if (ipv6 != 0)
goto next_entry;
#ifdef BGPDUMP_HAVE_IPV6
}
else if (e->afi == AFI_IP6) {
if (ipv6 == 0)
goto next_entry;
#endif
}
}
mXPUSHs(_xs_table_dump_v2_build(aTHX_ entry));
break;
case BGPDUMP_TYPE_MRTD_TABLE_DUMP:
if (ipv6 >= 0) {
switch(entry->subtype) {
#ifdef BGPDUMP_HAVE_IPV6
case BGPDUMP_SUBTYPE_MRTD_TABLE_DUMP_AFI_IP6:
case BGPDUMP_SUBTYPE_MRTD_TABLE_DUMP_AFI_IP6_32BIT_AS:
if (ipv6 == 0)
goto next_entry;
break;
#endif
case BGPDUMP_SUBTYPE_MRTD_TABLE_DUMP_AFI_IP:
case BGPDUMP_SUBTYPE_MRTD_TABLE_DUMP_AFI_IP_32BIT_AS:
if (ipv6 != 0)
goto next_entry;
break;
}
}
mXPUSHs(_xs_mrtd_table_dump_build(aTHX_ entry));
break;
default:
warn("error: unknown entry type %d\n", entry->type);
}
bgpdump_free_mem(entry);
entry = NULL;
break;
next_entry:
bgpdump_free_mem(entry);
entry = NULL;
continue;
} while (THIS->eof == 0);
entry = NULL;
// return
void
filter_message_read(THIS, ipv6, lo_time, hi_time)
Net::BGPdump THIS
int ipv6
time_t lo_time
time_t hi_time
PREINIT:
BGPDUMP_ENTRY *entry;
PPCODE:
do {
entry = bgpdump_read_next(THIS);
if (entry == NULL)
continue;
if (lo_time > 0 && entry->time < lo_time)
goto next_entry;
if (hi_time > 0 && entry->time >= hi_time)
goto next_entry;
switch(entry->type) {
case BGPDUMP_TYPE_MRTD_BGP:
if (entry->subtype != BGPDUMP_SUBTYPE_MRTD_BGP_UPDATE)
goto next_entry;
mXPUSHs(_xs_mrtd_bgp_build(aTHX_ entry));
break;
case BGPDUMP_TYPE_ZEBRA_BGP:
if ((entry->subtype == BGPDUMP_SUBTYPE_ZEBRA_BGP_MESSAGE) ||
(entry->subtype == BGPDUMP_SUBTYPE_ZEBRA_BGP_MESSAGE_AS4))
{
if (entry->body.zebra_message.type != BGP_MSG_UPDATE)
goto next_entry;
}
else
goto next_entry;
if (ipv6 >= 0) {
switch(entry->body.zebra_message.address_family) {
#ifdef BGPDUMP_HAVE_IPV6
case AFI_IP6:
if (ipv6 == 0)
goto next_entry;
break;
#endif
case AFI_IP:
default:
if (ipv6 != 0)
goto next_entry;
break;
}
}
mXPUSHs(_xs_zebra_bgp_build(aTHX_ entry));
break;
case BGPDUMP_TYPE_TABLE_DUMP_V2:
if (ipv6 >= 0) {
switch (entry->subtype)
{
case BGPDUMP_SUBTYPE_TABLE_DUMP_V2_RIB_IPV6_UNICAST:
case BGPDUMP_SUBTYPE_TABLE_DUMP_V2_RIB_IPV6_MULTICAST:
case BGPDUMP_PEERTYPE_TABLE_DUMP_V2_AFI_IP6:
if (ipv6 == 0)
goto next_entry;
break;
case BGPDUMP_SUBTYPE_TABLE_DUMP_V2_RIB_IPV4_UNICAST:
case BGPDUMP_SUBTYPE_TABLE_DUMP_V2_RIB_IPV4_MULTICAST:
case BGPDUMP_PEERTYPE_TABLE_DUMP_V2_AFI_IP:
if (ipv6 != 0)
goto next_entry;
break;
}
BGPDUMP_TABLE_DUMP_V2_PREFIX *e;
e = &entry->body.mrtd_table_dump_v2_prefix;
if (e->afi == AFI_IP) {
( run in 1.199 second using v1.01-cache-2.11-cpan-5511b514fd6 )