diff mbox series

[ovs-dev] ovs: Bump submodule to latest OVS branch-3.3.

Message ID 20240129233652.123111-1-dceara@redhat.com
State Accepted
Headers show
Series [ovs-dev] ovs: Bump submodule to latest OVS branch-3.3. | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test success github build: passed
ovsrobot/github-robot-_ovn-kubernetes success github build: passed

Commit Message

Dumitru Ceara Jan. 29, 2024, 11:36 p.m. UTC
This picks up the following relevant OVS commits:
  8893e24d9d dpdk: Update to use v23.11.
  ed738eca39 util: Annotate function that will never return NULL.
  77d0bad04 mcast-snooping: Store IGMP/MLD protocol version.
  b222593bc6 mcast-snooping: Add group protocol to mdb/show output.
  a940a691e7 ovs-atomic: Fix inclusion of Clang header by GCC 14.
  b0cf73112d dp-packet: Reset offload/offsets when clearing a packet.

This commit also ports the CI DPDK related changes from OVS commit
8893e24d9d09 ("dpdk: Update to use v23.11.") which are required as 23.11
is the supported DPDK branch on OVS 3.3.  There's also a small change
that had to be made when mangling the prefix path of the installed
DPDK version in the container.

As a side effect this will also address OVN Fedora 40 (rawhide) build
failures on aarch64 and s390x.  They are fixed by a940a691e7d9
("ovs-atomic: Fix inclusion of Clang header by GCC 14.").

Suggested-by: Ilya Maximets <i.maximets@ovn.org>
Signed-off-by: Dumitru Ceara <dceara@redhat.com>
---
 .ci/dpdk-build.sh          | 28 ++++++++++++++++++----------
 .ci/linux-build.sh         | 11 ++++++-----
 .github/workflows/test.yml |  4 ++--
 controller/pinctrl.c       |  6 +++++-
 ovs                        |  2 +-
 5 files changed, 32 insertions(+), 19 deletions(-)

Comments

Dumitru Ceara Jan. 29, 2024, 11:42 p.m. UTC | #1
On 1/30/24 00:36, Dumitru Ceara wrote:
> This picks up the following relevant OVS commits:
>   8893e24d9d dpdk: Update to use v23.11.
>   ed738eca39 util: Annotate function that will never return NULL.
>   77d0bad04 mcast-snooping: Store IGMP/MLD protocol version.
>   b222593bc6 mcast-snooping: Add group protocol to mdb/show output.
>   a940a691e7 ovs-atomic: Fix inclusion of Clang header by GCC 14.
>   b0cf73112d dp-packet: Reset offload/offsets when clearing a packet.
> 
> This commit also ports the CI DPDK related changes from OVS commit
> 8893e24d9d09 ("dpdk: Update to use v23.11.") which are required as 23.11
> is the supported DPDK branch on OVS 3.3.  There's also a small change
> that had to be made when mangling the prefix path of the installed
> DPDK version in the container.
> 
> As a side effect this will also address OVN Fedora 40 (rawhide) build
> failures on aarch64 and s390x.  They are fixed by a940a691e7d9
> ("ovs-atomic: Fix inclusion of Clang header by GCC 14.").
> 
> Suggested-by: Ilya Maximets <i.maximets@ovn.org>
> Signed-off-by: Dumitru Ceara <dceara@redhat.com>
> ---

CC: Eelco, Mohammad, Numan.

