Prefix validation table
The pfx_table is an abstract data structure to organize the validated prefix origin data received from an RPKI-RTR cache server.
Modules |
| | Trie |
Typedefs |
| typedef void(* | pfx_for_each_fp )(const struct pfx_record *pfx_record, void *data) |
Enumerations |
| enum | pfx_rtvals { PFX_SUCCESS = 0,
PFX_ERROR = -1,
PFX_DUPLICATE_RECORD = -2,
PFX_RECORD_NOT_FOUND = -3
} |
| enum | pfxv_state { BGP_PFXV_STATE_VALID,
BGP_PFXV_STATE_NOT_FOUND,
BGP_PFXV_STATE_INVALID
} |
Functions |
| int | pfx_table_add (struct pfx_table *pfx_table, const struct pfx_record *pfx_record) |
| void | pfx_table_for_each_ipv4_record (struct pfx_table *pfx_table, pfx_for_each_fp fp, void *data) |
| void | pfx_table_for_each_ipv6_record (struct pfx_table *pfx_table, pfx_for_each_fp fp, void *data) |
| void | pfx_table_free (struct pfx_table *pfx_table) |
| void | pfx_table_init (struct pfx_table *pfx_table, pfx_update_fp update_fp) |
| int | pfx_table_remove (struct pfx_table *pfx_table, const struct pfx_record *pfx_record) |
| int | pfx_table_src_remove (struct pfx_table *pfx_table, const struct rtr_socket *socket) |
| int | pfx_table_validate (struct pfx_table *pfx_table, const uint32_t asn, const struct lrtr_ip_addr *prefix, const uint8_t mask_len, enum pfxv_state *result) |
| int | pfx_table_validate_r (struct pfx_table *pfx_table, struct pfx_record **reason, unsigned int *reason_len, const uint32_t asn, const struct lrtr_ip_addr *prefix, const uint8_t mask_len, enum pfxv_state *result) |
Typedef Documentation
A function pointer that is called for each record in the pfx_table.
- Parameters:
-
Enumeration Type Documentation
Possible return values for pfx_ functions.
- Enumerator:
| PFX_SUCCESS |
Operation was successful.
|
| PFX_ERROR |
Error occured.
|
| PFX_DUPLICATE_RECORD |
The supplied pfx_record already exists in the pfx_table.
|
| PFX_RECORD_NOT_FOUND |
pfx_record wasn't found in the pfx_table.
|
Validation states returned from pfx_validate_origin.
- Enumerator:
| BGP_PFXV_STATE_VALID |
A valid certificate for the pfx_record exists.
|
| BGP_PFXV_STATE_NOT_FOUND |
No certificate for the route exists.
|
| BGP_PFXV_STATE_INVALID |
One or more records that match the input prefix exists in the pfx_table but the prefix max_len or ASN does'nt match.
|
Function Documentation
Adds a pfx_record to a pfx_table.
- Parameters:
-
- Returns:
- PFX_SUCCESS On success.
-
PFX_ERROR On error.
-
PFX_DUPLICATE_RECORD If the pfx_record already exists.
Iterates over all IPv4 records in the pfx_table.
For every pfx_record the function fp is called. The pfx_record and the data pointer is passed to the fp.
- Parameters:
-
| [in] | pfx_table | |
| [in] | fp | A pointer to a callback function with the signature pfx_for_each_fp. |
| [in] | data | This parameter is forwarded to the callback function. |
Iterates over all IPv6 records in the pfx_table.
For every pfx_record the function fp is called. The pfx_record and the data pointer is passed to the fp.
- Parameters:
-
| [in] | pfx_table | |
| [in] | fp | A pointer to a callback function with the signature pfx_for_each_fp. |
| [in] | data | This parameter is forwarded to the callback function. |
| void pfx_table_free |
( |
struct pfx_table * |
pfx_table |
) |
|
Frees all memory associcated with the pfx_table.
- Parameters:
-
Initializes the pfx_table struct.
- Parameters:
-
| [in] | pfx_table | pfx_table that will be initialized. |
| [in] | update_fp | Afunction pointers that will be called if a record was added or removed. |
Removes a pfx_record from a pfx_table.
- Parameters:
-
- Returns:
- PFX_SUCCESS On success.
-
PFX_ERROR On error.
-
PFX_RECORD_NOT_FOUND If pfx_records could'nt be found.
Removes all entries in the pfx_table that match the passed socket_id value from a pfx_table.
- Parameters:
-
- Returns:
- PFX_SUCCESS On success.
-
PFX_ERROR On error.
| int pfx_table_validate |
( |
struct pfx_table * |
pfx_table, |
|
|
const uint32_t |
asn, |
|
|
const struct lrtr_ip_addr * |
prefix, |
|
|
const uint8_t |
mask_len, |
|
|
enum pfxv_state * |
result | |
|
) |
| | |
Validates the origin of a BGP-Route.
- Parameters:
-
| [in] | pfx_table | pfx_table to use. |
| [in] | asn | Autonomous system number of the Origin-AS of the route. |
| [in] | prefix | Announcend network Prefix. |
| [in] | mask_len | Length of the network mask of the announced prefix. |
| [out] | result | Result of the validation. |
- Returns:
- PFX_SUCCESS On success.
-
PFX_ERROR On error.
| int pfx_table_validate_r |
( |
struct pfx_table * |
pfx_table, |
|
|
struct pfx_record ** |
reason, |
|
|
unsigned int * |
reason_len, |
|
|
const uint32_t |
asn, |
|
|
const struct lrtr_ip_addr * |
prefix, |
|
|
const uint8_t |
mask_len, |
|
|
enum pfxv_state * |
result | |
|
) |
| | |
Validates the origin of a BGP-Route and returns a list of pfx_record that decided the result.
- Parameters:
-
| [in] | pfx_table | pfx_table to use. |
| [out] | reason | Pointer to a memory area that will be used as array of pfx_records. The memory area will be overwritten. Reason must point to NULL or an allocated memory area. |
| [out] | reason_len | Size of the array reason. |
| [in] | asn | Autonomous system number of the Origin-AS of the route. |
| [in] | prefix | Announcend network Prefix |
| [in] | mask_len | Length of the network mask of the announced prefix |
| [out] | result | Result of the validation. |
- Returns:
- PFX_SUCCESS On success.
-
PFX_ERROR On error.