fix(bgp): сохранять неизвестные AS и тип сессии
This commit is contained in:
1 parent
2e17cbe926
commit
5c307a5b6c
9 files changed
+47
-21
No files matched your search
@@ -19,3 +19,10 @@ assert.equal(invalid.prefixesRx, null)
|
||||
assert.equal(invalid.holdTime, null)
|
||||
assert.equal(invalid.inputMessages, null)
|
||||
console.log("BGP parser: unknown/observed zero/timers/AFI, no UPDATE-prefix substitution, legacy preserved")
|
||||
|
||||
assert.equal(missing.remoteAs, null)
|
||||
assert.equal(missing.localAs, null)
|
||||
assert.equal(missing.type, "Unknown")
|
||||
for (const value of ["0", "-1", "12bad", "4294967296"]) assert.equal(parseBgpCatalogSessions(server, [{ ".id": "*1", "remote.as": value }])[0].remoteAs, null)
|
||||
assert.equal(parseBgpCatalogSessions(server, [{ ".id": "*1", "remote.as": "4294967295", "local.as": "4294967295" }])[0].type, "iBGP")
|
||||
assert.equal(parseBgpCatalogSessions(server, [{ ".id": "*1", "remote.as": "64513", "local.as": "64512" }])[0].type, "eBGP")
|
||||
@@ -137,9 +137,10 @@ export function parseBgpSessions(server: ServerRow, raw: RosBgpSession[]): BgpSe
|
||||
}
|
||||
|
||||
/** Каталог не заменяет отсутствующие показатели значениями по умолчанию старого API. */
|
||||
export type BgpCatalogSessionRead = Omit<BgpSessionRead, "holdTime" | "keepalive" | "prefixesRx" | "prefixesTx" | "inputMessages" | "outputMessages"> & {
|
||||
export type BgpCatalogSessionRead = Omit<BgpSessionRead, "holdTime" | "keepalive" | "prefixesRx" | "prefixesTx" | "inputMessages" | "outputMessages" | "remoteAs" | "localAs" | "type"> & {
|
||||
holdTime: number | null; keepalive: number | null; prefixesRx: number | null; prefixesTx: number | null;
|
||||
inputMessages: number | null; outputMessages: number | null; afi: string | null;
|
||||
remoteAs: number | null; localAs: number | null; type: "eBGP" | "iBGP" | "Unknown";
|
||||
}
|
||||
function readCounter(value: string | undefined): number | null {
|
||||
if (value === undefined || !/^\d+$/.test(value.trim())) return null
|
||||
@@ -154,7 +155,10 @@ function readTimer(value: string | undefined): number | null {
|
||||
export function parseBgpCatalogSessions(server: ServerRow, raw: RosBgpSession[]): BgpCatalogSessionRead[] {
|
||||
return parseBgpSessions(server, raw).map((session, index) => {
|
||||
const s = raw[index]
|
||||
const asn = (value: string | undefined) => { const n = readCounter(value); return n !== null && n > 0 && n <= 4294967295 ? n : null }
|
||||
const remoteAs = asn(s["remote.as"]), localAs = asn(s["local.as"])
|
||||
return { ...session,
|
||||
remoteAs, localAs, type: remoteAs === null || localAs === null ? "Unknown" : remoteAs === localAs ? "iBGP" : "eBGP",
|
||||
state: s.established === "true" ? "Established" : s.state?.trim() ? detectState(s) : "Unknown",
|
||||
holdTime: readTimer(s["hold-time"]) ?? readCounter(s["active-holdtime"]),
|
||||
keepalive: readTimer(s["keepalive-time"]),
|
||||
|
||||
Reference in new issue
Block a user