Code Monkey home page Code Monkey logo

openbmp's Introduction

Open BGP Monitoring Protocol (OpenBMP) Collection Framework

Build Status

OpenBMP is an open source project that implements draft-ietf-grow-bmp-17. BMP protocol version 3 is defined in draft 08, while versions 1 and 2 are defined in the previous revisions of the draft.

JunOS 10.4 implements the older versions of BMP. Cisco IOS XE 3.12, IOS XR 5.2.2, and JunOS 13.3 implement version 3 (draft 07).

OpenBMP Flow

OpenBMP High Level Flow

  • BMP devices (e.g. routers) send BMP messages to a OpenBMP collector/daemon. One OpenBMP daemon can handle many routers and bgp peers, but in a large network with transit links and full internet routing tables, multiple OpenBMP collectors are recommended. Simply configure on the BMP device (router) which BMP server that should be used.

  • Apache Kafka enables many applications the ability to tap into the existing BMP feeds from any number of routers. A single BMP feed via OpenBMP can feed data into hundreds of consumer apps, such as MySQL, Cassandra, Real-time monitors, Flat file, ELK, Apache Spark, etc.

  • OpenBMP forwarder can be used to forward the native BMP messages (no modification) to any other BMP receiver, including openbmpd.

  • Admins, Network Engineers, automated programs/scripts, etc. interact with the OpenBMP API or any other consuming application

Supported Features Highlights

Below is a list of some key features supported today in OpenBMP. Many more features exist.

Feature Description
RPKI/IRR RPKI and IRR integration enables security analysis of monitored prefixes and ASN's. Try it out using the containers openbmp/aio and openbmp/ui .
Topic Mapping Dynamic and customizable topic names. Scale Kafka consumers by partition and topic
draft-ietf-grow-bmp BMP Version 3 with backwards compatibility with older drafts
Apache Kafka Producer of parsed and RAW BMP feeds, multiple consumers available
Database Access to all collected data via standard ODBC/DB drivers (openbmp-mysql-consumer)
File Logging All parsed messages can be logged to files, including BMP binary streams (openbmp-file-consumer)
IPv4 IPv4 Unicast routing table information
IPv6 IPv6 Unicast routing table information
bgp-ls RFC7752
Extended Communities Roughly all of them
VPNv4 L3VPN routing information (within VRF)

So much more...

Daemon

OpenBMP daemon is a BMP receiver for devices/software that implement BMP, such as Cisco and Juniper routers. The collector is a highly scalable producer to Apache Kafka. Both RAW BMP messages and parsed messages are produced for Kafka consumer consumption.

User Interface

User interface is available in the docker container docker pull openbmp/ui. You can install the UI by following the docker UI instructions.

Soon the UI will be added to github.

note: The UI uses DB_REST which requires the mysql-consumer. You can install the MySQL consumer and DB_REST using the mysql container or you can use the aio container

Using Logstash with OpenBMP

Logstash is a flexible, open source, data collection, enrichment, and transport pipeline designed to efficiently process a growing list of log, event, and unstructured data sources for distribution into a variety of outputs, including Elasticsearch.

See Logstash for more details and how to use logstash with OpenBMP.

Openbmp Forwarder

The Openbmp forwarder can be used to connect to one Kafka cluster and to regenerate BMP messages to another collector. The forwarder consumes the collector, router, peer, and bmp_raw messages and forwards them via native BMP.

See openbmp-forwarder for more details.

Openbmp MRT

A lightweight OpenBMP consumer that dumps BMP messages on a time based interval to a file. The MRT file can then be loaded in any compliant MRT parser. Validation testing has been with libbgpdump.

RFC6396 - Multi-Threaded Routing Toolkit (MRT) Routing Information Export Format

  • BGP4MP_STATE_CHANGE_AS4 - Peer up/down events
  • BGP4MP_MESSAGE - BGP update messages
  • TABLE_DUMP_V2 - Table dumps require the use of openbmp-mysql-consumer (MySQL/MariaDB)

See openbmp-mrt for more details.

MySQL Consumer

The MySQL consumer implements the OpenBMP Message Bus API parsed messages API to collect and store BMP/BGP data of all collectors, routers, and peers in real-time. The consumer provides the same data storage that OpenBMP collector versions 0.10.x and less implemented.

See mysql-consumer for more details about the MySQL consumer.

Flat File Consumer

A basic file consumer of OpenBMP parsed and RAW BMP Kafka streams. You can use this file consumer in the following ways:

  • Working example to develop your own consumer that works with either parsed or RAW BMP binary messages
  • Record BMP feeds (identical as they are sent by the router) so they can be replayed to other BMP parsers/receivers
  • Log parsed BMP and BGP messages in plain flat files

See file-consumer for more details.

Message Bus (Kafka)

Starting in release 0.11.x Apache Kafka is used as the centralized bus for collector message streams. The collector no longer forwards direct to MySQL. Instead, database consumers are used to integrate the data into MySQL, Cassandra, MongoDb, Postgres, flat files, etc. Anyone can now can interact with the BGP parsed and RAW data in a centralized fashion via Kafka or via one of the consumers. A single BMP feed from one router can be made available to many consumers without the collector having to be aware of that.

News/Change Log

Github is the best place to track and keep up with the latest changes.

See Openbmp GitHub

Use-Cases

There are many reasons to use OpenBMP, but to highlight a few common ones:

  • Centralized BMP Collector - OpenBMP is a producer to Apache Kafka. You can write your own consumer or use an existing one. Other products can interact with OpenBMP via Apache Kafka for RAW BMP streams or the parsed messages. See Message Bus API Specification for more details.

  • Real-Time Topology Monitoring - Can monitor and alert on topology change, policy changes or lack of enforcement, route-leaking, hijacking, etc.

  • BGP/Route Security - Route leaking, hijacking by origination, by better transit paths, or deviation from baseline

  • Looking Glasses - IPv4, IPv6, and VPN4

  • Route Analytics - Track convergence times, history of prefixes as they change over time, monitor and track BGP policy changes, etc...

  • Traffic Engineering Analytics - Adapt dynamically to change and know what is the best shift

  • BGP pre-policy What-Ifs - Pre-policy routing information provides insight into all path attributes from various points in the network allowing nonintrusive what-if topology views for new policy validations

  • IGP Topology - BGP-LS (link-state) provides the complete topology of the IGP (OSPF and/or IS-IS). The IGP topology provides node, link, and prefix level information. This includes all BGP next-hops. It is now possible to do a BGP best path selection with IGP metric for Adj-In-RIB information. It is also possible to monitor the IGP itself as it pertains to links, nodes, prefixes, and BGP.

  • many more

Installation and Configuration

See the docs/INSTALL.md documentation for detailed information on how to install and configure OpenBMP daemon and UI.

The installation documentation provides step by step instructions for how to install and configure OpenBMP, including the database.

