mirror of
https://github.com/torvalds/linux.git
synced 2024-12-11 05:33:09 +00:00
{net, RDMA}/mlx5: Rename encap to reformat packet
Renames all encap mlx5_{core,ib} code to use the new naming of packet reformat. This change doesn't introduce any function change and is needed to properly reflect the operation being done by this action. For example not only can we encapsulate a packet, but also decapsulate it. Signed-off-by: Mark Bloch <markb@mellanox.com> Reviewed-by: Saeed Mahameed <saeedm@mellanox.com> Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
This commit is contained in:
parent
e0e7a3861b
commit
60786f0987
@ -284,7 +284,7 @@ static bool devx_is_obj_create_cmd(const void *in)
|
||||
case MLX5_CMD_OP_CREATE_FLOW_TABLE:
|
||||
case MLX5_CMD_OP_CREATE_FLOW_GROUP:
|
||||
case MLX5_CMD_OP_ALLOC_FLOW_COUNTER:
|
||||
case MLX5_CMD_OP_ALLOC_ENCAP_HEADER:
|
||||
case MLX5_CMD_OP_ALLOC_PACKET_REFORMAT_CONTEXT:
|
||||
case MLX5_CMD_OP_ALLOC_MODIFY_HEADER_CONTEXT:
|
||||
case MLX5_CMD_OP_CREATE_SCHEDULING_ELEMENT:
|
||||
case MLX5_CMD_OP_ADD_VXLAN_UDP_DPORT:
|
||||
@ -627,9 +627,9 @@ static void devx_obj_build_destroy_cmd(void *in, void *out, void *din,
|
||||
MLX5_SET(general_obj_in_cmd_hdr, din, opcode,
|
||||
MLX5_CMD_OP_DEALLOC_FLOW_COUNTER);
|
||||
break;
|
||||
case MLX5_CMD_OP_ALLOC_ENCAP_HEADER:
|
||||
case MLX5_CMD_OP_ALLOC_PACKET_REFORMAT_CONTEXT:
|
||||
MLX5_SET(general_obj_in_cmd_hdr, din, opcode,
|
||||
MLX5_CMD_OP_DEALLOC_ENCAP_HEADER);
|
||||
MLX5_CMD_OP_DEALLOC_PACKET_REFORMAT_CONTEXT);
|
||||
break;
|
||||
case MLX5_CMD_OP_ALLOC_MODIFY_HEADER_CONTEXT:
|
||||
MLX5_SET(general_obj_in_cmd_hdr, din, opcode,
|
||||
|
@ -308,7 +308,7 @@ static int mlx5_internal_err_ret_value(struct mlx5_core_dev *dev, u16 op,
|
||||
case MLX5_CMD_OP_MODIFY_FLOW_TABLE:
|
||||
case MLX5_CMD_OP_SET_FLOW_TABLE_ENTRY:
|
||||
case MLX5_CMD_OP_SET_FLOW_TABLE_ROOT:
|
||||
case MLX5_CMD_OP_DEALLOC_ENCAP_HEADER:
|
||||
case MLX5_CMD_OP_DEALLOC_PACKET_REFORMAT_CONTEXT:
|
||||
case MLX5_CMD_OP_DEALLOC_MODIFY_HEADER_CONTEXT:
|
||||
case MLX5_CMD_OP_FPGA_DESTROY_QP:
|
||||
case MLX5_CMD_OP_DESTROY_GENERAL_OBJECT:
|
||||
@ -427,7 +427,7 @@ static int mlx5_internal_err_ret_value(struct mlx5_core_dev *dev, u16 op,
|
||||
case MLX5_CMD_OP_QUERY_FLOW_TABLE_ENTRY:
|
||||
case MLX5_CMD_OP_ALLOC_FLOW_COUNTER:
|
||||
case MLX5_CMD_OP_QUERY_FLOW_COUNTER:
|
||||
case MLX5_CMD_OP_ALLOC_ENCAP_HEADER:
|
||||
case MLX5_CMD_OP_ALLOC_PACKET_REFORMAT_CONTEXT:
|
||||
case MLX5_CMD_OP_ALLOC_MODIFY_HEADER_CONTEXT:
|
||||
case MLX5_CMD_OP_FPGA_CREATE_QP:
|
||||
case MLX5_CMD_OP_FPGA_MODIFY_QP:
|
||||
@ -601,8 +601,8 @@ const char *mlx5_command_str(int command)
|
||||
MLX5_COMMAND_STR_CASE(DEALLOC_FLOW_COUNTER);
|
||||
MLX5_COMMAND_STR_CASE(QUERY_FLOW_COUNTER);
|
||||
MLX5_COMMAND_STR_CASE(MODIFY_FLOW_TABLE);
|
||||
MLX5_COMMAND_STR_CASE(ALLOC_ENCAP_HEADER);
|
||||
MLX5_COMMAND_STR_CASE(DEALLOC_ENCAP_HEADER);
|
||||
MLX5_COMMAND_STR_CASE(ALLOC_PACKET_REFORMAT_CONTEXT);
|
||||
MLX5_COMMAND_STR_CASE(DEALLOC_PACKET_REFORMAT_CONTEXT);
|
||||
MLX5_COMMAND_STR_CASE(ALLOC_MODIFY_HEADER_CONTEXT);
|
||||
MLX5_COMMAND_STR_CASE(DEALLOC_MODIFY_HEADER_CONTEXT);
|
||||
MLX5_COMMAND_STR_CASE(FPGA_CREATE_QP);
|
||||
|
@ -133,7 +133,7 @@ TRACE_EVENT(mlx5_fs_del_fg,
|
||||
{MLX5_FLOW_CONTEXT_ACTION_DROP, "DROP"},\
|
||||
{MLX5_FLOW_CONTEXT_ACTION_FWD_DEST, "FWD"},\
|
||||
{MLX5_FLOW_CONTEXT_ACTION_COUNT, "CNT"},\
|
||||
{MLX5_FLOW_CONTEXT_ACTION_ENCAP, "ENCAP"},\
|
||||
{MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT, "REFORMAT"},\
|
||||
{MLX5_FLOW_CONTEXT_ACTION_DECAP, "DECAP"},\
|
||||
{MLX5_FLOW_CONTEXT_ACTION_MOD_HDR, "MOD_HDR"},\
|
||||
{MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH, "VLAN_PUSH"},\
|
||||
|
@ -681,7 +681,7 @@ mlx5e_tc_add_nic_flow(struct mlx5e_priv *priv,
|
||||
.action = attr->action,
|
||||
.has_flow_tag = true,
|
||||
.flow_tag = attr->flow_tag,
|
||||
.encap_id = 0,
|
||||
.reformat_id = 0,
|
||||
};
|
||||
struct mlx5_fc *counter = NULL;
|
||||
struct mlx5_flow_handle *rule;
|
||||
@ -829,7 +829,7 @@ mlx5e_tc_add_fdb_flow(struct mlx5e_priv *priv,
|
||||
struct mlx5e_priv *out_priv;
|
||||
int err;
|
||||
|
||||
if (attr->action & MLX5_FLOW_CONTEXT_ACTION_ENCAP) {
|
||||
if (attr->action & MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT) {
|
||||
out_dev = __dev_get_by_index(dev_net(priv->netdev),
|
||||
attr->parse_attr->mirred_ifindex);
|
||||
err = mlx5e_attach_encap(priv, &parse_attr->tun_info,
|
||||
@ -885,7 +885,7 @@ err_add_rule:
|
||||
err_mod_hdr:
|
||||
mlx5_eswitch_del_vlan_action(esw, attr);
|
||||
err_add_vlan:
|
||||
if (attr->action & MLX5_FLOW_CONTEXT_ACTION_ENCAP)
|
||||
if (attr->action & MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT)
|
||||
mlx5e_detach_encap(priv, flow);
|
||||
err_attach_encap:
|
||||
return rule;
|
||||
@ -906,7 +906,7 @@ static void mlx5e_tc_del_fdb_flow(struct mlx5e_priv *priv,
|
||||
|
||||
mlx5_eswitch_del_vlan_action(esw, attr);
|
||||
|
||||
if (attr->action & MLX5_FLOW_CONTEXT_ACTION_ENCAP) {
|
||||
if (attr->action & MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT) {
|
||||
mlx5e_detach_encap(priv, flow);
|
||||
kvfree(attr->parse_attr);
|
||||
}
|
||||
@ -923,9 +923,9 @@ void mlx5e_tc_encap_flows_add(struct mlx5e_priv *priv,
|
||||
struct mlx5e_tc_flow *flow;
|
||||
int err;
|
||||
|
||||
err = mlx5_encap_alloc(priv->mdev, e->tunnel_type,
|
||||
e->encap_size, e->encap_header,
|
||||
&e->encap_id);
|
||||
err = mlx5_packet_reformat_alloc(priv->mdev, e->tunnel_type,
|
||||
e->encap_size, e->encap_header,
|
||||
&e->encap_id);
|
||||
if (err) {
|
||||
mlx5_core_warn(priv->mdev, "Failed to offload cached encapsulation header, %d\n",
|
||||
err);
|
||||
@ -979,7 +979,7 @@ void mlx5e_tc_encap_flows_del(struct mlx5e_priv *priv,
|
||||
|
||||
if (e->flags & MLX5_ENCAP_ENTRY_VALID) {
|
||||
e->flags &= ~MLX5_ENCAP_ENTRY_VALID;
|
||||
mlx5_encap_dealloc(priv->mdev, e->encap_id);
|
||||
mlx5_packet_reformat_dealloc(priv->mdev, e->encap_id);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1048,7 +1048,7 @@ static void mlx5e_detach_encap(struct mlx5e_priv *priv,
|
||||
mlx5e_rep_encap_entry_detach(netdev_priv(e->out_dev), e);
|
||||
|
||||
if (e->flags & MLX5_ENCAP_ENTRY_VALID)
|
||||
mlx5_encap_dealloc(priv->mdev, e->encap_id);
|
||||
mlx5_packet_reformat_dealloc(priv->mdev, e->encap_id);
|
||||
|
||||
hash_del_rcu(&e->encap_hlist);
|
||||
kfree(e->encap_header);
|
||||
@ -2323,7 +2323,7 @@ static int mlx5e_create_encap_header_ipv4(struct mlx5e_priv *priv,
|
||||
return -ENOMEM;
|
||||
|
||||
switch (e->tunnel_type) {
|
||||
case MLX5_HEADER_TYPE_VXLAN:
|
||||
case MLX5_REFORMAT_TYPE_L2_TO_VXLAN:
|
||||
fl4.flowi4_proto = IPPROTO_UDP;
|
||||
fl4.fl4_dport = tun_key->tp_dst;
|
||||
break;
|
||||
@ -2367,7 +2367,7 @@ static int mlx5e_create_encap_header_ipv4(struct mlx5e_priv *priv,
|
||||
read_unlock_bh(&n->lock);
|
||||
|
||||
switch (e->tunnel_type) {
|
||||
case MLX5_HEADER_TYPE_VXLAN:
|
||||
case MLX5_REFORMAT_TYPE_L2_TO_VXLAN:
|
||||
gen_vxlan_header_ipv4(out_dev, encap_header,
|
||||
ipv4_encap_size, e->h_dest, tos, ttl,
|
||||
fl4.daddr,
|
||||
@ -2387,8 +2387,9 @@ static int mlx5e_create_encap_header_ipv4(struct mlx5e_priv *priv,
|
||||
goto out;
|
||||
}
|
||||
|
||||
err = mlx5_encap_alloc(priv->mdev, e->tunnel_type,
|
||||
ipv4_encap_size, encap_header, &e->encap_id);
|
||||
err = mlx5_packet_reformat_alloc(priv->mdev, e->tunnel_type,
|
||||
ipv4_encap_size, encap_header,
|
||||
&e->encap_id);
|
||||
if (err)
|
||||
goto destroy_neigh_entry;
|
||||
|
||||
@ -2432,7 +2433,7 @@ static int mlx5e_create_encap_header_ipv6(struct mlx5e_priv *priv,
|
||||
return -ENOMEM;
|
||||
|
||||
switch (e->tunnel_type) {
|
||||
case MLX5_HEADER_TYPE_VXLAN:
|
||||
case MLX5_REFORMAT_TYPE_L2_TO_VXLAN:
|
||||
fl6.flowi6_proto = IPPROTO_UDP;
|
||||
fl6.fl6_dport = tun_key->tp_dst;
|
||||
break;
|
||||
@ -2476,7 +2477,7 @@ static int mlx5e_create_encap_header_ipv6(struct mlx5e_priv *priv,
|
||||
read_unlock_bh(&n->lock);
|
||||
|
||||
switch (e->tunnel_type) {
|
||||
case MLX5_HEADER_TYPE_VXLAN:
|
||||
case MLX5_REFORMAT_TYPE_L2_TO_VXLAN:
|
||||
gen_vxlan_header_ipv6(out_dev, encap_header,
|
||||
ipv6_encap_size, e->h_dest, tos, ttl,
|
||||
&fl6.daddr,
|
||||
@ -2497,8 +2498,9 @@ static int mlx5e_create_encap_header_ipv6(struct mlx5e_priv *priv,
|
||||
goto out;
|
||||
}
|
||||
|
||||
err = mlx5_encap_alloc(priv->mdev, e->tunnel_type,
|
||||
ipv6_encap_size, encap_header, &e->encap_id);
|
||||
err = mlx5_packet_reformat_alloc(priv->mdev, e->tunnel_type,
|
||||
ipv6_encap_size, encap_header,
|
||||
&e->encap_id);
|
||||
if (err)
|
||||
goto destroy_neigh_entry;
|
||||
|
||||
@ -2546,7 +2548,7 @@ vxlan_encap_offload_err:
|
||||
|
||||
if (mlx5_vxlan_lookup_port(priv->mdev->vxlan, be16_to_cpu(key->tp_dst)) &&
|
||||
MLX5_CAP_ESW(priv->mdev, vxlan_encap_decap)) {
|
||||
tunnel_type = MLX5_HEADER_TYPE_VXLAN;
|
||||
tunnel_type = MLX5_REFORMAT_TYPE_L2_TO_VXLAN;
|
||||
} else {
|
||||
netdev_warn(priv->netdev,
|
||||
"%d isn't an offloaded vxlan udp dport\n", be16_to_cpu(key->tp_dst));
|
||||
@ -2721,7 +2723,7 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv, struct tcf_exts *exts,
|
||||
parse_attr->mirred_ifindex = out_dev->ifindex;
|
||||
parse_attr->tun_info = *info;
|
||||
attr->parse_attr = parse_attr;
|
||||
action |= MLX5_FLOW_CONTEXT_ACTION_ENCAP |
|
||||
action |= MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT |
|
||||
MLX5_FLOW_CONTEXT_ACTION_FWD_DEST |
|
||||
MLX5_FLOW_CONTEXT_ACTION_COUNT;
|
||||
/* attr->out_rep is resolved when we handle encap */
|
||||
@ -2867,7 +2869,8 @@ int mlx5e_configure_flower(struct mlx5e_priv *priv,
|
||||
flow->flags |= MLX5E_TC_FLOW_OFFLOADED;
|
||||
|
||||
if (!(flow->flags & MLX5E_TC_FLOW_ESWITCH) ||
|
||||
!(flow->esw_attr->action & MLX5_FLOW_CONTEXT_ACTION_ENCAP))
|
||||
!(flow->esw_attr->action &
|
||||
MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT))
|
||||
kvfree(parse_attr);
|
||||
|
||||
err = rhashtable_insert_fast(tc_ht, &flow->node, tc_ht_params);
|
||||
|
@ -1746,7 +1746,7 @@ int mlx5_eswitch_init(struct mlx5_core_dev *dev)
|
||||
esw->enabled_vports = 0;
|
||||
esw->mode = SRIOV_NONE;
|
||||
esw->offloads.inline_mode = MLX5_INLINE_MODE_NONE;
|
||||
if (MLX5_CAP_ESW_FLOWTABLE_FDB(dev, encap) &&
|
||||
if (MLX5_CAP_ESW_FLOWTABLE_FDB(dev, reformat) &&
|
||||
MLX5_CAP_ESW_FLOWTABLE_FDB(dev, decap))
|
||||
esw->offloads.encap = DEVLINK_ESWITCH_ENCAP_MODE_BASIC;
|
||||
else
|
||||
|
@ -127,8 +127,8 @@ mlx5_eswitch_add_offloaded_rule(struct mlx5_eswitch *esw,
|
||||
if (flow_act.action & MLX5_FLOW_CONTEXT_ACTION_MOD_HDR)
|
||||
flow_act.modify_id = attr->mod_hdr_id;
|
||||
|
||||
if (flow_act.action & MLX5_FLOW_CONTEXT_ACTION_ENCAP)
|
||||
flow_act.encap_id = attr->encap_id;
|
||||
if (flow_act.action & MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT)
|
||||
flow_act.reformat_id = attr->encap_id;
|
||||
|
||||
rule = mlx5_add_flow_rules(ft, spec, &flow_act, dest, i);
|
||||
if (IS_ERR(rule))
|
||||
@ -529,7 +529,7 @@ static int esw_create_offloads_fast_fdb_table(struct mlx5_eswitch *esw)
|
||||
esw_size >>= 1;
|
||||
|
||||
if (esw->offloads.encap != DEVLINK_ESWITCH_ENCAP_MODE_NONE)
|
||||
flags |= (MLX5_FLOW_TABLE_TUNNEL_EN_ENCAP |
|
||||
flags |= (MLX5_FLOW_TABLE_TUNNEL_EN_REFORMAT |
|
||||
MLX5_FLOW_TABLE_TUNNEL_EN_DECAP);
|
||||
|
||||
fdb = mlx5_create_auto_grouped_flow_table(root_ns, FDB_FAST_PATH,
|
||||
@ -1245,7 +1245,7 @@ int mlx5_devlink_eswitch_encap_mode_set(struct devlink *devlink, u8 encap)
|
||||
return err;
|
||||
|
||||
if (encap != DEVLINK_ESWITCH_ENCAP_MODE_NONE &&
|
||||
(!MLX5_CAP_ESW_FLOWTABLE_FDB(dev, encap) ||
|
||||
(!MLX5_CAP_ESW_FLOWTABLE_FDB(dev, reformat) ||
|
||||
!MLX5_CAP_ESW_FLOWTABLE_FDB(dev, decap)))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
|
@ -152,7 +152,7 @@ static int mlx5_cmd_create_flow_table(struct mlx5_core_dev *dev,
|
||||
struct mlx5_flow_table *next_ft,
|
||||
unsigned int *table_id, u32 flags)
|
||||
{
|
||||
int en_encap = !!(flags & MLX5_FLOW_TABLE_TUNNEL_EN_ENCAP);
|
||||
int en_encap = !!(flags & MLX5_FLOW_TABLE_TUNNEL_EN_REFORMAT);
|
||||
int en_decap = !!(flags & MLX5_FLOW_TABLE_TUNNEL_EN_DECAP);
|
||||
u32 out[MLX5_ST_SZ_DW(create_flow_table_out)] = {0};
|
||||
u32 in[MLX5_ST_SZ_DW(create_flow_table_in)] = {0};
|
||||
@ -171,7 +171,7 @@ static int mlx5_cmd_create_flow_table(struct mlx5_core_dev *dev,
|
||||
|
||||
MLX5_SET(create_flow_table_in, in, flow_table_context.decap_en,
|
||||
en_decap);
|
||||
MLX5_SET(create_flow_table_in, in, flow_table_context.encap_en,
|
||||
MLX5_SET(create_flow_table_in, in, flow_table_context.reformat_en,
|
||||
en_encap);
|
||||
|
||||
switch (op_mod) {
|
||||
@ -344,7 +344,8 @@ static int mlx5_cmd_set_fte(struct mlx5_core_dev *dev,
|
||||
|
||||
MLX5_SET(flow_context, in_flow_context, flow_tag, fte->action.flow_tag);
|
||||
MLX5_SET(flow_context, in_flow_context, action, fte->action.action);
|
||||
MLX5_SET(flow_context, in_flow_context, encap_id, fte->action.encap_id);
|
||||
MLX5_SET(flow_context, in_flow_context, packet_reformat_id,
|
||||
fte->action.reformat_id);
|
||||
MLX5_SET(flow_context, in_flow_context, modify_header_id,
|
||||
fte->action.modify_id);
|
||||
|
||||
@ -595,16 +596,16 @@ void mlx5_cmd_fc_bulk_get(struct mlx5_core_dev *dev,
|
||||
*bytes = MLX5_GET64(traffic_counter, stats, octets);
|
||||
}
|
||||
|
||||
int mlx5_encap_alloc(struct mlx5_core_dev *dev,
|
||||
int header_type,
|
||||
size_t size,
|
||||
void *encap_header,
|
||||
u32 *encap_id)
|
||||
int mlx5_packet_reformat_alloc(struct mlx5_core_dev *dev,
|
||||
int reformat_type,
|
||||
size_t size,
|
||||
void *reformat_data,
|
||||
u32 *packet_reformat_id)
|
||||
{
|
||||
int max_encap_size = MLX5_CAP_ESW(dev, max_encap_header_size);
|
||||
u32 out[MLX5_ST_SZ_DW(alloc_encap_header_out)];
|
||||
void *encap_header_in;
|
||||
void *header;
|
||||
u32 out[MLX5_ST_SZ_DW(alloc_packet_reformat_context_out)];
|
||||
void *packet_reformat_context_in;
|
||||
void *reformat;
|
||||
int inlen;
|
||||
int err;
|
||||
u32 *in;
|
||||
@ -615,39 +616,47 @@ int mlx5_encap_alloc(struct mlx5_core_dev *dev,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
in = kzalloc(MLX5_ST_SZ_BYTES(alloc_encap_header_in) + size,
|
||||
in = kzalloc(MLX5_ST_SZ_BYTES(alloc_packet_reformat_context_in) + size,
|
||||
GFP_KERNEL);
|
||||
if (!in)
|
||||
return -ENOMEM;
|
||||
|
||||
encap_header_in = MLX5_ADDR_OF(alloc_encap_header_in, in, encap_header);
|
||||
header = MLX5_ADDR_OF(encap_header_in, encap_header_in, encap_header);
|
||||
inlen = header - (void *)in + size;
|
||||
packet_reformat_context_in = MLX5_ADDR_OF(alloc_packet_reformat_context_in,
|
||||
in, packet_reformat_context);
|
||||
reformat = MLX5_ADDR_OF(packet_reformat_context_in,
|
||||
packet_reformat_context_in,
|
||||
reformat_data);
|
||||
inlen = reformat - (void *)in + size;
|
||||
|
||||
memset(in, 0, inlen);
|
||||
MLX5_SET(alloc_encap_header_in, in, opcode,
|
||||
MLX5_CMD_OP_ALLOC_ENCAP_HEADER);
|
||||
MLX5_SET(encap_header_in, encap_header_in, encap_header_size, size);
|
||||
MLX5_SET(encap_header_in, encap_header_in, header_type, header_type);
|
||||
memcpy(header, encap_header, size);
|
||||
MLX5_SET(alloc_packet_reformat_context_in, in, opcode,
|
||||
MLX5_CMD_OP_ALLOC_PACKET_REFORMAT_CONTEXT);
|
||||
MLX5_SET(packet_reformat_context_in, packet_reformat_context_in,
|
||||
reformat_data_size, size);
|
||||
MLX5_SET(packet_reformat_context_in, packet_reformat_context_in,
|
||||
reformat_type, reformat_type);
|
||||
memcpy(reformat, reformat_data, size);
|
||||
|
||||
memset(out, 0, sizeof(out));
|
||||
err = mlx5_cmd_exec(dev, in, inlen, out, sizeof(out));
|
||||
|
||||
*encap_id = MLX5_GET(alloc_encap_header_out, out, encap_id);
|
||||
*packet_reformat_id = MLX5_GET(alloc_packet_reformat_context_out,
|
||||
out, packet_reformat_id);
|
||||
kfree(in);
|
||||
return err;
|
||||
}
|
||||
|
||||
void mlx5_encap_dealloc(struct mlx5_core_dev *dev, u32 encap_id)
|
||||
void mlx5_packet_reformat_dealloc(struct mlx5_core_dev *dev,
|
||||
u32 packet_reformat_id)
|
||||
{
|
||||
u32 in[MLX5_ST_SZ_DW(dealloc_encap_header_in)];
|
||||
u32 out[MLX5_ST_SZ_DW(dealloc_encap_header_out)];
|
||||
u32 in[MLX5_ST_SZ_DW(dealloc_packet_reformat_context_in)];
|
||||
u32 out[MLX5_ST_SZ_DW(dealloc_packet_reformat_context_out)];
|
||||
|
||||
memset(in, 0, sizeof(in));
|
||||
MLX5_SET(dealloc_encap_header_in, in, opcode,
|
||||
MLX5_CMD_OP_DEALLOC_ENCAP_HEADER);
|
||||
MLX5_SET(dealloc_encap_header_in, in, encap_id, encap_id);
|
||||
MLX5_SET(dealloc_packet_reformat_context_in, in, opcode,
|
||||
MLX5_CMD_OP_DEALLOC_PACKET_REFORMAT_CONTEXT);
|
||||
MLX5_SET(dealloc_packet_reformat_context_in, in, packet_reformat_id,
|
||||
packet_reformat_id);
|
||||
|
||||
mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
|
||||
}
|
||||
|
@ -1407,7 +1407,7 @@ static bool check_conflicting_actions(u32 action1, u32 action2)
|
||||
return false;
|
||||
|
||||
if (xored_actions & (MLX5_FLOW_CONTEXT_ACTION_DROP |
|
||||
MLX5_FLOW_CONTEXT_ACTION_ENCAP |
|
||||
MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT |
|
||||
MLX5_FLOW_CONTEXT_ACTION_DECAP |
|
||||
MLX5_FLOW_CONTEXT_ACTION_MOD_HDR |
|
||||
MLX5_FLOW_CONTEXT_ACTION_VLAN_POP |
|
||||
|
@ -169,12 +169,13 @@ struct mlx5_core_dev *mlx5_get_next_phys_dev(struct mlx5_core_dev *dev);
|
||||
void mlx5_dev_list_lock(void);
|
||||
void mlx5_dev_list_unlock(void);
|
||||
int mlx5_dev_list_trylock(void);
|
||||
int mlx5_encap_alloc(struct mlx5_core_dev *dev,
|
||||
int header_type,
|
||||
size_t size,
|
||||
void *encap_header,
|
||||
u32 *encap_id);
|
||||
void mlx5_encap_dealloc(struct mlx5_core_dev *dev, u32 encap_id);
|
||||
int mlx5_packet_reformat_alloc(struct mlx5_core_dev *dev,
|
||||
int reformat_type,
|
||||
size_t size,
|
||||
void *reformat_data,
|
||||
u32 *packet_reformat_id);
|
||||
void mlx5_packet_reformat_dealloc(struct mlx5_core_dev *dev,
|
||||
u32 packet_reformat_id);
|
||||
|
||||
bool mlx5_lag_intf_add(struct mlx5_interface *intf, struct mlx5_priv *priv);
|
||||
|
||||
|
@ -45,7 +45,7 @@ enum {
|
||||
};
|
||||
|
||||
enum {
|
||||
MLX5_FLOW_TABLE_TUNNEL_EN_ENCAP = BIT(0),
|
||||
MLX5_FLOW_TABLE_TUNNEL_EN_REFORMAT = BIT(0),
|
||||
MLX5_FLOW_TABLE_TUNNEL_EN_DECAP = BIT(1),
|
||||
};
|
||||
|
||||
@ -160,7 +160,7 @@ struct mlx5_flow_act {
|
||||
u32 action;
|
||||
bool has_flow_tag;
|
||||
u32 flow_tag;
|
||||
u32 encap_id;
|
||||
u32 reformat_id;
|
||||
u32 modify_id;
|
||||
uintptr_t esp_id;
|
||||
struct mlx5_fs_vlan vlan[MLX5_FS_VLAN_DEPTH];
|
||||
|
@ -243,8 +243,8 @@ enum {
|
||||
MLX5_CMD_OP_DEALLOC_FLOW_COUNTER = 0x93a,
|
||||
MLX5_CMD_OP_QUERY_FLOW_COUNTER = 0x93b,
|
||||
MLX5_CMD_OP_MODIFY_FLOW_TABLE = 0x93c,
|
||||
MLX5_CMD_OP_ALLOC_ENCAP_HEADER = 0x93d,
|
||||
MLX5_CMD_OP_DEALLOC_ENCAP_HEADER = 0x93e,
|
||||
MLX5_CMD_OP_ALLOC_PACKET_REFORMAT_CONTEXT = 0x93d,
|
||||
MLX5_CMD_OP_DEALLOC_PACKET_REFORMAT_CONTEXT = 0x93e,
|
||||
MLX5_CMD_OP_ALLOC_MODIFY_HEADER_CONTEXT = 0x940,
|
||||
MLX5_CMD_OP_DEALLOC_MODIFY_HEADER_CONTEXT = 0x941,
|
||||
MLX5_CMD_OP_QUERY_MODIFY_HEADER_CONTEXT = 0x942,
|
||||
@ -336,7 +336,7 @@ struct mlx5_ifc_flow_table_prop_layout_bits {
|
||||
u8 modify_root[0x1];
|
||||
u8 identified_miss_table_mode[0x1];
|
||||
u8 flow_table_modify[0x1];
|
||||
u8 encap[0x1];
|
||||
u8 reformat[0x1];
|
||||
u8 decap[0x1];
|
||||
u8 reserved_at_9[0x1];
|
||||
u8 pop_vlan[0x1];
|
||||
@ -599,7 +599,7 @@ struct mlx5_ifc_e_switch_cap_bits {
|
||||
u8 vxlan_encap_decap[0x1];
|
||||
u8 nvgre_encap_decap[0x1];
|
||||
u8 reserved_at_22[0x9];
|
||||
u8 log_max_encap_headers[0x5];
|
||||
u8 log_max_packet_reformat_context[0x5];
|
||||
u8 reserved_2b[0x6];
|
||||
u8 max_encap_header_size[0xa];
|
||||
|
||||
@ -2394,7 +2394,7 @@ enum {
|
||||
MLX5_FLOW_CONTEXT_ACTION_DROP = 0x2,
|
||||
MLX5_FLOW_CONTEXT_ACTION_FWD_DEST = 0x4,
|
||||
MLX5_FLOW_CONTEXT_ACTION_COUNT = 0x8,
|
||||
MLX5_FLOW_CONTEXT_ACTION_ENCAP = 0x10,
|
||||
MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT = 0x10,
|
||||
MLX5_FLOW_CONTEXT_ACTION_DECAP = 0x20,
|
||||
MLX5_FLOW_CONTEXT_ACTION_MOD_HDR = 0x40,
|
||||
MLX5_FLOW_CONTEXT_ACTION_VLAN_POP = 0x80,
|
||||
@ -2427,7 +2427,7 @@ struct mlx5_ifc_flow_context_bits {
|
||||
u8 reserved_at_a0[0x8];
|
||||
u8 flow_counter_list_size[0x18];
|
||||
|
||||
u8 encap_id[0x20];
|
||||
u8 packet_reformat_id[0x20];
|
||||
|
||||
u8 modify_header_id[0x20];
|
||||
|
||||
@ -4802,19 +4802,19 @@ struct mlx5_ifc_query_eq_in_bits {
|
||||
u8 reserved_at_60[0x20];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_encap_header_in_bits {
|
||||
struct mlx5_ifc_packet_reformat_context_in_bits {
|
||||
u8 reserved_at_0[0x5];
|
||||
u8 header_type[0x3];
|
||||
u8 reformat_type[0x3];
|
||||
u8 reserved_at_8[0xe];
|
||||
u8 encap_header_size[0xa];
|
||||
u8 reformat_data_size[0xa];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 encap_header[2][0x8];
|
||||
u8 reformat_data[2][0x8];
|
||||
|
||||
u8 more_encap_header[0][0x8];
|
||||
u8 more_reformat_data[0][0x8];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_query_encap_header_out_bits {
|
||||
struct mlx5_ifc_query_packet_reformat_context_out_bits {
|
||||
u8 status[0x8];
|
||||
u8 reserved_at_8[0x18];
|
||||
|
||||
@ -4822,38 +4822,38 @@ struct mlx5_ifc_query_encap_header_out_bits {
|
||||
|
||||
u8 reserved_at_40[0xa0];
|
||||
|
||||
struct mlx5_ifc_encap_header_in_bits encap_header[0];
|
||||
struct mlx5_ifc_packet_reformat_context_in_bits packet_reformat_context[0];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_query_encap_header_in_bits {
|
||||
struct mlx5_ifc_query_packet_reformat_context_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
|
||||
u8 encap_id[0x20];
|
||||
u8 packet_reformat_id[0x20];
|
||||
|
||||
u8 reserved_at_60[0xa0];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_alloc_encap_header_out_bits {
|
||||
struct mlx5_ifc_alloc_packet_reformat_context_out_bits {
|
||||
u8 status[0x8];
|
||||
u8 reserved_at_8[0x18];
|
||||
|
||||
u8 syndrome[0x20];
|
||||
|
||||
u8 encap_id[0x20];
|
||||
u8 packet_reformat_id[0x20];
|
||||
|
||||
u8 reserved_at_60[0x20];
|
||||
};
|
||||
|
||||
enum {
|
||||
MLX5_HEADER_TYPE_VXLAN = 0x0,
|
||||
MLX5_HEADER_TYPE_NVGRE = 0x1,
|
||||
MLX5_REFORMAT_TYPE_L2_TO_VXLAN = 0x0,
|
||||
MLX5_REFORMAT_TYPE_L2_TO_NVGRE = 0x1,
|
||||
};
|
||||
|
||||
struct mlx5_ifc_alloc_encap_header_in_bits {
|
||||
struct mlx5_ifc_alloc_packet_reformat_context_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
|
||||
@ -4862,10 +4862,10 @@ struct mlx5_ifc_alloc_encap_header_in_bits {
|
||||
|
||||
u8 reserved_at_40[0xa0];
|
||||
|
||||
struct mlx5_ifc_encap_header_in_bits encap_header;
|
||||
struct mlx5_ifc_packet_reformat_context_in_bits packet_reformat_context;
|
||||
};
|
||||
|
||||
struct mlx5_ifc_dealloc_encap_header_out_bits {
|
||||
struct mlx5_ifc_dealloc_packet_reformat_context_out_bits {
|
||||
u8 status[0x8];
|
||||
u8 reserved_at_8[0x18];
|
||||
|
||||
@ -4874,14 +4874,14 @@ struct mlx5_ifc_dealloc_encap_header_out_bits {
|
||||
u8 reserved_at_40[0x40];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_dealloc_encap_header_in_bits {
|
||||
struct mlx5_ifc_dealloc_packet_reformat_context_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
|
||||
u8 reserved_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
|
||||
u8 encap_id[0x20];
|
||||
u8 packet_reformat_id[0x20];
|
||||
|
||||
u8 reserved_60[0x20];
|
||||
};
|
||||
@ -6983,7 +6983,7 @@ struct mlx5_ifc_create_flow_table_out_bits {
|
||||
};
|
||||
|
||||
struct mlx5_ifc_flow_table_context_bits {
|
||||
u8 encap_en[0x1];
|
||||
u8 reformat_en[0x1];
|
||||
u8 decap_en[0x1];
|
||||
u8 reserved_at_2[0x2];
|
||||
u8 table_miss_action[0x4];
|
||||
|
Loading…
Reference in New Issue
Block a user