filter-map my-module {
define {
rx_tx bgp_msg: BgpUpdateMessage;
}
term afi-safi-unicast {
match {
bgp_msg.nlris.afi != IPV4;
}
}
action send-message {
asn-encounter-report.send({
name: "local-broker", // this name can be used by a target to select only messages intended for it
topic: "testing",
message: String.format("🤠I encountered {}", "1818")
});
}
apply {
filter match afi-safi-unicast matching {
send-message;
};
}
}
filter bmp-in-filter {
// Uncomment to use ASN filtering
define {
rx msg: BmpMessage;
filtered_asn = 65000;
}
term has_asn {
// Compare the ASN for BMP message types that have a Per Peer Header.
// Other message types not mentioned here lack the Per Peer Header and so
// do not have a matching ASN and are treated as such.
match msg with {
PeerDownNotification(pd_msg) -> pd_msg.per_peer_header.asn == filtered_asn,
PeerUpNotification(pu_msg) -> pu_msg.per_peer_header.asn == filtered_asn,
RouteMonitoring(rm_msg) -> rm_msg.per_peer_header.asn == filtered_asn,
StatisticsReport(sr_msg) -> sr_msg.per_peer_header.asn == filtered_asn,
}
}
apply {
filter match has_asn matching {
return reject;
};
accept;
}
}
output-stream asn-encounter-report contains Message {
name: String, // this is the name of the target that should consume this message
topic: String, // the meaning of this is target type specific
message: String // this can be one or many fields of any type?
}