>  .ci/dpdk-build.sh          | 28 ++++++++++++++++++----------
>  .ci/linux-build.sh         | 11 ++++++-----
>  .github/workflows/test.yml |  4 ++--
>  controller/pinctrl.c       |  6 +++++-
>  ovs                        |  2 +-
>  5 files changed, 32 insertions(+), 19 deletions(-)
> 
> diff --git a/.ci/dpdk-build.sh b/.ci/dpdk-build.sh
> index f44ac15b07..0c13c98c98 100755
> --- a/.ci/dpdk-build.sh
> +++ b/.ci/dpdk-build.sh
> @@ -5,25 +5,27 @@ set -x
>  
>  function build_dpdk()
>  {
> -    local VERSION_FILE="dpdk-dir/cached-version"
>      local DPDK_VER=$1
>      local DPDK_OPTS=""
> +    local DPDK_INSTALL_DIR="$(pwd)/dpdk-dir"
> +    local VERSION_FILE="$DPDK_INSTALL_DIR/cached-version"
>  
> -    rm -rf dpdk-dir
> +    rm -rf dpdk-src
> +    rm -rf $DPDK_INSTALL_DIR
>  
>      if [ "${DPDK_VER##refs/*/}" != "${DPDK_VER}" ]; then
> -        git clone --single-branch $DPDK_GIT dpdk-dir -b "${DPDK_VER##refs/*/}"
> -        pushd dpdk-dir
> +        git clone --single-branch $DPDK_GIT dpdk-src -b "${DPDK_VER##refs/*/}"
> +        pushd dpdk-src
>          git log -1 --oneline
>      else
>          wget https://fast.dpdk.org/rel/dpdk-$1.tar.xz
>          tar xvf dpdk-$1.tar.xz > /dev/null
>          DIR_NAME=$(tar -tf dpdk-$1.tar.xz | head -1 | cut -f1 -d"/")
> -        mv ${DIR_NAME} dpdk-dir
> -        pushd dpdk-dir
> +        mv ${DIR_NAME} dpdk-src
> +        pushd dpdk-src
>      fi
>  
> -    # Switching to 'default' machine to make dpdk-dir cache usable on
> +    # Switching to 'default' machine to make the dpdk cache usable on
>      # different CPUs. We can't be sure that all CI machines are exactly same.
>      DPDK_OPTS="$DPDK_OPTS -Dmachine=default"
>  
> @@ -38,16 +40,22 @@ function build_dpdk()
>      # only depend on virtio/tap drivers.
>      # We can disable all remaining drivers to save compilation time.
>      DPDK_OPTS="$DPDK_OPTS -Denable_drivers=net/null,net/tap,net/virtio"
> +    # OVS depends on the vhost library (and its dependencies).
> +    # net/tap depends on the gso library.
> +    DPDK_OPTS="$DPDK_OPTS -Denable_libs=cryptodev,dmadev,gso,vhost"
>  
>      # Install DPDK using prefix.
> -    DPDK_OPTS="$DPDK_OPTS --prefix=$(pwd)/build"
> +    DPDK_OPTS="$DPDK_OPTS --prefix=$DPDK_INSTALL_DIR"
>  
>      meson $DPDK_OPTS build
>      ninja -C build
>      ninja -C build install
> -
> -    echo "Installed DPDK in $(pwd)"
>      popd
> +
> +    # Remove examples sources.
> +    rm -rf $DPDK_INSTALL_DIR/share/dpdk/examples
> +
> +    echo "Installed DPDK in $DPDK_INSTALL_DIR"
>      echo "${DPDK_VER}" > ${VERSION_FILE}
>  }
>  
> diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
> index b0c3c9252e..78f17f8bdb 100755
> --- a/.ci/linux-build.sh
> +++ b/.ci/linux-build.sh
> @@ -13,24 +13,25 @@ RECHECK=${RECHECK:-"no"}
>  
>  function install_dpdk()
>  {
> -    local VERSION_FILE="dpdk-dir/cached-version"
> -    local DPDK_LIB=$(pwd)/dpdk-dir/build/lib/x86_64-linux-gnu
> +    local DPDK_INSTALL_DIR="$(pwd)/dpdk-dir"
> +    local VERSION_FILE="${DPDK_INSTALL_DIR}/cached-version"
> +    local DPDK_LIB=${DPDK_INSTALL_DIR}/lib/x86_64-linux-gnu
>  
>      # Export the following path for pkg-config to find the .pc file.
>      export PKG_CONFIG_PATH=$DPDK_LIB/pkgconfig/:$PKG_CONFIG_PATH
>  
>      if [ ! -f "${VERSION_FILE}" ]; then
> -        echo "Could not find DPDK in $(pwd)/dpdk-dir"
> +        echo "Could not find DPDK in $DPDK_INSTALL_DIR"
>          return 1
>      fi
>  
>      # As we build inside a container we need to update the prefix.
> -    sed -i -E "s|^prefix=.*|prefix=$(pwd)/dpdk-dir/build|" \
> +    sed -i -E "s|^prefix=.*|prefix=${DPDK_INSTALL_DIR}|" \
>          "$DPDK_LIB/pkgconfig/libdpdk-libs.pc"
>  
>      # Update the library paths.
>      sudo ldconfig
> -    echo "Found cached DPDK $(cat ${VERSION_FILE}) build in $(pwd)/dpdk-dir"
> +    echo "Found cached DPDK $(cat ${VERSION_FILE}) build in $DPDK_INSTALL_DIR"
>  }
>  
>  function configure_ovs()
> diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
> index 02865b32f2..2503d87d0f 100644
> --- a/.github/workflows/test.yml
> +++ b/.github/workflows/test.yml
> @@ -16,8 +16,8 @@ jobs:
>      env:
>        dependencies: gcc libnuma-dev ninja-build
>        CC: gcc
> -      DPDK_GIT: https://dpdk.org/git/dpdk-stable
> -      DPDK_VER: 22.11.1
> +      DPDK_GIT: https://dpdk.org/git/dpdk
> +      DPDK_VER: 23.11
>      name: dpdk gcc
>      outputs:
>        dpdk_key: ${{ steps.gen_dpdk_key.outputs.key }}
> diff --git a/controller/pinctrl.c b/controller/pinctrl.c
> index 4992eab089..0d747dbf56 100644
> --- a/controller/pinctrl.c
> +++ b/controller/pinctrl.c
> @@ -5473,10 +5473,14 @@ pinctrl_ip_mcast_handle_igmp(struct rconn *swconn,
>      ovs_rwlock_wrlock(&ip_ms->ms->rwlock);
>      switch (ntohs(ip_flow->tp_src)) {
>      case IGMP_HOST_MEMBERSHIP_REPORT:
> +        group_change =
> +            mcast_snooping_add_group4(ip_ms->ms, ip4, IP_MCAST_VLAN,
> +                                      port_key_data, MCAST_GROUP_IGMPV1);
> +        break;
>      case IGMPV2_HOST_MEMBERSHIP_REPORT:
>          group_change =
>              mcast_snooping_add_group4(ip_ms->ms, ip4, IP_MCAST_VLAN,
> -                                      port_key_data);
> +                                      port_key_data, MCAST_GROUP_IGMPV2);
>          break;
>      case IGMP_HOST_LEAVE_MESSAGE:
>          group_change =
> diff --git a/ovs b/ovs
> index 4102674b3e..fe55ce37a7 160000
> --- a/ovs
> +++ b/ovs
> @@ -1 +1 @@
> -Subproject commit 4102674b3ecadb0e20e512cc661cddbbc4b3d1f6
> +Subproject commit fe55ce37a7b090d09dee5c01ae0797320ad678f6
Numan Siddique Jan. 30, 2024, 5:31 a.m. UTC | #2
On Mon, Jan 29, 2024 at 6:43 PM Dumitru Ceara <dceara@redhat.com> wrote:
>
> On 1/30/24 00:36, Dumitru Ceara wrote:
> > This picks up the following relevant OVS commits:
> >   8893e24d9d dpdk: Update to use v23.11.
> >   ed738eca39 util: Annotate function that will never return NULL.
> >   77d0bad04 mcast-snooping: Store IGMP/MLD protocol version.
> >   b222593bc6 mcast-snooping: Add group protocol to mdb/show output.
> >   a940a691e7 ovs-atomic: Fix inclusion of Clang header by GCC 14.
> >   b0cf73112d dp-packet: Reset offload/offsets when clearing a packet.
> >
> > This commit also ports the CI DPDK related changes from OVS commit
> > 8893e24d9d09 ("dpdk: Update to use v23.11.") which are required as 23.11
> > is the supported DPDK branch on OVS 3.3.  There's also a small change
> > that had to be made when mangling the prefix path of the installed
> > DPDK version in the container.
> >
> > As a side effect this will also address OVN Fedora 40 (rawhide) build
> > failures on aarch64 and s390x.  They are fixed by a940a691e7d9
> > ("ovs-atomic: Fix inclusion of Clang header by GCC 14.").
> >
> > Suggested-by: Ilya Maximets <i.maximets@ovn.org>
> > Signed-off-by: Dumitru Ceara <dceara@redhat.com>
> > ---
>
> CC: Eelco, Mohammad, Numan.


Acked-by: Numan Siddique<numans@ovn.org>

Numan

>
> >  .ci/dpdk-build.sh          | 28 ++++++++++++++++++----------
> >  .ci/linux-build.sh         | 11 ++++++-----
> >  .github/workflows/test.yml |  4 ++--
> >  controller/pinctrl.c       |  6 +++++-
> >  ovs                        |  2 +-
> >  5 files changed, 32 insertions(+), 19 deletions(-)
> >
> > diff --git a/.ci/dpdk-build.sh b/.ci/dpdk-build.sh
> > index f44ac15b07..0c13c98c98 100755
> > --- a/.ci/dpdk-build.sh
> > +++ b/.ci/dpdk-build.sh
> > @@ -5,25 +5,27 @@ set -x
> >
> >  function build_dpdk()
> >  {
> > -    local VERSION_FILE="dpdk-dir/cached-version"
> >      local DPDK_VER=$1
> >      local DPDK_OPTS=""
> > +    local DPDK_INSTALL_DIR="$(pwd)/dpdk-dir"
> > +    local VERSION_FILE="$DPDK_INSTALL_DIR/cached-version"
> >
> > -    rm -rf dpdk-dir
> > +    rm -rf dpdk-src
> > +    rm -rf $DPDK_INSTALL_DIR
> >
> >      if [ "${DPDK_VER##refs/*/}" != "${DPDK_VER}" ]; then
> > -        git clone --single-branch $DPDK_GIT dpdk-dir -b
"${DPDK_VER##refs/*/}"
> > -        pushd dpdk-dir
> > +        git clone --single-branch $DPDK_GIT dpdk-src -b
"${DPDK_VER##refs/*/}"
> > +        pushd dpdk-src
> >          git log -1 --oneline
> >      else
> >          wget https://fast.dpdk.org/rel/dpdk-$1.tar.xz
> >          tar xvf dpdk-$1.tar.xz > /dev/null
> >          DIR_NAME=$(tar -tf dpdk-$1.tar.xz | head -1 | cut -f1 -d"/")
> > -        mv ${DIR_NAME} dpdk-dir
> > -        pushd dpdk-dir
> > +        mv ${DIR_NAME} dpdk-src
> > +        pushd dpdk-src
> >      fi
> >
> > -    # Switching to 'default' machine to make dpdk-dir cache usable on
> > +    # Switching to 'default' machine to make the dpdk cache usable on
> >      # different CPUs. We can't be sure that all CI machines are
exactly same.
> >      DPDK_OPTS="$DPDK_OPTS -Dmachine=default"
> >
> > @@ -38,16 +40,22 @@ function build_dpdk()
> >      # only depend on virtio/tap drivers.
> >      # We can disable all remaining drivers to save compilation time.
> >      DPDK_OPTS="$DPDK_OPTS -Denable_drivers=net/null,net/tap,net/virtio"
> > +    # OVS depends on the vhost library (and its dependencies).
> > +    # net/tap depends on the gso library.
> > +    DPDK_OPTS="$DPDK_OPTS -Denable_libs=cryptodev,dmadev,gso,vhost"
> >
> >      # Install DPDK using prefix.
> > -    DPDK_OPTS="$DPDK_OPTS --prefix=$(pwd)/build"
> > +    DPDK_OPTS="$DPDK_OPTS --prefix=$DPDK_INSTALL_DIR"
> >
> >      meson $DPDK_OPTS build
> >      ninja -C build
> >      ninja -C build install
> > -
> > -    echo "Installed DPDK in $(pwd)"
> >      popd
> > +
> > +    # Remove examples sources.
> > +    rm -rf $DPDK_INSTALL_DIR/share/dpdk/examples
> > +
> > +    echo "Installed DPDK in $DPDK_INSTALL_DIR"
> >      echo "${DPDK_VER}" > ${VERSION_FILE}
> >  }
> >
> > diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
> > index b0c3c9252e..78f17f8bdb 100755
> > --- a/.ci/linux-build.sh
> > +++ b/.ci/linux-build.sh
> > @@ -13,24 +13,25 @@ RECHECK=${RECHECK:-"no"}
> >
> >  function install_dpdk()
> >  {
> > -    local VERSION_FILE="dpdk-dir/cached-version"
> > -    local DPDK_LIB=$(pwd)/dpdk-dir/build/lib/x86_64-linux-gnu
> > +    local DPDK_INSTALL_DIR="$(pwd)/dpdk-dir"
> > +    local VERSION_FILE="${DPDK_INSTALL_DIR}/cached-version"
> > +    local DPDK_LIB=${DPDK_INSTALL_DIR}/lib/x86_64-linux-gnu
> >
> >      # Export the following path for pkg-config to find the .pc file.
> >      export PKG_CONFIG_PATH=$DPDK_LIB/pkgconfig/:$PKG_CONFIG_PATH
> >
> >      if [ ! -f "${VERSION_FILE}" ]; then
> > -        echo "Could not find DPDK in $(pwd)/dpdk-dir"
> > +        echo "Could not find DPDK in $DPDK_INSTALL_DIR"
> >          return 1
> >      fi
> >
> >      # As we build inside a container we need to update the prefix.
> > -    sed -i -E "s|^prefix=.*|prefix=$(pwd)/dpdk-dir/build|" \
> > +    sed -i -E "s|^prefix=.*|prefix=${DPDK_INSTALL_DIR}|" \
> >          "$DPDK_LIB/pkgconfig/libdpdk-libs.pc"
> >
> >      # Update the library paths.
> >      sudo ldconfig
> > -    echo "Found cached DPDK $(cat ${VERSION_FILE}) build in
$(pwd)/dpdk-dir"
> > +    echo "Found cached DPDK $(cat ${VERSION_FILE}) build in
$DPDK_INSTALL_DIR"
> >  }
> >
> >  function configure_ovs()
> > diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
> > index 02865b32f2..2503d87d0f 100644
> > --- a/.github/workflows/test.yml
> > +++ b/.github/workflows/test.yml
> > @@ -16,8 +16,8 @@ jobs:
> >      env:
> >        dependencies: gcc libnuma-dev ninja-build
> >        CC: gcc
> > -      DPDK_GIT: https://dpdk.org/git/dpdk-stable
> > -      DPDK_VER: 22.11.1
> > +      DPDK_GIT: https://dpdk.org/git/dpdk
> > +      DPDK_VER: 23.11
> >      name: dpdk gcc
> >      outputs:
> >        dpdk_key: ${{ steps.gen_dpdk_key.outputs.key }}
> > diff --git a/controller/pinctrl.c b/controller/pinctrl.c
> > index 4992eab089..0d747dbf56 100644
> > --- a/controller/pinctrl.c
> > +++ b/controller/pinctrl.c
> > @@ -5473,10 +5473,14 @@ pinctrl_ip_mcast_handle_igmp(struct rconn
*swconn,
> >      ovs_rwlock_wrlock(&ip_ms->ms->rwlock);
> >      switch (ntohs(ip_flow->tp_src)) {
> >      case IGMP_HOST_MEMBERSHIP_REPORT:
> > +        group_change =
> > +            mcast_snooping_add_group4(ip_ms->ms, ip4, IP_MCAST_VLAN,
> > +                                      port_key_data,
MCAST_GROUP_IGMPV1);
> > +        break;
> >      case IGMPV2_HOST_MEMBERSHIP_REPORT:
> >          group_change =
> >              mcast_snooping_add_group4(ip_ms->ms, ip4, IP_MCAST_VLAN,
> > -                                      port_key_data);
> > +                                      port_key_data,
MCAST_GROUP_IGMPV2);
> >          break;
> >      case IGMP_HOST_LEAVE_MESSAGE:
> >          group_change =
> > diff --git a/ovs b/ovs
> > index 4102674b3e..fe55ce37a7 160000
> > --- a/ovs
> > +++ b/ovs
> > @@ -1 +1 @@
> > -Subproject commit 4102674b3ecadb0e20e512cc661cddbbc4b3d1f6
> > +Subproject commit fe55ce37a7b090d09dee5c01ae0797320ad678f6
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
Eelco Chaudron Jan. 30, 2024, 8:04 a.m. UTC | #3
On 30 Jan 2024, at 0:36, Dumitru Ceara wrote:

> This picks up the following relevant OVS commits:
>   8893e24d9d dpdk: Update to use v23.11.
>   ed738eca39 util: Annotate function that will never return NULL.
>   77d0bad04 mcast-snooping: Store IGMP/MLD protocol version.
>   b222593bc6 mcast-snooping: Add group protocol to mdb/show output.
>   a940a691e7 ovs-atomic: Fix inclusion of Clang header by GCC 14.
>   b0cf73112d dp-packet: Reset offload/offsets when clearing a packet.
>
> This commit also ports the CI DPDK related changes from OVS commit
> 8893e24d9d09 ("dpdk: Update to use v23.11.") which are required as 23.11
> is the supported DPDK branch on OVS 3.3.  There's also a small change
> that had to be made when mangling the prefix path of the installed
> DPDK version in the container.
>
> As a side effect this will also address OVN Fedora 40 (rawhide) build
> failures on aarch64 and s390x.  They are fixed by a940a691e7d9
> ("ovs-atomic: Fix inclusion of Clang header by GCC 14.").
>
> Suggested-by: Ilya Maximets <i.maximets@ovn.org>
> Signed-off-by: Dumitru Ceara <dceara@redhat.com>

There is also a change in controller/pinctrl.c, any reason why this is part of this patch?

Cheers,

Eelco

> ---
>  .ci/dpdk-build.sh          | 28 ++++++++++++++++++----------
>  .ci/linux-build.sh         | 11 ++++++-----
>  .github/workflows/test.yml |  4 ++--
>  controller/pinctrl.c       |  6 +++++-
>  ovs                        |  2 +-
>  5 files changed, 32 insertions(+), 19 deletions(-)
>
> diff --git a/.ci/dpdk-build.sh b/.ci/dpdk-build.sh
> index f44ac15b07..0c13c98c98 100755
> --- a/.ci/dpdk-build.sh
> +++ b/.ci/dpdk-build.sh
> @@ -5,25 +5,27 @@ set -x
>
>  function build_dpdk()
>  {
> -    local VERSION_FILE="dpdk-dir/cached-version"
>      local DPDK_VER=$1
>      local DPDK_OPTS=""
> +    local DPDK_INSTALL_DIR="$(pwd)/dpdk-dir"
> +    local VERSION_FILE="$DPDK_INSTALL_DIR/cached-version"
>
> -    rm -rf dpdk-dir
> +    rm -rf dpdk-src
> +    rm -rf $DPDK_INSTALL_DIR
>
>      if [ "${DPDK_VER##refs/*/}" != "${DPDK_VER}" ]; then
> -        git clone --single-branch $DPDK_GIT dpdk-dir -b "${DPDK_VER##refs/*/}"
> -        pushd dpdk-dir
> +        git clone --single-branch $DPDK_GIT dpdk-src -b "${DPDK_VER##refs/*/}"
> +        pushd dpdk-src
>          git log -1 --oneline
>      else
>          wget https://fast.dpdk.org/rel/dpdk-$1.tar.xz
>          tar xvf dpdk-$1.tar.xz > /dev/null
>          DIR_NAME=$(tar -tf dpdk-$1.tar.xz | head -1 | cut -f1 -d"/")
> -        mv ${DIR_NAME} dpdk-dir
> -        pushd dpdk-dir
> +        mv ${DIR_NAME} dpdk-src
> +        pushd dpdk-src
>      fi
>
> -    # Switching to 'default' machine to make dpdk-dir cache usable on
> +    # Switching to 'default' machine to make the dpdk cache usable on
>      # different CPUs. We can't be sure that all CI machines are exactly same.
>      DPDK_OPTS="$DPDK_OPTS -Dmachine=default"
>
> @@ -38,16 +40,22 @@ function build_dpdk()
>      # only depend on virtio/tap drivers.
>      # We can disable all remaining drivers to save compilation time.
>      DPDK_OPTS="$DPDK_OPTS -Denable_drivers=net/null,net/tap,net/virtio"
> +    # OVS depends on the vhost library (and its dependencies).
> +    # net/tap depends on the gso library.
> +    DPDK_OPTS="$DPDK_OPTS -Denable_libs=cryptodev,dmadev,gso,vhost"
>
>      # Install DPDK using prefix.
> -    DPDK_OPTS="$DPDK_OPTS --prefix=$(pwd)/build"
> +    DPDK_OPTS="$DPDK_OPTS --prefix=$DPDK_INSTALL_DIR"
>
>      meson $DPDK_OPTS build
>      ninja -C build
>      ninja -C build install
> -
> -    echo "Installed DPDK in $(pwd)"
>      popd
> +
> +    # Remove examples sources.
> +    rm -rf $DPDK_INSTALL_DIR/share/dpdk/examples
> +
> +    echo "Installed DPDK in $DPDK_INSTALL_DIR"
>      echo "${DPDK_VER}" > ${VERSION_FILE}
>  }
>
> diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
> index b0c3c9252e..78f17f8bdb 100755
> --- a/.ci/linux-build.sh
> +++ b/.ci/linux-build.sh
> @@ -13,24 +13,25 @@ RECHECK=${RECHECK:-"no"}
>
>  function install_dpdk()
>  {
> -    local VERSION_FILE="dpdk-dir/cached-version"
> -    local DPDK_LIB=$(pwd)/dpdk-dir/build/lib/x86_64-linux-gnu
> +    local DPDK_INSTALL_DIR="$(pwd)/dpdk-dir"
> +    local VERSION_FILE="${DPDK_INSTALL_DIR}/cached-version"
> +    local DPDK_LIB=${DPDK_INSTALL_DIR}/lib/x86_64-linux-gnu
>
>      # Export the following path for pkg-config to find the .pc file.
>      export PKG_CONFIG_PATH=$DPDK_LIB/pkgconfig/:$PKG_CONFIG_PATH
>
>      if [ ! -f "${VERSION_FILE}" ]; then
> -        echo "Could not find DPDK in $(pwd)/dpdk-dir"
> +        echo "Could not find DPDK in $DPDK_INSTALL_DIR"
>          return 1
>      fi
>
>      # As we build inside a container we need to update the prefix.
> -    sed -i -E "s|^prefix=.*|prefix=$(pwd)/dpdk-dir/build|" \
> +    sed -i -E "s|^prefix=.*|prefix=${DPDK_INSTALL_DIR}|" \
>          "$DPDK_LIB/pkgconfig/libdpdk-libs.pc"
>
>      # Update the library paths.
>      sudo ldconfig
> -    echo "Found cached DPDK $(cat ${VERSION_FILE}) build in $(pwd)/dpdk-dir"
> +    echo "Found cached DPDK $(cat ${VERSION_FILE}) build in $DPDK_INSTALL_DIR"
>  }
>
>  function configure_ovs()
> diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
> index 02865b32f2..2503d87d0f 100644
> --- a/.github/workflows/test.yml
> +++ b/.github/workflows/test.yml
> @@ -16,8 +16,8 @@ jobs:
>      env:
>        dependencies: gcc libnuma-dev ninja-build
>        CC: gcc
> -      DPDK_GIT: https://dpdk.org/git/dpdk-stable
> -      DPDK_VER: 22.11.1
> +      DPDK_GIT: https://dpdk.org/git/dpdk
> +      DPDK_VER: 23.11
>      name: dpdk gcc
>      outputs:
>        dpdk_key: ${{ steps.gen_dpdk_key.outputs.key }}
> diff --git a/controller/pinctrl.c b/controller/pinctrl.c
> index 4992eab089..0d747dbf56 100644
> --- a/controller/pinctrl.c
> +++ b/controller/pinctrl.c
> @@ -5473,10 +5473,14 @@ pinctrl_ip_mcast_handle_igmp(struct rconn *swconn,
>      ovs_rwlock_wrlock(&ip_ms->ms->rwlock);
>      switch (ntohs(ip_flow->tp_src)) {
>      case IGMP_HOST_MEMBERSHIP_REPORT:
> +        group_change =
> +            mcast_snooping_add_group4(ip_ms->ms, ip4, IP_MCAST_VLAN,
> +                                      port_key_data, MCAST_GROUP_IGMPV1);
> +        break;
>      case IGMPV2_HOST_MEMBERSHIP_REPORT:
>          group_change =
>              mcast_snooping_add_group4(ip_ms->ms, ip4, IP_MCAST_VLAN,
> -                                      port_key_data);
> +                                      port_key_data, MCAST_GROUP_IGMPV2);
>          break;
>      case IGMP_HOST_LEAVE_MESSAGE:
>          group_change =
> diff --git a/ovs b/ovs
> index 4102674b3e..fe55ce37a7 160000
> --- a/ovs
> +++ b/ovs
> @@ -1 +1 @@
> -Subproject commit 4102674b3ecadb0e20e512cc661cddbbc4b3d1f6
> +Subproject commit fe55ce37a7b090d09dee5c01ae0797320ad678f6
> -- 
> 2.39.3
Dumitru Ceara Jan. 30, 2024, 8:57 a.m. UTC | #4
On 1/30/24 09:04, Eelco Chaudron wrote:
> 
> 
> On 30 Jan 2024, at 0:36, Dumitru Ceara wrote:
> 
>> This picks up the following relevant OVS commits:
>>   8893e24d9d dpdk: Update to use v23.11.
>>   ed738eca39 util: Annotate function that will never return NULL.
>>   77d0bad04 mcast-snooping: Store IGMP/MLD protocol version.
>>   b222593bc6 mcast-snooping: Add group protocol to mdb/show output.
>>   a940a691e7 ovs-atomic: Fix inclusion of Clang header by GCC 14.
>>   b0cf73112d dp-packet: Reset offload/offsets when clearing a packet.
>>
>> This commit also ports the CI DPDK related changes from OVS commit
>> 8893e24d9d09 ("dpdk: Update to use v23.11.") which are required as 23.11
>> is the supported DPDK branch on OVS 3.3.  There's also a small change
>> that had to be made when mangling the prefix path of the installed
>> DPDK version in the container.
>>
>> As a side effect this will also address OVN Fedora 40 (rawhide) build
>> failures on aarch64 and s390x.  They are fixed by a940a691e7d9
>> ("ovs-atomic: Fix inclusion of Clang header by GCC 14.").
>>
>> Suggested-by: Ilya Maximets <i.maximets@ovn.org>
>> Signed-off-by: Dumitru Ceara <dceara@redhat.com>
> 
> There is also a change in controller/pinctrl.c, any reason why this is part of this patch?
> 

Yes, b222593bc6 ("mcast-snooping: Add group protocol to mdb/show
output") changed the OVS mcast library API.  That's used by OVN.  We
need that pinctrl.c change otherwise compilation fails.

Regards,
Dumitru

> Cheers,
> 
> Eelco
> 
>> ---
>>  .ci/dpdk-build.sh          | 28 ++++++++++++++++++----------
>>  .ci/linux-build.sh         | 11 ++++++-----
>>  .github/workflows/test.yml |  4 ++--
>>  controller/pinctrl.c       |  6 +++++-
>>  ovs                        |  2 +-
>>  5 files changed, 32 insertions(+), 19 deletions(-)
>>
>> diff --git a/.ci/dpdk-build.sh b/.ci/dpdk-build.sh
>> index f44ac15b07..0c13c98c98 100755
>> --- a/.ci/dpdk-build.sh
>> +++ b/.ci/dpdk-build.sh
>> @@ -5,25 +5,27 @@ set -x
>>
>>  function build_dpdk()
>>  {
>> -    local VERSION_FILE="dpdk-dir/cached-version"
>>      local DPDK_VER=$1
>>      local DPDK_OPTS=""
>> +    local DPDK_INSTALL_DIR="$(pwd)/dpdk-dir"
>> +    local VERSION_FILE="$DPDK_INSTALL_DIR/cached-version"
>>
>> -    rm -rf dpdk-dir
>> +    rm -rf dpdk-src
>> +    rm -rf $DPDK_INSTALL_DIR
>>
>>      if [ "${DPDK_VER##refs/*/}" != "${DPDK_VER}" ]; then
>> -        git clone --single-branch $DPDK_GIT dpdk-dir -b "${DPDK_VER##refs/*/}"
>> -        pushd dpdk-dir
>> +        git clone --single-branch $DPDK_GIT dpdk-src -b "${DPDK_VER##refs/*/}"
>> +        pushd dpdk-src
>>          git log -1 --oneline
>>      else
>>          wget https://fast.dpdk.org/rel/dpdk-$1.tar.xz
>>          tar xvf dpdk-$1.tar.xz > /dev/null
>>          DIR_NAME=$(tar -tf dpdk-$1.tar.xz | head -1 | cut -f1 -d"/")
>> -        mv ${DIR_NAME} dpdk-dir
>> -        pushd dpdk-dir
>> +        mv ${DIR_NAME} dpdk-src
>> +        pushd dpdk-src
>>      fi
>>
>> -    # Switching to 'default' machine to make dpdk-dir cache usable on
>> +    # Switching to 'default' machine to make the dpdk cache usable on
>>      # different CPUs. We can't be sure that all CI machines are exactly same.
>>      DPDK_OPTS="$DPDK_OPTS -Dmachine=default"
>>
>> @@ -38,16 +40,22 @@ function build_dpdk()
>>      # only depend on virtio/tap drivers.
>>      # We can disable all remaining drivers to save compilation time.
>>      DPDK_OPTS="$DPDK_OPTS -Denable_drivers=net/null,net/tap,net/virtio"
>> +    # OVS depends on the vhost library (and its dependencies).
>> +    # net/tap depends on the gso library.
>> +    DPDK_OPTS="$DPDK_OPTS -Denable_libs=cryptodev,dmadev,gso,vhost"
>>
>>      # Install DPDK using prefix.
>> -    DPDK_OPTS="$DPDK_OPTS --prefix=$(pwd)/build"
>> +    DPDK_OPTS="$DPDK_OPTS --prefix=$DPDK_INSTALL_DIR"
>>
>>      meson $DPDK_OPTS build
>>      ninja -C build
>>      ninja -C build install
>> -
>> -    echo "Installed DPDK in $(pwd)"
>>      popd
>> +
>> +    # Remove examples sources.
>> +    rm -rf $DPDK_INSTALL_DIR/share/dpdk/examples
>> +
>> +    echo "Installed DPDK in $DPDK_INSTALL_DIR"
>>      echo "${DPDK_VER}" > ${VERSION_FILE}
>>  }
>>
>> diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
>> index b0c3c9252e..78f17f8bdb 100755
>> --- a/.ci/linux-build.sh
>> +++ b/.ci/linux-build.sh
>> @@ -13,24 +13,25 @@ RECHECK=${RECHECK:-"no"}
>>
>>  function install_dpdk()
>>  {
>> -    local VERSION_FILE="dpdk-dir/cached-version"
>> -    local DPDK_LIB=$(pwd)/dpdk-dir/build/lib/x86_64-linux-gnu
>> +    local DPDK_INSTALL_DIR="$(pwd)/dpdk-dir"
>> +    local VERSION_FILE="${DPDK_INSTALL_DIR}/cached-version"
>> +    local DPDK_LIB=${DPDK_INSTALL_DIR}/lib/x86_64-linux-gnu
>>
>>      # Export the following path for pkg-config to find the .pc file.
>>      export PKG_CONFIG_PATH=$DPDK_LIB/pkgconfig/:$PKG_CONFIG_PATH
>>
>>      if [ ! -f "${VERSION_FILE}" ]; then
>> -        echo "Could not find DPDK in $(pwd)/dpdk-dir"
>> +        echo "Could not find DPDK in $DPDK_INSTALL_DIR"
>>          return 1
>>      fi
>>
>>      # As we build inside a container we need to update the prefix.
>> -    sed -i -E "s|^prefix=.*|prefix=$(pwd)/dpdk-dir/build|" \
>> +    sed -i -E "s|^prefix=.*|prefix=${DPDK_INSTALL_DIR}|" \
>>          "$DPDK_LIB/pkgconfig/libdpdk-libs.pc"
>>
>>      # Update the library paths.
>>      sudo ldconfig
>> -    echo "Found cached DPDK $(cat ${VERSION_FILE}) build in $(pwd)/dpdk-dir"
>> +    echo "Found cached DPDK $(cat ${VERSION_FILE}) build in $DPDK_INSTALL_DIR"
>>  }
>>
>>  function configure_ovs()
>> diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
>> index 02865b32f2..2503d87d0f 100644
>> --- a/.github/workflows/test.yml
>> +++ b/.github/workflows/test.yml
>> @@ -16,8 +16,8 @@ jobs:
>>      env:
>>        dependencies: gcc libnuma-dev ninja-build
>>        CC: gcc
>> -      DPDK_GIT: https://dpdk.org/git/dpdk-stable
>> -      DPDK_VER: 22.11.1
>> +      DPDK_GIT: https://dpdk.org/git/dpdk
>> +      DPDK_VER: 23.11
>>      name: dpdk gcc
>>      outputs:
>>        dpdk_key: ${{ steps.gen_dpdk_key.outputs.key }}
>> diff --git a/controller/pinctrl.c b/controller/pinctrl.c
>> index 4992eab089..0d747dbf56 100644
>> --- a/controller/pinctrl.c
>> +++ b/controller/pinctrl.c
>> @@ -5473,10 +5473,14 @@ pinctrl_ip_mcast_handle_igmp(struct rconn *swconn,
>>      ovs_rwlock_wrlock(&ip_ms->ms->rwlock);
>>      switch (ntohs(ip_flow->tp_src)) {
>>      case IGMP_HOST_MEMBERSHIP_REPORT:
>> +        group_change =
>> +            mcast_snooping_add_group4(ip_ms->ms, ip4, IP_MCAST_VLAN,
>> +                                      port_key_data, MCAST_GROUP_IGMPV1);
>> +        break;
>>      case IGMPV2_HOST_MEMBERSHIP_REPORT:
>>          group_change =
>>              mcast_snooping_add_group4(ip_ms->ms, ip4, IP_MCAST_VLAN,
>> -                                      port_key_data);
>> +                                      port_key_data, MCAST_GROUP_IGMPV2);
>>          break;
>>      case IGMP_HOST_LEAVE_MESSAGE:
>>          group_change =
>> diff --git a/ovs b/ovs
>> index 4102674b3e..fe55ce37a7 160000
>> --- a/ovs
>> +++ b/ovs
>> @@ -1 +1 @@
>> -Subproject commit 4102674b3ecadb0e20e512cc661cddbbc4b3d1f6
>> +Subproject commit fe55ce37a7b090d09dee5c01ae0797320ad678f6
>> -- 
>> 2.39.3
>
Eelco Chaudron Jan. 30, 2024, 9:16 a.m. UTC | #5
On 30 Jan 2024, at 9:57, Dumitru Ceara wrote:

> On 1/30/24 09:04, Eelco Chaudron wrote:
>>
>>
>> On 30 Jan 2024, at 0:36, Dumitru Ceara wrote:
>>
>>> This picks up the following relevant OVS commits:
>>>   8893e24d9d dpdk: Update to use v23.11.
>>>   ed738eca39 util: Annotate function that will never return NULL.
>>>   77d0bad04 mcast-snooping: Store IGMP/MLD protocol version.
>>>   b222593bc6 mcast-snooping: Add group protocol to mdb/show output.
>>>   a940a691e7 ovs-atomic: Fix inclusion of Clang header by GCC 14.
>>>   b0cf73112d dp-packet: Reset offload/offsets when clearing a packet.
>>>
>>> This commit also ports the CI DPDK related changes from OVS commit
>>> 8893e24d9d09 ("dpdk: Update to use v23.11.") which are required as 23.11
>>> is the supported DPDK branch on OVS 3.3.  There's also a small change
>>> that had to be made when mangling the prefix path of the installed
>>> DPDK version in the container.
>>>
>>> As a side effect this will also address OVN Fedora 40 (rawhide) build
>>> failures on aarch64 and s390x.  They are fixed by a940a691e7d9
>>> ("ovs-atomic: Fix inclusion of Clang header by GCC 14.").
>>>
>>> Suggested-by: Ilya Maximets <i.maximets@ovn.org>
>>> Signed-off-by: Dumitru Ceara <dceara@redhat.com>
>>
>> There is also a change in controller/pinctrl.c, any reason why this is part of this patch?
>>
>
> Yes, b222593bc6 ("mcast-snooping: Add group protocol to mdb/show
> output") changed the OVS mcast library API.  That's used by OVN.  We
> need that pinctrl.c change otherwise compilation fails.

Thanks Dumitru for the clarification, maybe you can add this to the commit message when you apply? The rest looks good, and as the tests passed;

Acked-by: Eelco Chaudron <echaudro@redhat.com>
Mohammad Heib Jan. 30, 2024, 9:48 a.m. UTC | #6
Hi,
Thank you Dumitru.

Acked-by: Mohammad Heib <mheib@redhat.com>

On Tue, Jan 30, 2024 at 11:16 AM Eelco Chaudron <echaudro@redhat.com> wrote:

>
>
> On 30 Jan 2024, at 9:57, Dumitru Ceara wrote:
>
> > On 1/30/24 09:04, Eelco Chaudron wrote:
> >>
> >>
> >> On 30 Jan 2024, at 0:36, Dumitru Ceara wrote:
> >>
> >>> This picks up the following relevant OVS commits:
> >>>   8893e24d9d dpdk: Update to use v23.11.
> >>>   ed738eca39 util: Annotate function that will never return NULL.
> >>>   77d0bad04 mcast-snooping: Store IGMP/MLD protocol version.
> >>>   b222593bc6 mcast-snooping: Add group protocol to mdb/show output.
> >>>   a940a691e7 ovs-atomic: Fix inclusion of Clang header by GCC 14.
> >>>   b0cf73112d dp-packet: Reset offload/offsets when clearing a packet.
> >>>
> >>> This commit also ports the CI DPDK related changes from OVS commit
> >>> 8893e24d9d09 ("dpdk: Update to use v23.11.") which are required as
> 23.11
> >>> is the supported DPDK branch on OVS 3.3.  There's also a small change
> >>> that had to be made when mangling the prefix path of the installed
> >>> DPDK version in the container.
> >>>
> >>> As a side effect this will also address OVN Fedora 40 (rawhide) build
> >>> failures on aarch64 and s390x.  They are fixed by a940a691e7d9
> >>> ("ovs-atomic: Fix inclusion of Clang header by GCC 14.").
> >>>
> >>> Suggested-by: Ilya Maximets <i.maximets@ovn.org>
> >>> Signed-off-by: Dumitru Ceara <dceara@redhat.com>
> >>
> >> There is also a change in controller/pinctrl.c, any reason why this is
> part of this patch?
> >>
> >
> > Yes, b222593bc6 ("mcast-snooping: Add group protocol to mdb/show
> > output") changed the OVS mcast library API.  That's used by OVN.  We
> > need that pinctrl.c change otherwise compilation fails.
>
> Thanks Dumitru for the clarification, maybe you can add this to the commit
> message when you apply? The rest looks good, and as the tests passed;
>
> Acked-by: Eelco Chaudron <echaudro@redhat.com>
>
>
>
Dumitru Ceara Jan. 30, 2024, 11:35 a.m. UTC | #7
On 1/30/24 10:48, Mohammad Heib wrote:
> Hi,
> Thank you Dumitru.
> 
> Acked-by: Mohammad Heib <mheib@redhat.com>
> 
> On Tue, Jan 30, 2024 at 11:16 AM Eelco Chaudron <echaudro@redhat.com> wrote:
> 
>>
>>
>> On 30 Jan 2024, at 9:57, Dumitru Ceara wrote:
>>
>>> On 1/30/24 09:04, Eelco Chaudron wrote:
>>>>
>>>>
>>>> On 30 Jan 2024, at 0:36, Dumitru Ceara wrote:
>>>>
>>>>> This picks up the following relevant OVS commits:
>>>>>   8893e24d9d dpdk: Update to use v23.11.
>>>>>   ed738eca39 util: Annotate function that will never return NULL.
>>>>>   77d0bad04 mcast-snooping: Store IGMP/MLD protocol version.
>>>>>   b222593bc6 mcast-snooping: Add group protocol to mdb/show output.
>>>>>   a940a691e7 ovs-atomic: Fix inclusion of Clang header by GCC 14.
>>>>>   b0cf73112d dp-packet: Reset offload/offsets when clearing a packet.
>>>>>
>>>>> This commit also ports the CI DPDK related changes from OVS commit
>>>>> 8893e24d9d09 ("dpdk: Update to use v23.11.") which are required as
>> 23.11
>>>>> is the supported DPDK branch on OVS 3.3.  There's also a small change
>>>>> that had to be made when mangling the prefix path of the installed
>>>>> DPDK version in the container.
>>>>>
>>>>> As a side effect this will also address OVN Fedora 40 (rawhide) build
>>>>> failures on aarch64 and s390x.  They are fixed by a940a691e7d9
>>>>> ("ovs-atomic: Fix inclusion of Clang header by GCC 14.").
>>>>>
>>>>> Suggested-by: Ilya Maximets <i.maximets@ovn.org>
>>>>> Signed-off-by: Dumitru Ceara <dceara@redhat.com>
>>>>
>>>> There is also a change in controller/pinctrl.c, any reason why this is
>> part of this patch?
>>>>
>>>
>>> Yes, b222593bc6 ("mcast-snooping: Add group protocol to mdb/show
>>> output") changed the OVS mcast library API.  That's used by OVN.  We
>>> need that pinctrl.c change otherwise compilation fails.
>>
>> Thanks Dumitru for the clarification, maybe you can add this to the commit
>> message when you apply? The rest looks good, and as the tests passed;
>>
>> Acked-by: Eelco Chaudron <echaudro@redhat.com>
>>

Thanks, Numan, Eelco and Mohammad for the reviews!

I updated the commit log to reflect the pinctrl.c change too and pushed
this to the main branch.

Regards,
Dumitru
diff mbox series

Patch

diff --git a/.ci/dpdk-build.sh b/.ci/dpdk-build.sh
index f44ac15b07..0c13c98c98 100755
--- a/.ci/dpdk-build.sh
+++ b/.ci/dpdk-build.sh
@@ -5,25 +5,27 @@  set -x
 
 function build_dpdk()
 {
-    local VERSION_FILE="dpdk-dir/cached-version"
     local DPDK_VER=$1
     local DPDK_OPTS=""
+    local DPDK_INSTALL_DIR="$(pwd)/dpdk-dir"
+    local VERSION_FILE="$DPDK_INSTALL_DIR/cached-version"
 
-    rm -rf dpdk-dir
+    rm -rf dpdk-src
+    rm -rf $DPDK_INSTALL_DIR
 
     if [ "${DPDK_VER##refs/*/}" != "${DPDK_VER}" ]; then
-        git clone --single-branch $DPDK_GIT dpdk-dir -b "${DPDK_VER##refs/*/}"
-        pushd dpdk-dir
+        git clone --single-branch $DPDK_GIT dpdk-src -b "${DPDK_VER##refs/*/}"
+        pushd dpdk-src
         git log -1 --oneline
     else
         wget https://fast.dpdk.org/rel/dpdk-$1.tar.xz
         tar xvf dpdk-$1.tar.xz > /dev/null
         DIR_NAME=$(tar -tf dpdk-$1.tar.xz | head -1 | cut -f1 -d"/")
-        mv ${DIR_NAME} dpdk-dir
-        pushd dpdk-dir
+        mv ${DIR_NAME} dpdk-src
+        pushd dpdk-src
     fi
 
-    # Switching to 'default' machine to make dpdk-dir cache usable on
+    # Switching to 'default' machine to make the dpdk cache usable on
     # different CPUs. We can't be sure that all CI machines are exactly same.
     DPDK_OPTS="$DPDK_OPTS -Dmachine=default"
 
@@ -38,16 +40,22 @@  function build_dpdk()
     # only depend on virtio/tap drivers.
     # We can disable all remaining drivers to save compilation time.
     DPDK_OPTS="$DPDK_OPTS -Denable_drivers=net/null,net/tap,net/virtio"
+    # OVS depends on the vhost library (and its dependencies).
+    # net/tap depends on the gso library.
+    DPDK_OPTS="$DPDK_OPTS -Denable_libs=cryptodev,dmadev,gso,vhost"
 
     # Install DPDK using prefix.
-    DPDK_OPTS="$DPDK_OPTS --prefix=$(pwd)/build"
+    DPDK_OPTS="$DPDK_OPTS --prefix=$DPDK_INSTALL_DIR"
 
     meson $DPDK_OPTS build
     ninja -C build
     ninja -C build install
-
-    echo "Installed DPDK in $(pwd)"
     popd
+
+    # Remove examples sources.
+    rm -rf $DPDK_INSTALL_DIR/share/dpdk/examples
+
+    echo "Installed DPDK in $DPDK_INSTALL_DIR"
     echo "${DPDK_VER}" > ${VERSION_FILE}
 }
 
diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
index b0c3c9252e..78f17f8bdb 100755
--- a/.ci/linux-build.sh
+++ b/.ci/linux-build.sh
@@ -13,24 +13,25 @@  RECHECK=${RECHECK:-"no"}
 
 function install_dpdk()
 {
-    local VERSION_FILE="dpdk-dir/cached-version"
-    local DPDK_LIB=$(pwd)/dpdk-dir/build/lib/x86_64-linux-gnu
+    local DPDK_INSTALL_DIR="$(pwd)/dpdk-dir"
+    local VERSION_FILE="${DPDK_INSTALL_DIR}/cached-version"
+    local DPDK_LIB=${DPDK_INSTALL_DIR}/lib/x86_64-linux-gnu
 
     # Export the following path for pkg-config to find the .pc file.
     export PKG_CONFIG_PATH=$DPDK_LIB/pkgconfig/:$PKG_CONFIG_PATH
 
     if [ ! -f "${VERSION_FILE}" ]; then
-        echo "Could not find DPDK in $(pwd)/dpdk-dir"
+        echo "Could not find DPDK in $DPDK_INSTALL_DIR"
         return 1
     fi
 
     # As we build inside a container we need to update the prefix.
-    sed -i -E "s|^prefix=.*|prefix=$(pwd)/dpdk-dir/build|" \
+    sed -i -E "s|^prefix=.*|prefix=${DPDK_INSTALL_DIR}|" \
         "$DPDK_LIB/pkgconfig/libdpdk-libs.pc"
 
     # Update the library paths.
     sudo ldconfig
-    echo "Found cached DPDK $(cat ${VERSION_FILE}) build in $(pwd)/dpdk-dir"
+    echo "Found cached DPDK $(cat ${VERSION_FILE}) build in $DPDK_INSTALL_DIR"
 }
 
 function configure_ovs()
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 02865b32f2..2503d87d0f 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -16,8 +16,8 @@  jobs:
     env:
       dependencies: gcc libnuma-dev ninja-build
       CC: gcc
-      DPDK_GIT: https://dpdk.org/git/dpdk-stable
-      DPDK_VER: 22.11.1
+      DPDK_GIT: https://dpdk.org/git/dpdk
+      DPDK_VER: 23.11
     name: dpdk gcc
     outputs:
       dpdk_key: ${{ steps.gen_dpdk_key.outputs.key }}
diff --git a/controller/pinctrl.c b/controller/pinctrl.c
index 4992eab089..0d747dbf56 100644
--- a/controller/pinctrl.c
+++ b/controller/pinctrl.c
@@ -5473,10 +5473,14 @@  pinctrl_ip_mcast_handle_igmp(struct rconn *swconn,
     ovs_rwlock_wrlock(&ip_ms->ms->rwlock);
     switch (ntohs(ip_flow->tp_src)) {
     case IGMP_HOST_MEMBERSHIP_REPORT:
+        group_change =
+            mcast_snooping_add_group4(ip_ms->ms, ip4, IP_MCAST_VLAN,
+                                      port_key_data, MCAST_GROUP_IGMPV1);
+        break;
     case IGMPV2_HOST_MEMBERSHIP_REPORT:
         group_change =
             mcast_snooping_add_group4(ip_ms->ms, ip4, IP_MCAST_VLAN,
-                                      port_key_data);
+                                      port_key_data, MCAST_GROUP_IGMPV2);
         break;
     case IGMP_HOST_LEAVE_MESSAGE:
         group_change =
diff --git a/ovs b/ovs
index 4102674b3e..fe55ce37a7 160000
--- a/ovs
+++ b/ovs
@@ -1 +1 @@ 
-Subproject commit 4102674b3ecadb0e20e512cc661cddbbc4b3d1f6
+Subproject commit fe55ce37a7b090d09dee5c01ae0797320ad678f6