Coverage Report

Created: 2025-10-23 06:55

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/frr/lib/srcdest_table.h
Line
Count
Source
1
// SPDX-License-Identifier: GPL-2.0-or-later
2
/*
3
 * SRC-DEST Routing Table
4
 *
5
 * Copyright (C) 2017 by David Lamparter & Christian Franke,
6
 *                       Open Source Routing / NetDEF Inc.
7
 *
8
 * This file is part of FRRouting (FRR)
9
 */
10
11
#ifndef _ZEBRA_SRC_DEST_TABLE_H
12
#define _ZEBRA_SRC_DEST_TABLE_H
13
14
/* old/IPv4/non-srcdest:
15
 * table -> route_node .info -> [obj]
16
 *
17
 * new/IPv6/srcdest:
18
 * table -...-> srcdest_rnode [prefix = dest] .info -> [obj]
19
 *                                            .src_table ->
20
 *         srcdest table -...-> route_node [prefix = src] .info -> [obj]
21
 *
22
 * non-srcdest routes (src = ::/0) are treated just like before, their
23
 * information being directly there in the info pointer.
24
 *
25
 * srcdest routes are found by looking up destination first, then looking
26
 * up the source in the "src_table".  src_table contains normal route_nodes,
27
 * whose prefix is the _source_ prefix.
28
 *
29
 * NB: info can be NULL on the destination rnode, if there are only srcdest
30
 * routes for a particular destination prefix.
31
 */
