mirror of
https://codeberg.org/1414codeforge/ubgpsuite.git
synced 2025-06-05 21:29:11 +02:00
[*] Initial commit
This commit is contained in:
82
lonetix/bgp/dump.c
Normal file
82
lonetix/bgp/dump.c
Normal file
@@ -0,0 +1,82 @@
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
/**
|
||||
* \file bgp/dump.c
|
||||
*
|
||||
* General BGP dump functions wrappers.
|
||||
*
|
||||
* \copyright The DoubleFourteen Code Forge (C) All Rights Reserved
|
||||
* \author Lorenzo Cogotti
|
||||
*/
|
||||
|
||||
#include "bgp/bgp_local.h"
|
||||
#include "bgp/dump.h"
|
||||
#include "sys/endian.h"
|
||||
|
||||
#define CALLFMT(fn, ...) \
|
||||
((fn) ? (fn(__VA_ARGS__)) : ((Sint64) Bgp_SetErrStat(BGPENOERR)))
|
||||
|
||||
Sint64 Bgp_DumpMrtUpdate(const Mrthdr *hdr,
|
||||
void *streamp, const StmOps *ops,
|
||||
const BgpDumpfmt *fmt)
|
||||
{
|
||||
Bgpattrtab table;
|
||||
|
||||
if (!ops->Write) {
|
||||
Bgp_SetErrStat(BGPENOERR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
BGP_CLRATTRTAB(table);
|
||||
if (MRT_ISBGP4MP(hdr->type)) {
|
||||
return CALLFMT(fmt->DumpBgp4mp, hdr, streamp, ops, table);
|
||||
|
||||
} else if (hdr->type == MRT_BGP) {
|
||||
return CALLFMT(fmt->DumpZebra, hdr, streamp, ops, table);
|
||||
|
||||
} else {
|
||||
Bgp_SetErrStat(BGPEBADMRTTYPE);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
Sint64 Bgp_DumpMrtRibv2(const Mrthdr *hdr,
|
||||
const Mrtpeerentv2 *peer, const Mrtribentv2 *ent,
|
||||
void *streamp, const StmOps *ops,
|
||||
const BgpDumpfmt *fmt)
|
||||
{
|
||||
Bgpattrtab table;
|
||||
|
||||
if (!ops->Write) {
|
||||
Bgp_SetErrStat(BGPENOERR);
|
||||
return 0;
|
||||
}
|
||||
if (hdr->type != MRT_TABLE_DUMPV2 || !TABLE_DUMPV2_ISRIB(hdr->subtype)) {
|
||||
Bgp_SetErrStat(BGPEBADMRTTYPE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
BGP_CLRATTRTAB(table);
|
||||
return CALLFMT(fmt->DumpRibv2, hdr, peer, ent, streamp, ops, table);
|
||||
}
|
||||
|
||||
Sint64 Bgp_DumpMrtRib(const Mrthdr *hdr,
|
||||
const Mrtribent *ent,
|
||||
void *streamp, const StmOps *ops,
|
||||
const BgpDumpfmt *fmt)
|
||||
{
|
||||
Bgpattrtab table;
|
||||
|
||||
if (!ops->Write) {
|
||||
Bgp_SetErrStat(BGPENOERR);
|
||||
return 0;
|
||||
}
|
||||
if (hdr->type != MRT_TABLE_DUMP) {
|
||||
Bgp_SetErrStat(BGPEBADMRTTYPE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
BGP_CLRATTRTAB(table);
|
||||
return CALLFMT(fmt->DumpRib, hdr, ent, streamp, ops, table);
|
||||
}
|
||||
|
Reference in New Issue
Block a user