Instructions are for Ubuntu and CentOS/RHEL. Other Linux distributions should work, but instructions might vary.

Using Kafka for Collector Integration

See the following docs for more details:

In the future, other feeds can be made available. We are thinking of adding RAW BGP feeds as well (BMP headers stripped leaving only BGP RAW messages). This may be useful but currently nobody has requested this. If you are interested in other types of feeds, please contact [email protected].

Interfacing with the Database

See the DB_SCHEMA documentation for the database schema and how to interact with it.

Building from Source

See the BUILD document for details on how to build OpenBMP from source. Includes how to create DEB and RPM packages.

Support by

Cisco JetBrains

openbmp's People

Contributors

alistairking avatar binarydevil avatar d-chord avatar ganandak avatar indujas avatar manbhard avatar matvey-kuk avatar ojasgupta avatar piispanen avatar rcharrison avatar serpilb avatar timevens avatar vincentbernat avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

openbmp's Issues

Double number of BMP speakers

Hi, team,

first of all, thanks for great project.

I'm currently evaluating openBMP setup. We've installed two collectors on two different servers to load balance. And if looks like after the same speaker moves from one openbmp collector to another, it generates different hash to it and so, the same router appears twice in the table:

mysql> select * from routers;
+----------------------------------+--------------------------------------+----------------+-----------+----------------------------+---------------------+-------------+-----------+------------------+------------------------------------------+-----------+-----------+--------------+----------------------------------+--------+
| hash_id | name | ip_address | router_AS | timestamp | description | isConnected | isPassive | term_reason_code | term_reason_text | term_data | init_data | geo_ip_start | collector_hash_id | bgp_id |
+----------------------------------+--------------------------------------+----------------+-----------+----------------------------+---------------------+-------------+-----------+------------------+------------------------------------------+-----------+-----------+--------------+----------------------------------+--------+

| 299f3867d02084a17996c08eb4575fde | AMS4-BK-INTMX480-02 | 10.193.131.111 | NULL | 2017-01-09 11:49:35.797575 | | 0 | 0 | 65534 | ERROR: Cannot read v3 BMP common header. | | | NULL | 025afb2299ca3dfb4394bc15ec8a44ca | |
| 5056616ed30c6706d0cdfd767ff89125 | AMS4-BK-INTMX480-01 | 10.193.131.93 | NULL | 2017-01-09 12:47:07.294717 | AMS4-BK-INTMX480-01 | 1 | 0 | 0 | | | | NULL | b95c837efc08b628eb6162ba6f1afd8a | |
| df0975c55d0fb7846919c45e044bf9a4 | AMS4-BK-INTMX480-01 | 10.193.131.93 | NULL | 2017-01-09 11:50:07.511103 | | 0 | 0 | 65534 | ERROR: Cannot read v3 BMP common header. | | | NULL | 025afb2299ca3dfb4394bc15ec8a44ca

Is it expected behavior?

Allow more specific searching

You are not required to know the exact prefix when searching. However if you don't know the exact CIDR but an IP, you'd like to have the GUI/API return the most specific CIDR related to the IP given. Would that be possible? Or am i overlooking an feature

sending BMP to Kafka questions

Hi,

