Hi all,
Ahead of today's VPP Community call and the discussion around hidden visibility
for libvnet (Gerrit 46573), I compared VPP 26.06 with the current master.
Using the same scope as my previous analysis--functions both exported by
libvnet and declared in installed headers--105 function interfaces have changed:
- 78 added
- 18 removed
- 9 material prototype changes
The corresponding surface increased from 1,932 to 1,992 functions. These 105
changes represent approximately 5.4% of the VPP 26.06 function surface.
The attached file contains the complete symbol lists, the old and new
prototypes, the raw ELF counts, the methodology and its limitations.
Best regards,
Jerome
libvnet ABI changes from VPP 26.06 to current master
=====================================================
Generated: 2026-09-08
Baseline:
VPP v26.06
c3200b88dc46bd380f00a49ca3392a102cc1980b
Target:
VPP master fetched on 2026-09-08
743392f24195814ff2cf0bb18245cc5756ca2b5f
Comparable installed-header function surface
--------------------------------------------
Scope:
Functions that are both exported by libvnet and declared in the
VNET_HEADERS installed by src/vnet/CMakeLists.txt.
Summary:
v26.06 function surface: 1,932
current master surface: 1,992
added interfaces: 78
removed interfaces: 18
modified prototypes: 9
total interface changes: 105
The 105 changes correspond to approximately 5.4% of the v26.06
function surface.
Of the 78 added interfaces, 77 are newly introduced ELF function
symbols. app_crypto_async_reply was already exported by libvnet in
v26.06 but is now newly declared in an installed header.
Added interfaces (78)
---------------------
app_crypto_async_reply
session_migrate_accept
sfdp_timeout_add_registration
sfdp_timeout_register
tcp_ack_handle_full_feedback
tcp_bt_apply_ack
tcp_bt_dsack_mark_duplicate
tcp_bt_dsack_recovery_clear
tcp_bt_dsack_recovery_init
tcp_bt_enable
tcp_bt_handle_sack_reneging
tcp_bt_init_opaque
tcp_bt_init_rxt
tcp_bt_is_sane_post_recovery
tcp_bt_last_rxt_range
tcp_bt_loss_on_ack
tcp_bt_next_rack_rxt_range
tcp_bt_next_rxt_range
tcp_bt_recompute_sack_loss
tcp_bt_rxt_mark_lost
tcp_bt_rxt_rewind
tcp_bt_split_at
tcp_bt_tx_order_build
tcp_bt_tx_order_remove
tcp_dsack_cleanup
tcp_dsack_recovery_clear
tcp_dsack_recovery_init
tcp_dsack_track_retransmit
tcp_loss_dsack_undo
tcp_loss_enter_recovery
tcp_loss_exit_recovery
tcp_loss_old_ack_needs_full_feedback
tcp_loss_on_ack
tcp_loss_on_rto
tcp_loss_recovery_state_is_sane
tcp_loss_recovery_state_sync
tcp_loss_retransmit_timer_expired
tcp_loss_rto_retransmit_failed
tcp_loss_tlp_recovery
tcp_rack_arm_reorder_timer
tcp_rack_detect_loss
tcp_rack_init
tcp_rack_loss_on_ack
tcp_rack_mark_losses_on_rto
tcp_rack_mark_sample_lost
tcp_rack_prepare_rto
tcp_rack_recovery_account_is_sane
tcp_rack_recovery_exit
tcp_rack_recovery_init
tcp_rack_recovery_sync
tcp_rack_reo_wnd
tcp_rack_reorder_timeout
tcp_rack_restore_rto
tcp_rack_retransmit_timer_expired
tcp_rack_rxt_sample_acked
tcp_rack_timer_reset
tcp_rack_timer_rto_set
tcp_rack_timer_rto_update
tcp_rack_timer_update_on_new_data
tcp_rack_update_reo_wnd
tcp_rcv_dsack
tcp_sack_handle_reneging
tcp_sack_init_rxt
tcp_sack_is_sane_post_recovery
tcp_sack_recompute_loss
tcp_sack_rxt_mark_lost
tcp_tlp_dsack_matches
tcp_tlp_new_data_fits_cwnd
tcp_tlp_process_ack
tcp_tlp_pto_ticks
tcp_tlp_recovery_init
tcp_tlp_retransmit_disarm_rtt
tcp_tlp_retransmit_timer_expired
tcp_tlp_send_probe
vnet_dev_api_port_set_rss_config
vnet_dev_platform_map_uio_region
vnet_dev_platform_unmap_regions
vnet_dev_port_set_link_speed
Removed interfaces (18)
-----------------------
ipip_add_tunnel
ipip_del_tunnel
ipip_mk_key
ipip_mk_key_i
ipip_tunnel_db_add
ipip_tunnel_db_find
ipip_tunnel_db_find_by_sw_if_index
ipip_tunnel_db_remove
scoreboard_clear_reneging
scoreboard_init_rxt
scoreboard_rxt_mark_lost
sfdp_init_timeouts
sixrd_add_tunnel
sixrd_del_tunnel
tcp_bt_sample_delivery_rate
tcp_rcv_sacks
tcp_scoreboard_is_sane_post_recovery
vnet_dev_api_port_set_rss_key
Material prototype changes (9)
------------------------------
1. ipsec_crypto_algo_encode
v26.06:
vl_api_ipsec_crypto_alg_t (ipsec_crypto_alg_t)
master:
int (ipsec_crypto_alg_t, vl_api_ipsec_crypto_alg_t *)
2. ipsec_integ_algo_encode
v26.06:
vl_api_ipsec_integ_alg_t (ipsec_integ_alg_t)
master:
int (ipsec_integ_alg_t, vl_api_ipsec_integ_alg_t *)
3. ipsec_proto_encode
v26.06:
vl_api_ipsec_proto_t (ipsec_protocol_t)
master:
int (ipsec_protocol_t, vl_api_ipsec_proto_t *)
4. newreno_rcv_cong_ack
v26.06:
void (tcp_connection_t *, tcp_cc_ack_t, tcp_rate_sample_t *)
master:
void (tcp_connection_t *, tcp_cc_ack_t, tcp_ack_ctx_t *)
5. tcp_bt_check_app_limited
v26.06:
void (tcp_connection_t *)
master:
void (tcp_connection_t *, u32)
6. tcp_session_push_header
v26.06:
u32 (transport_connection_t *, vlib_buffer_t **, u32)
master:
u32 (transport_connection_t *, vlib_buffer_t **, u32, u32)
7. vnet_dev_dma_mem_alloc
v26.06:
vnet_dev_rv_t (vlib_main_t *, vnet_dev_t *, u32, u32, void **)
master:
vnet_dev_rv_t (vlib_main_t *, vnet_dev_t *, u32, u32,
void **, char *, ...)
8. vnet_dev_flow_ops_fn
v26.06:
int (vnet_main_t *, vnet_flow_dev_op_t, u32, u32, uword *)
master:
int (vnet_main_t *, vnet_flow_dev_op_t, u32, u32)
9. vnet_flow_disable
v26.06:
int (vnet_main_t *, u32, u32)
master:
int (vnet_main_t *, u32)
Prototype-change facets (categories overlap):
argument-count changes: 8
argument-type/variadic changes: 2
return-type changes: 3
Raw ELF export comparison on ARM64
----------------------------------
The complete dynamic export set, including functions not declared in
installed headers and exported data, changed as follows:
v26.06 exported symbols: 5,477
master exported symbols: 5,517
introduced: 86
functions: 81
objects: 5
removed: 46
functions: 34
objects: 12
common functions with a modified prototype: 9
This raw ELF count is architecture-dependent because libvnet contains
generated multiarch function variants. The installed-header function
surface above avoids counting those implementation clones.
Methodology and limitations
---------------------------
1. Build libvnet from the v26.06 tag and from the target master commit
with debug information.
2. Read .dynsym and retain defined GLOBAL or WEAK symbols with DEFAULT
or PROTECTED visibility and FUNC, OBJECT or TLS type.
3. For the comparable function surface, intersect exported functions
with declarations found in the VNET_HEADERS install list.
4. Compare DWARF function signatures for common exported functions,
including return type, argument count, argument types and
variadicity.
The prototype count does not include layout changes inside structures
or unions when the function signature continues to use the same named
type. The raw data-symbol summary counts additions and removals but
does not classify changes to the internal type or layout of a
persisting data symbol.
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#27173): https://lists.fd.io/g/vpp-dev/message/27173
Mute This Topic: https://lists.fd.io/mt/121146052/21656
Group Owner: [email protected]
Unsubscribe: https://lists.fd.io/g/vpp-dev/leave/14379924/21656/631435203/xyzzy
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-