API Documentation¶
rtrlib-python - a cffi based rtrlib wrapper
| license: | MIT, see LICENSE for more details. |
|---|
rtrlib.rtr_manager¶
-
class
rtrlib.rtr_manager.RTRManager(host, port, refresh_interval=3600, expire_interval=7200, retry_interval=600, status_callback=None, status_callback_data=None, pfx_update_callback=None, pfx_update_callback_data=None, spki_update_callback=None, spki_update_callback_data=None)[source]¶ Wrapper around rtr_manager.
Parameters: - host (str) – Hostname or IP of rpki cache server
- port (int) – Port number
- refresh_interval (int) – Interval in seconds between serial queries that are sent to the server. Must be >= 1 and <= 86400s (one day).
- expire_interval (int) – Stored validation records will be deleted if cache was unable to refresh data for this period. The value should be twice the refresh_interval. The value must be >= 600s (ten minutes) and <= 172800s (two days).
- retry_interval (int) – This parameter specifies how long to wait (in seconds) before retrying a failed Query. The value must be >= 1s and <= 7200s (two hours).
- status_callback (function) – status callback, called on status changes of the rtr manager
- status_callback_data (object) – arbitrary data object passed to the callback.
- pfx_update_callback (function) – pfx update callback called every time a pfx update is received
- pfx_update_callback_data – data passed to the pfx update callback
- spki_update_callback (function) – spki update callback called every time a spki update is received
- spki_update_callback_data – data passed to the spki update callback
Raises: -
for_each_ipv4_record(callback, data)[source]¶ Iterate over all ipv4 records of the pfx table.
callback must take two arguments, the pfx_record and the data object.
For a more pythonic alternative see
ipv4_records()Parameters: - callback (callable) – called for every record in the pfx table
- data (object) – arbitrary data object that is passed to the callback function
-
for_each_ipv6_record(callback, data)[source]¶ Iterate over all ipv6 records of the pfx table.
callback must take two arguments, the pfx_record and the data object.
For a more pythonic alternative see
ipv6_records()Parameters: - callback (callable) – called for every record in the pfx table
- data (object) – arbitrary data object that is passed to the callback function
-
ipv4_records()[source]¶ Return iterator over all ipv4 records in the pfx table.
This iterator utilises threads to execute retrieve the records. If that is a problem for you take a look at
for_each_ipv4_record().Return type: Iterator
-
ipv6_records()[source]¶ Return iterator over all ipv6 records in the pfx table.
This iterator utilises threads to execute retrieve the records. If that is a problem for you take a look at
for_each_ipv6_record().Return type: Iterator
-
start(wait=True, timeout=5)[source]¶ Start RTRManager.
Parameters: Raises: SyncTimeout – Raised if timeout is reached, this does not mean that the sync failed, only that it did not finish in time.
-
validate(asn, prefix, mask_len)[source]¶ Validate BGP prefix and returns state as PfxvState enum.
Parameters: Return type:
-
wait_for_sync(timeout=5)[source]¶ Wait until RTRManager is synchronized.
Parameters: timeout (int) – Raises: SyncTimeout – Raise if timeout is reached, this does not mean that the sync failed, only that it did not finish in time.
-
class
rtrlib.rtr_manager.PfxvState[source]¶ Wrapper for the pfxv_state enum.
-
invalid¶ One or more records that match the input prefix exists in the pfx_table, but the prefix max_len or ASN doesn’t match.
-
not_found¶ No certificate for the route exists
-
valid¶ A valid certificate for the pfx_record exists
-
-
class
rtrlib.rtr_manager.ValidationResult(prefix, prefix_length, asn, state, reason_records=None, reason_len=0)[source]¶ Wrapper class for validation result.
Parameters: - prefix (str) – The prefix that was validated
- prefix_length (int) – The length of the prefix
- asn – The ASN the prefix is supposed to be in.
- asn – int
- state (enum pfxv_state *) – Validation state
- reason_records (struct pfx_record **) – Array of PFXRecords the decision is based on
- reason_len (int) – Length of reason_records
-
as_invalid¶ True if at least one matching record has a different as number and state is invalid.
-
is_invalid¶ Return true if prefix is invalid.
-
is_valid¶ True if prefix is valid.
-
length_invalid¶ True if at least one matching record has a miss matching prefix length and state is invalid.
-
not_found¶ True if prefix could not be found.
-
state¶ Validation state.
-
class
rtrlib.rtr_manager.Reason(prefix_length, asn, record)[source]¶ A Reason upon which a validation decision was made.
Parameters: -
as_invalid¶ True is as is invalid.
-
as_valid¶ True if as is valid.
-
length_invalid¶ True if prefix length is invalid.
-
length_valid¶ True if prefix length is valid.
-
rtrlib.rtr_socket¶
-
class
rtrlib.rtr_socket.RTRSocket(socket)[source]¶ Wrapper around the rtr_socket struct
Parameters: socket (cdata) – rtr_socket struct -
expire_interval¶ Time period in seconds. Received records are deleted if the client was unable to refresh data for this time period. If 0 is specified, the expire_interval is twice the refresh_interval.
-
has_recieved_pdus¶ True, if this socket has already received PDUs
-
last_update¶ Timestamp of the last validation record update. Is 0 if the pfx_table doesn’t stores any validation records from this rtr_socket.
-
refresh_interval¶ Time period in seconds. Tells the router how long to wait before next attempting to poll the cache, using a Serial Query or Reset Query PDU.
-
retry_interval¶ Time period in seconds between a failed query and the next attempt.
-
state¶ Current state of the socket.
-
version¶ Protocol version used by this socket
-
-
class
rtrlib.rtr_socket.RTRSocketList(sockets, length)[source]¶ List of RTRSockets. Can be accessed like any other list.
Read Only.
-
class
rtrlib.rtr_socket.RTRSocketState[source]¶ States of the RTR socket
-
CONNECTING¶ Socket is establishing the transport connection
-
ERROR_FATAL¶ Fatal protocol error occurred
-
ERROR_NO_DATA_AVAILABLE¶ No validation records are available on the RTR server
-
ERROR_NO_INCREMENTAL_UPDATE_AVAILABLE¶ Server was unable to answer the last serial or reset query
-
ERROR_TRANSPORT¶ Error on the transport socket occurred
-
ESTABLISHED¶ Connection is established and socket is waiting for a Serial Notify or expiration of the refresh_interval timer.
-
FAST_RECONNECT¶ Reconnect without any waiting period
-
RESET¶ Resetting RTR connection
-
SHUTDOWN¶ RTR Socket is stopped
-
SYNC¶ Receiving validation records from the RTR server
-
rtrlib.records¶
Collection of wrappers for *record structs of rtrlib
-
class
rtrlib.records.PFXRecord(record)[source]¶ Wrapper around the pfx_record struct.
-
asn¶ Origin AS number.
-
max_len¶ Maximum prefix length.
-
min_len¶ Minimum prefix length.
-
prefix¶ IP prefix.
-
rtrlib.manager_group¶
-
class
rtrlib.manager_group.ManagerGroup(group)[source]¶ Wrapper around the rtr_mgr_group struct
Parameters: group (cdata) – A rtr_mgr_group struct -
preference¶ The preference value of the group
-
sockets¶ The socket list as RTRSocketList
-
sockets_len¶ The sockets_len value of the group
-
status¶ The group status as enum34
-
-
class
rtrlib.manager_group.ManagerGroupStatus[source]¶ Wrapper around the C enum rtr_mgr_status.
-
CLOSED¶ RTR sockets are disconnected
-
CONNECTING¶ RTR sockets trying to establish a connection
-
ERROR¶ Error occured on at least one RTR socket
-
ESTABLISHED¶ All RTR sockets of the group are synchronized with the rtr servers
-