FD.io VPP  v17.04.2-2-ga8f93f8
Vector Packet Processing
fib_path_t_ Struct Reference

A FIB path. More...

+ Collaboration diagram for fib_path_t_:

Public Member Functions

 STRUCT_MARK (path_hash_start)
 This marks the start of the memory area used to hash the path. More...
 
 STRUCT_MARK (path_hash_end)
 

Data Fields

fib_node_t fp_node
 A path is a node in the FIB graph. More...
 
u32 fp_pl_index
 The index of the path-list to which this path belongs. More...
 
fib_path_cfg_flags_t fp_cfg_flags
 Configuration Flags. More...
 
fib_path_type_t fp_type
 The type of the path. More...
 
fib_protocol_t fp_nh_proto
 The protocol of the next-hop, i.e. More...
 
u32 fp_weight
 UCMP [unnormalised] weigt. More...
 
union {
   struct {
      ip46_address_t   fp_nh
 The next-hop. More...
 
      u32   fp_interface
 The interface. More...
 
   }   attached_next_hop
 
   struct {
      u32   fp_interface
 The interface. More...
 
   }   attached
 
   struct {
      union {
         ip46_address_t   fp_ip
 The next-hop. More...
 
         mpls_label_t   fp_local_label
 The local label to resolve through. More...
 
      }   fp_nh
 
      fib_node_index_t   fp_tbl_id
 The FIB table index in which to find the next-hop. More...
 
   }   recursive
 
   struct {
      fib_node_index_t   fp_tbl_id
 The FIB index in which to perfom the next lookup. More...
 
   }   deag
 
   struct {
   }   special
 
   struct {
      dpo_id_t   fp_ex_dpo
 The user provided 'exclusive' DPO. More...
 
   }   exclusive
 
   struct {
      u32   fp_interface
 The interface on which the local address is configured. More...
 
      ip46_address_t   fp_addr
 The next-hop. More...
 
   }   receive
 
}; 
 per-type union of the data required to resolve the path More...
 
fib_path_oper_flags_t fp_oper_flags
 Memebers in this last section represent information that is dervied during resolution. More...
 
fib_node_index_t fp_via_fib
 the resolving via fib. More...
 
dpo_id_t fp_dpo
 The Data-path objects through which this path resolves for IP. More...
 
u32 fp_sibling
 the index of this path in the parent's child list. More...
 

Detailed Description

A FIB path.

Definition at line 156 of file fib_path.c.

Member Function Documentation

fib_path_t_::STRUCT_MARK ( path_hash_start  )

This marks the start of the memory area used to hash the path.

fib_path_t_::STRUCT_MARK ( path_hash_end  )

Field Documentation

union { ... }

per-type union of the data required to resolve the path

struct { ... } fib_path_t_::attached
struct { ... } fib_path_t_::attached_next_hop
struct { ... } fib_path_t_::deag
struct { ... } fib_path_t_::exclusive
ip46_address_t fib_path_t_::fp_addr

The next-hop.

Definition at line 273 of file fib_path.c.

fib_path_cfg_flags_t fib_path_t_::fp_cfg_flags

Configuration Flags.

Definition at line 176 of file fib_path.c.

dpo_id_t fib_path_t_::fp_dpo

The Data-path objects through which this path resolves for IP.

Definition at line 298 of file fib_path.c.

dpo_id_t fib_path_t_::fp_ex_dpo

The user provided 'exclusive' DPO.

Definition at line 263 of file fib_path.c.

u32 fib_path_t_::fp_interface

The interface.

The interface on which the local address is configured.

Definition at line 207 of file fib_path.c.

ip46_address_t fib_path_t_::fp_ip

The next-hop.

Definition at line 221 of file fib_path.c.

mpls_label_t fib_path_t_::fp_local_label

The local label to resolve through.

Definition at line 225 of file fib_path.c.

ip46_address_t fib_path_t_::fp_nh

The next-hop.

Definition at line 203 of file fib_path.c.

union { ... } fib_path_t_::fp_nh
fib_protocol_t fib_path_t_::fp_nh_proto

The protocol of the next-hop, i.e.

the address family of the next-hop's address. We can't derive this from the address itself since the address can be all zeros

Definition at line 188 of file fib_path.c.

fib_node_t fib_path_t_::fp_node

A path is a node in the FIB graph.

Definition at line 160 of file fib_path.c.

fib_path_oper_flags_t fib_path_t_::fp_oper_flags

Memebers in this last section represent information that is dervied during resolution.

It should not be copied to new paths nor compared. Operational Flags

Definition at line 287 of file fib_path.c.

u32 fib_path_t_::fp_pl_index

The index of the path-list to which this path belongs.

Definition at line 165 of file fib_path.c.

u32 fib_path_t_::fp_sibling

the index of this path in the parent's child list.

Definition at line 303 of file fib_path.c.

fib_node_index_t fib_path_t_::fp_tbl_id

The FIB table index in which to find the next-hop.

The FIB index in which to perfom the next lookup.

This needs to be fixed. We should lookup the adjacencies in a separate table of adjacencies, rather than from the FIB. Two reasons I can think of:

  • consider: int ip addr Gig0 10.0.0.1/24 ip route 10.0.0.2/32 via Gig1 192.168.1.2 ip route 1.1.1.1/32 via Gig0 10.0.0.2 this is perfectly valid. Packets addressed to 10.0.0.2 should be sent via Gig1. Packets address to 1.1.1.1 should be sent via Gig0. when we perform the adj resolution from the FIB for the path "via Gig0 10.0.0.2" the lookup will result in the route via Gig1 and so we will pick up the adj via Gig1 - which was not what the operator wanted.

we can only return link-type IPv4 and so not the link-type MPLS. more on this in a later commit.

The table ID should only belong to a recursive path and indicate which FIB should be used to resolve the next-hop.

Definition at line 249 of file fib_path.c.

fib_path_type_t fib_path_t_::fp_type

The type of the path.

This is the selector for the union

Definition at line 181 of file fib_path.c.

fib_node_index_t fib_path_t_::fp_via_fib

the resolving via fib.

not part of the union, since it it not part of the path's hash.

Definition at line 293 of file fib_path.c.

u32 fib_path_t_::fp_weight

UCMP [unnormalised] weigt.

Definition at line 193 of file fib_path.c.

struct { ... } fib_path_t_::receive
struct { ... } fib_path_t_::recursive
struct { ... } fib_path_t_::special

The documentation for this struct was generated from the following file: