/src/frr/bgpd/bgp_ecommunity.h
Line | Count | Source (jump to first uncovered line) |
1 | | // SPDX-License-Identifier: GPL-2.0-or-later |
2 | | /* BGP Extended Communities Attribute. |
3 | | * Copyright (C) 2000 Kunihiro Ishiguro <kunihiro@zebra.org> |
4 | | */ |
5 | | |
6 | | #ifndef _QUAGGA_BGP_ECOMMUNITY_H |
7 | | #define _QUAGGA_BGP_ECOMMUNITY_H |
8 | | |
9 | | #include "bgpd/bgp_route.h" |
10 | | #include "bgpd/bgp_rpki.h" |
11 | | #include "bgpd/bgpd.h" |
12 | | |
13 | | /* Refer to rfc7153 for the IANA registry definitions. These are |
14 | | * updated by other standards like rfc7674. |
15 | | */ |
16 | | /* High-order octet of the Extended Communities type field. */ |
17 | 54.5k | #define ECOMMUNITY_ENCODE_AS 0x00 |
18 | 162k | #define ECOMMUNITY_ENCODE_IP 0x01 |
19 | 12.6k | #define ECOMMUNITY_ENCODE_AS4 0x02 |
20 | 78.3k | #define ECOMMUNITY_ENCODE_OPAQUE 0x03 |
21 | 125k | #define ECOMMUNITY_ENCODE_EVPN 0x06 |
22 | 10.1k | #define ECOMMUNITY_ENCODE_REDIRECT_IP_NH 0x08 /* Flow Spec */ |
23 | | /* Generic Transitive Experimental */ |
24 | 20.4k | #define ECOMMUNITY_ENCODE_TRANS_EXP 0x80 |
25 | | |
26 | | /* RFC7674 */ |
27 | 19.3k | #define ECOMMUNITY_EXTENDED_COMMUNITY_PART_2 0x81 |
28 | 9.28k | #define ECOMMUNITY_EXTENDED_COMMUNITY_PART_3 0x82 |
29 | | |
30 | | /* Non-transitive extended community types. */ |
31 | 15.3k | #define ECOMMUNITY_ENCODE_AS_NON_TRANS 0x40 |
32 | 9.06k | #define ECOMMUNITY_ENCODE_IP_NON_TRANS 0x41 |
33 | | #define ECOMMUNITY_ENCODE_AS4_NON_TRANS 0x42 |
34 | 8.95k | #define ECOMMUNITY_ENCODE_OPAQUE_NON_TRANS 0x43 |
35 | | |
36 | | /* Low-order octet of the Extended Communities type field. */ |
37 | | /* Note: This really depends on the high-order octet. This means that |
38 | | * multiple definitions for the same value are possible. |
39 | | */ |
40 | 101 | #define ECOMMUNITY_ORIGIN_VALIDATION_STATE 0x00 |
41 | 15.4k | #define ECOMMUNITY_ROUTE_TARGET 0x02 |
42 | 6.12k | #define ECOMMUNITY_SITE_ORIGIN 0x03 |
43 | 15.4k | #define ECOMMUNITY_LINK_BANDWIDTH 0x04 |
44 | 205 | #define ECOMMUNITY_TRAFFIC_RATE 0x06 /* Flow Spec */ |
45 | 236 | #define ECOMMUNITY_TRAFFIC_ACTION 0x07 |
46 | 451 | #define ECOMMUNITY_REDIRECT_VRF 0x08 |
47 | 195 | #define ECOMMUNITY_TRAFFIC_MARKING 0x09 |
48 | 312 | #define ECOMMUNITY_REDIRECT_IP_NH 0x00 |
49 | | /* from IANA: bgp-extended-communities/bgp-extended-communities.xhtml |
50 | | * 0x0c Flow-spec Redirect to IPv4 - draft-ietf-idr-flowspec-redirect |
51 | | */ |
52 | 12.0k | #define ECOMMUNITY_FLOWSPEC_REDIRECT_IPV4 0x0c |
53 | | /* from draft-ietf-idr-flow-spec-v6-09 |
54 | | * 0x0b Flow-spec Redirect to IPv6 |
55 | | */ |
56 | 484 | #define ECOMMUNITY_FLOWSPEC_REDIRECT_IPV6 0x0b |
57 | | |
58 | | /* Low-order octet of the Extended Communities type field for EVPN types */ |
59 | 1.07k | #define ECOMMUNITY_EVPN_SUBTYPE_MACMOBILITY 0x00 |
60 | 500 | #define ECOMMUNITY_EVPN_SUBTYPE_ESI_LABEL 0x01 |
61 | 540 | #define ECOMMUNITY_EVPN_SUBTYPE_ES_IMPORT_RT 0x02 |
62 | 1.33k | #define ECOMMUNITY_EVPN_SUBTYPE_ROUTERMAC 0x03 |
63 | 808 | #define ECOMMUNITY_EVPN_SUBTYPE_DF_ELECTION 0x06 |
64 | 596 | #define ECOMMUNITY_EVPN_SUBTYPE_DEF_GW 0x0d |
65 | 1.14k | #define ECOMMUNITY_EVPN_SUBTYPE_ND 0x08 |
66 | | |
67 | 33 | #define ECOMMUNITY_EVPN_SUBTYPE_MACMOBILITY_FLAG_STICKY 0x01 |
68 | | |
69 | | /* DF alg bits - only lower 5 bits are applicable */ |
70 | 64 | #define ECOMMUNITY_EVPN_SUBTYPE_DF_ALG_BITS 0x1f |
71 | | |
72 | 15 | #define ECOMMUNITY_EVPN_SUBTYPE_ND_ROUTER_FLAG 0x01 |
73 | | #define ECOMMUNITY_EVPN_SUBTYPE_ND_OVERRIDE_FLAG 0x02 |
74 | 15 | #define ECOMMUNITY_EVPN_SUBTYPE_PROXY_FLAG 0x04 |
75 | | |
76 | 39 | #define ECOMMUNITY_EVPN_SUBTYPE_ESI_SA_FLAG (1 << 0) /* single-active */ |
77 | | |
78 | | /* Low-order octet of the Extended Communities type field for OPAQUE types */ |
79 | 607 | #define ECOMMUNITY_OPAQUE_SUBTYPE_ENCAP 0x0c |
80 | | |
81 | | /* Extended communities attribute string format. */ |
82 | 0 | #define ECOMMUNITY_FORMAT_ROUTE_MAP 0 |
83 | 548 | #define ECOMMUNITY_FORMAT_COMMUNITY_LIST 1 |
84 | 867 | #define ECOMMUNITY_FORMAT_DISPLAY 2 |
85 | | |
86 | | /* Extended Communities value is eight octet long. */ |
87 | 166k | #define ECOMMUNITY_SIZE 8 |
88 | 22 | #define IPV6_ECOMMUNITY_SIZE 20 |
89 | | |
90 | | /* Extended Community Origin Validation State */ |
91 | | enum ecommunity_origin_validation_states { |
92 | | ECOMMUNITY_ORIGIN_VALIDATION_STATE_VALID, |
93 | | ECOMMUNITY_ORIGIN_VALIDATION_STATE_NOTFOUND, |
94 | | ECOMMUNITY_ORIGIN_VALIDATION_STATE_INVALID, |
95 | | ECOMMUNITY_ORIGIN_VALIDATION_STATE_NOTUSED |
96 | | }; |
97 | | |
98 | | /* Extended Communities type flag. */ |
99 | 0 | #define ECOMMUNITY_FLAG_NON_TRANSITIVE 0x40 |
100 | | |
101 | | /* Extended Community readable string length */ |
102 | 158 | #define ECOMMUNITY_STRLEN 64 |
103 | | |
104 | | /* Node Target Extended Communities */ |
105 | 19.8k | #define ECOMMUNITY_NODE_TARGET 0x09 |
106 | 0 | #define ECOMMUNITY_NODE_TARGET_RESERVED 0 |
107 | | |
108 | | /* Extended Communities attribute. */ |
109 | | struct ecommunity { |
110 | | /* Reference counter. */ |
111 | | unsigned long refcnt; |
112 | | |
113 | | /* Size of Each Unit of Extended Communities attribute. |
114 | | * to differentiate between IPv6 ext comm and ext comm |
115 | | */ |
116 | | uint8_t unit_size; |
117 | | |
118 | | /* Size of Extended Communities attribute. */ |
119 | | uint32_t size; |
120 | | |
121 | | /* Extended Communities value. */ |
122 | | uint8_t *val; |
123 | | |
124 | | /* Human readable format string. */ |
125 | | char *str; |
126 | | |
127 | | /* Disable IEEE floating-point encoding for extended community */ |
128 | | bool disable_ieee_floating; |
129 | | }; |
130 | | |
131 | | struct ecommunity_as { |
132 | | as_t as; |
133 | | uint32_t val; |
134 | | }; |
135 | | |
136 | | struct ecommunity_ip { |
137 | | struct in_addr ip; |
138 | | uint16_t val; |
139 | | }; |
140 | | |
141 | | struct ecommunity_ip6 { |
142 | | struct in6_addr ip; |
143 | | uint16_t val; |
144 | | }; |
145 | | |
146 | | /* Extended community value is eight octet. */ |
147 | | struct ecommunity_val { |
148 | | char val[ECOMMUNITY_SIZE]; |
149 | | }; |
150 | | |
151 | | /* IPv6 Extended community value is eight octet. */ |
152 | | struct ecommunity_val_ipv6 { |
153 | | char val[IPV6_ECOMMUNITY_SIZE]; |
154 | | }; |
155 | | |
156 | | #define ecom_length_size(X, Y) ((X)->size * (Y)) |
157 | | |
158 | | /* |
159 | | * Encode BGP Route Target AS:nn. |
160 | | */ |
161 | | static inline void encode_route_target_as(as_t as, uint32_t val, |
162 | | struct ecommunity_val *eval, |
163 | | bool trans) |
164 | 0 | { |
165 | 0 | eval->val[0] = ECOMMUNITY_ENCODE_AS; |
166 | 0 | if (!trans) |
167 | 0 | eval->val[0] |= ECOMMUNITY_FLAG_NON_TRANSITIVE; |
168 | 0 | eval->val[1] = ECOMMUNITY_ROUTE_TARGET; |
169 | 0 | eval->val[2] = (as >> 8) & 0xff; |
170 | 0 | eval->val[3] = as & 0xff; |
171 | 0 | eval->val[4] = (val >> 24) & 0xff; |
172 | 0 | eval->val[5] = (val >> 16) & 0xff; |
173 | 0 | eval->val[6] = (val >> 8) & 0xff; |
174 | 0 | eval->val[7] = val & 0xff; |
175 | 0 | } Unexecuted instantiation: bgp_main.c:encode_route_target_as Unexecuted instantiation: bgp_attr.c:encode_route_target_as Unexecuted instantiation: bgp_attr_evpn.c:encode_route_target_as Unexecuted instantiation: bgp_clist.c:encode_route_target_as Unexecuted instantiation: bgp_community.c:encode_route_target_as Unexecuted instantiation: bgp_debug.c:encode_route_target_as Unexecuted instantiation: bgp_dump.c:encode_route_target_as Unexecuted instantiation: bgp_ecommunity.c:encode_route_target_as Unexecuted instantiation: bgp_evpn.c:encode_route_target_as Unexecuted instantiation: bgp_evpn_mh.c:encode_route_target_as Unexecuted instantiation: bgp_evpn_vty.c:encode_route_target_as Unexecuted instantiation: bgp_flowspec_vty.c:encode_route_target_as Unexecuted instantiation: bgp_fsm.c:encode_route_target_as Unexecuted instantiation: bgp_io.c:encode_route_target_as Unexecuted instantiation: bgp_keepalives.c:encode_route_target_as Unexecuted instantiation: bgp_labelpool.c:encode_route_target_as Unexecuted instantiation: bgp_mac.c:encode_route_target_as Unexecuted instantiation: bgp_mpath.c:encode_route_target_as Unexecuted instantiation: bgp_mplsvpn.c:encode_route_target_as Unexecuted instantiation: bgp_network.c:encode_route_target_as Unexecuted instantiation: bgp_nexthop.c:encode_route_target_as Unexecuted instantiation: bgp_nht.c:encode_route_target_as Unexecuted instantiation: bgp_packet.c:encode_route_target_as Unexecuted instantiation: bgp_pbr.c:encode_route_target_as Unexecuted instantiation: bgp_rd.c:encode_route_target_as Unexecuted instantiation: bgp_route.c:encode_route_target_as Unexecuted instantiation: bgp_routemap.c:encode_route_target_as Unexecuted instantiation: bgp_updgrp.c:encode_route_target_as Unexecuted instantiation: bgp_updgrp_adv.c:encode_route_target_as Unexecuted instantiation: bgp_updgrp_packet.c:encode_route_target_as Unexecuted instantiation: bgp_vpn.c:encode_route_target_as Unexecuted instantiation: bgp_vty.c:encode_route_target_as Unexecuted instantiation: bgp_zebra.c:encode_route_target_as Unexecuted instantiation: bgpd.c:encode_route_target_as Unexecuted instantiation: bgp_rfapi_cfg.c:encode_route_target_as Unexecuted instantiation: rfapi_import.c:encode_route_target_as Unexecuted instantiation: rfapi.c:encode_route_target_as Unexecuted instantiation: rfapi_ap.c:encode_route_target_as Unexecuted instantiation: rfapi_encap_tlv.c:encode_route_target_as Unexecuted instantiation: rfapi_nve_addr.c:encode_route_target_as Unexecuted instantiation: rfapi_monitor.c:encode_route_target_as Unexecuted instantiation: rfapi_rib.c:encode_route_target_as Unexecuted instantiation: rfapi_vty.c:encode_route_target_as Unexecuted instantiation: vnc_export_bgp.c:encode_route_target_as Unexecuted instantiation: vnc_export_table.c:encode_route_target_as Unexecuted instantiation: vnc_import_bgp.c:encode_route_target_as Unexecuted instantiation: vnc_zebra.c:encode_route_target_as Unexecuted instantiation: bgp_advertise.c:encode_route_target_as Unexecuted instantiation: bgp_aspath.c:encode_route_target_as Unexecuted instantiation: bgp_bfd.c:encode_route_target_as Unexecuted instantiation: bgp_conditional_adv.c:encode_route_target_as Unexecuted instantiation: bgp_damp.c:encode_route_target_as Unexecuted instantiation: bgp_encap_tlv.c:encode_route_target_as Unexecuted instantiation: bgp_flowspec.c:encode_route_target_as Unexecuted instantiation: bgp_label.c:encode_route_target_as Unexecuted instantiation: bgp_open.c:encode_route_target_as Unexecuted instantiation: rfp_example.c:encode_route_target_as |
176 | | |
177 | | /* |
178 | | * Encode BGP Route Target IP:nn. |
179 | | */ |
180 | | static inline void encode_route_target_ip(struct in_addr *ip, uint16_t val, |
181 | | struct ecommunity_val *eval, |
182 | | bool trans) |
183 | 0 | { |
184 | 0 | eval->val[0] = ECOMMUNITY_ENCODE_IP; |
185 | 0 | if (!trans) |
186 | 0 | eval->val[0] |= ECOMMUNITY_FLAG_NON_TRANSITIVE; |
187 | 0 | eval->val[1] = ECOMMUNITY_ROUTE_TARGET; |
188 | 0 | memcpy(&eval->val[2], ip, sizeof(struct in_addr)); |
189 | 0 | eval->val[6] = (val >> 8) & 0xff; |
190 | 0 | eval->val[7] = val & 0xff; |
191 | 0 | } Unexecuted instantiation: bgp_main.c:encode_route_target_ip Unexecuted instantiation: bgp_attr.c:encode_route_target_ip Unexecuted instantiation: bgp_attr_evpn.c:encode_route_target_ip Unexecuted instantiation: bgp_clist.c:encode_route_target_ip Unexecuted instantiation: bgp_community.c:encode_route_target_ip Unexecuted instantiation: bgp_debug.c:encode_route_target_ip Unexecuted instantiation: bgp_dump.c:encode_route_target_ip Unexecuted instantiation: bgp_ecommunity.c:encode_route_target_ip Unexecuted instantiation: bgp_evpn.c:encode_route_target_ip Unexecuted instantiation: bgp_evpn_mh.c:encode_route_target_ip Unexecuted instantiation: bgp_evpn_vty.c:encode_route_target_ip Unexecuted instantiation: bgp_flowspec_vty.c:encode_route_target_ip Unexecuted instantiation: bgp_fsm.c:encode_route_target_ip Unexecuted instantiation: bgp_io.c:encode_route_target_ip Unexecuted instantiation: bgp_keepalives.c:encode_route_target_ip Unexecuted instantiation: bgp_labelpool.c:encode_route_target_ip Unexecuted instantiation: bgp_mac.c:encode_route_target_ip Unexecuted instantiation: bgp_mpath.c:encode_route_target_ip Unexecuted instantiation: bgp_mplsvpn.c:encode_route_target_ip Unexecuted instantiation: bgp_network.c:encode_route_target_ip Unexecuted instantiation: bgp_nexthop.c:encode_route_target_ip Unexecuted instantiation: bgp_nht.c:encode_route_target_ip Unexecuted instantiation: bgp_packet.c:encode_route_target_ip Unexecuted instantiation: bgp_pbr.c:encode_route_target_ip Unexecuted instantiation: bgp_rd.c:encode_route_target_ip Unexecuted instantiation: bgp_route.c:encode_route_target_ip Unexecuted instantiation: bgp_routemap.c:encode_route_target_ip Unexecuted instantiation: bgp_updgrp.c:encode_route_target_ip Unexecuted instantiation: bgp_updgrp_adv.c:encode_route_target_ip Unexecuted instantiation: bgp_updgrp_packet.c:encode_route_target_ip Unexecuted instantiation: bgp_vpn.c:encode_route_target_ip Unexecuted instantiation: bgp_vty.c:encode_route_target_ip Unexecuted instantiation: bgp_zebra.c:encode_route_target_ip Unexecuted instantiation: bgpd.c:encode_route_target_ip Unexecuted instantiation: bgp_rfapi_cfg.c:encode_route_target_ip Unexecuted instantiation: rfapi_import.c:encode_route_target_ip Unexecuted instantiation: rfapi.c:encode_route_target_ip Unexecuted instantiation: rfapi_ap.c:encode_route_target_ip Unexecuted instantiation: rfapi_encap_tlv.c:encode_route_target_ip Unexecuted instantiation: rfapi_nve_addr.c:encode_route_target_ip Unexecuted instantiation: rfapi_monitor.c:encode_route_target_ip Unexecuted instantiation: rfapi_rib.c:encode_route_target_ip Unexecuted instantiation: rfapi_vty.c:encode_route_target_ip Unexecuted instantiation: vnc_export_bgp.c:encode_route_target_ip Unexecuted instantiation: vnc_export_table.c:encode_route_target_ip Unexecuted instantiation: vnc_import_bgp.c:encode_route_target_ip Unexecuted instantiation: vnc_zebra.c:encode_route_target_ip Unexecuted instantiation: bgp_advertise.c:encode_route_target_ip Unexecuted instantiation: bgp_aspath.c:encode_route_target_ip Unexecuted instantiation: bgp_bfd.c:encode_route_target_ip Unexecuted instantiation: bgp_conditional_adv.c:encode_route_target_ip Unexecuted instantiation: bgp_damp.c:encode_route_target_ip Unexecuted instantiation: bgp_encap_tlv.c:encode_route_target_ip Unexecuted instantiation: bgp_flowspec.c:encode_route_target_ip Unexecuted instantiation: bgp_label.c:encode_route_target_ip Unexecuted instantiation: bgp_open.c:encode_route_target_ip Unexecuted instantiation: rfp_example.c:encode_route_target_ip |
192 | | |
193 | | /* |
194 | | * Encode BGP Route Target AS4:nn. |
195 | | */ |
196 | | static inline void encode_route_target_as4(as_t as, uint16_t val, |
197 | | struct ecommunity_val *eval, |
198 | | bool trans) |
199 | 0 | { |
200 | 0 | eval->val[0] = ECOMMUNITY_ENCODE_AS4; |
201 | 0 | if (!trans) |
202 | 0 | eval->val[0] |= ECOMMUNITY_FLAG_NON_TRANSITIVE; |
203 | 0 | eval->val[1] = ECOMMUNITY_ROUTE_TARGET; |
204 | 0 | eval->val[2] = (as >> 24) & 0xff; |
205 | 0 | eval->val[3] = (as >> 16) & 0xff; |
206 | 0 | eval->val[4] = (as >> 8) & 0xff; |
207 | 0 | eval->val[5] = as & 0xff; |
208 | 0 | eval->val[6] = (val >> 8) & 0xff; |
209 | 0 | eval->val[7] = val & 0xff; |
210 | 0 | } Unexecuted instantiation: bgp_main.c:encode_route_target_as4 Unexecuted instantiation: bgp_attr.c:encode_route_target_as4 Unexecuted instantiation: bgp_attr_evpn.c:encode_route_target_as4 Unexecuted instantiation: bgp_clist.c:encode_route_target_as4 Unexecuted instantiation: bgp_community.c:encode_route_target_as4 Unexecuted instantiation: bgp_debug.c:encode_route_target_as4 Unexecuted instantiation: bgp_dump.c:encode_route_target_as4 Unexecuted instantiation: bgp_ecommunity.c:encode_route_target_as4 Unexecuted instantiation: bgp_evpn.c:encode_route_target_as4 Unexecuted instantiation: bgp_evpn_mh.c:encode_route_target_as4 Unexecuted instantiation: bgp_evpn_vty.c:encode_route_target_as4 Unexecuted instantiation: bgp_flowspec_vty.c:encode_route_target_as4 Unexecuted instantiation: bgp_fsm.c:encode_route_target_as4 Unexecuted instantiation: bgp_io.c:encode_route_target_as4 Unexecuted instantiation: bgp_keepalives.c:encode_route_target_as4 Unexecuted instantiation: bgp_labelpool.c:encode_route_target_as4 Unexecuted instantiation: bgp_mac.c:encode_route_target_as4 Unexecuted instantiation: bgp_mpath.c:encode_route_target_as4 Unexecuted instantiation: bgp_mplsvpn.c:encode_route_target_as4 Unexecuted instantiation: bgp_network.c:encode_route_target_as4 Unexecuted instantiation: bgp_nexthop.c:encode_route_target_as4 Unexecuted instantiation: bgp_nht.c:encode_route_target_as4 Unexecuted instantiation: bgp_packet.c:encode_route_target_as4 Unexecuted instantiation: bgp_pbr.c:encode_route_target_as4 Unexecuted instantiation: bgp_rd.c:encode_route_target_as4 Unexecuted instantiation: bgp_route.c:encode_route_target_as4 Unexecuted instantiation: bgp_routemap.c:encode_route_target_as4 Unexecuted instantiation: bgp_updgrp.c:encode_route_target_as4 Unexecuted instantiation: bgp_updgrp_adv.c:encode_route_target_as4 Unexecuted instantiation: bgp_updgrp_packet.c:encode_route_target_as4 Unexecuted instantiation: bgp_vpn.c:encode_route_target_as4 Unexecuted instantiation: bgp_vty.c:encode_route_target_as4 Unexecuted instantiation: bgp_zebra.c:encode_route_target_as4 Unexecuted instantiation: bgpd.c:encode_route_target_as4 Unexecuted instantiation: bgp_rfapi_cfg.c:encode_route_target_as4 Unexecuted instantiation: rfapi_import.c:encode_route_target_as4 Unexecuted instantiation: rfapi.c:encode_route_target_as4 Unexecuted instantiation: rfapi_ap.c:encode_route_target_as4 Unexecuted instantiation: rfapi_encap_tlv.c:encode_route_target_as4 Unexecuted instantiation: rfapi_nve_addr.c:encode_route_target_as4 Unexecuted instantiation: rfapi_monitor.c:encode_route_target_as4 Unexecuted instantiation: rfapi_rib.c:encode_route_target_as4 Unexecuted instantiation: rfapi_vty.c:encode_route_target_as4 Unexecuted instantiation: vnc_export_bgp.c:encode_route_target_as4 Unexecuted instantiation: vnc_export_table.c:encode_route_target_as4 Unexecuted instantiation: vnc_import_bgp.c:encode_route_target_as4 Unexecuted instantiation: vnc_zebra.c:encode_route_target_as4 Unexecuted instantiation: bgp_advertise.c:encode_route_target_as4 Unexecuted instantiation: bgp_aspath.c:encode_route_target_as4 Unexecuted instantiation: bgp_bfd.c:encode_route_target_as4 Unexecuted instantiation: bgp_conditional_adv.c:encode_route_target_as4 Unexecuted instantiation: bgp_damp.c:encode_route_target_as4 Unexecuted instantiation: bgp_encap_tlv.c:encode_route_target_as4 Unexecuted instantiation: bgp_flowspec.c:encode_route_target_as4 Unexecuted instantiation: bgp_label.c:encode_route_target_as4 Unexecuted instantiation: bgp_open.c:encode_route_target_as4 Unexecuted instantiation: rfp_example.c:encode_route_target_as4 |
211 | | |
212 | | /* Helper function to convert uint32 to IEEE-754 Floating Point */ |
213 | | static uint32_t uint32_to_ieee_float_uint32(uint32_t u) |
214 | 0 | { |
215 | 0 | union { |
216 | 0 | float r; |
217 | 0 | uint32_t d; |
218 | 0 | } f = {.r = (float)u}; |
219 | |
|
220 | 0 | return f.d; |
221 | 0 | } Unexecuted instantiation: bgp_main.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_attr.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_attr_evpn.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_clist.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_community.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_debug.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_dump.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_ecommunity.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_evpn.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_evpn_mh.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_evpn_vty.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_flowspec_vty.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_fsm.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_io.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_keepalives.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_labelpool.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_mac.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_mpath.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_mplsvpn.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_network.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_nexthop.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_nht.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_packet.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_pbr.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_rd.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_route.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_routemap.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_updgrp.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_updgrp_adv.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_updgrp_packet.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_vpn.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_vty.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_zebra.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgpd.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_rfapi_cfg.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: rfapi_import.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: rfapi.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: rfapi_ap.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: rfapi_encap_tlv.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: rfapi_nve_addr.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: rfapi_monitor.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: rfapi_rib.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: rfapi_vty.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: vnc_export_bgp.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: vnc_export_table.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: vnc_import_bgp.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: vnc_zebra.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_advertise.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_aspath.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_bfd.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_conditional_adv.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_damp.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_encap_tlv.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_flowspec.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_label.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: bgp_open.c:uint32_to_ieee_float_uint32 Unexecuted instantiation: rfp_example.c:uint32_to_ieee_float_uint32 |
222 | | |
223 | | /* |
224 | | * Encode BGP Link Bandwidth extended community |
225 | | * bandwidth (bw) is in bytes-per-sec |
226 | | */ |
227 | | static inline void encode_lb_extcomm(as_t as, uint32_t bw, bool non_trans, |
228 | | struct ecommunity_val *eval, |
229 | | bool disable_ieee_floating) |
230 | 0 | { |
231 | 0 | uint32_t bandwidth = |
232 | 0 | disable_ieee_floating ? bw : uint32_to_ieee_float_uint32(bw); |
233 | |
|
234 | 0 | memset(eval, 0, sizeof(*eval)); |
235 | 0 | eval->val[0] = ECOMMUNITY_ENCODE_AS; |
236 | 0 | if (non_trans) |
237 | 0 | eval->val[0] |= ECOMMUNITY_FLAG_NON_TRANSITIVE; |
238 | 0 | eval->val[1] = ECOMMUNITY_LINK_BANDWIDTH; |
239 | 0 | eval->val[2] = (as >> 8) & 0xff; |
240 | 0 | eval->val[3] = as & 0xff; |
241 | 0 | eval->val[4] = (bandwidth >> 24) & 0xff; |
242 | 0 | eval->val[5] = (bandwidth >> 16) & 0xff; |
243 | 0 | eval->val[6] = (bandwidth >> 8) & 0xff; |
244 | 0 | eval->val[7] = bandwidth & 0xff; |
245 | 0 | } Unexecuted instantiation: bgp_main.c:encode_lb_extcomm Unexecuted instantiation: bgp_attr.c:encode_lb_extcomm Unexecuted instantiation: bgp_attr_evpn.c:encode_lb_extcomm Unexecuted instantiation: bgp_clist.c:encode_lb_extcomm Unexecuted instantiation: bgp_community.c:encode_lb_extcomm Unexecuted instantiation: bgp_debug.c:encode_lb_extcomm Unexecuted instantiation: bgp_dump.c:encode_lb_extcomm Unexecuted instantiation: bgp_ecommunity.c:encode_lb_extcomm Unexecuted instantiation: bgp_evpn.c:encode_lb_extcomm Unexecuted instantiation: bgp_evpn_mh.c:encode_lb_extcomm Unexecuted instantiation: bgp_evpn_vty.c:encode_lb_extcomm Unexecuted instantiation: bgp_flowspec_vty.c:encode_lb_extcomm Unexecuted instantiation: bgp_fsm.c:encode_lb_extcomm Unexecuted instantiation: bgp_io.c:encode_lb_extcomm Unexecuted instantiation: bgp_keepalives.c:encode_lb_extcomm Unexecuted instantiation: bgp_labelpool.c:encode_lb_extcomm Unexecuted instantiation: bgp_mac.c:encode_lb_extcomm Unexecuted instantiation: bgp_mpath.c:encode_lb_extcomm Unexecuted instantiation: bgp_mplsvpn.c:encode_lb_extcomm Unexecuted instantiation: bgp_network.c:encode_lb_extcomm Unexecuted instantiation: bgp_nexthop.c:encode_lb_extcomm Unexecuted instantiation: bgp_nht.c:encode_lb_extcomm Unexecuted instantiation: bgp_packet.c:encode_lb_extcomm Unexecuted instantiation: bgp_pbr.c:encode_lb_extcomm Unexecuted instantiation: bgp_rd.c:encode_lb_extcomm Unexecuted instantiation: bgp_route.c:encode_lb_extcomm Unexecuted instantiation: bgp_routemap.c:encode_lb_extcomm Unexecuted instantiation: bgp_updgrp.c:encode_lb_extcomm Unexecuted instantiation: bgp_updgrp_adv.c:encode_lb_extcomm Unexecuted instantiation: bgp_updgrp_packet.c:encode_lb_extcomm Unexecuted instantiation: bgp_vpn.c:encode_lb_extcomm Unexecuted instantiation: bgp_vty.c:encode_lb_extcomm Unexecuted instantiation: bgp_zebra.c:encode_lb_extcomm Unexecuted instantiation: bgpd.c:encode_lb_extcomm Unexecuted instantiation: bgp_rfapi_cfg.c:encode_lb_extcomm Unexecuted instantiation: rfapi_import.c:encode_lb_extcomm Unexecuted instantiation: rfapi.c:encode_lb_extcomm Unexecuted instantiation: rfapi_ap.c:encode_lb_extcomm Unexecuted instantiation: rfapi_encap_tlv.c:encode_lb_extcomm Unexecuted instantiation: rfapi_nve_addr.c:encode_lb_extcomm Unexecuted instantiation: rfapi_monitor.c:encode_lb_extcomm Unexecuted instantiation: rfapi_rib.c:encode_lb_extcomm Unexecuted instantiation: rfapi_vty.c:encode_lb_extcomm Unexecuted instantiation: vnc_export_bgp.c:encode_lb_extcomm Unexecuted instantiation: vnc_export_table.c:encode_lb_extcomm Unexecuted instantiation: vnc_import_bgp.c:encode_lb_extcomm Unexecuted instantiation: vnc_zebra.c:encode_lb_extcomm Unexecuted instantiation: bgp_advertise.c:encode_lb_extcomm Unexecuted instantiation: bgp_aspath.c:encode_lb_extcomm Unexecuted instantiation: bgp_bfd.c:encode_lb_extcomm Unexecuted instantiation: bgp_conditional_adv.c:encode_lb_extcomm Unexecuted instantiation: bgp_damp.c:encode_lb_extcomm Unexecuted instantiation: bgp_encap_tlv.c:encode_lb_extcomm Unexecuted instantiation: bgp_flowspec.c:encode_lb_extcomm Unexecuted instantiation: bgp_label.c:encode_lb_extcomm Unexecuted instantiation: bgp_open.c:encode_lb_extcomm Unexecuted instantiation: rfp_example.c:encode_lb_extcomm |
246 | | |
247 | | static inline void encode_origin_validation_state(enum rpki_states state, |
248 | | struct ecommunity_val *eval) |
249 | 0 | { |
250 | 0 | enum ecommunity_origin_validation_states ovs_state = |
251 | 0 | ECOMMUNITY_ORIGIN_VALIDATION_STATE_NOTUSED; |
252 | |
|
253 | 0 | switch (state) { |
254 | 0 | case RPKI_VALID: |
255 | 0 | ovs_state = ECOMMUNITY_ORIGIN_VALIDATION_STATE_VALID; |
256 | 0 | break; |
257 | 0 | case RPKI_NOTFOUND: |
258 | 0 | ovs_state = ECOMMUNITY_ORIGIN_VALIDATION_STATE_NOTFOUND; |
259 | 0 | break; |
260 | 0 | case RPKI_INVALID: |
261 | 0 | ovs_state = ECOMMUNITY_ORIGIN_VALIDATION_STATE_INVALID; |
262 | 0 | break; |
263 | 0 | case RPKI_NOT_BEING_USED: |
264 | 0 | break; |
265 | 0 | } |
266 | | |
267 | 0 | memset(eval, 0, sizeof(*eval)); |
268 | 0 | eval->val[0] = ECOMMUNITY_ENCODE_OPAQUE_NON_TRANS; |
269 | 0 | eval->val[1] = ECOMMUNITY_ORIGIN_VALIDATION_STATE; |
270 | 0 | eval->val[7] = ovs_state; |
271 | 0 | } Unexecuted instantiation: bgp_main.c:encode_origin_validation_state Unexecuted instantiation: bgp_attr.c:encode_origin_validation_state Unexecuted instantiation: bgp_attr_evpn.c:encode_origin_validation_state Unexecuted instantiation: bgp_clist.c:encode_origin_validation_state Unexecuted instantiation: bgp_community.c:encode_origin_validation_state Unexecuted instantiation: bgp_debug.c:encode_origin_validation_state Unexecuted instantiation: bgp_dump.c:encode_origin_validation_state Unexecuted instantiation: bgp_ecommunity.c:encode_origin_validation_state Unexecuted instantiation: bgp_evpn.c:encode_origin_validation_state Unexecuted instantiation: bgp_evpn_mh.c:encode_origin_validation_state Unexecuted instantiation: bgp_evpn_vty.c:encode_origin_validation_state Unexecuted instantiation: bgp_flowspec_vty.c:encode_origin_validation_state Unexecuted instantiation: bgp_fsm.c:encode_origin_validation_state Unexecuted instantiation: bgp_io.c:encode_origin_validation_state Unexecuted instantiation: bgp_keepalives.c:encode_origin_validation_state Unexecuted instantiation: bgp_labelpool.c:encode_origin_validation_state Unexecuted instantiation: bgp_mac.c:encode_origin_validation_state Unexecuted instantiation: bgp_mpath.c:encode_origin_validation_state Unexecuted instantiation: bgp_mplsvpn.c:encode_origin_validation_state Unexecuted instantiation: bgp_network.c:encode_origin_validation_state Unexecuted instantiation: bgp_nexthop.c:encode_origin_validation_state Unexecuted instantiation: bgp_nht.c:encode_origin_validation_state Unexecuted instantiation: bgp_packet.c:encode_origin_validation_state Unexecuted instantiation: bgp_pbr.c:encode_origin_validation_state Unexecuted instantiation: bgp_rd.c:encode_origin_validation_state Unexecuted instantiation: bgp_route.c:encode_origin_validation_state Unexecuted instantiation: bgp_routemap.c:encode_origin_validation_state Unexecuted instantiation: bgp_updgrp.c:encode_origin_validation_state Unexecuted instantiation: bgp_updgrp_adv.c:encode_origin_validation_state Unexecuted instantiation: bgp_updgrp_packet.c:encode_origin_validation_state Unexecuted instantiation: bgp_vpn.c:encode_origin_validation_state Unexecuted instantiation: bgp_vty.c:encode_origin_validation_state Unexecuted instantiation: bgp_zebra.c:encode_origin_validation_state Unexecuted instantiation: bgpd.c:encode_origin_validation_state Unexecuted instantiation: bgp_rfapi_cfg.c:encode_origin_validation_state Unexecuted instantiation: rfapi_import.c:encode_origin_validation_state Unexecuted instantiation: rfapi.c:encode_origin_validation_state Unexecuted instantiation: rfapi_ap.c:encode_origin_validation_state Unexecuted instantiation: rfapi_encap_tlv.c:encode_origin_validation_state Unexecuted instantiation: rfapi_nve_addr.c:encode_origin_validation_state Unexecuted instantiation: rfapi_monitor.c:encode_origin_validation_state Unexecuted instantiation: rfapi_rib.c:encode_origin_validation_state Unexecuted instantiation: rfapi_vty.c:encode_origin_validation_state Unexecuted instantiation: vnc_export_bgp.c:encode_origin_validation_state Unexecuted instantiation: vnc_export_table.c:encode_origin_validation_state Unexecuted instantiation: vnc_import_bgp.c:encode_origin_validation_state Unexecuted instantiation: vnc_zebra.c:encode_origin_validation_state Unexecuted instantiation: bgp_advertise.c:encode_origin_validation_state Unexecuted instantiation: bgp_aspath.c:encode_origin_validation_state Unexecuted instantiation: bgp_bfd.c:encode_origin_validation_state Unexecuted instantiation: bgp_conditional_adv.c:encode_origin_validation_state Unexecuted instantiation: bgp_damp.c:encode_origin_validation_state Unexecuted instantiation: bgp_encap_tlv.c:encode_origin_validation_state Unexecuted instantiation: bgp_flowspec.c:encode_origin_validation_state Unexecuted instantiation: bgp_label.c:encode_origin_validation_state Unexecuted instantiation: bgp_open.c:encode_origin_validation_state Unexecuted instantiation: rfp_example.c:encode_origin_validation_state |
272 | | |
273 | | static inline void encode_node_target(struct in_addr *node_id, |
274 | | struct ecommunity_val *eval, bool trans) |
275 | 0 | { |
276 | | /* |
277 | | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
278 | | * | 0x01 or 0x41 | Sub-Type(0x09) | Target BGP Identifier | |
279 | | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
280 | | * | Target BGP Identifier (cont.) | Reserved | |
281 | | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
282 | | */ |
283 | 0 | memset(eval, 0, sizeof(*eval)); |
284 | 0 | eval->val[0] = ECOMMUNITY_ENCODE_IP; |
285 | 0 | if (!trans) |
286 | 0 | eval->val[0] |= ECOMMUNITY_ENCODE_IP_NON_TRANS; |
287 | 0 | eval->val[1] = ECOMMUNITY_NODE_TARGET; |
288 | 0 | memcpy(&eval->val[2], node_id, sizeof(*node_id)); |
289 | 0 | eval->val[6] = ECOMMUNITY_NODE_TARGET_RESERVED; |
290 | 0 | eval->val[7] = ECOMMUNITY_NODE_TARGET_RESERVED; |
291 | 0 | } Unexecuted instantiation: bgp_main.c:encode_node_target Unexecuted instantiation: bgp_attr.c:encode_node_target Unexecuted instantiation: bgp_attr_evpn.c:encode_node_target Unexecuted instantiation: bgp_clist.c:encode_node_target Unexecuted instantiation: bgp_community.c:encode_node_target Unexecuted instantiation: bgp_debug.c:encode_node_target Unexecuted instantiation: bgp_dump.c:encode_node_target Unexecuted instantiation: bgp_ecommunity.c:encode_node_target Unexecuted instantiation: bgp_evpn.c:encode_node_target Unexecuted instantiation: bgp_evpn_mh.c:encode_node_target Unexecuted instantiation: bgp_evpn_vty.c:encode_node_target Unexecuted instantiation: bgp_flowspec_vty.c:encode_node_target Unexecuted instantiation: bgp_fsm.c:encode_node_target Unexecuted instantiation: bgp_io.c:encode_node_target Unexecuted instantiation: bgp_keepalives.c:encode_node_target Unexecuted instantiation: bgp_labelpool.c:encode_node_target Unexecuted instantiation: bgp_mac.c:encode_node_target Unexecuted instantiation: bgp_mpath.c:encode_node_target Unexecuted instantiation: bgp_mplsvpn.c:encode_node_target Unexecuted instantiation: bgp_network.c:encode_node_target Unexecuted instantiation: bgp_nexthop.c:encode_node_target Unexecuted instantiation: bgp_nht.c:encode_node_target Unexecuted instantiation: bgp_packet.c:encode_node_target Unexecuted instantiation: bgp_pbr.c:encode_node_target Unexecuted instantiation: bgp_rd.c:encode_node_target Unexecuted instantiation: bgp_route.c:encode_node_target Unexecuted instantiation: bgp_routemap.c:encode_node_target Unexecuted instantiation: bgp_updgrp.c:encode_node_target Unexecuted instantiation: bgp_updgrp_adv.c:encode_node_target Unexecuted instantiation: bgp_updgrp_packet.c:encode_node_target Unexecuted instantiation: bgp_vpn.c:encode_node_target Unexecuted instantiation: bgp_vty.c:encode_node_target Unexecuted instantiation: bgp_zebra.c:encode_node_target Unexecuted instantiation: bgpd.c:encode_node_target Unexecuted instantiation: bgp_rfapi_cfg.c:encode_node_target Unexecuted instantiation: rfapi_import.c:encode_node_target Unexecuted instantiation: rfapi.c:encode_node_target Unexecuted instantiation: rfapi_ap.c:encode_node_target Unexecuted instantiation: rfapi_encap_tlv.c:encode_node_target Unexecuted instantiation: rfapi_nve_addr.c:encode_node_target Unexecuted instantiation: rfapi_monitor.c:encode_node_target Unexecuted instantiation: rfapi_rib.c:encode_node_target Unexecuted instantiation: rfapi_vty.c:encode_node_target Unexecuted instantiation: vnc_export_bgp.c:encode_node_target Unexecuted instantiation: vnc_export_table.c:encode_node_target Unexecuted instantiation: vnc_import_bgp.c:encode_node_target Unexecuted instantiation: vnc_zebra.c:encode_node_target Unexecuted instantiation: bgp_advertise.c:encode_node_target Unexecuted instantiation: bgp_aspath.c:encode_node_target Unexecuted instantiation: bgp_bfd.c:encode_node_target Unexecuted instantiation: bgp_conditional_adv.c:encode_node_target Unexecuted instantiation: bgp_damp.c:encode_node_target Unexecuted instantiation: bgp_encap_tlv.c:encode_node_target Unexecuted instantiation: bgp_flowspec.c:encode_node_target Unexecuted instantiation: bgp_label.c:encode_node_target Unexecuted instantiation: bgp_open.c:encode_node_target Unexecuted instantiation: rfp_example.c:encode_node_target |
292 | | |
293 | | extern void ecommunity_init(void); |
294 | | extern void ecommunity_finish(void); |
295 | | extern void ecommunity_free(struct ecommunity **); |
296 | | extern struct ecommunity *ecommunity_parse(uint8_t *, unsigned short, |
297 | | bool disable_ieee_floating); |
298 | | extern struct ecommunity *ecommunity_parse_ipv6(uint8_t *pnt, |
299 | | unsigned short length, |
300 | | bool disable_ieee_floating); |
301 | | extern struct ecommunity *ecommunity_dup(struct ecommunity *); |
302 | | extern struct ecommunity *ecommunity_merge(struct ecommunity *, |
303 | | struct ecommunity *); |
304 | | extern struct ecommunity *ecommunity_uniq_sort(struct ecommunity *); |
305 | | extern struct ecommunity *ecommunity_intern(struct ecommunity *); |
306 | | extern bool ecommunity_cmp(const void *arg1, const void *arg2); |
307 | | extern void ecommunity_unintern(struct ecommunity **ecommunity); |
308 | | extern unsigned int ecommunity_hash_make(const void *); |
309 | | extern struct ecommunity *ecommunity_str2com(const char *, int, int); |
310 | | extern struct ecommunity *ecommunity_str2com_ipv6(const char *str, int type, |
311 | | int keyword_included); |
312 | | extern char *ecommunity_ecom2str(struct ecommunity *, int, int); |
313 | | extern void ecommunity_strfree(char **s); |
314 | | extern bool ecommunity_include(struct ecommunity *e1, struct ecommunity *e2); |
315 | | extern bool ecommunity_match(const struct ecommunity *, |
316 | | const struct ecommunity *); |
317 | | extern char *ecommunity_str(struct ecommunity *); |
318 | | extern struct ecommunity_val *ecommunity_lookup(const struct ecommunity *, |
319 | | uint8_t, uint8_t); |
320 | | |
321 | | extern bool ecommunity_add_val(struct ecommunity *ecom, |
322 | | struct ecommunity_val *eval, |
323 | | bool unique, bool overwrite); |
324 | | extern bool ecommunity_add_val_ipv6(struct ecommunity *ecom, |
325 | | struct ecommunity_val_ipv6 *eval, |
326 | | bool unique, bool overwrite); |
327 | | |
328 | | /* for vpn */ |
329 | | extern struct ecommunity *ecommunity_new(void); |
330 | | extern bool ecommunity_strip(struct ecommunity *ecom, uint8_t type, |
331 | | uint8_t subtype); |
332 | | extern struct ecommunity *ecommunity_new(void); |
333 | | extern bool ecommunity_del_val(struct ecommunity *ecom, |
334 | | struct ecommunity_val *eval); |
335 | | struct bgp_pbr_entry_action; |
336 | | extern int ecommunity_fill_pbr_action(struct ecommunity_val *ecom_eval, |
337 | | struct bgp_pbr_entry_action *api, |
338 | | afi_t afi); |
339 | | |
340 | | extern void bgp_compute_aggregate_ecommunity( |
341 | | struct bgp_aggregate *aggregate, |
342 | | struct ecommunity *ecommunity); |
343 | | |
344 | | extern void bgp_compute_aggregate_ecommunity_hash( |
345 | | struct bgp_aggregate *aggregate, |
346 | | struct ecommunity *ecommunity); |
347 | | extern void bgp_compute_aggregate_ecommunity_val( |
348 | | struct bgp_aggregate *aggregate); |
349 | | extern void bgp_remove_ecommunity_from_aggregate( |
350 | | struct bgp_aggregate *aggregate, |
351 | | struct ecommunity *ecommunity); |
352 | | extern void bgp_remove_ecomm_from_aggregate_hash( |
353 | | struct bgp_aggregate *aggregate, |
354 | | struct ecommunity *ecommunity); |
355 | | extern void bgp_aggr_ecommunity_remove(void *arg); |
356 | | extern const uint8_t *ecommunity_linkbw_present(struct ecommunity *ecom, |
357 | | uint32_t *bw); |
358 | | extern struct ecommunity *ecommunity_replace_linkbw(as_t as, |
359 | | struct ecommunity *ecom, |
360 | | uint64_t cum_bw, |
361 | | bool disable_ieee_floating); |
362 | | |
363 | | static inline void ecommunity_strip_rts(struct ecommunity *ecom) |
364 | 0 | { |
365 | 0 | uint8_t subtype = ECOMMUNITY_ROUTE_TARGET; |
366 | |
|
367 | 0 | ecommunity_strip(ecom, ECOMMUNITY_ENCODE_AS, subtype); |
368 | 0 | ecommunity_strip(ecom, ECOMMUNITY_ENCODE_IP, subtype); |
369 | 0 | ecommunity_strip(ecom, ECOMMUNITY_ENCODE_AS4, subtype); |
370 | 0 | } Unexecuted instantiation: bgp_main.c:ecommunity_strip_rts Unexecuted instantiation: bgp_attr.c:ecommunity_strip_rts Unexecuted instantiation: bgp_attr_evpn.c:ecommunity_strip_rts Unexecuted instantiation: bgp_clist.c:ecommunity_strip_rts Unexecuted instantiation: bgp_community.c:ecommunity_strip_rts Unexecuted instantiation: bgp_debug.c:ecommunity_strip_rts Unexecuted instantiation: bgp_dump.c:ecommunity_strip_rts Unexecuted instantiation: bgp_ecommunity.c:ecommunity_strip_rts Unexecuted instantiation: bgp_evpn.c:ecommunity_strip_rts Unexecuted instantiation: bgp_evpn_mh.c:ecommunity_strip_rts Unexecuted instantiation: bgp_evpn_vty.c:ecommunity_strip_rts Unexecuted instantiation: bgp_flowspec_vty.c:ecommunity_strip_rts Unexecuted instantiation: bgp_fsm.c:ecommunity_strip_rts Unexecuted instantiation: bgp_io.c:ecommunity_strip_rts Unexecuted instantiation: bgp_keepalives.c:ecommunity_strip_rts Unexecuted instantiation: bgp_labelpool.c:ecommunity_strip_rts Unexecuted instantiation: bgp_mac.c:ecommunity_strip_rts Unexecuted instantiation: bgp_mpath.c:ecommunity_strip_rts Unexecuted instantiation: bgp_mplsvpn.c:ecommunity_strip_rts Unexecuted instantiation: bgp_network.c:ecommunity_strip_rts Unexecuted instantiation: bgp_nexthop.c:ecommunity_strip_rts Unexecuted instantiation: bgp_nht.c:ecommunity_strip_rts Unexecuted instantiation: bgp_packet.c:ecommunity_strip_rts Unexecuted instantiation: bgp_pbr.c:ecommunity_strip_rts Unexecuted instantiation: bgp_rd.c:ecommunity_strip_rts Unexecuted instantiation: bgp_route.c:ecommunity_strip_rts Unexecuted instantiation: bgp_routemap.c:ecommunity_strip_rts Unexecuted instantiation: bgp_updgrp.c:ecommunity_strip_rts Unexecuted instantiation: bgp_updgrp_adv.c:ecommunity_strip_rts Unexecuted instantiation: bgp_updgrp_packet.c:ecommunity_strip_rts Unexecuted instantiation: bgp_vpn.c:ecommunity_strip_rts Unexecuted instantiation: bgp_vty.c:ecommunity_strip_rts Unexecuted instantiation: bgp_zebra.c:ecommunity_strip_rts Unexecuted instantiation: bgpd.c:ecommunity_strip_rts Unexecuted instantiation: bgp_rfapi_cfg.c:ecommunity_strip_rts Unexecuted instantiation: rfapi_import.c:ecommunity_strip_rts Unexecuted instantiation: rfapi.c:ecommunity_strip_rts Unexecuted instantiation: rfapi_ap.c:ecommunity_strip_rts Unexecuted instantiation: rfapi_encap_tlv.c:ecommunity_strip_rts Unexecuted instantiation: rfapi_nve_addr.c:ecommunity_strip_rts Unexecuted instantiation: rfapi_monitor.c:ecommunity_strip_rts Unexecuted instantiation: rfapi_rib.c:ecommunity_strip_rts Unexecuted instantiation: rfapi_vty.c:ecommunity_strip_rts Unexecuted instantiation: vnc_export_bgp.c:ecommunity_strip_rts Unexecuted instantiation: vnc_export_table.c:ecommunity_strip_rts Unexecuted instantiation: vnc_import_bgp.c:ecommunity_strip_rts Unexecuted instantiation: vnc_zebra.c:ecommunity_strip_rts Unexecuted instantiation: bgp_advertise.c:ecommunity_strip_rts Unexecuted instantiation: bgp_aspath.c:ecommunity_strip_rts Unexecuted instantiation: bgp_bfd.c:ecommunity_strip_rts Unexecuted instantiation: bgp_conditional_adv.c:ecommunity_strip_rts Unexecuted instantiation: bgp_damp.c:ecommunity_strip_rts Unexecuted instantiation: bgp_encap_tlv.c:ecommunity_strip_rts Unexecuted instantiation: bgp_flowspec.c:ecommunity_strip_rts Unexecuted instantiation: bgp_label.c:ecommunity_strip_rts Unexecuted instantiation: bgp_open.c:ecommunity_strip_rts Unexecuted instantiation: rfp_example.c:ecommunity_strip_rts |
371 | | extern struct ecommunity * |
372 | | ecommunity_add_origin_validation_state(enum rpki_states rpki_state, |
373 | | struct ecommunity *ecom); |
374 | | extern struct ecommunity *ecommunity_add_node_target(struct in_addr *node_id, |
375 | | struct ecommunity *old, |
376 | | bool non_trans); |
377 | | extern bool ecommunity_node_target_match(struct ecommunity *ecomm, |
378 | | struct in_addr *local_id); |
379 | | #endif /* _QUAGGA_BGP_ECOMMUNITY_H */ |