]>
Commit | Line | Data |
---|---|---|
acddc0ed | 1 | // SPDX-License-Identifier: GPL-2.0-or-later |
299c66b3 SP |
2 | /* |
3 | * Copyright (C) 2020 VmWare | |
4 | * Sarita Patra | |
299c66b3 SP |
5 | */ |
6 | ||
7 | #include <zebra.h> | |
8 | ||
9 | #include "northbound.h" | |
10 | #include "libfrr.h" | |
11 | #include "vrf.h" | |
12 | #include "pimd/pim_nb.h" | |
13 | ||
14 | /* clang-format off */ | |
15 | const struct frr_yang_module_info frr_pim_info = { | |
16 | .name = "frr-pim", | |
17 | .nodes = { | |
18 | { | |
698f4147 | 19 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family", |
299c66b3 | 20 | .cbs = { |
698f4147 | 21 | .create = routing_control_plane_protocols_control_plane_protocol_pim_address_family_create, |
22 | .destroy = routing_control_plane_protocols_control_plane_protocol_pim_address_family_destroy, | |
299c66b3 SP |
23 | } |
24 | }, | |
25 | { | |
698f4147 | 26 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/ecmp", |
299c66b3 | 27 | .cbs = { |
698f4147 | 28 | .modify = routing_control_plane_protocols_control_plane_protocol_pim_address_family_ecmp_modify, |
299c66b3 SP |
29 | } |
30 | }, | |
31 | { | |
698f4147 | 32 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/ecmp-rebalance", |
299c66b3 | 33 | .cbs = { |
698f4147 | 34 | .modify = routing_control_plane_protocols_control_plane_protocol_pim_address_family_ecmp_rebalance_modify, |
299c66b3 SP |
35 | } |
36 | }, | |
37 | { | |
698f4147 | 38 | .xpath = "/frr-pim:pim/address-family/join-prune-interval", |
299c66b3 | 39 | .cbs = { |
698f4147 | 40 | .modify = pim_address_family_join_prune_interval_modify, |
299c66b3 SP |
41 | } |
42 | }, | |
43 | { | |
698f4147 | 44 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/keep-alive-timer", |
299c66b3 | 45 | .cbs = { |
698f4147 | 46 | .modify = routing_control_plane_protocols_control_plane_protocol_pim_address_family_keep_alive_timer_modify, |
299c66b3 SP |
47 | } |
48 | }, | |
49 | { | |
698f4147 | 50 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/rp-keep-alive-timer", |
299c66b3 | 51 | .cbs = { |
698f4147 | 52 | .modify = routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp_keep_alive_timer_modify, |
299c66b3 SP |
53 | } |
54 | }, | |
55 | { | |
698f4147 | 56 | .xpath = "/frr-pim:pim/address-family", |
299c66b3 | 57 | .cbs = { |
698f4147 | 58 | .create = pim_address_family_create, |
59 | .destroy = pim_address_family_destroy, | |
299c66b3 SP |
60 | } |
61 | }, | |
62 | { | |
698f4147 | 63 | .xpath = "/frr-pim:pim/address-family/packets", |
299c66b3 | 64 | .cbs = { |
698f4147 | 65 | .modify = pim_address_family_packets_modify, |
66 | } | |
67 | }, | |
68 | { | |
69 | .xpath = "/frr-pim:pim/address-family/register-suppress-time", | |
70 | .cbs = { | |
71 | .modify = pim_address_family_register_suppress_time_modify, | |
299c66b3 SP |
72 | } |
73 | }, | |
74 | { | |
75 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/send-v6-secondary", | |
76 | .cbs = { | |
77 | .modify = routing_control_plane_protocols_control_plane_protocol_pim_address_family_send_v6_secondary_modify, | |
78 | .destroy = routing_control_plane_protocols_control_plane_protocol_pim_address_family_send_v6_secondary_destroy, | |
79 | } | |
80 | }, | |
81 | { | |
82 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/spt-switchover", | |
83 | .cbs = { | |
84 | .apply_finish = routing_control_plane_protocols_control_plane_protocol_pim_address_family_spt_switchover_apply_finish, | |
85 | } | |
86 | }, | |
87 | { | |
88 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/spt-switchover/spt-action", | |
89 | .cbs = { | |
90 | .modify = routing_control_plane_protocols_control_plane_protocol_pim_address_family_spt_switchover_spt_action_modify, | |
91 | } | |
92 | }, | |
93 | { | |
94 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/spt-switchover/spt-infinity-prefix-list", | |
95 | .cbs = { | |
96 | .modify = routing_control_plane_protocols_control_plane_protocol_pim_address_family_spt_switchover_spt_infinity_prefix_list_modify, | |
97 | .destroy = routing_control_plane_protocols_control_plane_protocol_pim_address_family_spt_switchover_spt_infinity_prefix_list_destroy, | |
98 | } | |
99 | }, | |
100 | { | |
101 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/ssm-prefix-list", | |
102 | .cbs = { | |
103 | .modify = routing_control_plane_protocols_control_plane_protocol_pim_address_family_ssm_prefix_list_modify, | |
104 | .destroy = routing_control_plane_protocols_control_plane_protocol_pim_address_family_ssm_prefix_list_destroy, | |
105 | } | |
106 | }, | |
107 | { | |
108 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/ssm-pingd-source-ip", | |
109 | .cbs = { | |
110 | .create = routing_control_plane_protocols_control_plane_protocol_pim_address_family_ssm_pingd_source_ip_create, | |
111 | .destroy = routing_control_plane_protocols_control_plane_protocol_pim_address_family_ssm_pingd_source_ip_destroy, | |
112 | } | |
113 | }, | |
622fd3f1 RZ |
114 | { |
115 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/msdp/hold-time", | |
116 | .cbs = { | |
117 | .modify = pim_msdp_hold_time_modify, | |
118 | } | |
119 | }, | |
120 | { | |
121 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/msdp/keep-alive", | |
122 | .cbs = { | |
123 | .modify = pim_msdp_keep_alive_modify, | |
124 | } | |
125 | }, | |
126 | { | |
127 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/msdp/connection-retry", | |
128 | .cbs = { | |
129 | .modify = pim_msdp_connection_retry_modify, | |
130 | } | |
131 | }, | |
299c66b3 | 132 | { |
e2809e61 | 133 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/msdp-mesh-groups", |
299c66b3 | 134 | .cbs = { |
e2809e61 RZ |
135 | .create = pim_msdp_mesh_group_create, |
136 | .destroy = pim_msdp_mesh_group_destroy, | |
299c66b3 SP |
137 | } |
138 | }, | |
139 | { | |
e2809e61 | 140 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/msdp-mesh-groups/source", |
299c66b3 | 141 | .cbs = { |
e2809e61 RZ |
142 | .modify = pim_msdp_mesh_group_source_modify, |
143 | .destroy = pim_msdp_mesh_group_source_destroy, | |
299c66b3 SP |
144 | } |
145 | }, | |
146 | { | |
e2809e61 | 147 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/msdp-mesh-groups/members", |
299c66b3 | 148 | .cbs = { |
e2809e61 RZ |
149 | .create = pim_msdp_mesh_group_members_create, |
150 | .destroy = pim_msdp_mesh_group_members_destroy, | |
299c66b3 SP |
151 | } |
152 | }, | |
153 | { | |
154 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/msdp-peer", | |
155 | .cbs = { | |
156 | .create = routing_control_plane_protocols_control_plane_protocol_pim_address_family_msdp_peer_create, | |
157 | .destroy = routing_control_plane_protocols_control_plane_protocol_pim_address_family_msdp_peer_destroy, | |
158 | } | |
159 | }, | |
160 | { | |
161 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/msdp-peer/source-ip", | |
162 | .cbs = { | |
163 | .modify = routing_control_plane_protocols_control_plane_protocol_pim_address_family_msdp_peer_source_ip_modify, | |
299c66b3 SP |
164 | } |
165 | }, | |
166 | { | |
167 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/mlag", | |
168 | .cbs = { | |
169 | .create = routing_control_plane_protocols_control_plane_protocol_pim_address_family_mlag_create, | |
170 | .destroy = routing_control_plane_protocols_control_plane_protocol_pim_address_family_mlag_destroy, | |
171 | .apply_finish = routing_control_plane_protocols_control_plane_protocol_pim_address_family_mlag_apply_finish, | |
172 | } | |
173 | }, | |
174 | { | |
175 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/mlag/peerlink-rif", | |
176 | .cbs = { | |
177 | .modify = routing_control_plane_protocols_control_plane_protocol_pim_address_family_mlag_peerlink_rif_modify, | |
178 | .destroy = routing_control_plane_protocols_control_plane_protocol_pim_address_family_mlag_peerlink_rif_destroy, | |
179 | } | |
180 | }, | |
181 | { | |
182 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/mlag/reg-address", | |
183 | .cbs = { | |
184 | .modify = routing_control_plane_protocols_control_plane_protocol_pim_address_family_mlag_reg_address_modify, | |
185 | .destroy = routing_control_plane_protocols_control_plane_protocol_pim_address_family_mlag_reg_address_destroy, | |
186 | } | |
187 | }, | |
188 | { | |
189 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/mlag/my-role", | |
190 | .cbs = { | |
191 | .modify = routing_control_plane_protocols_control_plane_protocol_pim_address_family_mlag_my_role_modify, | |
192 | } | |
193 | }, | |
194 | { | |
195 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/mlag/peer-state", | |
196 | .cbs = { | |
197 | .modify = routing_control_plane_protocols_control_plane_protocol_pim_address_family_mlag_peer_state_modify, | |
198 | } | |
199 | }, | |
200 | { | |
201 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/register-accept-list", | |
202 | .cbs = { | |
203 | .modify = routing_control_plane_protocols_control_plane_protocol_pim_address_family_register_accept_list_modify, | |
204 | .destroy = routing_control_plane_protocols_control_plane_protocol_pim_address_family_register_accept_list_destroy, | |
205 | } | |
206 | }, | |
207 | { | |
698f4147 | 208 | .xpath = "/frr-interface:lib/interface/frr-pim:pim/address-family", |
299c66b3 | 209 | .cbs = { |
698f4147 | 210 | .create = lib_interface_pim_address_family_create, |
211 | .destroy = lib_interface_pim_address_family_destroy, | |
299c66b3 SP |
212 | } |
213 | }, | |
214 | { | |
698f4147 | 215 | .xpath = "/frr-interface:lib/interface/frr-pim:pim/address-family/pim-enable", |
299c66b3 | 216 | .cbs = { |
698f4147 | 217 | .modify = lib_interface_pim_address_family_pim_enable_modify, |
299c66b3 SP |
218 | } |
219 | }, | |
9726536d | 220 | { |
221 | .xpath = "/frr-interface:lib/interface/frr-pim:pim/address-family/pim-passive-enable", | |
222 | .cbs = { | |
223 | .modify = lib_interface_pim_address_family_pim_passive_enable_modify, | |
224 | } | |
225 | }, | |
299c66b3 | 226 | { |
698f4147 | 227 | .xpath = "/frr-interface:lib/interface/frr-pim:pim/address-family/dr-priority", |
299c66b3 | 228 | .cbs = { |
698f4147 | 229 | .modify = lib_interface_pim_address_family_dr_priority_modify, |
299c66b3 SP |
230 | } |
231 | }, | |
232 | { | |
698f4147 | 233 | .xpath = "/frr-interface:lib/interface/frr-pim:pim/address-family/hello-interval", |
299c66b3 | 234 | .cbs = { |
698f4147 | 235 | .modify = lib_interface_pim_address_family_hello_interval_modify, |
299c66b3 SP |
236 | } |
237 | }, | |
238 | { | |
698f4147 | 239 | .xpath = "/frr-interface:lib/interface/frr-pim:pim/address-family/hello-holdtime", |
299c66b3 | 240 | .cbs = { |
698f4147 | 241 | .modify = lib_interface_pim_address_family_hello_holdtime_modify, |
242 | .destroy = lib_interface_pim_address_family_hello_holdtime_destroy, | |
299c66b3 SP |
243 | } |
244 | }, | |
245 | { | |
698f4147 | 246 | .xpath = "/frr-interface:lib/interface/frr-pim:pim/address-family/bfd", |
299c66b3 | 247 | .cbs = { |
698f4147 | 248 | .create = lib_interface_pim_address_family_bfd_create, |
249 | .destroy = lib_interface_pim_address_family_bfd_destroy, | |
250 | .apply_finish = lib_interface_pim_address_family_bfd_apply_finish, | |
299c66b3 SP |
251 | } |
252 | }, | |
253 | { | |
698f4147 | 254 | .xpath = "/frr-interface:lib/interface/frr-pim:pim/address-family/bfd/min-rx-interval", |
299c66b3 | 255 | .cbs = { |
698f4147 | 256 | .modify = lib_interface_pim_address_family_bfd_min_rx_interval_modify, |
299c66b3 SP |
257 | } |
258 | }, | |
259 | { | |
698f4147 | 260 | .xpath = "/frr-interface:lib/interface/frr-pim:pim/address-family/bfd/min-tx-interval", |
299c66b3 | 261 | .cbs = { |
698f4147 | 262 | .modify = lib_interface_pim_address_family_bfd_min_tx_interval_modify, |
299c66b3 SP |
263 | } |
264 | }, | |
745b8d4a | 265 | { |
698f4147 | 266 | .xpath = "/frr-interface:lib/interface/frr-pim:pim/address-family/bfd/detect_mult", |
745b8d4a | 267 | .cbs = { |
698f4147 | 268 | .modify = lib_interface_pim_address_family_bfd_detect_mult_modify, |
745b8d4a RZ |
269 | } |
270 | }, | |
299c66b3 | 271 | { |
698f4147 | 272 | .xpath = "/frr-interface:lib/interface/frr-pim:pim/address-family/bfd/profile", |
299c66b3 | 273 | .cbs = { |
698f4147 | 274 | .modify = lib_interface_pim_address_family_bfd_profile_modify, |
275 | .destroy = lib_interface_pim_address_family_bfd_profile_destroy, | |
299c66b3 SP |
276 | } |
277 | }, | |
278 | { | |
698f4147 | 279 | .xpath = "/frr-interface:lib/interface/frr-pim:pim/address-family/bsm", |
299c66b3 | 280 | .cbs = { |
698f4147 | 281 | .modify = lib_interface_pim_address_family_bsm_modify, |
299c66b3 SP |
282 | } |
283 | }, | |
284 | { | |
698f4147 | 285 | .xpath = "/frr-interface:lib/interface/frr-pim:pim/address-family/unicast-bsm", |
299c66b3 | 286 | .cbs = { |
698f4147 | 287 | .modify = lib_interface_pim_address_family_unicast_bsm_modify, |
299c66b3 SP |
288 | } |
289 | }, | |
290 | { | |
698f4147 | 291 | .xpath = "/frr-interface:lib/interface/frr-pim:pim/address-family/active-active", |
299c66b3 | 292 | .cbs = { |
698f4147 | 293 | .modify = lib_interface_pim_address_family_active_active_modify, |
299c66b3 SP |
294 | } |
295 | }, | |
296 | { | |
297 | .xpath = "/frr-interface:lib/interface/frr-pim:pim/address-family/use-source", | |
298 | .cbs = { | |
299 | .modify = lib_interface_pim_address_family_use_source_modify, | |
300 | .destroy = lib_interface_pim_address_family_use_source_destroy, | |
301 | } | |
302 | }, | |
303 | { | |
304 | .xpath = "/frr-interface:lib/interface/frr-pim:pim/address-family/multicast-boundary-oil", | |
305 | .cbs = { | |
306 | .modify = lib_interface_pim_address_family_multicast_boundary_oil_modify, | |
307 | .destroy = lib_interface_pim_address_family_multicast_boundary_oil_destroy, | |
308 | } | |
309 | }, | |
310 | { | |
311 | .xpath = "/frr-interface:lib/interface/frr-pim:pim/address-family/mroute", | |
312 | .cbs = { | |
313 | .create = lib_interface_pim_address_family_mroute_create, | |
314 | .destroy = lib_interface_pim_address_family_mroute_destroy, | |
315 | } | |
316 | }, | |
317 | { | |
318 | .xpath = "/frr-interface:lib/interface/frr-pim:pim/address-family/mroute/oif", | |
319 | .cbs = { | |
320 | .modify = lib_interface_pim_address_family_mroute_oif_modify, | |
321 | .destroy = lib_interface_pim_address_family_mroute_oif_destroy, | |
322 | } | |
323 | }, | |
324 | { | |
325 | .xpath = NULL, | |
326 | }, | |
327 | } | |
328 | }; | |
329 | ||
330 | /* clang-format off */ | |
331 | const struct frr_yang_module_info frr_pim_rp_info = { | |
332 | .name = "frr-pim-rp", | |
333 | .nodes = { | |
334 | { | |
335 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/frr-pim-rp:rp/static-rp/rp-list", | |
336 | .cbs = { | |
337 | .create = routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp_static_rp_rp_list_create, | |
338 | .destroy = routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp_static_rp_rp_list_destroy, | |
339 | } | |
340 | }, | |
341 | { | |
342 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/frr-pim-rp:rp/static-rp/rp-list/group-list", | |
343 | .cbs = { | |
344 | .create = routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp_static_rp_rp_list_group_list_create, | |
345 | .destroy = routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp_static_rp_rp_list_group_list_destroy, | |
346 | } | |
347 | }, | |
348 | { | |
349 | .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-pim:pim/address-family/frr-pim-rp:rp/static-rp/rp-list/prefix-list", | |
350 | .cbs = { | |
351 | .modify = routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp_static_rp_rp_list_prefix_list_modify, | |
352 | .destroy = routing_control_plane_protocols_control_plane_protocol_pim_address_family_rp_static_rp_rp_list_prefix_list_destroy, | |
353 | } | |
354 | }, | |
355 | { | |
356 | .xpath = NULL, | |
357 | }, | |
358 | } | |
359 | }; | |
360 | ||
361 | /* clang-format off */ | |
3051f443 | 362 | const struct frr_yang_module_info frr_gmp_info = { |
363 | .name = "frr-gmp", | |
299c66b3 SP |
364 | .nodes = { |
365 | { | |
3051f443 | 366 | .xpath = "/frr-interface:lib/interface/frr-gmp:gmp/address-family", |
299c66b3 | 367 | .cbs = { |
3051f443 | 368 | .create = lib_interface_gmp_address_family_create, |
369 | .destroy = lib_interface_gmp_address_family_destroy, | |
299c66b3 SP |
370 | } |
371 | }, | |
372 | { | |
3051f443 | 373 | .xpath = "/frr-interface:lib/interface/frr-gmp:gmp/address-family/enable", |
299c66b3 | 374 | .cbs = { |
3051f443 | 375 | .modify = lib_interface_gmp_address_family_enable_modify, |
299c66b3 SP |
376 | } |
377 | }, | |
378 | { | |
3051f443 | 379 | .xpath = "/frr-interface:lib/interface/frr-gmp:gmp/address-family/igmp-version", |
299c66b3 | 380 | .cbs = { |
3051f443 | 381 | .modify = lib_interface_gmp_address_family_igmp_version_modify, |
382 | .destroy = lib_interface_gmp_address_family_igmp_version_destroy, | |
299c66b3 SP |
383 | } |
384 | }, | |
385 | { | |
3051f443 | 386 | .xpath = "/frr-interface:lib/interface/frr-gmp:gmp/address-family/mld-version", |
299c66b3 | 387 | .cbs = { |
3051f443 | 388 | .modify = lib_interface_gmp_address_family_mld_version_modify, |
389 | .destroy = lib_interface_gmp_address_family_mld_version_destroy, | |
299c66b3 SP |
390 | } |
391 | }, | |
392 | { | |
3051f443 | 393 | .xpath = "/frr-interface:lib/interface/frr-gmp:gmp/address-family/query-interval", |
299c66b3 | 394 | .cbs = { |
3051f443 | 395 | .modify = lib_interface_gmp_address_family_query_interval_modify, |
299c66b3 SP |
396 | } |
397 | }, | |
398 | { | |
3051f443 | 399 | .xpath = "/frr-interface:lib/interface/frr-gmp:gmp/address-family/query-max-response-time", |
299c66b3 | 400 | .cbs = { |
3051f443 | 401 | .modify = lib_interface_gmp_address_family_query_max_response_time_modify, |
299c66b3 SP |
402 | } |
403 | }, | |
404 | { | |
3051f443 | 405 | .xpath = "/frr-interface:lib/interface/frr-gmp:gmp/address-family/last-member-query-interval", |
299c66b3 | 406 | .cbs = { |
3051f443 | 407 | .modify = lib_interface_gmp_address_family_last_member_query_interval_modify, |
299c66b3 SP |
408 | } |
409 | }, | |
410 | { | |
3051f443 | 411 | .xpath = "/frr-interface:lib/interface/frr-gmp:gmp/address-family/robustness-variable", |
299c66b3 | 412 | .cbs = { |
3051f443 | 413 | .modify = lib_interface_gmp_address_family_robustness_variable_modify, |
299c66b3 SP |
414 | } |
415 | }, | |
416 | { | |
3051f443 | 417 | .xpath = "/frr-interface:lib/interface/frr-gmp:gmp/address-family/static-group", |
299c66b3 | 418 | .cbs = { |
3051f443 | 419 | .create = lib_interface_gmp_address_family_static_group_create, |
420 | .destroy = lib_interface_gmp_address_family_static_group_destroy, | |
299c66b3 SP |
421 | } |
422 | }, | |
423 | { | |
424 | .xpath = NULL, | |
425 | }, | |
426 | } | |
427 | }; | |
3051f443 | 428 |