Simple DB REST interface to the OpenBMP database. This is an example of how to interact with the database.
All queries have the following JSON syntax/output:
{ <table_name> : {
cols: <number of columns>,
data: [ { <column name>:<value>, ... },
...
],
size: <total number of rows in result>,
queryTime_ms: <ms value - the duration in ms>,
fetchTime_ms: <ms value - the duration in ms>
}
}
Below documentations the various REST URL/API's.
BASE URL is always /db_rest/v1
DEMO Server Base URL is http://demo.openbmp.org:8001/db_rest/v1
BMP Router view.
Method | URI | Parameters | Description | Demo URL |
---|---|---|---|---|
GET | /db_rest/v1/routers | withgeo - Adds the geo location columns for router based on the router IP address limit - Max results to return where - SQL WHERE clause orderby - SQL ORDER BY clause |
Returns the list of BMP routers currently known in the database | Demo |
GET | /db_rest/v1/routers/status/count | Returns a count of DOWN and UP BMP routers | Demo | |
GET | /db_rest/v1/routers/status/up | Returns the BMP routers that are up | Demo | |
GET | /db_rest/v1/routers/status/down | Returns the BMP routers that are down | Demo |
BGP Peer view.
Method | URI | Parameters | Description | Demo URL |
---|---|---|---|---|
GET | /db_rest/v1/peer | withgeo - Adds the geo location columns for the peer based on the peer IP address limit - Max results to return where - SQL WHERE clause orderby - SQL ORDER BY clause |
Returns a list of BGP peers | Demo |
GET | /db_rest/v1/peer/localip/{localIP} | withgeo - Adds the geo location columns for the peer based on the peer IP address limit - Max results to return where - SQL WHERE clause orderby - SQL ORDER BY clause |
Returns a list of BGP peers by local IP address | Demo |
GET | /db_rest/v1/peer/remoteip/{remoteIP} | withgeo - Adds the geo location columns for the peer based on the peer IP address limit - Max results to return where - SQL WHERE clause orderby - SQL ORDER BY clause |
Returns a list of BGP peers by remote/peer IP address | Demo |
GET | /db_rest/v1/peer/asn/{Peer ASN} | withgeo - Adds the geo location columns for the peer based on the peer IP address limit - Max results to return where - SQL WHERE clause orderby - SQL ORDER BY clause |
Returns a list of BGP peers by Peer ASN | Demo |
GET | /db_rest/v1/peer/type/count | Returns peer counts by status IP version type | Demo | |
GET | /db_rest/v1/peer/type/count/router | Returns a list of routers with count of peers by IP Type | Demo | |
GET | /db_rest/v1/peer/type/v4 | withgeo - Adds the geo location columns for the peer based on the peer IP address |
Returns list of IPv4 peers | Demo |
GET | /db_rest/v1/peer/type/v6 | withgeo - Adds the geo location columns for the peer based on the peer IP address |
Returns list of IPv6 peers | Demo |
GET | /db_rest/v1/peer/status/count | Returns peer counts by peer status | Demo | |
GET | /db_rest/v1/peer/status/up | withgeo - Adds the geo location columns for the peer based on the peer IP address |
Returns a list of BGP peers that are UP | Demo |
GET | /db_rest/v1/peer/status/down | withgeo - Adds the geo location columns for the peer based on the peer IP address |
Returns a list of BGP peers that are DOWN | Demo |
GET | /db_rest/v1/peer/prefix | Returns a list of BGP peers and their Pre-Policy and Post-Policy RIB counts. | Demo | |
GET | /db_rest/v1/peer/prefix/{peerIP} | Returns a list of BGP peers and their Pre-Policy and Post-Policy RIB counts by peer address | Demo | |
GET | /db_rest/v1/peer/router/{Router IP} | withgeo - Adds the geo location columns for the peer based on the peer IP address limit - Max results to return orderby - SQL ORDER BY clause |
Returns a list of BGP peers based on Router IP or Router Name | Demo |
Unicast IPv4/IPv6 RIB/routes view.
Method | URI | Parameters | Description | Demo URL |
---|---|---|---|---|
GET | /db_rest/v1/rib | limit - Max results to return where - SQL WHERE clause orderby - SQL ORDER BY clause |
Returns the RIB entries. Default limit is 1000. Should use WHERE clause to filter or use one of the below URI's instead. | [Demo](http://demo.openbmp.org:8001/db_rest/v1/rib?where=PrefixLen >= 8 and PrefixLen <= 9) |
GET | /db_rest/v1/rib/asn/{ASN} | limit - Max results to return where - SQL WHERE clause orderby - SQL ORDER BY clause |
Returns a list of prefixes by Origin ASN. | Demo |
GET | /db_rest/v1/rib/asn/{ASN}/count | limit - Max results to return where - SQL WHERE clause orderby - SQL ORDER BY clause |
Returns a list of prefixes by Origin ASN. | Demo |
GET | /db_rest/v1/rib/prefix/{Prefix} | limit - Max results to return where - SQL WHERE clause orderby - SQL ORDER BY clause |
Returns a list of prefixes by Prefix starts with. | Demo |
GET | /db_rest/v1/rib/prefix/{Prefix}/{length} | limit - Max results to return where - SQL WHERE clause orderby - SQL ORDER BY clause |
Returns a list of prefixes by Prefix/Length. | Demo |
GET | /db_rest/v1/rib/lookup/{IP} | where - SQL WHERE clause orderby - SQL ORDER BY clause aggregates - Set to return aggregates distinct - Set to return only a distinct list of prefixes |
Finds the longest match prefix based on the IP (more specific) supplied. | Demo |
GET | /db_rest/v1/rib/history/{prefix}/{length} | limit - Max results to return where - SQL WHERE clause orderby - SQL ORDER BY clause days number of days to include in search. |
Returns the RIB history for a given prefix/length. Default limit is 1000. Can use WHERE clause to filter on PeerName to restrict to a specific peer. | Demo |
List the upstream ASN's for the given ASN. This query simply looks at the AS PATH and parses out the LEFT most ASN next to the ASN provided.
AS PATH 1 = 100 200 300 400 500 600 700
AS PATH 2 = 40 50 60 70 400 888 600 700
A query on ASN = 400 returns { 300, 70 } since both of those ASN's are the left most ASN's next to ASN 400.
Method | URI | Parameters | Description | Demo URL |
---|---|---|---|---|
GET | /db_rest/v1/upstream/{asn} | List all upstream ASN's for the given ASN | Demo | |
GET | /db_rest/v1/upstream/{asn}/count | List all upstream ASN's for the given ASN and count the number of distinct prefixes (each prefix/len + peer is counted) | Demo | |
GET | /db_rest/v1/upstream/{asn}/peer/count | List all upstream ASN's for the given ASN and count the number of distinct prefixes per peer | Demo |
List the downstream ASN's for the given ASN. This query simply looks at the AS PATH and parses out the RIGHT most ASN next to the ASN provided. This will return a an empty ASN which is for itself.
AS PATH 1 = 100 200 300 400 500 600 700
AS PATH 2 = 40 50 60 70 400 888 600 700
A query on ASN = 400 returns { 500, 888 } since both of those ASN's are the right most ASN's next to ASN 400.
Method | URI | Parameters | Description | Demo URL |
---|---|---|---|---|
GET | /db_rest/v1/downstream/{asn} | List all downstream ASN's for the given ASN | Demo | |
GET | /db_rest/v1/downstream/{asn}/count | List all downstream ASN's for the given ASN and count the number of distinct prefixes (each prefix/len + peer is counted) | Demo | |
GET | /db_rest/v1/downstream/{asn}/peer/count | List all downstream ASN's for the given ASN and count the number of distinct prefixes per peer | Demo | |
GET | /db_rest/v1/downstream/peer/{peerHashId} | Distinctly lists the ASN's that are directly to the right of the peer ASN. E.g. ASPath's { "10 20, 30", "10 9 8"} would produce a list containing 20 and 9 since those ASNs are to the right of the peering ASN of 10. Each AS will have the ASN name, organization, and country. | Demo |
Each update is logged. Attributes that vary by router/peer/prefix will get an update log entry.
Method | URI | Parameters | Description | Demo URL |
---|---|---|---|---|
GET | /db_rest/v1/updates/top | limit - Max results to return hours - Number of hours to include in top |
Return the top prefixes by number of updates in past 'hours'. Limit defaults to 25 and hours defaults to 2. | Demo |
GET | /db_rest/v1/updates/peer/{peerHashId}/top | limit - Max results to return hours - Number of hours to include in top |
For given peer, return the top prefixes by number of updates in past 'hours'. Limit defaults to 25 and hours defaults to 2. | Demo |
GET | /db_rest/v1/updates/top/interval/{minutes} | minutes - Interval in minutes limit - Max results to return hours - Number of hours to include in top |
Return the count of updates per interval for up to max limit size. Limit defaults to 25. | Demo |
GET | /db_rest/v1/updates/peer/{peerHashId}/top/interval/{minutes} | minutes - Interval in minutes limit - Max results to return hours - Number of hours to include in top |
For given peer, return the count of updates per interval for up to max limit size. Limit defaults to 25. | Demo |
Each prefix withdrawn is logged.
Method | URI | Parameters | Description | Demo URL |
---|---|---|---|---|
GET | /db_rest/v1/withdrawns/top | limit - Max results to return hours - Number of hours to include in top |
Return the top prefixes by number of prefixes withdrawn in past 'hours'. Limit defaults to 25 and hours defaults to 2. | Demo |
GET | /db_rest/v1/withdrawns/peer/{peerHashId}/top | limit - Max results to return hours - Number of hours to include in top |
For given peer, return the top prefixes by number of prefixes withdrawn in past 'hours'. Limit defaults to 25 and hours defaults to 2. | Demo |
GET | /db_rest/v1/withdrawns/top/interval/{minutes} | minutes - Interval in minutes limit - Max results to return hours - Number of hours to include in top |
Return the count of updates per interval for up to max limit size. Limit defaults to 25. | Demo |
GET | /db_rest/v1/withdrawns/peer/{peerHashId}/top/interval/{minutes} | minutes - Interval in minutes limit - Max results to return hours - Number of hours to include in top |
Return the count of updates per interval for up to max limit size. Limit defaults to 25. | Demo |
Per ASN statistics
Method | URI | Parameters | Description | Demo URL |
---|---|---|---|---|
GET | /db_rest/v1/asn_stats | limit - Max results to return |
Returns a list of all active ASN's in the DB | Demo |
GET | /db_rest/v1/asn_stats/{asn} | limit - Max results to return |
Returns the AS statistics for the provided ASN | Demo |
GET | /db_rest/v1/asn_stats/ipv4 | IPv4 limit - Max results to return topTransit= Get the top transit prefixes topOrigin= Get the top originating ASN's |
Get the top ASN's originating prefixes or that are transit to other ASN's | Demo |
GET | /db_rest/v1/asn_stats/ipv6 | IPv6 limit - Max results to return topTransit= Get the top transit prefixes topOrigin= Get the top originating ASN's |
Get the top ASN's originating prefixes or that are transit to other ASN's | Demo |
Whois information for ASN's
Method | URI | Parameters | Description | Demo URL |
---|---|---|---|---|
GET | /db_rest/v1/whois/asn | where - SQL WHERE clause limit - Max results to return |
Returns all whois information | [Demo](http://demo.openbmp.org:8001/db_rest/v1/whois/asn?where=org_name like%20'%cisco%') |
GET | /db_rest/v1/whois/asn/count | where - SQL WHERE clause | Returns the count of ASN matches based on WHERE clause | [Demo](http://demo.openbmp.org:8001/db_rest/v1/whois/asn/count?where=org_name like%20'%cisco%') |
GET | /db_rest/v1/whois/asn/{asn} | where - SQL WHERE clause | Returns the whois info for the given ASN | Demo |
Geolocation IP address information from DB-IP, IP2Location, or MaxMind.
Method | URI | Parameters | Description | Demo URL |
---|---|---|---|---|
GET | /db_rest/v1/geoip/{IP} | where - SQL WHERE clause | Returns the geolocation data based on the IP supplied | Demo |
BGP-LS general/raw link state DB information
Method | URI | Parameters | Description | Demo URL |
---|---|---|---|---|
GET | /db_rest/v1/linkstate/nodes | where - SQL WHERE clause limit - Limit the number of results orderby - Order by clause |
Returns the list of link state nodes | Demo |
GET | /db_rest/v1/linkstate/nodes/peer/{peerHashId} | where - SQL WHERE clause limit - Limit the number of results orderby - Order by clause |
Returns the list of link state nodes for the given peer hash id Get the peer hash ID by listing the nodes. | Demo |
GET | /db_rest/v1/linkstate/nodes/peer/{peerHashId}/{nodeHashId} | where - SQL WHERE clause limit - Limit the number of results orderby - Order by clause |
Returns the the specific node by peer hash id and node hash id Get the node and peer hash ID by listing the nodes. | Demo |
GET | /db_rest/v1/linkstate/links | where - SQL WHERE clause limit - Limit the number of results orderby - Order by clause |
Returns the list of link state links | Demo |
GET | /db_rest/v1/linkstate/links/peer/{peerHashId} | where - SQL WHERE clause limit - Limit the number of results orderby - Order by clause |
Returns the list of link state links for given peer hash id | Demo |
GET | /db_rest/v1/linkstate/prefixes | where - SQL WHERE clause limit - Limit the number of results orderby - Order by clause |
Returns the list of link state prefixes | Demo |
GET | /db_rest/v1/linkstate/prefixes/peer/{peerHashId} | where - SQL WHERE clause limit - Limit the number of results orderby - Order by clause |
Returns the list of link state prefixes for given peer hash id | Demo |
BGP-LS shortest path first (SPF) information.
Running any GET below will result in a SPF generated routing table rooted at the given router id. IS-IS will have a router ID as well, so we use router id regardless of OSPF or IS-IS. This keeps it consistent between the two.
In order to ensure that fast/repeated queries do not result in running SPF's when there's no change, there is a built in timer that will only generate a new RIB for the given protocol and router ID at most every 15 seconds.
SPF's are calculated on a per-BGP-peer basis. A single BGP peer provides all link state information so the SPF does not need to span multiple bgp-ls peers. You should first run a GET /db_rest/v1/linkstate/nodes to identify which peer and node you would like to run the SPF against.
Method | URI | Parameters | Description | Demo URL |
---|---|---|---|---|
GET | /db_rest/v1/linkstate/spf/peer/{peerHashId}/ospf/{routerId} | where - SQL WHERE clause limit - Limit the number of results orderby - Order by clause |
Runs OSPF SPF and generates a RIB for the given bgp-ls peer and router-id. The generated RIB is returned. | Demo |
GET | /db_rest/v1/linkstate/spf/peer/{peerHashId}/isis/{routerId} | where - SQL WHERE clause limit - Limit the number of results orderby - Order by clause |
Runs IS-IS SPF and generates a RIB for the given bgp-ls peer and router-id. The generated RIB is returned. | Demo |
The returned result will contain two path columns/fields.
- path_hash_ids - Comma delimited list of node hash ID's
- path_router_ids - Comma delimited list of node router ID's
The first entry in the path will always be the root node. For example, if the SPF was ran for 200.1.1.1, then 200.1.1.1 will be the first path entry. The last entry in the path will always be the node where the prefix originates.
{
prefix: "100.1.1.4/32",
Type: "0",
metric: 21,
src_router_id: "100.1.1.4",
nei_router_id: "100.1.1.3",
path_router_ids: "100.1.1.2,100.1.1.3,100.1.1.4",
path_hash_ids: "0ec92251bd07fc3a917ace4fcc564c83,d9ea9b11a9c9e2a9e91acfb91711f4a8,af17bf43842d5bac5702c5971334cce0",
neighbor_addr: "192.168.1.10",
peer_hash_id: "54ecaeeec115457cbce466ff48857aa7"
}
Source is available in Github
Before building, edit the src/main/webapp/META-INF/context.xml file and change the settings to match your DB install (username, password, and hostname).
To build the WAR file, run mvn clean package
You have to have maven version 3 installed. To install maven see maven3
To install, simply copy the db_rest.war file to the <tomcat>/webapps directory.