mlx5dv_query_port(3)

πŸ’– NAME πŸ’–

okay so this is the manual page for mlx5dv_query_port(3), and it’s literally here to Query non standard attributes of IB device port. That’s the whole vibe check.

✨ SYNOPSIS ✨

#include <infiniband/mlx5dv.h>

int mlx5dv_query_port(struct ibv_context *context,
              uint32_t port_num,
              struct mlx5dv_port *info);

🌸 DESCRIPTION 🌸

Query port info which can be used for some device commands over the DEVX interface and when directly accessing the hardware resources.

A function that lets a user query hardware and configuration attributes associated with the port. iconic, honestly.

πŸŽ€ USAGE πŸŽ€

A user should provide the port number to query. On successful query flags will store a subset of the requested attributes which are supported/relevant for that port.

πŸ¦‹ ARGUMENTS πŸ¦‹

  • context β€” RDMA device context to work on.
  • port_num β€” Port number to query.

πŸ’Ύ info πŸ’Ύ

Stores the returned attributes from the kernel.

struct mlx5dv_port {
    uint64_t flags;
    uint16_t vport;
    uint16_t vport_vhca_id;
    uint16_t esw_owner_vhca_id;
    uint16_t rsvd0;
    uint64_t vport_steering_icm_rx;
    uint64_t vport_steering_icm_tx;
    struct mlx5dv_reg reg_c0;
};
  • flags β€” Bit field of attributes; on successful query flags stores the valid filled attributes.
    • MLX5DV_QUERY_PORT_VPORT β€” The vport number of that port.
    • MLX5DV_QUERY_PORT_VPORT_VHCA_ID β€” The VHCA ID of vport_num.
    • MLX5DV_QUERY_PORT_ESW_OWNER_VHCA_ID β€” The E-Switch owner of vport_num.
    • MLX5DV_QUERY_PORT_VPORT_STEERING_ICM_RX β€” The ICM RX address when directing traffic.
    • MLX5DV_QUERY_PORT_VPORT_STEERING_ICM_TX β€” The ICM TX address when directing traffic.
    • MLX5DV_QUERY_PORT_VPORT_REG_C0 β€” Register C0 value used to identify egress of vport_num.
  • vport β€” The VPORT number of that port.
  • vport_vhca_id β€” The VHCA ID of vport_num.
  • rsvd0 β€” A reserved field. Not to be used. do not touch, bestie.
  • esw_owner_vhca_id β€” The E-Switch owner of vport_num.
  • vport_steering_ica_rx β€” The ICM RX address when directing traffic.
  • vport_steering_icm_tx β€” The ICM TX address when directing traffic.

🧚 reg_c0 🧚

Register C0 value used to identify traffic of vport_num.

struct mlx5dv_reg {
        uint32_t value;
        uint32_t mask;
};
  • value β€” The value that should be used as match.
  • mask β€” The mask that should be used when matching.

πŸ’€ RETURN VALUE πŸ’€

returns 0 on success, or the value of errno on failure (which indicates the failure reason).

πŸ”₯ EXAMPLE πŸ”₯

for (i = 1; i <= ports; i++) {
    ret = mlx5dv_query_port(context, i, &port_info);
    if (ret) {
        printf("Error querying port %d\n", i);
        break;
    }

    printf("Port: %d:\n", i);

    if (port_info.flags & MLX5DV_QUERY_PORT_VPORT)
        printf("\tvport_num: 0x%x\n", port_info.vport_num);

    if (port_info.flags & MLX5DV_QUERY_PORT_VPORT_REG_C0)
        printf("\treg_c0: val: 0x%x mask: 0x%x\n",
                port_info.reg_c0.value,
                port_info.reg_c0.mask);
}

Author credit, because we stan: Mark Bloch <mbloch@nvidia.com>.

okay bestie, that’s the whole page β€” footer sign-off: mlx5dv_query_port(3), and since the page doesn’t list a separate date or source/version line, that’s the cute end, periodt πŸ’…πŸ’–

πŸ“¦ where this page comes from