From 6311009337ad8c553956147c928c887ae1f72d6d Mon Sep 17 00:00:00 2001 From: dypet Date: Mon, 27 Apr 2026 17:54:09 -0400 Subject: [PATCH 1/4] Move platform vpp to Trixie. Signed-off-by: dypet --- azure-pipelines.yml | 2 +- docker-gbsyncd-vpp/Dockerfile.j2 | 2 +- docker-sonic-vpp/Dockerfile.j2 | 2 +- docker-sonic-vpp/conf/startup.conf.tmpl | 1 + docker-syncd-vpp/Dockerfile.j2 | 2 +- docker-syncd-vpp/conf/startup.conf.tmpl | 1 + rules/docker-gbsyncd-vpp.mk | 4 +- rules/docker-sonic-vpp.mk | 4 +- rules/docker-syncd-vpp.mk | 2 +- rules/vpp.mk | 6 +- ...remove-libnl-and-tshark-dependencies.patch | 2 +- .../0002-xdp-tools-force-subdir-libbpf.patch | 6 +- .../0003-vxlan-export-vxlan_main-symbol.patch | 4 +- ...srv6-localsid-v2-custom-usid-lengths.patch | 224 ------------------ ...tats-track-original-member-interface.patch | 27 +-- vppbld/patches/series | 4 +- vppbld/vpp_version | 2 +- 17 files changed, 36 insertions(+), 259 deletions(-) delete mode 100644 vppbld/patches/0007-srv6-localsid-v2-custom-usid-lengths.patch diff --git a/azure-pipelines.yml b/azure-pipelines.yml index b62ef90f..920947c8 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -26,7 +26,7 @@ schedules: parameters: - name: debian_version type: string - default: bookworm + default: trixie - name: arch type: string default: amd64 diff --git a/docker-gbsyncd-vpp/Dockerfile.j2 b/docker-gbsyncd-vpp/Dockerfile.j2 index 2ba45817..0a4edae6 100644 --- a/docker-gbsyncd-vpp/Dockerfile.j2 +++ b/docker-gbsyncd-vpp/Dockerfile.j2 @@ -1,4 +1,4 @@ -FROM docker-config-engine-bookworm-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} +FROM docker-config-engine-trixie-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} ARG docker_container_name diff --git a/docker-sonic-vpp/Dockerfile.j2 b/docker-sonic-vpp/Dockerfile.j2 index 369044ac..adf6e75e 100644 --- a/docker-sonic-vpp/Dockerfile.j2 +++ b/docker-sonic-vpp/Dockerfile.j2 @@ -1,4 +1,4 @@ -FROM docker-swss-layer-bookworm-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} +FROM docker-swss-layer-trixie-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} ARG docker_container_name diff --git a/docker-sonic-vpp/conf/startup.conf.tmpl b/docker-sonic-vpp/conf/startup.conf.tmpl index 083da915..9b8e344f 100644 --- a/docker-sonic-vpp/conf/startup.conf.tmpl +++ b/docker-sonic-vpp/conf/startup.conf.tmpl @@ -240,6 +240,7 @@ plugins { ## Disable all plugins by default and then selectively enable specific plugins plugin default { disable } plugin af_packet_plugin.so { enable } + plugin tap_plugin.so { enable } plugin dpdk_plugin.so { enable } plugin linux_cp_plugin.so { enable } plugin linux_nl_plugin.so { enable } diff --git a/docker-syncd-vpp/Dockerfile.j2 b/docker-syncd-vpp/Dockerfile.j2 index 5bd53a66..5eb25dae 100644 --- a/docker-syncd-vpp/Dockerfile.j2 +++ b/docker-syncd-vpp/Dockerfile.j2 @@ -1,4 +1,4 @@ -FROM docker-config-engine-bookworm-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} +FROM docker-config-engine-trixie-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} ARG docker_container_name diff --git a/docker-syncd-vpp/conf/startup.conf.tmpl b/docker-syncd-vpp/conf/startup.conf.tmpl index e6d1629a..752983df 100644 --- a/docker-syncd-vpp/conf/startup.conf.tmpl +++ b/docker-syncd-vpp/conf/startup.conf.tmpl @@ -228,6 +228,7 @@ plugins { ## Disable all plugins by default and then selectively enable specific plugins plugin default { disable } plugin af_packet_plugin.so { enable } + plugin tap_plugin.so { enable } plugin dpdk_plugin.so { enable } plugin linux_cp_plugin.so { enable } plugin linux_nl_plugin.so { enable } diff --git a/rules/docker-gbsyncd-vpp.mk b/rules/docker-gbsyncd-vpp.mk index e836a206..af1851d6 100644 --- a/rules/docker-gbsyncd-vpp.mk +++ b/rules/docker-gbsyncd-vpp.mk @@ -15,7 +15,7 @@ # docker image for vpp gbsyncd DOCKER_GBSYNCD_PLATFORM_CODE = vpp -include $(PLATFORM_PATH)/../template/docker-gbsyncd-bookworm.mk +include $(PLATFORM_PATH)/../template/docker-gbsyncd-trixie.mk $(DOCKER_GBSYNCD_BASE)_DEPENDS += $(LIBSAIVS) \ $(SYNCD_VS) @@ -28,5 +28,3 @@ $(DOCKER_GBSYNCD_BASE)_DBG_DEPENDS += $(SYNCD_VS_DBG) \ $(DOCKER_GBSYNCD_BASE)_VERSION = 1.0.0 $(DOCKER_GBSYNCD_BASE)_PACKAGE_NAME = gbsyncd - -$(DOCKER_GBSYNCD_BASE)_RUN_OPT += -v /host/warmboot:/var/warmboot diff --git a/rules/docker-sonic-vpp.mk b/rules/docker-sonic-vpp.mk index 131a2755..47cd09ec 100644 --- a/rules/docker-sonic-vpp.mk +++ b/rules/docker-sonic-vpp.mk @@ -57,7 +57,7 @@ $(DOCKER_SONIC_VPP)_FILES += $(CONFIGDB_LOAD_SCRIPT) \ $(UPDATE_CHASSISDB_CONFIG_SCRIPT) \ $(COPP_CONFIG_TEMPLATE) -$(DOCKER_SONIC_VPP)_LOAD_DOCKERS += $(DOCKER_SWSS_LAYER_BOOKWORM) +$(DOCKER_SONIC_VPP)_LOAD_DOCKERS += $(DOCKER_SWSS_LAYER_TRIXIE) SONIC_DOCKER_IMAGES += $(DOCKER_SONIC_VPP) -SONIC_BOOKWORM_DOCKERS += $(DOCKER_SONIC_VPP) +SONIC_TRIXIE_DOCKERS += $(DOCKER_SONIC_VPP) diff --git a/rules/docker-syncd-vpp.mk b/rules/docker-syncd-vpp.mk index 71b01bb3..0dce0ed9 100644 --- a/rules/docker-syncd-vpp.mk +++ b/rules/docker-syncd-vpp.mk @@ -28,7 +28,7 @@ # docker image for vpp syncd DOCKER_SYNCD_PLATFORM_CODE = vpp -include $(PLATFORM_PATH)/../template/docker-syncd-bookworm.mk +include $(PLATFORM_PATH)/../template/docker-syncd-trixie.mk $(DOCKER_SYNCD_BASE)_DEPENDS += $(LIBSAIVS) \ $(SYNCD_VS) diff --git a/rules/vpp.mk b/rules/vpp.mk index 8d55733a..fa2c7b06 100644 --- a/rules/vpp.mk +++ b/rules/vpp.mk @@ -1,6 +1,6 @@ # libvpp package -VPP_VERSION_BASE = 2510 +VPP_VERSION_BASE = 2513 VPP_VERSION = $(VPP_VERSION_BASE)-0.3 VPP_VERSION_SONIC = $(VPP_VERSION)+b1sonic1 VPP_SRC_PATH = platform/vpp/vppbld @@ -11,7 +11,9 @@ export VPP_SRC_PATH VPPINFRA = libvppinfra_$(VPP_VERSION_SONIC)_$(CONFIGURED_ARCH).deb $(VPPINFRA)_SRC_PATH = $(VPP_SRC_PATH) $(VPPINFRA)_DEPENDS += $(LIBNL3) $(LIBNL3_DEV) $(LIBNL_ROUTE3) $(LIBNL_ROUTE3_DEV) +ifeq ($(BLDENV),trixie) SONIC_MAKE_DEBS += $(VPPINFRA) +endif VPP_MAIN = vpp_$(VPP_VERSION_SONIC)_$(CONFIGURED_ARCH).deb $(VPP_MAIN)_DEPENDS += $(VPPINFRA) @@ -50,9 +52,11 @@ VPPDBG = vpp-dbg_$(VPP_VERSION_SONIC)_$(CONFIGURED_ARCH).deb $(eval $(call add_derived_package,$(VPPINFRA),$(VPPDBG))) # Add VPP build/runtime dependencies to sairedis packages +ifeq ($(BLDENV),trixie) $(LIBSAIREDIS)_DEPENDS += $(VPP_MAIN) $(VPP_PLUGIN_CORE) $(VPP_PLUGIN_DPDK) \ $(VPP_PLUGIN_DEV) $(VPP_DEV) $(VPPINFRA_DEV) $(VPPDBG) $(LIBSAIVS)_RDEPENDS += $(VPP_MAIN) $(VPP_PLUGIN_CORE) $(VPP_PLUGIN_DPDK) +endif VPP_VERSION_FILE = vpp_$(VPP_VERSION_SONIC)_commit diff --git a/vppbld/patches/0001-remove-libnl-and-tshark-dependencies.patch b/vppbld/patches/0001-remove-libnl-and-tshark-dependencies.patch index f7bc43cf..1a457f3e 100644 --- a/vppbld/patches/0001-remove-libnl-and-tshark-dependencies.patch +++ b/vppbld/patches/0001-remove-libnl-and-tshark-dependencies.patch @@ -1,5 +1,5 @@ diff --git a/Makefile b/Makefile -index 593ea4e98..736fb6704 100644 +index daede502e..6b5d29557 100644 --- a/Makefile +++ b/Makefile @@ -104,7 +104,7 @@ DEB_DEPENDS += python3-ply libunwind-dev diff --git a/vppbld/patches/0002-xdp-tools-force-subdir-libbpf.patch b/vppbld/patches/0002-xdp-tools-force-subdir-libbpf.patch index 43c9009f..b3f600aa 100644 --- a/vppbld/patches/0002-xdp-tools-force-subdir-libbpf.patch +++ b/vppbld/patches/0002-xdp-tools-force-subdir-libbpf.patch @@ -1,13 +1,13 @@ diff --git a/build/external/packages/xdp-tools.mk b/build/external/packages/xdp-tools.mk -index a692aacf1..0265b8eaf 100644 +index f33c220e5..fad06266a 100644 --- a/build/external/packages/xdp-tools.mk +++ b/build/external/packages/xdp-tools.mk @@ -25,7 +25,7 @@ define xdp-tools_config_cmds endef define xdp-tools_build_cmds -- @cd ${xdp-tools_src_dir} && $(MAKE) CC=gcc V=1 BUILD_STATIC_ONLY=y PREFIX='$(xdp-tools_install_dir)' > $(xdp-tools_build_log) -+ @cd ${xdp-tools_src_dir} && $(MAKE) CC=gcc FORCE_SUBDIR_LIBBPF=1 V=1 BUILD_STATIC_ONLY=y PREFIX='$(xdp-tools_install_dir)' > $(xdp-tools_build_log) +- @cd ${xdp-tools_src_dir} && $(MAKE) CC=gcc V=1 BUILD_STATIC_ONLY=y > $(xdp-tools_build_log) ++ @cd ${xdp-tools_src_dir} && $(MAKE) CC=gcc FORCE_SUBDIR_LIBBPF=1 V=1 BUILD_STATIC_ONLY=y > $(xdp-tools_build_log) endef define xdp-tools_install_cmds diff --git a/vppbld/patches/0003-vxlan-export-vxlan_main-symbol.patch b/vppbld/patches/0003-vxlan-export-vxlan_main-symbol.patch index 90ee6626..8bb370ef 100644 --- a/vppbld/patches/0003-vxlan-export-vxlan_main-symbol.patch +++ b/vppbld/patches/0003-vxlan-export-vxlan_main-symbol.patch @@ -1,8 +1,8 @@ diff --git a/src/plugins/vxlan/vxlan.c b/src/plugins/vxlan/vxlan.c -index 0885550d2..8b8cd66e4 100644 +index 46c014912..523e7b72d 100644 --- a/src/plugins/vxlan/vxlan.c +++ b/src/plugins/vxlan/vxlan.c -@@ -43,7 +43,7 @@ +@@ -34,7 +34,7 @@ */ diff --git a/vppbld/patches/0007-srv6-localsid-v2-custom-usid-lengths.patch b/vppbld/patches/0007-srv6-localsid-v2-custom-usid-lengths.patch deleted file mode 100644 index 3ff8dc5a..00000000 --- a/vppbld/patches/0007-srv6-localsid-v2-custom-usid-lengths.patch +++ /dev/null @@ -1,224 +0,0 @@ -diff --git a/src/vnet/srv6/sr.api b/src/vnet/srv6/sr.api -index 3f064a3c0..b360587de 100644 ---- a/src/vnet/srv6/sr.api -+++ b/src/vnet/srv6/sr.api -@@ -63,6 +63,41 @@ autoreply define sr_localsid_add_del - vl_api_address_t nh_addr; - }; - -+/** \brief IPv6 SR LocalSID add/del request (v2) -+ @param client_index - opaque cookie to identify the sender -+ @param context - sender context, to match reply w/ request -+ @param is_del Boolean of whether its a delete instruction -+ @param localsid_addr IPv6 address of the localsid -+ @param end_psp Boolean of whether decapsulation is allowed in this function -+ @param behavior Type of behavior (function) for this localsid -+ @param sw_if_index Only for L2/L3 xconnect. OIF. In VRF variant the -+ fib_table. Default:0xffffffff -+ @param vlan_index Only for L2 xconnect. Outgoing VLAN tag. -+ @param fib_table FIB table in which we should install the localsid entry -+ @param nh_addr Next Hop IPv46 address. Only for L2/L3 xconnect. -+ @param locator_block_len Locator block length (bits) -+ @param locator_node_len Locator node length (bits) -+ @param function_len Function length (bits) -+*/ -+autoreply define sr_localsid_add_del_v2 -+{ -+ u32 client_index; -+ u32 context; -+ bool is_del [default=false]; -+ vl_api_ip6_address_t localsid; -+ bool end_psp; -+ vl_api_sr_behavior_t behavior; -+ vl_api_interface_index_t sw_if_index [default=0xffffffff]; -+ u32 vlan_index; -+ u32 fib_table; -+ vl_api_address_t nh_addr; -+ u8 locator_block_len; -+ u8 locator_node_len; -+ u8 function_len; -+ option status="in_progress"; -+}; -+ -+ - /** \brief IPv6 SR policy add - @param client_index - opaque cookie to identify the sender - @param context - sender context, to match reply w/ request -diff --git a/src/vnet/srv6/sr_api.c b/src/vnet/srv6/sr_api.c -index c3efae736..60385dffc 100644 ---- a/src/vnet/srv6/sr_api.c -+++ b/src/vnet/srv6/sr_api.c -@@ -68,7 +68,83 @@ static void vl_api_sr_localsid_add_del_t_handler - } - - static void --vl_api_sr_policy_add_t_handler (vl_api_sr_policy_add_t * mp) -+vl_api_sr_localsid_add_del_v2_t_handler (vl_api_sr_localsid_add_del_v2_t *mp) -+{ -+ vl_api_sr_localsid_add_del_v2_reply_t *rmp; -+ int rv = 0; -+ int usid_len = 0; -+ u16 localsid_prefix_len = 128; -+ ip46_address_t prefix; -+ ip6_address_t localsid; -+ u8 lengths_set = mp->locator_block_len || mp->locator_node_len || mp->function_len; -+ u8 lengths_mask = mp->locator_block_len | mp->locator_node_len | mp->function_len; -+ u16 total_len = (u16) mp->locator_block_len + mp->locator_node_len + mp->function_len; -+ /* -+ * int sr_cli_localsid (char is_del, ip6_address_t *localsid_addr, -+ * char end_psp, u8 behavior, u32 sw_if_index, u32 vlan_index, u32 fib_table, -+ * ip46_address_t *nh_addr, void *ls_plugin_mem) -+ */ -+ if (mp->behavior == SR_BEHAVIOR_X || mp->behavior == SR_BEHAVIOR_UA || -+ mp->behavior == SR_BEHAVIOR_DX6 || mp->behavior == SR_BEHAVIOR_DX4 || -+ mp->behavior == SR_BEHAVIOR_DX2) -+ VALIDATE_SW_IF_INDEX (mp); -+ -+ if (lengths_set) -+ { -+ // VPP uSID processing uses byte offsets; keep each length byte-aligned -+ if ((lengths_mask & 0x7) || total_len > 128) -+ { -+ rv = VNET_API_ERROR_INVALID_VALUE; -+ goto reply; -+ } -+ -+ localsid_prefix_len = total_len; -+ usid_len = mp->function_len + mp->locator_node_len; -+ -+ if ((mp->behavior == SR_BEHAVIOR_END_UN_PERF || mp->behavior == SR_BEHAVIOR_END_UN || -+ mp->behavior == SR_BEHAVIOR_UA) && -+ usid_len == 0) -+ { -+ rv = VNET_API_ERROR_INVALID_VALUE; -+ goto reply; -+ } -+ if ((mp->behavior == SR_BEHAVIOR_END_UN_PERF || mp->behavior == SR_BEHAVIOR_END_UN || -+ mp->behavior == SR_BEHAVIOR_UA) && -+ (usid_len != 16 && usid_len != 32)) -+ { -+ rv = VNET_API_ERROR_INVALID_VALUE; -+ goto reply; -+ } -+ } -+ else -+ { -+ if (mp->behavior == SR_BEHAVIOR_END_UN_PERF || mp->behavior == SR_BEHAVIOR_END_UN) -+ { -+ usid_len = 16; -+ localsid_prefix_len = 48; -+ } -+ -+ if (mp->behavior == SR_BEHAVIOR_UA) -+ { -+ usid_len = 16; -+ localsid_prefix_len = 64; -+ } -+ } -+ -+ ip6_address_decode (mp->localsid, &localsid); -+ ip_address_decode (&mp->nh_addr, &prefix); -+ -+ rv = sr_cli_localsid (mp->is_del, &localsid, localsid_prefix_len, mp->end_psp, mp->behavior, -+ ntohl (mp->sw_if_index), ntohl (mp->vlan_index), ntohl (mp->fib_table), -+ &prefix, usid_len, NULL); -+ -+reply: -+ BAD_SW_IF_INDEX_LABEL; -+ REPLY_MACRO (VL_API_SR_LOCALSID_ADD_DEL_V2_REPLY); -+} -+ -+static void -+vl_api_sr_policy_add_t_handler (vl_api_sr_policy_add_t *mp) - { - vl_api_sr_policy_add_reply_t *rmp; - ip6_address_t *segments = 0, *seg; -diff --git a/test/test_srv6.py b/test/test_srv6.py -index 77836dc30..78d7ce944 100644 ---- a/test/test_srv6.py -+++ b/test/test_srv6.py -@@ -2514,6 +2514,84 @@ class TestSRv6(VppTestCase): - # "Interface %s: Packet expected from interface %s " - # "didn't arrive" % (dst_if.name, i.name)) - -+ def _sr_localsid_add_del_v2( -+ self, -+ is_del, -+ localsid, -+ behavior, -+ locator_block_len=0, -+ locator_node_len=0, -+ function_len=0, -+ ): -+ return self.vapi.sr_localsid_add_del_v2( -+ is_del=is_del, -+ localsid=localsid, -+ end_psp=0, -+ behavior=behavior, -+ sw_if_index=0, -+ vlan_index=0, -+ fib_table=0, -+ nh_addr="::", -+ locator_block_len=locator_block_len, -+ locator_node_len=locator_node_len, -+ function_len=function_len, -+ ) -+ -+ def test_sr_localsid_add_del_v2_custom_lengths(self): -+ localsid = "B3::1" -+ created = False -+ try: -+ self._sr_localsid_add_del_v2( -+ is_del=0, -+ localsid=localsid, -+ behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_END_UN, -+ locator_block_len=32, -+ locator_node_len=16, -+ function_len=16, -+ ) -+ created = True -+ finally: -+ if created: -+ self._sr_localsid_add_del_v2( -+ is_del=1, -+ localsid=localsid, -+ behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_END_UN, -+ locator_block_len=32, -+ locator_node_len=16, -+ function_len=16, -+ ) -+ -+ def test_sr_localsid_add_del_v2_invalid_length_alignment(self): -+ with self.vapi.assert_negative_api_retval(): -+ self._sr_localsid_add_del_v2( -+ is_del=0, -+ localsid="B3::2", -+ behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_END_UN, -+ locator_block_len=33, -+ ) -+ -+ def test_sr_localsid_add_del_v2_zero_usid_len_rejected(self): -+ with self.vapi.assert_negative_api_retval(): -+ self._sr_localsid_add_del_v2( -+ is_del=0, -+ localsid="B3::3", -+ behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_END_UN, -+ locator_block_len=48, -+ locator_node_len=0, -+ function_len=0, -+ ) -+ -+ def test_sr_localsid_add_del_v2_total_len_too_large(self): -+ with self.vapi.assert_negative_api_retval(): -+ self._sr_localsid_add_del_v2( -+ is_del=0, -+ localsid="B3::4", -+ behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_END_UN, -+ locator_block_len=64, -+ locator_node_len=64, -+ function_len=16, -+ ) -+ - - if __name__ == "__main__": - unittest.main(testRunner=VppTestRunner) diff --git a/vppbld/patches/0008-bond-drop-stats-track-original-member-interface.patch b/vppbld/patches/0008-bond-drop-stats-track-original-member-interface.patch index f948b06e..552f8167 100644 --- a/vppbld/patches/0008-bond-drop-stats-track-original-member-interface.patch +++ b/vppbld/patches/0008-bond-drop-stats-track-original-member-interface.patch @@ -1,8 +1,8 @@ diff --git a/src/vnet/bonding/node.c b/src/vnet/bonding/node.c -index 821535d7a..b842e03d5 100644 +index 88dc0c875..3a6b0c8a3 100644 --- a/src/vnet/bonding/node.c +++ b/src/vnet/bonding/node.c -@@ -104,6 +104,9 @@ bond_sw_if_idx_rewrite (vlib_main_t * vm, vlib_node_runtime_t * node, +@@ -91,6 +91,9 @@ bond_sw_if_idx_rewrite (vlib_main_t * vm, vlib_node_runtime_t * node, && !packet_is_cdp (eth) && (ethertype != htons (ETHERNET_TYPE_802_1_LLDP)))) { @@ -12,7 +12,7 @@ index 821535d7a..b842e03d5 100644 /* Change the physical interface to bond interface */ vnet_buffer (b)->sw_if_index[VLIB_RX] = bond_sw_if_index; return; -@@ -124,6 +127,9 @@ bond_sw_if_idx_rewrite (vlib_main_t * vm, vlib_node_runtime_t * node, +@@ -111,6 +114,9 @@ bond_sw_if_idx_rewrite (vlib_main_t * vm, vlib_node_runtime_t * node, && (ethertype != htons (ETHERNET_TYPE_CDP)) && (ethertype != htons (ETHERNET_TYPE_802_1_LLDP)))) { @@ -22,7 +22,7 @@ index 821535d7a..b842e03d5 100644 /* Change the physical interface to bond interface */ vnet_buffer (b)->sw_if_index[VLIB_RX] = bond_sw_if_index; return; -@@ -242,6 +248,13 @@ VLIB_NODE_FN (bond_input_node) (vlib_main_t * vm, +@@ -229,6 +235,13 @@ VLIB_NODE_FN (bond_input_node) (vlib_main_t * vm, sw_if_index[2] = vnet_buffer (b[2])->sw_if_index[VLIB_RX]; sw_if_index[3] = vnet_buffer (b[3])->sw_if_index[VLIB_RX]; @@ -36,7 +36,7 @@ index 821535d7a..b842e03d5 100644 x |= sw_if_index[0] ^ last_member_sw_if_index; x |= sw_if_index[1] ^ last_member_sw_if_index; x |= sw_if_index[2] ^ last_member_sw_if_index; -@@ -338,6 +351,7 @@ VLIB_NODE_FN (bond_input_node) (vlib_main_t * vm, +@@ -315,6 +328,7 @@ VLIB_NODE_FN (bond_input_node) (vlib_main_t * vm, while (n_left) { sw_if_index[0] = vnet_buffer (b[0])->sw_if_index[VLIB_RX]; @@ -45,28 +45,27 @@ index 821535d7a..b842e03d5 100644 &bond_sw_if_index, b[0], &next_index, &error); next[0] = next_index; diff --git a/src/vnet/buffer.h b/src/vnet/buffer.h -index 01bd69b5e..f85dd0524 100644 +index 0ff3bf07d..22eaa9bde 100644 --- a/src/vnet/buffer.h +++ b/src/vnet/buffer.h -@@ -530,7 +530,12 @@ typedef struct - } reass; - } ip; +@@ -509,7 +509,11 @@ typedef struct + u8 loop_counter; -- u32 unused[5]; + u8 unused8; +- u32 unused[6]; + /* Original RX sw_if_index before bond/other rewrites. + Set by bond-input so that error-drop/error-punt can also + count drops against the physical member interface. */ + u32 orig_rx_sw_if_index; -+ -+ u32 unused[4]; ++ u32 unused[5]; } vnet_buffer_opaque2_t; #define vnet_buffer2(b) ((vnet_buffer_opaque2_t *) (b)->opaque2) diff --git a/src/vnet/interface_output.c b/src/vnet/interface_output.c -index 7991f6c90..79a4ec368 100644 +index f7d65619f..8817157bb 100644 --- a/src/vnet/interface_output.c +++ b/src/vnet/interface_output.c -@@ -1085,6 +1085,19 @@ interface_drop_punt (vlib_main_t * vm, +@@ -1048,6 +1048,19 @@ interface_drop_punt (vlib_main_t * vm, if (sw_if0->sup_sw_if_index != sw_if_index[0]) vlib_increment_simple_counter (cm, thread_index, sw_if0->sup_sw_if_index, count); diff --git a/vppbld/patches/series b/vppbld/patches/series index 4c6d9249..6f28b15a 100644 --- a/vppbld/patches/series +++ b/vppbld/patches/series @@ -11,7 +11,5 @@ 0005-version-support-custom-version-override.patch # 6. Fix curl conflicting -o and -O output options 0006-fix-curl-conflicting-output-options.patch -# 7. Add SRv6 LocalSID v2 API with uSID/custom length support and tests -0007-srv6-localsid-v2-custom-usid-lengths.patch -# 8. Track drop stats against original bond member interface +# 7. Track drop stats against original bond member interface 0008-bond-drop-stats-track-original-member-interface.patch diff --git a/vppbld/vpp_version b/vppbld/vpp_version index 1748161c..9a296c70 100644 --- a/vppbld/vpp_version +++ b/vppbld/vpp_version @@ -1 +1 @@ -435fda042e68ef90734ef5b3530c0a5b911a3bf8 +c58dd06a91652e0c6c9690e27a50590b0880bb13 From 9a5889e0f83d95f4e1f3bc59c14b46e7d7e6308f Mon Sep 17 00:00:00 2001 From: dypet Date: Tue, 28 Apr 2026 12:35:34 -0400 Subject: [PATCH 2/4] Fix version. Signed-off-by: dypet --- rules/vpp.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rules/vpp.mk b/rules/vpp.mk index fa2c7b06..09a98ca2 100644 --- a/rules/vpp.mk +++ b/rules/vpp.mk @@ -1,7 +1,7 @@ # libvpp package -VPP_VERSION_BASE = 2513 -VPP_VERSION = $(VPP_VERSION_BASE)-0.3 +VPP_VERSION_BASE = 2602 +VPP_VERSION = $(VPP_VERSION_BASE)-0.1 VPP_VERSION_SONIC = $(VPP_VERSION)+b1sonic1 VPP_SRC_PATH = platform/vpp/vppbld From 4aeeec8337f883a45c173cf5cacae45153ef4415 Mon Sep 17 00:00:00 2001 From: dypet Date: Wed, 27 May 2026 12:27:29 -0400 Subject: [PATCH 3/4] Update vpp. Signed-off-by: dypet --- rules/vpp.mk | 2 +- vppbld/vpp_version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rules/vpp.mk b/rules/vpp.mk index 09a98ca2..747f9d21 100644 --- a/rules/vpp.mk +++ b/rules/vpp.mk @@ -1,6 +1,6 @@ # libvpp package -VPP_VERSION_BASE = 2602 +VPP_VERSION_BASE = 2606 VPP_VERSION = $(VPP_VERSION_BASE)-0.1 VPP_VERSION_SONIC = $(VPP_VERSION)+b1sonic1 VPP_SRC_PATH = platform/vpp/vppbld diff --git a/vppbld/vpp_version b/vppbld/vpp_version index 9a296c70..c7efd61b 100644 --- a/vppbld/vpp_version +++ b/vppbld/vpp_version @@ -1 +1 @@ -c58dd06a91652e0c6c9690e27a50590b0880bb13 +657bee58b0bb6a0c9428402febfbbbe3921e9b92 From 5cd7dcc184a13a700a9d727fd57b2be0d7e60bf5 Mon Sep 17 00:00:00 2001 From: dypet Date: Mon, 1 Jun 2026 14:39:04 -0400 Subject: [PATCH 4/4] Update VPP version. Signed-off-by: dypet --- rules/vpp.mk | 4 ++-- .../0011-sonic-inner-aware-flow-hash.patch | 18 +++++++++--------- vppbld/vpp_version | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/rules/vpp.mk b/rules/vpp.mk index 41502059..3725d998 100644 --- a/rules/vpp.mk +++ b/rules/vpp.mk @@ -1,13 +1,13 @@ # libvpp package -VPP_VERSION_BASE = 2510 +VPP_VERSION_BASE = 2606 # Bump the minor suffix whenever vppbld/patches/series or any patch file # under vppbld/patches/*.patch changes content. The VPP_VERSION_SONIC string # is the cache key used by vppbld/Makefile to fetch pre-built debs from # https://packages.buildkite.com/sonic-vpp/vpp; if the suffix isn't bumped, # downstream sonic-buildimage builds will silently pull stale debs that # pre-date the new patch series and end up with VPP/SAI CRC drift. -VPP_VERSION = $(VPP_VERSION_BASE)-0.4 +VPP_VERSION = $(VPP_VERSION_BASE)-0.2 VPP_VERSION_SONIC = $(VPP_VERSION)+b1sonic1 VPP_SRC_PATH = platform/vpp/vppbld diff --git a/vppbld/patches/0011-sonic-inner-aware-flow-hash.patch b/vppbld/patches/0011-sonic-inner-aware-flow-hash.patch index a39a192f..b08c435c 100644 --- a/vppbld/patches/0011-sonic-inner-aware-flow-hash.patch +++ b/vppbld/patches/0011-sonic-inner-aware-flow-hash.patch @@ -231,12 +231,13 @@ diff --git a/docs/developer/corearchitecture/index.rst b/docs/developer/corearch index ecd5a3cdb..7efa0acca 100644 --- a/docs/developer/corearchitecture/index.rst +++ b/docs/developer/corearchitecture/index.rst -@@ -18,4 +18,4 @@ Core Architecture +@@ -16,5 +16,6 @@ Core Architecture + multiarch/index + bihash buildsystem/index - mem multi_thread -- + inner_aware_hash + diff --git a/docs/developer/corearchitecture/inner_aware_hash.rst b/docs/developer/corearchitecture/inner_aware_hash.rst new file mode 100644 index 000000000..5d9458d70 @@ -822,20 +823,19 @@ index 1ac8b66a1..023d2b040 100644 VNET_REGISTER_HASH_FUNCTION (hash_eth_l2, static) = { .name = "hash-eth-l2", .description = "Hash ethernet L2 headers", -@@ -317,6 +467,13 @@ VNET_REGISTER_HASH_FUNCTION (hash_eth_l34, static) = { +@@ -300,6 +450,12 @@ VNET_REGISTER_HASH_FUNCTION (hash_eth_l34, static) = { + VNET_REGISTER_HASH_FUNCTION (hash_eth_l34, static) = { + .name = "hash-eth-l34", + .description = "Hash ethernet L34 headers", + .priority = 50, .function[VNET_HASH_FN_TYPE_ETHERNET] = hash_eth_l34, }; - +VNET_REGISTER_HASH_FUNCTION (hash_eth_l34_inner, static) = { + .name = "hash-eth-l34-inner", + .description = "Hash ethernet L34 headers, peek into IPinIP/GRE/NVGRE inner", + .priority = 50, + .function[VNET_HASH_FN_TYPE_ETHERNET] = hash_eth_l34_inner, +}; -+ - /* - * fd.io coding-style-patch-verification: ON - * diff --git a/src/vnet/ip/ip4_inlines.h b/src/vnet/ip/ip4_inlines.h index b4fcebc98..2e95cf77b 100644 --- a/src/vnet/ip/ip4_inlines.h diff --git a/vppbld/vpp_version b/vppbld/vpp_version index c7efd61b..d6b950ba 100644 --- a/vppbld/vpp_version +++ b/vppbld/vpp_version @@ -1 +1 @@ -657bee58b0bb6a0c9428402febfbbbe3921e9b92 +3f9e978d7bf71754f0f97e646e3572c901382645