Loading...
Searching...
No Matches
Prefix validation table

## Topics

| 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)

## Detailed Description

## Typedef Documentation

## pfx_for_each_fp

typedef void(* pfx_for_each_fp) (const struct pfx_record *pfx_record, void *data)

A function pointer that is called for each record in the pfx_table.

Parameters

  pfx_record |
  data | forwarded data which the user has passed to pfx_table_for_each_ipv4_record() or pfx_table_for_each_ipv6_record()

## Enumeration Type Documentation

## pfx_rtvals

enum pfx_rtvals

Possible return values for pfx_ functions.

Enumerator
PFX_SUCCESS | Operation was successful.
PFX_ERROR | Error occurred.
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.

## pfxv_state

enum pfxv_state

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 doesn't match.

Examples
  rtr_mgr.c.

## Function Documentation

## pfx_table_add()

int pfx_table_add | ( | struct pfx_table * | pfx_table,
|  | const struct pfx_record * | pfx_record )

Adds a pfx_record to a pfx_table.

Parameters

  [in] | pfx_table | pfx_table to use.
  [in] | pfx_record | pfx_record that will be added.

Returns
  PFX_SUCCESS On success.
  PFX_ERROR On error.
  PFX_DUPLICATE_RECORD If the pfx_record already exists.

## pfx_table_for_each_ipv4_record()

void pfx_table_for_each_ipv4_record | ( | struct pfx_table * | pfx_table,
|  | pfx_for_each_fp | fp,
|  | void * | data )

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.

## pfx_table_for_each_ipv6_record()

void pfx_table_for_each_ipv6_record | ( | struct pfx_table * | pfx_table,
|  | pfx_for_each_fp | fp,
|  | void * | data )

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.

## pfx_table_free()

void pfx_table_free | ( | struct pfx_table * | pfx_table | ) |

Frees all memory associated with the pfx_table.

Parameters

  [in] | pfx_table | pfx_table that will be freed.

## pfx_table_init()

void pfx_table_init | ( | struct pfx_table * | pfx_table,
|  | pfx_update_fp | update_fp )

Initializes the pfx_table struct.

Parameters

  [in] | pfx_table | pfx_table that will be initialized.
  [in] | update_fp | A function pointer that will be called if a record was added or removed.

## pfx_table_remove()

int pfx_table_remove | ( | struct pfx_table * | pfx_table,
|  | const struct pfx_record * | pfx_record )

Removes a pfx_record from a pfx_table.

Parameters

  [in] | pfx_table | pfx_table to use.
  [in] | pfx_record | Record that will be removed.

Returns
  PFX_SUCCESS On success.
  PFX_ERROR On error.
  PFX_RECORD_NOT_FOUND If pfx_records couldn't be found.

## pfx_table_src_remove()

int pfx_table_src_remove | ( | struct pfx_table * | pfx_table,
|  | const struct rtr_socket * | socket )

Removes all entries in the pfx_table that match the passed socket_id value from a pfx_table.

Parameters

  [in] | pfx_table | pfx_table to use.
  [in] | socket | origin socket of the record

Returns
  PFX_SUCCESS On success.
  PFX_ERROR On error.

## pfx_table_validate()

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 | Announced 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.

## pfx_table_validate_r()

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 | Announced 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.