/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 */ |