I am running openbmpd with the openbmpd.conf(https://github.com/OpenBMP/openbmp/blob/master/Server/openbmpd.conf) , and set the brokers to some remote Kafka brokers.
But the remote Kafka did not receive any messages.

I run:
And this is part of the logs, it shows BMP messages are parsed correctly and sent to Kafka.

2016-07-25T21:37:06.593825 | DEBUG    |    parseBMP.cpp[00522] | bufferBMPMessage   | sock=29: Buffering 52 from socket
2016-07-25T21:37:06.593845 | DEBUG    | MsgBusImpl_kafka.cpp[00383] | produce            | rtr=127.0.0.1: Producing message: topic=base_attribute key=51fb2204a492caf61234ad76dbca92ff, msg size = 210
2016-07-25T21:37:06.593860 | DEBUG    | MsgBusImpl_kafka.cpp[00383] | produce            | rtr=127.0.0.1: Producing message: topic=unicast_prefix key=51fb2204a492caf61234ad76dbca92ff, msg size = 266
2016-07-25T21:37:06.593869 | DEBUG    | MsgBusImpl_kafka.cpp[01297] | send_bmp_raw       | rtr=127.0.0.1: Producing bmp raw message: topic=bmp_raw key=77ae9fb016cb4f6f94323e059ea71d5b, msg size = 100

016-07-25T21:37:06.593925 | DEBUG    |    parseBMP.cpp[00522] | bufferBMPMessage   | sock=29: Buffering 52 from socket
2016-07-25T21:37:06.593944 | DEBUG    | MsgBusImpl_kafka.cpp[00383] | produce            | rtr=127.0.0.1: Producing message: topic=base_attribute key=51fb2204a492caf61234ad76dbca92ff, msg size = 210
2016-07-25T21:37:06.593959 | DEBUG    | MsgBusImpl_kafka.cpp[00383] | produce            | rtr=127.0.0.1: Producing message: topic=unicast_prefix key=51fb2204a492caf61234ad76dbca92ff, msg size = 265
2016-07-25T21:37:06.593968 | DEBUG    | MsgBusImpl_kafka.cpp[01297] | send_bmp_raw       | rtr=127.0.0.1: Producing bmp raw message: topic=bmp_raw key=77ae9fb016cb4f6f94323e059ea71d5b, msg size = 100

Since I did not see the errors about LOG_WARN("rtr=%s: Not connected to Kafka, attempting to reconnect", router_ip.c_str());, so I assume the Kafka connection is all right.

Do you have any comments on it?
Thanks,

Add MP REACH/UNREACH parsed message support for IPv4

Currently MP REACH/UNREACH IPv4 addresses are not parsed since normally they would be in rfc4271 NLRI. ODL and other stacks send IPv4 in MP REACH/UNREACH, therefore IPv4 needs to be added.

IPv6 is already supported.

Add IPv4 MP Reach/Unreach support.

Handling peer down/up events seems harder to parse in scaling tests bouncing bgp peers

Hi @TimEvens

Before anything, excellent project! quite interesting.

I was doing some scaling tests, I noticed that for a router handling ~100 peers with ~3000 routes per peer, when I bounced all bgp sessions (or restart the bmp collector), it takes a lot of time (~40-50min) to the collector to dump all information on kafka. (bgp peer down/up event and bgp route updates)

Checking the logs on the openbmp collector it seems that bgp tear down/up events takes a lot longer to process than the bgp route updates. (is this expected?)

For instance, the following logs shows that it takes 10 seconds to process a peer down event...

2018-07-20T11:07:24.445246 | NOTICE | parsePeerDownEventHdr | sock=16 : 10.0.0.5: BGP peer down notification with reason code: 1
2018-07-20T11:07:34.456889 | NOTICE | parsePeerDownEventHdr | sock=16 : 10.0.0.7: BGP peer down notification with reason code: 1
2018-07-20T11:07:44.464163 | NOTICE | parsePeerDownEventHdr | sock=16 : 10.0.0.37: BGP peer down notification with reason code: 1

Meanwhile route updates goes quite fast...

Checking the router side using logs and counters, the router dump all bmp events in just ~3-4 min, however until all peer down/up are being processes the collector does not begin with any route update processing. (this is also expected?)

Thanks in advance
and Regard

Removing routers from the database

Is there a way to remove a router that is no longer sending BMP?

I've got a router that is no longer sending information to OpenBMP, so it is showing as a down router.

Thank you.

Race condition and crash when killed during router disconnect

It seems that if the collector is killed (SIGINT) while it is in the process of cleaning up after a router disconnect, then something goes wrong with the thread and I see the following message:

^C2017-10-12T23:57:41.037796 | NOTICE   | signal_handler     | Caught signal 2
terminate called without an active exception
Aborted (core dumped)

From what I can tell this is probably something like the main thread trying to cancel the client thread while it is already in the process of shutting down. I took a quick look, but nothing obvious stood out.

I'm able to fairly easily reproduce this by using the openbmp-forwarder to send messages to the collector. I then kill the forwarder and immediately kill the collector. If I wait until the collector has finished cleaning up after the client disconnect, then it will shut down cleanly.

SAFI=128 is not implemented yet, skipping

I'm running the docker image and am getting the following error:
2017-01-06T01:11:31.595226 | INFO | parseAfi_IPv4IPv6 | 10.0.0.101: MP_REACH AFI=ipv4/ipv6 (1) SAFI=128 is not implemented yet, skipping
Is that expected?

Is BGP attribute AIGP supported?

Hi

BTW, excellent project!!!

I would like to know/confirm if AIGP attribute is supported or properly parsed.

I'm comparing a tcpdump output that contains AIGP attribute with the output on the kafka bus, and missing that attribute.

screen shot 2018-03-22 at 16 19 23


V: 1.7
C_HASH_ID: d334178d7dd6f088cf05f06de81d1acf
T: unicast_prefix
L: 1153
R: 3

add	1110	406a2823bfa48f1f26a043b22024edc7	306587c942695d65a18ff1864af6b178	10.250.0.2	a757477e566084c51858c85dfc45a210	d7a8095f348514c1234795ff64ea94ca	192.168.252.64	64531	2018-03-22 15:14:36.000000	192.168.252.50	32	1	igp		0	0	192.168.252.64	0	100		3352:10002 3352:10542		192.168.252.64 192.168.252.163 192.168.252.232 192.168.252.162 192.168.248.72 	0	1	192.168.248.74	0	4491	1	1	
add	1111	185a1008fc0fdfc63f491c83eb8f0c49	306587c942695d65a18ff1864af6b178	10.250.0.2	a757477e566084c51858c85dfc45a210	d7a8095f348514c1234795ff64ea94ca	192.168.252.64	64531	2018-03-22 15:14:36.000000	192.168.248.74	32	1	igp		0	0	192.168.252.64	0	100		3352:10002 3352:10542		192.168.252.64 192.168.252.163 192.168.252.232 192.168.252.162 192.168.248.72 	0	1	192.168.248.74	0	4486	1	1	
add	1112	26079ded696eac68e828884a5a6ff253	306587c942695d65a18ff1864af6b178	10.250.0.2	a757477e566084c51858c85dfc45a210	d7a8095f348514c1234795ff64ea94ca	192.168.252.64	64531	2018-03-22 15:14:36.000000	192.168.252.104	32	1	igp		0	0	192.168.252.64	0	100		3352:10002 3352:10542		192.168.252.64 192.168.252.163 192.168.252.232 192.168.252.162 192.168.248.72 	0	1	192.168.248.74	0	4496	1	1	

Could you please help me?

Thanks

performance figures and requirements

Hi,

Thank you very much for open-souring such a useful project.
I am thinking of deploying it but I would like to ask for your advice first;

Could you please comment on the requirements and figures in case
I want to add

  • 40 peering routers
  • and each router has a GRT of ~ 800k prefixes
  • let's keep the history short, 1 week (retention policy)

Am concerned how mysql will behave.. and that will create a lot of IO contention.

Of course, if we do not try we do not know.
But I would really appreciate your feedback and some performance figures if any.

Many Thanks.
Nikos

BGP sessions record remain up when router down

Hi,
Thank for your repo. I'm trying to build a lab topo.
I realized that when monitoring router down, BGP sessions record still remain up state. Is it normal process?
I'm trying catch openbmpd log but it didn't receive any alert packet when router down.

1
2

Buffering Error when reading and parsing packets

Hi,
I am feeding the gobgp BMP packets to openbmpd, and this is the logs shown when running openbmpd:

2016-07-26T20:07:14.960814 | DEBUG    |    parseBMP.cpp[00560] | parsePeerUpEventHdr | 172.xx.xxx.xx : Peer UP local address is IPv4 172.xx.xx.xx
2016-07-26T20:07:14.960820 | INFO     | ReadIncomingMsg    | 127.0.0.1: PEER UP Received, local addr=172.xx.xx.xx:24609 remote addr=172.xx.xx.xx:179
2016-07-26T20:07:14.960825 | DEBUG    |    parseBMP.cpp[00522] | bufferBMPMessage   | sock=29: Buffering 112 from socket
2016-07-26T20:07:14.960844 | WARN     | parseOpenMsg       | 172.xx.xx.xx: Could not read capabilities in open message due to buffer not containing the full param length
2016-07-26T20:07:14.960849 | ERROR    | handleUpEvent      | 172.xx.xx.xx: rtr=127.0.0.1: Failed to read sent open message
2016-07-26T20:07:14.960916 | INFO     | ReadIncomingMsg    | 127.0.0.1: Caught: Failed to read open message
2016-07-26T20:07:14.961015 | INFO     | resolveIp          | resolve: 127.0.0.1 to localhost

The first WARN is coming from:
https://github.com/OpenBMP/openbmp/blob/d4155c4bdee450c6afcb4e0b82c9aebf4a64c560/Server/src/bgp/OpenMsg.cpp#L97

It seems like buffering configuration issues? I tune some buffer setting in openbmp.conf but no good luck. Maybe I am not tuning it correctly.
Can you share any inputs?

Outdated whois information

Whois information is outdated for at least a few months. The documentation does now show how this information is collected or (automatically) updated. I would expect some kind of sync from the registry's updating AS mappings and/or prefix lists?

ISP Sizing

Hi
How many full routing table feeds will this deployment support?
If I want to monitor 20 feeds of both v4 and v6 full routing tables, what kind of resources will you suggest? Do you think that running the components in docker mode is still relevant for this size? should I move away the collector to a different physical server?
If you could share any of your experience for small/medium size ISP it would be great.

Path attributes timestamp

Hello, team,

I found strange issue - when MySQL consumer trying to install path attributes for specific NLRI , for some of them it inserts it with wrong timestamp. All my routers are synchronized with NTP and timestamp for bgp peer is correct. Because my database partitioned by date, it confuses it.

I will try to catch tcpdump of real traffic to check if this is a Junos bug or not, but I see bgp_peer timestamp is ok so I assume it might be somewhere in code.

Here is the example:
mysql> select * from bgp_peers where hash_id = '263f9f7c5584551428eba254d9350756';
+----------------------------------+----------------------------------+---------+--------+---------------+-----------------------------------------------+---------------+---------+-------+-------------+----------------------------+-------------+--------------+---------------+---------------+------------+-----------------+-----------+-------------+------------------+----------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+------------+--------------+-----------------+------------+
| hash_id | router_hash_id | peer_rd | isIPv4 | peer_addr | name | peer_bgp_id | peer_as | state | isL3VPNpeer | timestamp | isPrePolicy | geo_ip_start | local_ip | local_bgp_id | local_port | local_hold_time | local_asn | remote_port | remote_hold_time | sent_capabilities | recv_capabilities | bmp_reason | bgp_err_code | bgp_err_subcode | error_text |
+----------------------------------+----------------------------------+---------+--------+---------------+-----------------------------------------------+---------------+---------+-------+-------------+----------------------------+-------------+--------------+---------------+---------------+------------+-----------------+-----------+-------------+------------------+----------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+------------+--------------+-----------------+------------+
| 263f9f7c5584551428eba254d9350756 | a21266dbc666a0409183bc3e2599197d | 0:0 | 1 | 10.252.128.22 | lo0-0.ams4-bk-intmx480-01 | 10.252.128.22 | 65502 | 1 | 0 | 2017-01-25 16:51:19.000000 | 1 | NULL | 10.252.128.21 | 10.252.128.21 | 54539 | 90 | 65502 | 179 | 90 | MPBGP (1) : afi=1 safi=1 : Unicast IPv4, Route Refresh Old (128), Route Refresh (2), Graceful Restart (64), 4 Octet ASN (65), 71 | MPBGP (1) : afi=1 safi=1 : Unicast IPv4, Route Refresh Old (128), Route Refresh (2), Graceful Restart (64), 4 Octet ASN (65), 71 | 0 | 0 | 0 | |
+----------------------------------+----------------------------------+---------+--------+---------------+-----------------------------------------------+---------------+---------+-------+-------------+----------------------------+-------------+--------------+---------------+---------------+------------+-----------------+-----------+-------------+------------------+----------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+------------+--------------+-----------------+------------+
1 row in set (0.00 sec)

And failed try to install path attribute:

add 484363 fc00bbf629b183276f099c1bc14a7d1e a21266dbc666a0409183bc3e2599197d 10.193.131.111 263f9f7c5584551428eba254d9350756 10.252.128.22 65502 2017-12-17 21:08:43.000000 igp 65501 3356 14492 14492 3762 5 3762 10.252.128.22 2 100 0 1

Uninitialized variable warning

When building using clang (Apple LLVM version 9.0.0 (clang-900.0.37)), I get the following warning about use of an uninitialized variable:

Server/src/bgp/linkstate/MPLinkStateAttr.cpp:335:99: error: variable 'value_32bit' is uninitialized when used here [-Werror,-Wuninitialized]
                SELF_DEBUG("%s: bgp-ls: parsed node ISIS area id %x (len=%d)", peer_addr.c_str(), value_32bit, len);

https://github.com/OpenBMP/openbmp/blob/56f25123839761cfc589030804d6ed53badda313/Server/src/bgp/linkstate/MPLinkStateAttr.cpp#L335

This indeed does seem to be a bug, but only one that affects the debug message.

I'm not sure the correct way to fix this since the ISIS area ID appears to be an 8-byte value.

docker container will stop automatically after one minute

Hi Even,
it's a strange problem I follow the installation guide and I run the container with correct parameters but after about one minute it stops with no reason like this below:

[root@openbmp ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8ecd3ce1ea6e openbmp/aio "/usr/sbin/run_all..." 6 minutes ago Up About a minute 0.0.0.0:2181->2181/tcp, 0.0.0.0:3306->3306/tcp, 0.0.0.0:5000->5000/tcp, 0.0.0.0:8001->8001/tcp, 0.0.0.0:9092->9092/tcp, 9999/tcp openbmp_aio
[root@openbmp ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Prefix with only Large Communities not getting stored properly

If a route comes in with only Large communities (no communities or extcommunities) the database stores the prefix with all communities blank, including the large communities. If I add a single community or extCommunity then it stores correctly both types of communities.

Perhaps problem with the consumer or kafka. I'm using docker aio.

Kafka monitoring & connection issues

Hello,

I am trying to monitor how Kafka behaves in terms of performance.
I tried it with jolokia in the openbmp_aio container as described here : https://github.com/paksu/kafka-jolokia-telegraf-collector but jolokia never sends anything.

As a result, I installed kafka on my host server in order to try to install jolokia more easily, but now I'm getting those log lines :

2018-05-14T11:57:38.613781 | ERROR    | send_bmp_raw       | rtr=xx.xx.xx.xx: Failed to produce bmp raw message: Local: Queue full
2018-05-14T11:57:38.714158 | ERROR    | produce            | rtr=xx.xx.xx.xx: Failed to produce message: Local: Queue full
2018-05-14T11:57:38.814367 | ERROR    | produce            | rtr=xx.xx.xx.xx: Failed to produce message: Local: Queue full
2018-05-14T11:57:38.914610 | ERROR    | send_bmp_raw       | rtr=xx.xx.xx.xx: Failed to produce bmp raw message: Local: Queue full

I am also having issues with the openbmp_kafka container that was not accepting TCP connections from the other containers (as described in SNAS/website#85).

Any help would be appreciated.

Thanks in advance.

Allow collector to produce default route/prefix

Currently default route is ignored and not produced to Kafka. This feature enhancement is to add support for the default/prefix advertisement.

Both update NLRI and MP_REACH NLRI will be updated to allow the 0.0.0.0/0 and ::/0 to be produced to Kafka unicast_prefix topic.

L3VPN are not getting stored in DB

I recently updated the docker image to use lastest (Release 0.14.0.0) and now the l3vpn prefixes are not getting stored in the DB. Perhaps the addition of large communities broke something?

Location Information

How does the location information works? The other geo location says my IP is from AU, but San Jose/New York. Also tried importing GEOIP List, but no luck.

Unable to parse Messages

I am consuming messages from the "openbmp.parsed.ls_link" Kafka Topic. I am facing difficulty in unwrapping the messages that i am recieving from the topic. I have the option of recieving the messages as of type Object or as type org.springframework.messaging.Message. I tried parsing the payload in both cases by casting to the type org.openbmp.handler.LsLink. But what i got was a classcastexception. I have referred to the link http://www.openbmp.org/#!docs/MESSAGE_BUS_API.md for a description of the message attributes. But i am unable to obtain the individual attributes from the object that i am recieving when reading messages from the mentioned topic. Please guide if possible with code example as to how i can parse the messages. My code for reading messages from the topic is like this.

@EnableBinding(Sink.class)
public class CloudStreamConsumer {

private static Logger logger = LoggerFactory
        .getLogger(CloudStreamConsumer.class);


/**
 * Method that receives the Kafka message
 * @param payload
 * @throws Exception
 */
@ServiceActivator(inputChannel = Sink.INPUT)
//@StreamListener(Sink.INPUT)
public void logger(Message<?> payload) throws Exception {
    //logger.info("recieved : " + payload);
    logger.info("Recieved Payload : " + payload.getPayload());
    logger.info("Recieved Headers : " + payload.getHeaders());
    LsLink pbj = (LsLink)payload.getPayload();
    logger.info("Obj = " + pbj.toString());
}

}

Support for RFC5549

Advertising IPV4 networks with IPV6 NH
https://tools.ietf.org/html/rfc5549

Right now if the Prefix is IPV4 openBMP will convert NH to IPV4 format, otherwise use IPV6 format.

if (nlri.nh_len > 16)
memcpy(ip_raw, nlri.next_hop, 16);
else
memcpy(ip_raw, nlri.next_hop, nlri.nh_len);

inet_ntop(isIPv4 ? AF_INET : AF_INET6, ip_raw, ip_char, sizeof(ip_char));

Cisco ASR1k to Docker aio

Hi

I have issue with openbmp gui show my connected router and my peer in global and peer view. So it shuld be OK.
But most other UI say "No Data Available"
It say support for "VPNv4 | L3VPN routing information (within VRF)"
So i expect to find my routes etc in the UI.

My setup:
Latast obenbmp from docker aio and ui.

Cisco ASR1000
IOS XE Software, Version 03.16.06b.

pe03-wan#sh ip bgp bmp server summary
Number of BMP servers configured: 1
Number of BMP neighbors configured: 1
Number of neighbors on TransitionQ: 0, MonitoringQ: 0, ConfigQ: 0
Number of BMP servers on StatsQ: 0
BMP Refresh not in progress, refresh not scheduled
Initial Refresh Delay configured, refresh value 30s
BMP buffer size not configured

ID Host/Net          Port  TCB                 Status  Uptime    MsgSent   LastStat
1  10.1.29.24      5000  0x7F56EC3FD770      Up      18:48:41  2201      00:00:15
pe03-wan#sh runn | sec bgp
router bgp 4445
 bmp server 1
  address 10.1.29.24 port-number 5000
  description See stats on http://net01.local:8000
  initial-delay 20
  failure-retry-delay 40
  flapping-delay 120
  stats-reporting-period 30
  update-source Loopback0
  activate
 exit-bmp-server-mode
 !
 bmp initial-refresh delay 30
 !
 address-family ipv4
 exit-address-family
 !
 address-family vpnv4
 exit-address-family
 !
 address-family vpnv6
 exit-address-family
 !
 address-family ipv4 vrf test123
  neighbor 10.254.7.182 remote-as 65884
  neighbor 10.254.7.182 bmp-activate server 1

openbmp segfaults on receiving juniper packet

2018-02-28T22:45:59.356399 | INFO | runServer | Ready. Waiting for connections
2018-02-28T22:46:14.805431 | INFO | runServer | Accepted new connection; active connections = 1
2018-02-28T22:46:14.805518 | INFO | runServer | Client Connected => x.x.x.x:54810, sock = 7
2018-02-28T22:46:17.915188 | INFO | ClientThread | Thread started to monitor BMP from router x.x.x.x using socket 7 buffer in bytes = 16777216
2018-02-28T22:46:17.916364 | INFO | ReadIncomingMsg | x.x.x.x: Init message received with length of 201
2018-02-28T22:46:17.916466 | INFO | handleInitMsg | Init message type 0 and length 15 parsed
2018-02-28T22:46:17.916488 | INFO | handleInitMsg | Init message type 0 = Development/LAB
2018-02-28T22:46:17.916494 | INFO | handleInitMsg | Init message type 1 and length 174 parsed
2018-02-28T22:46:17.916500 | INFO | handleInitMsg | Init message type 1 = Juniper Networks, Inc. vmx internet router, kernel FreeBSD JNPR-11.0-20171206.f4cad52_buil, Build date: 2017-12-19 22:58:13 UTC Copyright (c) 1996-2017 Juniper Networks, Inc.
2018-02-28T22:46:17.916505 | INFO | handleInitMsg | Init message type 2 and length 0 parsed

[783996.005135] openbmpd[22981]: segfault at 0 ip 00007fb44f943900 sp 00007fb43e4846e8 error 4 in libc-2.23.so[7fb44f8b8000+1c0000]
[784118.662382] openbmpd[23004]: segfault at 0 ip 00007fef72f95900 sp 00007fef69a716e8 error 4 in libc-2.23.so[7fef72f0a000+1c0000]
[784271.476091] openbmpd[23058]: segfault at 0 ip 00007f580a04b900 sp 00007f5804b8d6e8 error 4 in libc-2.23.so[7f5809fc0000+1c0000]

following install guide, with cleanly installed / up-to-date ubuntu 16.04 with all-in-one docker, just crashes container couldn't find why

when that didnt work the ubuntu installation guide, all seems to work with latest mysql consumer and kafka, however it just segfaults as shown above.

BMP Initiation Message String gets overwritten if multiple String TLV comes in

Does openBMP support just one BMP Initiation String TLV message?

So if I receive one message "Base router, AS101 1.2.3.4" and another message with "station100" what we see in openbmp is "station100r, AS101 1.2.3.4". Can we append instead?

The RFC says:
The initiation message consists of the common BMP header followed by
two or more Information TLVs (Section 4.4) containing information
about the monitored router. The sysDescr and sysName Information
TLVs MUST be sent, any others are optional. The string TLV MAY be
included multiple times.

Kakfka authentication

Hello,

I am using Kafka with authentication. I can't figure out how I should configure openbmpd to properly provide credentials to my Kafka server ...

Any help will be really appreciated.

Thanks.

Unsupported BMP message version

Hi,
I start a go application on localhost to send the BMP messages it received to the localhost port 5555, which will be handled by openbmpd.
When I started my go app, the BMP message will be sent to openbmpd in this format via TCP port 5555.

type BMPMessage struct {
    Header     BMPHeader
    PeerHeader BMPPeerHeader
    Body       BMPBody
}

and the Header is defined as

type BMPHeader struct {
    Version uint8
    Length  uint32
    Type    uint8
}

And I started sudo openbmpd -a $(uname -n) -k localhost -b 16 -p 5555 -l /var/log/openbmpd.log -pid /var/run/openbmpd.pid on localhost as well, but the logging shows:

2016-07-22T15:08:43.137543 | INFO     | ClientThread       | Thread started to monitor BMP from router 127.0.0.1 using socket 4 buffer in bytes = 16777216
2016-07-22T15:08:43.137864 | INFO     | ReadIncomingMsg    | 127.0.0.1: Caught: ERROR: Unsupported BMP message version

It regards the BMP packet received as version unsupported, but I am sure the first byte of the messsage is the version number.

My questions:
Can I send the BMP messages via TCP to the port openbmp is listening to?
And I send the messages as []byte, is this the correct msg format to send?

Partition management / general scaling

Firstly, thanks for making this project available; it's highly valuable when dealing with multi-homed networks.

The current MySQL DB schema partitions certain tables, however the partitions included are in the past, so in reality all data ends up in the last partition.

I wrote a script you handle adding and dropping partitions, which I could potentially contribute.

I'm opening this for 3 reasons;

  • Is the current database scheme considered to be 'prod ready' - would the partitions tables be better generated via a script to enable usage without modifications
  • I think the operation documentation could do with some work, is this something you're interested in getting pull requests for
  • Is MYSQL something you're going to stick with?

The later question is slightly loaded, so I'll expand; Given a network with slightly 'noisy table' (>700 peers, 12 IX (x2 route servers), numerous transits etc), the write load for MySQL is quite high.... this can just about be dealt with using flash based storage, but even for short term (3 day) storage it's hard keep performance (spikes of ~20k qps) and nearly impossible to keep redundant outside of dual writing.

In our case, the clear option for long term analysis is to use map/reduce technologies, real time to use streaming technologies, but this leaves a gap.... which is having a nice UI for "recent" data querying that can reliably used in an ad hoc manner.

So my question really is.... is there a known way to scale this, is this tooling something others are interested in and do you have any thoughts on the way forward?

A simple initial step could be making the mysql consumer more pluggable to handle writing into HDFS or Cassandra for example.

A few 'use cases' would be really helpful if people are willing to contribute :)

Installation Problem

Hi
first, i'd like to apologize for a beginner questions.
I'm trying to implement openbmp on our network.
I'd installed a container for the UI and for the AIO.
i'm trying to establish a connection with one of our IOS-XE routers.
after configuration of the the bmp in the router, i can see in the db that select * from collectors; and from routers; shows the remote router. but no prefixes are learned. the remote router hold a full bgp table.
I'm sure i'm missing something in the installation, can anyone assist please?

David

Multiple kafka clusters

Currently it's possible to specify multiple brokers for a single cluster.

In order to provider cluster level redundancy, it would be nice to be able to 'dual publish', so the exact same messages are sent 2 (or really N) times.

I've not looked deeply into the existing code to see how easy this would be, but would like to gather some feedback on if others have this use case and thus would a pull request be accepted for it.

I imagine something like;

kafka:
  brokers:
    cluster1:
      - xxxx
      - yyyy
    cluster2:
      - xxxx
      - yyyy

Where cluster1/cluster2 are just identifiers for logging/stats or such.

The main unknown is what the current behaviour in the cluster being down is; if it fails safe at publish time this is probably rather easier, if it assumes a hard dep then likely harder.

Export feature

Feature like export table data to XLS/CSV will be really helpful for further analysis

Issue Compiling source during OpenBMP installation

Hello,

I'm new working with OpenBMP, I'm trying to install it in my server Dell 210, everything went smooth until the compiling part, I get the next error:

daniel@ubuntu:~/openbmp/build$ cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ../
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Boost version: 1.58.0
-- Found OpenSSL: /usr/lib/x86_64-linux-gnu/libssl.so;/usr/lib/x86_64-linux-gnu/libcrypto.so (found suitable version "1.0.2g", minimum required is "1")
-- Performing Test SUPPORTS_STD_CXX11
-- Performing Test SUPPORTS_STD_CXX11 - Success
-- Performing Test SUPPORTS_STD_CXX01
-- Performing Test SUPPORTS_STD_CXX01 - Success
-- Configuring done
-- Generating done
-- Build files have been written to: /home/daniel/openbmp/build

daniel@ubuntu:~/openbmp/build$ make
Scanning dependencies of target openbmpd
[ 4%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/bmp/BMPListener.cpp.o
[ 8%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/bmp/BMPReader.cpp.o
[ 12%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/kafka/MsgBusImpl_kafka.cpp.o
[ 16%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/kafka/KafkaEventCallback.cpp.o
[ 20%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/kafka/KafkaDeliveryReportCallback.cpp.o
[ 24%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/kafka/KafkaTopicSelector.cpp.o
[ 28%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/kafka/KafkaPeerPartitionerCallback.cpp.o
[ 32%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/openbmp.cpp.o
[ 36%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/bmp/parseBMP.cpp.o
[ 40%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/md5.cpp.o
[ 44%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/Logger.cpp.o
[ 48%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/Config.cpp.o
[ 52%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/client_thread.cpp.o
[ 56%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/bgp/parseBGP.cpp.o
[ 60%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/bgp/NotificationMsg.cpp.o
[ 64%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/bgp/OpenMsg.cpp.o
[ 68%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/bgp/UpdateMsg.cpp.o
[ 72%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/bgp/MPReachAttr.cpp.o
[ 76%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/bgp/MPUnReachAttr.cpp.o
[ 80%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/bgp/ExtCommunity.cpp.o
[ 84%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/bgp/AddPathDataContainer.cpp.o
[ 88%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/bgp/EVPN.cpp.o
[ 92%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/bgp/linkstate/MPLinkState.cpp.o
[ 96%] Building CXX object Server/CMakeFiles/openbmpd.dir/src/bgp/linkstate/MPLinkStateAttr.cpp.o
[100%] Linking CXX executable openbmpd
/usr/local/lib/librdkafka.a(rddl.o): In function rd_dl_error': /home/daniel/librdkafka/src/rddl.c:51: undefined reference to dlerror'
/usr/local/lib/librdkafka.a(rddl.o): In function rd_dl_open': /home/daniel/librdkafka/src/rddl.c:79: undefined reference to dlopen'
/usr/local/lib/librdkafka.a(rddl.o): In function rd_dl_sym': /home/daniel/librdkafka/src/rddl.c:115: undefined reference to dlsym'
/usr/local/lib/librdkafka.a(rddl.o): In function rd_dl_close': /home/daniel/librdkafka/src/rddl.c:100: undefined reference to dlclose'
collect2: error: ld returned 1 exit status
Server/CMakeFiles/openbmpd.dir/build.make:698: recipe for target 'Server/openbmpd' failed
make[2]: *** [Server/openbmpd] Error 1
CMakeFiles/Makefile2:85: recipe for target 'Server/CMakeFiles/openbmpd.dir/all' failed
make[1]: *** [Server/CMakeFiles/openbmpd.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2

If you can help me out, it would be great!
Thank you for your help!

Daniel

Jenkins SSL certificate

Would it be possible to put a 'real' SSL certificate on the Jenkins instance, or alternately upload the 'release' builds to Github for all components?

Background; we run the collector on dedicated hardware, then the other components in individual vms.

Problem; our packaging framework has to pass through a set of proxies to download build artifacts, for security reasons these deny connects to sites with invalid SSL certificates.

This is currently handled by manually downloaded the artifacts, which is not optimal and potentially can be intercepted.

Is this something you can consider?

Thanks

  • Damian

openBMP reports down state for connected BGP peer

Hi, mates,

We are evaluating openBMP in a big Internet environment (~700 of peers). For some of the peers that are up opnebmp reports down stage.

Can you advise on this?

mysql> select * from bgp_peers where peer_addr = "80.249.208.255";
+----------------------------------+----------------------------------+---------+--------+----------------+----------------+----------------+---------+-------+-------------+----------------------------+-------------+--------------+----------------+---------------+------------+-----------------+-----------+-------------+------------------+----------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+------------+--------------+-----------------+------------+
| hash_id | router_hash_id | peer_rd | isIPv4 | peer_addr | name | peer_bgp_id | peer_as | state | isL3VPNpeer | timestamp | isPrePolicy | geo_ip_start | local_ip | local_bgp_id | local_port | local_hold_time | local_asn | remote_port | remote_hold_time | sent_capabilities | recv_capabilities | bmp_reason | bgp_err_code | bgp_err_subcode | error_text |
+----------------------------------+----------------------------------+---------+--------+----------------+----------------+----------------+---------+-------+-------------+----------------------------+-------------+--------------+----------------+---------------+------------+-----------------+-----------+-------------+------------------+----------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+------------+--------------+-----------------+------------+
| 8c21ff121b323ca6f99e08066bfe7fed | 5056616ed30c6706d0cdfd767ff89125 | 0:0 | 1 | 80.249.208.255 | rs1.ams-ix.net | 80.249.208.255 | 6777 | 0 | 0 | 2017-01-09 14:08:49.667696 | 1 | NULL | 80.249.210.198 | 10.252.128.22 | 50198 | 90 | 43996 | 179 | 240 | MPBGP (1) : afi=1 safi=1 : Unicast IPv4, Route Refresh Old (128), Route Refresh (2), Graceful Restart (64), 4 Octet ASN (65), 71 | MPBGP (1) : afi=1 safi=1 : Unicast IPv4, Route Refresh (2), Graceful Restart (64), 4 Octet ASN (65), Route Refresh Enhanced (70) | 0 | 0 | 0 | |
+----------------------------------+----------------------------------+---------+--------+----------------+----------------+----------------+---------+-------+-------------+----------------------------+-------------+--------------+----------------+---------------+------------+-----------------+-----------+-------------+------------------+----------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+------------+--------------+-----------------+------------+
1 rows in set (0.01 sec)

mysql> select * from peer_up_events where peer_hash_id = "8c21ff121b323ca6f99e08066bfe7fed";
+------+----------------------------------+----------------+---------------+------------+-----------------+-----------+-------------+------------------+----------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+----------------------------+
| id | peer_hash_id | local_ip | local_bgp_id | local_port | local_hold_time | local_asn | remote_port | remote_hold_time | sent_capabilities | recv_capabilities | timestamp |
+------+----------------------------------+----------------+---------------+------------+-----------------+-----------+-------------+------------------+----------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+----------------------------+
| 1431 | 8c21ff121b323ca6f99e08066bfe7fed | 80.249.210.198 | 10.252.128.22 | 50198 | 90 | 43996 | 179 | 240 | MPBGP (1) : afi=1 safi=1 : Unicast IPv4, Route Refresh Old (128), Route Refresh (2), Graceful Restart (64), 4 Octet ASN (65), 71 | MPBGP (1) : afi=1 safi=1 : Unicast IPv4, Route Refresh (2), Graceful Restart (64), 4 Octet ASN (65), Route Refresh Enhanced (70) | 2017-01-09 11:50:38.000000 |
+------+----------------------------------+----------------+---------------+------------+-----------------+-----------+-------------+------------------+----------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------+----------------------------+
1 row in set (0.02 sec)

mysql> select * from peer_down_events where peer_hash_id = "8c21ff121b323ca6f99e08066bfe7fed";
Empty set (0.01 sec)

The openbmp.parsed.router BMP message does not have 12 fields

Hi @TimEvens

I got a panic when processing the BMP message for "openbmp.parsed.router".
From https://github.com/OpenBMP/openbmp/blob/master/Server/src/kafka/MsgBusImpl_kafka.cpp#L515-L521, This topic message has 12 fields.

But my Kafka consumer shows it only has 11 fields when reading it with csv:

2016/08/24 13:57:38 Each Record Length: 11
2016/08/24 13:57:38 RECORD!!!!!!!: [term 1 localhost fae1fca475a0b94fbdda74d4bcfd7844 127.0.0.1  65534 (2) Connection closed   2016-08-24 17:57:39.767315]

This message shows, the timestamp is the last field of this topic.
But the code shows, there is another field after the timestamp.

Any comments?

Web UI password change problem

If you try to modify a user's password by double clicking in the password field, but do not make any changes (say, by clicking elsewhere on the screen or pressing tab), the hash of the previous password becomes the user's new plaintext password.

Example:
If a user has a plaintext password of mypasswd, the displayed hash starts with *85E26B8....
If you double click on this field, but do not make a change, then the hash *85E26B8.... becomes the user's new password (which of course hashes to something different, in this case *26347...)

The behavior should be to not change the password.

pre-policy and post-policy support

Hi :
I am using the Postgres, Kafka and collector dockers to monitor BMP from Arista switches. When both pre-policy and post-policy bmp monitoring are enabled, seems like openbmp only reports pre-policy prefix count.
Is this a supported scenario where pre-policy and post-policy monitoring are enabled simultaneously ?

If yes, I have the following questions:
Sorry I am new to BMP and must be overlooking something here.

  1. I have 12000 prefixes qualified for pre-policy and 2 prefixes qualify for post-policy.
    But, openbmp only reports 12000 and not 12002.

  2. Seems like the isprepolicy field is not reflecting correctly ?
    When displaying a prefix which is not subject to the post-policy , the "isprepolicy" field is "f" .

openbmp=# select * from v_ip_routes where prefix='205.43.63.0/24';
routername | peername | prefix | prefixlen | origin | origin_as | med | localpref | nh |
as_path
| aspath_count | communities | extcommunities | largecommunities | clusterlist | aggregator | peeraddress | peerasn |
isipv4 | ispeeripv4 | ispeervpn | lastmodified | firstaddedtimestamp | path_id | labels | rib_hash_id
| base_hash_id | peer_hash_id | router_hash_id | iswith
drawn | prefix_bits | isprepolicy | isadjribin
------------------------------+---------------+----------------+-----------+--------+-----------+-----+-----------+---------------+----

---------------+--------------+-------------+----------------+------------------+-------------+------------+---------------+---------+-
-------+------------+-----------+-------------------------+----------------------------+---------+--------+----------------------------
----------+--------------------------------------+--------------------------------------+--------------------------------------+-------
------+--------------------------+-------------+------------
yo662.sjc.aristanetworks.com | 10.255.230.43 | 205.43.63.0/24 | 24 | igp | 49993 | 0 | 0 | 10.255.230.43 | 20
600 { 6346 21531 21653 22593 23304 25212 40225 49040 } { 1052 19993 33741 36210 36466 44278 49072 52434 61156 } { 296 13808 24302 24928
29218 49993 } | 24 | | | | | | 10.255.230.43 | 20600 |
t | t | f | 2019-01-15 21:03:13.011 | 2019-01-15 21:03:13.242159 | 0 | | f0fbd7bc-ba59-43ae-1f16-a70
f0dadc65f | 3e02266d-913a-6de7-e474-367e70062a8c | 69dbeddd-3278-07a3-89bb-01493e80fd1d | 2cb671c2-5d06-023f-04c8-b8cba569b21b | f
| 110011010010101100111111 | f | f
(1 row)

openbmp=#

I have verified that both pre-policy and post-policy announcements are sent to openbmp.

Thanks in advance,

OpenBMP dies when new router comes online

Hi all,

Running into a really odd issue. I have a number BMP collectors, they're managing from 50-150 routers per system. After they're running for some period of time, if a new router connects to the collector, the collector "dies".

So the dying part is very odd. Looking through the logs, all I'll typically see is an error similar to

2018-11-09T03:48:57.129328 | ERROR | event_cb | Kafka error: Local: Bad message format

I've turned on debugging, and it seems like librdkafka is still going ok and trying to manage empty queues. The BMP log volume dies down significantly, but it does see the occasional router message (just much less).

I've tried adjusting Kafka settings on both ends, as well as increasing/decreasing resources on the OpenBMP side (buffers, simultaneous routers, etc). The big problem is that when it has an issue, it doesn't die, and results in the service having to be manually restarted. And when it does restart, all of the routers (of which there are many) republish their histories which means various monitoring tasks then get backlogged with millions of old messages.

I have other monitoring in place so I know when it goes down, but it's been very often in the middle of the night. I don't have a local watchdog to see if a collector goes down to just restart it.

I'm wondering if anyone has seen this before and if it's just a bad configuration to look at, or if a solution requires digging through code.

Basic stats

  • 4 collectors
  • 4 VMS. Each with 16G RAM & 8 VCPU's
  • 2 virtual disks on SSD

Thanks

--Rick

DataBase Problem

Hi,

I've installed the container for UI and for the AIO, and I enable BGP monitoring on our router.
I can see all BGP update on the tcpdump and in the rib and the collectors, but nothing is showing under routers or v_routes.
I'm not sure what I am missing. can anyone assit?

Kenan

Capitalization problem for whois ASN REST interface

The whois page in the UI has a link for the REST interface to retrieve the same information from an RIR. This URL has leading capitalization that is breaking the link.

Example: the UI shows the 'Ref' link for AS 109 as:
Ref Http://Whois.Arin.Net/Rest/Asn/AS109
but is should be:
Ref http://whois.arin.net/rest/asn/AS109

Passive Mode Support

Hi All,

Does OpenBMP support passive mode connections? I.e. where OpenBMP makes the TCP connection to the router. I can see the isPassive flag in the Routers table but when trying to manually create a record for a passive device, it isn't connected to.

Thanks,
Sean

Kafka topic expiration and new consumers

Hey!

The documentation doesn't really deal with how expiration should be handled in Kafka. For example, if all topics are set to expire in 24 hours, new consumers don't have most information to be able to bootstrap. A simple solution is to restart the collector every 24 hour. Maybe a openbmpd could force a rolling disconnect instead? Or maybe I am missing another solution?

Topic mapping

Add the ability to define the topics that OpenBMP produces to.

Specific consumers may only need to consume messages from specific peers, routers, address families. Kafka consumers scale horizontally by topic/partition. Normally the number of partitions in Kafka is small. In order to scale consumers efficiently, additional topics need to be used. This will ensure FIFO message processing for messages that should be processed in order they were received by the collector (openbmpd/producer).

This enhancement is to add YAML configuration file support with the ability to define/change the existing topic names and to add grouping by router and peer. Later we will add filtering and other enhanced groupings, such as date/time, communities, as path, etc.

Below is an example configuration file. In order to ensure that the topic name is consistent we use grouping with a group name. All entries that match the group will appear in the topic by group.name substitution. This can be used to classify/group routers or peers by region/location, role (public, private, transit, internal, ...), etc.

topics:
  grouping:
    # {router_group} is the variable that you use for topic substitution
    router_group:
      # name defines the value that is substituted for the variable.  This provides a consistent
      #    mapping for different IP's and hostnames
      - name: "phil"
        # You can define a list of regexp's that match for hostname to group mapping
        regexp_hostname:
           - .*\.phil\..*            # Match

        # You can also define a list of prefixes that match for ip to group mapping
        prefix_range:
           - 10.100.100.0/24
           - 10.100.104.0/24

           # {router_group} is the variable that you use for topic substitution

    peer_group:
      # name defines the value that is substituted for the variable.  This provides a consistent
      #    mapping for different IP's and hostnames
      - name: "phil"
        # You can define a list of regexp's that match for hostname to group mapping
        regexp_hostname:
           - .*\.phil\..*            # Match

        # You can also define a list of prefixes that match for ip to group mapping
        prefix_range:
           - 10.100.100.0/24
           - 10.100.104.0/24
  mapping:
    root: "openbmp"   # Defines the root topic (e.g. openbmp.*)
    raw: "bmp_raw"    # Defines the topic for bmp raw messages (e.g. openbmp.bmp_raw.*)
    parsed: "parsed"  # Defines the topic for parsed messages (e.g. openbmp.parsed.*)

    peer: "{root}.{parsed}.peer"
    unicast_prefix: "{root}.{parsed}.unicast_prefix.{router_group}.{peer_group}.{family}"

    <etc...>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.