32
33
#include "prefix.h"
34
#include "table.h"
35
36
#ifdef __cplusplus
37
extern "C" {
38
#endif
39
40
#define SRCDEST2STR_BUFFER (2*PREFIX2STR_BUFFER + sizeof(" from "))
41
42
/* extended route node for IPv6 srcdest routing */
43
struct srcdest_rnode;
44
45
extern route_table_delegate_t _srcdest_dstnode_delegate;
46
extern route_table_delegate_t _srcdest_srcnode_delegate;
47
48
extern struct route_table *srcdest_table_init(void);
49
extern struct route_node *srcdest_rnode_get(struct route_table *table,
50
              union prefixconstptr dst_pu,
51
              const struct prefix_ipv6 *src_p);
52
extern struct route_node *srcdest_rnode_lookup(struct route_table *table,
53
                 union prefixconstptr dst_pu,
54
                 const struct prefix_ipv6 *src_p);
55
extern void srcdest_rnode_prefixes(const struct route_node *rn,
56
           const struct prefix **p,
57
           const struct prefix **src_p);
58
extern const char *srcdest2str(const struct prefix *dst_p,
59
             const struct prefix_ipv6 *src_p,
60
             char *str, int size);
61
extern const char *srcdest_rnode2str(const struct route_node *rn, char *str,
62
             int size);
63
extern struct route_node *srcdest_route_next(struct route_node *rn);
64
65
static inline int rnode_is_dstnode(const struct route_node *rn)
66
1.12k
{
67
1.12k
  return rn->table->delegate == &_srcdest_dstnode_delegate;
68
1.12k
}
srcdest_table.c:rnode_is_dstnode
Line
Count
Source
66
1.12k
{
67
1.12k
  return rn->table->delegate == &_srcdest_dstnode_delegate;
68
1.12k
}
Unexecuted instantiation: connected.c:rnode_is_dstnode
Unexecuted instantiation: if_netlink.c:rnode_is_dstnode
Unexecuted instantiation: interface.c:rnode_is_dstnode
Unexecuted instantiation: ioctl.c:rnode_is_dstnode
Unexecuted instantiation: kernel_netlink.c:rnode_is_dstnode
Unexecuted instantiation: label_manager.c:rnode_is_dstnode
Unexecuted instantiation: main.c:rnode_is_dstnode
Unexecuted instantiation: netconf_netlink.c:rnode_is_dstnode
Unexecuted instantiation: redistribute.c:rnode_is_dstnode
Unexecuted instantiation: router-id.c:rnode_is_dstnode
Unexecuted instantiation: rt_netlink.c:rnode_is_dstnode
Unexecuted instantiation: rtadv.c:rnode_is_dstnode
Unexecuted instantiation: rtread_netlink.c:rnode_is_dstnode
Unexecuted instantiation: rule_netlink.c:rnode_is_dstnode
Unexecuted instantiation: table_manager.c:rnode_is_dstnode
Unexecuted instantiation: tc_netlink.c:rnode_is_dstnode
Unexecuted instantiation: zapi_msg.c:rnode_is_dstnode
Unexecuted instantiation: zebra_affinitymap.c:rnode_is_dstnode
Unexecuted instantiation: zebra_dplane.c:rnode_is_dstnode
Unexecuted instantiation: zebra_gr.c:rnode_is_dstnode
Unexecuted instantiation: zebra_l2.c:rnode_is_dstnode
Unexecuted instantiation: zebra_l2_bridge_if.c:rnode_is_dstnode
Unexecuted instantiation: zebra_evpn.c:rnode_is_dstnode
Unexecuted instantiation: zebra_evpn_mac.c:rnode_is_dstnode
Unexecuted instantiation: zebra_evpn_neigh.c:rnode_is_dstnode
Unexecuted instantiation: zebra_mlag.c:rnode_is_dstnode
Unexecuted instantiation: zebra_mlag_vty.c:rnode_is_dstnode
Unexecuted instantiation: zebra_mpls.c:rnode_is_dstnode
Unexecuted instantiation: zebra_mpls_netlink.c:rnode_is_dstnode
Unexecuted instantiation: zebra_mpls_null.c:rnode_is_dstnode
Unexecuted instantiation: zebra_mpls_vty.c:rnode_is_dstnode
Unexecuted instantiation: zebra_srv6.c:rnode_is_dstnode
Unexecuted instantiation: zebra_srv6_vty.c:rnode_is_dstnode
Unexecuted instantiation: zebra_mroute.c:rnode_is_dstnode
Unexecuted instantiation: zebra_nb.c:rnode_is_dstnode
Unexecuted instantiation: zebra_nb_config.c:rnode_is_dstnode
Unexecuted instantiation: zebra_nb_rpcs.c:rnode_is_dstnode
Unexecuted instantiation: zebra_nb_state.c:rnode_is_dstnode
Unexecuted instantiation: zebra_netns_id.c:rnode_is_dstnode
Unexecuted instantiation: zebra_netns_notify.c:rnode_is_dstnode
Unexecuted instantiation: zebra_nhg.c:rnode_is_dstnode
Unexecuted instantiation: zebra_ns.c:rnode_is_dstnode
Unexecuted instantiation: zebra_opaque.c:rnode_is_dstnode
Unexecuted instantiation: zebra_pbr.c:rnode_is_dstnode
Unexecuted instantiation: zebra_ptm.c:rnode_is_dstnode
Unexecuted instantiation: zebra_ptm_redistribute.c:rnode_is_dstnode
Unexecuted instantiation: zebra_pw.c:rnode_is_dstnode
Unexecuted instantiation: zebra_rib.c:rnode_is_dstnode
Unexecuted instantiation: zebra_router.c:rnode_is_dstnode
Unexecuted instantiation: zebra_rnh.c:rnode_is_dstnode
Unexecuted instantiation: zebra_routemap.c:rnode_is_dstnode
Unexecuted instantiation: zebra_routemap_nb_config.c:rnode_is_dstnode
Unexecuted instantiation: zebra_script.c:rnode_is_dstnode
Unexecuted instantiation: zebra_srte.c:rnode_is_dstnode
Unexecuted instantiation: zebra_tc.c:rnode_is_dstnode
Unexecuted instantiation: zebra_vrf.c:rnode_is_dstnode
Unexecuted instantiation: zebra_vty.c:rnode_is_dstnode
Unexecuted instantiation: zebra_vxlan.c:rnode_is_dstnode
Unexecuted instantiation: zebra_vxlan_if.c:rnode_is_dstnode
Unexecuted instantiation: zebra_evpn_mh.c:rnode_is_dstnode
Unexecuted instantiation: zebra_neigh.c:rnode_is_dstnode
Unexecuted instantiation: zserv.c:rnode_is_dstnode
Unexecuted instantiation: debug_nl.c:rnode_is_dstnode
Unexecuted instantiation: pim_cmd_common.c:rnode_is_dstnode
69
70
static inline int rnode_is_srcnode(const struct route_node *rn)
71
280
{
72
280
  return rn->table->delegate == &_srcdest_srcnode_delegate;
73
280
}
srcdest_table.c:rnode_is_srcnode
Line
Count
Source
71
280
{
72
280
  return rn->table->delegate == &_srcdest_srcnode_delegate;
73
280
}
Unexecuted instantiation: connected.c:rnode_is_srcnode
Unexecuted instantiation: if_netlink.c:rnode_is_srcnode
Unexecuted instantiation: interface.c:rnode_is_srcnode
Unexecuted instantiation: ioctl.c:rnode_is_srcnode
Unexecuted instantiation: kernel_netlink.c:rnode_is_srcnode
Unexecuted instantiation: label_manager.c:rnode_is_srcnode
Unexecuted instantiation: main.c:rnode_is_srcnode
Unexecuted instantiation: netconf_netlink.c:rnode_is_srcnode
Unexecuted instantiation: redistribute.c:rnode_is_srcnode
Unexecuted instantiation: router-id.c:rnode_is_srcnode
Unexecuted instantiation: rt_netlink.c:rnode_is_srcnode
Unexecuted instantiation: rtadv.c:rnode_is_srcnode
Unexecuted instantiation: rtread_netlink.c:rnode_is_srcnode
Unexecuted instantiation: rule_netlink.c:rnode_is_srcnode
Unexecuted instantiation: table_manager.c:rnode_is_srcnode
Unexecuted instantiation: tc_netlink.c:rnode_is_srcnode
Unexecuted instantiation: zapi_msg.c:rnode_is_srcnode
Unexecuted instantiation: zebra_affinitymap.c:rnode_is_srcnode
Unexecuted instantiation: zebra_dplane.c:rnode_is_srcnode
Unexecuted instantiation: zebra_gr.c:rnode_is_srcnode
Unexecuted instantiation: zebra_l2.c:rnode_is_srcnode
Unexecuted instantiation: zebra_l2_bridge_if.c:rnode_is_srcnode
Unexecuted instantiation: zebra_evpn.c:rnode_is_srcnode
Unexecuted instantiation: zebra_evpn_mac.c:rnode_is_srcnode
Unexecuted instantiation: zebra_evpn_neigh.c:rnode_is_srcnode
Unexecuted instantiation: zebra_mlag.c:rnode_is_srcnode
Unexecuted instantiation: zebra_mlag_vty.c:rnode_is_srcnode
Unexecuted instantiation: zebra_mpls.c:rnode_is_srcnode
Unexecuted instantiation: zebra_mpls_netlink.c:rnode_is_srcnode
Unexecuted instantiation: zebra_mpls_null.c:rnode_is_srcnode
Unexecuted instantiation: zebra_mpls_vty.c:rnode_is_srcnode
Unexecuted instantiation: zebra_srv6.c:rnode_is_srcnode
Unexecuted instantiation: zebra_srv6_vty.c:rnode_is_srcnode
Unexecuted instantiation: zebra_mroute.c:rnode_is_srcnode
Unexecuted instantiation: zebra_nb.c:rnode_is_srcnode
Unexecuted instantiation: zebra_nb_config.c:rnode_is_srcnode
Unexecuted instantiation: zebra_nb_rpcs.c:rnode_is_srcnode
Unexecuted instantiation: zebra_nb_state.c:rnode_is_srcnode
Unexecuted instantiation: zebra_netns_id.c:rnode_is_srcnode
Unexecuted instantiation: zebra_netns_notify.c:rnode_is_srcnode
Unexecuted instantiation: zebra_nhg.c:rnode_is_srcnode
Unexecuted instantiation: zebra_ns.c:rnode_is_srcnode
Unexecuted instantiation: zebra_opaque.c:rnode_is_srcnode
Unexecuted instantiation: zebra_pbr.c:rnode_is_srcnode
Unexecuted instantiation: zebra_ptm.c:rnode_is_srcnode
Unexecuted instantiation: zebra_ptm_redistribute.c:rnode_is_srcnode
Unexecuted instantiation: zebra_pw.c:rnode_is_srcnode
Unexecuted instantiation: zebra_rib.c:rnode_is_srcnode
Unexecuted instantiation: zebra_router.c:rnode_is_srcnode
Unexecuted instantiation: zebra_rnh.c:rnode_is_srcnode
Unexecuted instantiation: zebra_routemap.c:rnode_is_srcnode
Unexecuted instantiation: zebra_routemap_nb_config.c:rnode_is_srcnode
Unexecuted instantiation: zebra_script.c:rnode_is_srcnode
Unexecuted instantiation: zebra_srte.c:rnode_is_srcnode
Unexecuted instantiation: zebra_tc.c:rnode_is_srcnode
Unexecuted instantiation: zebra_vrf.c:rnode_is_srcnode
Unexecuted instantiation: zebra_vty.c:rnode_is_srcnode
Unexecuted instantiation: zebra_vxlan.c:rnode_is_srcnode
Unexecuted instantiation: zebra_vxlan_if.c:rnode_is_srcnode
Unexecuted instantiation: zebra_evpn_mh.c:rnode_is_srcnode
Unexecuted instantiation: zebra_neigh.c:rnode_is_srcnode
Unexecuted instantiation: zserv.c:rnode_is_srcnode
Unexecuted instantiation: debug_nl.c:rnode_is_srcnode
Unexecuted instantiation: pim_cmd_common.c:rnode_is_srcnode
74
75
static inline struct route_table *srcdest_rnode_table(struct route_node *rn)
76
0
{
77
0
  if (rnode_is_srcnode(rn)) {
78
0
    struct route_node *dst_rn =
79
0
      (struct route_node *)route_table_get_info(rn->table);
80
0
    return dst_rn->table;
81
0
  } else {
82
0
    return rn->table;
83
0
  }
84
0
}
Unexecuted instantiation: srcdest_table.c:srcdest_rnode_table
Unexecuted instantiation: connected.c:srcdest_rnode_table
Unexecuted instantiation: if_netlink.c:srcdest_rnode_table
Unexecuted instantiation: interface.c:srcdest_rnode_table
Unexecuted instantiation: ioctl.c:srcdest_rnode_table
Unexecuted instantiation: kernel_netlink.c:srcdest_rnode_table
Unexecuted instantiation: label_manager.c:srcdest_rnode_table
Unexecuted instantiation: main.c:srcdest_rnode_table
Unexecuted instantiation: netconf_netlink.c:srcdest_rnode_table
Unexecuted instantiation: redistribute.c:srcdest_rnode_table
Unexecuted instantiation: router-id.c:srcdest_rnode_table
Unexecuted instantiation: rt_netlink.c:srcdest_rnode_table
Unexecuted instantiation: rtadv.c:srcdest_rnode_table
Unexecuted instantiation: rtread_netlink.c:srcdest_rnode_table
Unexecuted instantiation: rule_netlink.c:srcdest_rnode_table
Unexecuted instantiation: table_manager.c:srcdest_rnode_table
Unexecuted instantiation: tc_netlink.c:srcdest_rnode_table
Unexecuted instantiation: zapi_msg.c:srcdest_rnode_table
Unexecuted instantiation: zebra_affinitymap.c:srcdest_rnode_table
Unexecuted instantiation: zebra_dplane.c:srcdest_rnode_table
Unexecuted instantiation: zebra_gr.c:srcdest_rnode_table
Unexecuted instantiation: zebra_l2.c:srcdest_rnode_table
Unexecuted instantiation: zebra_l2_bridge_if.c:srcdest_rnode_table
Unexecuted instantiation: zebra_evpn.c:srcdest_rnode_table
Unexecuted instantiation: zebra_evpn_mac.c:srcdest_rnode_table
Unexecuted instantiation: zebra_evpn_neigh.c:srcdest_rnode_table
Unexecuted instantiation: zebra_mlag.c:srcdest_rnode_table
Unexecuted instantiation: zebra_mlag_vty.c:srcdest_rnode_table
Unexecuted instantiation: zebra_mpls.c:srcdest_rnode_table
Unexecuted instantiation: zebra_mpls_netlink.c:srcdest_rnode_table
Unexecuted instantiation: zebra_mpls_null.c:srcdest_rnode_table
Unexecuted instantiation: zebra_mpls_vty.c:srcdest_rnode_table
Unexecuted instantiation: zebra_srv6.c:srcdest_rnode_table
Unexecuted instantiation: zebra_srv6_vty.c:srcdest_rnode_table
Unexecuted instantiation: zebra_mroute.c:srcdest_rnode_table
Unexecuted instantiation: zebra_nb.c:srcdest_rnode_table
Unexecuted instantiation: zebra_nb_config.c:srcdest_rnode_table
Unexecuted instantiation: zebra_nb_rpcs.c:srcdest_rnode_table
Unexecuted instantiation: zebra_nb_state.c:srcdest_rnode_table
Unexecuted instantiation: zebra_netns_id.c:srcdest_rnode_table
Unexecuted instantiation: zebra_netns_notify.c:srcdest_rnode_table
Unexecuted instantiation: zebra_nhg.c:srcdest_rnode_table
Unexecuted instantiation: zebra_ns.c:srcdest_rnode_table
Unexecuted instantiation: zebra_opaque.c:srcdest_rnode_table
Unexecuted instantiation: zebra_pbr.c:srcdest_rnode_table
Unexecuted instantiation: zebra_ptm.c:srcdest_rnode_table
Unexecuted instantiation: zebra_ptm_redistribute.c:srcdest_rnode_table
Unexecuted instantiation: zebra_pw.c:srcdest_rnode_table
Unexecuted instantiation: zebra_rib.c:srcdest_rnode_table
Unexecuted instantiation: zebra_router.c:srcdest_rnode_table
Unexecuted instantiation: zebra_rnh.c:srcdest_rnode_table
Unexecuted instantiation: zebra_routemap.c:srcdest_rnode_table
Unexecuted instantiation: zebra_routemap_nb_config.c:srcdest_rnode_table
Unexecuted instantiation: zebra_script.c:srcdest_rnode_table
Unexecuted instantiation: zebra_srte.c:srcdest_rnode_table
Unexecuted instantiation: zebra_tc.c:srcdest_rnode_table
Unexecuted instantiation: zebra_vrf.c:srcdest_rnode_table
Unexecuted instantiation: zebra_vty.c:srcdest_rnode_table
Unexecuted instantiation: zebra_vxlan.c:srcdest_rnode_table
Unexecuted instantiation: zebra_vxlan_if.c:srcdest_rnode_table
Unexecuted instantiation: zebra_evpn_mh.c:srcdest_rnode_table
Unexecuted instantiation: zebra_neigh.c:srcdest_rnode_table
Unexecuted instantiation: zserv.c:srcdest_rnode_table
Unexecuted instantiation: debug_nl.c:srcdest_rnode_table
Unexecuted instantiation: pim_cmd_common.c:srcdest_rnode_table
85
static inline void *srcdest_rnode_table_info(struct route_node *rn)
86
0
{
87
0
  return route_table_get_info(srcdest_rnode_table(rn));
88
0
}
Unexecuted instantiation: srcdest_table.c:srcdest_rnode_table_info
Unexecuted instantiation: connected.c:srcdest_rnode_table_info
Unexecuted instantiation: if_netlink.c:srcdest_rnode_table_info
Unexecuted instantiation: interface.c:srcdest_rnode_table_info
Unexecuted instantiation: ioctl.c:srcdest_rnode_table_info
Unexecuted instantiation: kernel_netlink.c:srcdest_rnode_table_info
Unexecuted instantiation: label_manager.c:srcdest_rnode_table_info
Unexecuted instantiation: main.c:srcdest_rnode_table_info
Unexecuted instantiation: netconf_netlink.c:srcdest_rnode_table_info
Unexecuted instantiation: redistribute.c:srcdest_rnode_table_info
Unexecuted instantiation: router-id.c:srcdest_rnode_table_info
Unexecuted instantiation: rt_netlink.c:srcdest_rnode_table_info
Unexecuted instantiation: rtadv.c:srcdest_rnode_table_info
Unexecuted instantiation: rtread_netlink.c:srcdest_rnode_table_info
Unexecuted instantiation: rule_netlink.c:srcdest_rnode_table_info
Unexecuted instantiation: table_manager.c:srcdest_rnode_table_info
Unexecuted instantiation: tc_netlink.c:srcdest_rnode_table_info
Unexecuted instantiation: zapi_msg.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_affinitymap.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_dplane.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_gr.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_l2.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_l2_bridge_if.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_evpn.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_evpn_mac.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_evpn_neigh.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_mlag.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_mlag_vty.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_mpls.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_mpls_netlink.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_mpls_null.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_mpls_vty.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_srv6.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_srv6_vty.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_mroute.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_nb.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_nb_config.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_nb_rpcs.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_nb_state.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_netns_id.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_netns_notify.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_nhg.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_ns.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_opaque.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_pbr.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_ptm.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_ptm_redistribute.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_pw.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_rib.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_router.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_rnh.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_routemap.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_routemap_nb_config.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_script.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_srte.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_tc.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_vrf.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_vty.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_vxlan.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_vxlan_if.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_evpn_mh.c:srcdest_rnode_table_info
Unexecuted instantiation: zebra_neigh.c:srcdest_rnode_table_info
Unexecuted instantiation: zserv.c:srcdest_rnode_table_info
Unexecuted instantiation: debug_nl.c:srcdest_rnode_table_info
Unexecuted instantiation: pim_cmd_common.c:srcdest_rnode_table_info
89
90
extern struct route_table *srcdest_srcnode_table(struct route_node *rn);
91
92
#ifdef __cplusplus
93
}
94
#endif
95
96
#endif /* _ZEBRA_SRC_DEST_TABLE_H */