54 lines
2.5 KiB
MySQL
54 lines
2.5 KiB
MySQL
|
|
-- 008_obmp_policy_diff.sql
|
||
|
|
-- Policy Diff feature -- per-router routing-policy retrieval plus per-neighbor
|
||
|
|
-- received / kept / advertised counts, populated by the obmp-rib-poller
|
||
|
|
-- service (obmp-rib-poller/poller.py).
|
||
|
|
--
|
||
|
|
-- Why a poller and not BMP: on the lab's XRv9000 24.3.1 routers BMP only
|
||
|
|
-- carries pre-policy Adj-RIB-In. `route-monitoring inbound post-policy`
|
||
|
|
-- replaces (does not supplement) the pre-policy export and is not flagged
|
||
|
|
-- distinctly, and adj-rib-out BMP (RFC 8671) is unsupported on that image.
|
||
|
|
-- So "kept after inbound policy" and "advertised" are pulled directly from
|
||
|
|
-- the routers over CLI + NETCONF.
|
||
|
|
--
|
||
|
|
-- The Policy Diff dashboard joins router_rib_stats against BMP ip_rib
|
||
|
|
-- (received, pre-policy) to show received vs kept vs discarded vs advertised.
|
||
|
|
|
||
|
|
-- Full route-policy (RPL) bodies, one row per policy per router.
|
||
|
|
CREATE TABLE IF NOT EXISTS route_policies (
|
||
|
|
router_hash_id uuid NOT NULL,
|
||
|
|
policy_name varchar(256) NOT NULL,
|
||
|
|
body text,
|
||
|
|
retrieved_at timestamptz NOT NULL DEFAULT now(),
|
||
|
|
PRIMARY KEY (router_hash_id, policy_name)
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Which route-policy is bound inbound/outbound on each neighbor address-family.
|
||
|
|
CREATE TABLE IF NOT EXISTS neighbor_policy_bind (
|
||
|
|
router_hash_id uuid NOT NULL,
|
||
|
|
peer_addr inet NOT NULL,
|
||
|
|
afi varchar(8) NOT NULL, -- ipv4 / ipv6
|
||
|
|
direction varchar(4) NOT NULL, -- in / out
|
||
|
|
policy_name varchar(256),
|
||
|
|
retrieved_at timestamptz NOT NULL DEFAULT now(),
|
||
|
|
PRIMARY KEY (router_hash_id, peer_addr, afi, direction)
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Per-neighbor RIB sizes pulled from the router: accepted_count is the
|
||
|
|
-- post-inbound-policy prefix count (BGP summary PfxRcd), advertised_count is
|
||
|
|
-- the adj-rib-out size toward that neighbor.
|
||
|
|
CREATE TABLE IF NOT EXISTS router_rib_stats (
|
||
|
|
router_hash_id uuid NOT NULL,
|
||
|
|
peer_addr inet NOT NULL,
|
||
|
|
afi varchar(8) NOT NULL,
|
||
|
|
peer_as bigint,
|
||
|
|
session_state varchar(32),
|
||
|
|
accepted_count integer,
|
||
|
|
advertised_count integer,
|
||
|
|
polled_at timestamptz NOT NULL DEFAULT now(),
|
||
|
|
PRIMARY KEY (router_hash_id, peer_addr, afi)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_route_policies_router ON route_policies (router_hash_id);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_neighbor_policy_bind_router ON neighbor_policy_bind (router_hash_id);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_router_rib_stats_router ON router_rib_stats (router_hash_id);
|