- if (flags & FIB_PATH_CFG_FLAG_LOCAL)
- {
- path->fp_type = FIB_PATH_TYPE_RECEIVE;
- path->receive.fp_interface = rpath->frp_sw_if_index;
- path->receive.fp_addr = rpath->frp_addr;
- }
- else
- {
- if (ip46_address_is_zero(&rpath->frp_addr))
- {
- path->fp_type = FIB_PATH_TYPE_ATTACHED;
- path->attached.fp_interface = rpath->frp_sw_if_index;
- }
- else
- {
- path->fp_type = FIB_PATH_TYPE_ATTACHED_NEXT_HOP;
- path->attached_next_hop.fp_interface = rpath->frp_sw_if_index;
- path->attached_next_hop.fp_nh = rpath->frp_addr;
- }
- }
+ path->fp_type = FIB_PATH_TYPE_RECEIVE;
+ path->receive.fp_interface = rpath->frp_sw_if_index;
+ path->receive.fp_addr = rpath->frp_addr;
+ }
+ else if (rpath->frp_flags & FIB_ROUTE_PATH_UDP_ENCAP)
+ {
+ path->fp_type = FIB_PATH_TYPE_UDP_ENCAP;
+ path->udp_encap.fp_udp_encap_id = rpath->frp_udp_encap_id;
+ }
+ else if (path->fp_cfg_flags & FIB_PATH_CFG_FLAG_INTF_RX)
+ {
+ path->fp_type = FIB_PATH_TYPE_INTF_RX;
+ path->intf_rx.fp_interface = rpath->frp_sw_if_index;
+ }
+ else if (path->fp_cfg_flags & FIB_PATH_CFG_FLAG_RPF_ID)
+ {
+ path->fp_type = FIB_PATH_TYPE_DEAG;
+ path->deag.fp_tbl_id = rpath->frp_fib_index;
+ path->deag.fp_rpf_id = rpath->frp_rpf_id;
+ }
+ else if (rpath->frp_flags & FIB_ROUTE_PATH_BIER_FMASK)
+ {
+ path->fp_type = FIB_PATH_TYPE_BIER_FMASK;
+ path->bier_fmask.fp_bier_fmask = rpath->frp_bier_fmask;
+ }
+ else if (rpath->frp_flags & FIB_ROUTE_PATH_BIER_IMP)
+ {
+ path->fp_type = FIB_PATH_TYPE_BIER_IMP;
+ path->bier_imp.fp_bier_imp = rpath->frp_bier_imp;
+ }
+ else if (rpath->frp_flags & FIB_ROUTE_PATH_BIER_TABLE)
+ {
+ path->fp_type = FIB_PATH_TYPE_BIER_TABLE;
+ path->bier_table.fp_bier_tbl = rpath->frp_bier_tbl;
+ }
+ else if (rpath->frp_flags & FIB_ROUTE_PATH_DEAG)
+ {
+ path->fp_type = FIB_PATH_TYPE_DEAG;
+ path->deag.fp_tbl_id = rpath->frp_fib_index;
+ }
+ else if (rpath->frp_flags & FIB_ROUTE_PATH_DVR)
+ {
+ path->fp_type = FIB_PATH_TYPE_DVR;
+ path->dvr.fp_interface = rpath->frp_sw_if_index;
+ }
+ else if (rpath->frp_flags & FIB_ROUTE_PATH_EXCLUSIVE)
+ {
+ path->fp_type = FIB_PATH_TYPE_EXCLUSIVE;
+ dpo_copy(&path->exclusive.fp_ex_dpo, &rpath->dpo);
+ }
+ else if ((path->fp_cfg_flags & FIB_PATH_CFG_FLAG_ICMP_PROHIBIT) ||
+ (path->fp_cfg_flags & FIB_PATH_CFG_FLAG_ICMP_UNREACH))
+ {
+ path->fp_type = FIB_PATH_TYPE_SPECIAL;
+ }
+ else if ((path->fp_cfg_flags & FIB_PATH_CFG_FLAG_CLASSIFY))
+ {
+ path->fp_type = FIB_PATH_TYPE_SPECIAL;
+ path->classify.fp_classify_table_id = rpath->frp_classify_table_id;
+ }
+ else if (~0 != rpath->frp_sw_if_index)
+ {
+ if (ip46_address_is_zero(&rpath->frp_addr))
+ {
+ path->fp_type = FIB_PATH_TYPE_ATTACHED;
+ path->attached.fp_interface = rpath->frp_sw_if_index;
+ }
+ else
+ {
+ path->fp_type = FIB_PATH_TYPE_ATTACHED_NEXT_HOP;
+ path->attached_next_hop.fp_interface = rpath->frp_sw_if_index;
+ path->attached_next_hop.fp_nh = rpath->frp_addr;
+ }