Lines Matching refs:vport

11 				 const struct mlx5_vport *vport)
14 mlx5_eswitch_is_vf_vport(esw, vport->vport));
18 struct mlx5_vport *vport)
43 if (vport->ingress.offloads.modify_metadata_rule) {
45 flow_act.modify_hdr = vport->ingress.offloads.modify_metadata;
48 vport->ingress.allow_rule = mlx5_add_flow_rules(vport->ingress.acl, spec,
50 if (IS_ERR(vport->ingress.allow_rule)) {
51 err = PTR_ERR(vport->ingress.allow_rule);
53 "vport[%d] configure ingress untagged allow rule, err(%d)\n",
54 vport->vport, err);
55 vport->ingress.allow_rule = NULL;
63 struct mlx5_vport *vport)
70 key = mlx5_eswitch_get_vport_metadata_for_match(esw, vport->vport);
82 vport->ingress.offloads.modify_metadata =
85 if (IS_ERR(vport->ingress.offloads.modify_metadata)) {
86 err = PTR_ERR(vport->ingress.offloads.modify_metadata);
88 "failed to alloc modify header for vport %d ingress acl (%d)\n",
89 vport->vport, err);
94 flow_act.modify_hdr = vport->ingress.offloads.modify_metadata;
95 flow_act.fg = vport->ingress.offloads.metadata_allmatch_grp;
96 vport->ingress.offloads.modify_metadata_rule =
97 mlx5_add_flow_rules(vport->ingress.acl,
99 if (IS_ERR(vport->ingress.offloads.modify_metadata_rule)) {
100 err = PTR_ERR(vport->ingress.offloads.modify_metadata_rule);
102 "failed to add setting metadata rule for vport %d ingress acl, err(%d)\n",
103 vport->vport, err);
104 mlx5_modify_header_dealloc(esw->dev, vport->ingress.offloads.modify_metadata);
105 vport->ingress.offloads.modify_metadata_rule = NULL;
111 struct mlx5_vport *vport)
113 if (!vport->ingress.offloads.modify_metadata_rule)
116 mlx5_del_flow_rules(vport->ingress.offloads.modify_metadata_rule);
117 mlx5_modify_header_dealloc(esw->dev, vport->ingress.offloads.modify_metadata);
118 vport->ingress.offloads.modify_metadata_rule = NULL;
122 struct mlx5_vport *vport)
129 flow_act.fg = vport->ingress.offloads.drop_grp;
130 flow_rule = mlx5_add_flow_rules(vport->ingress.acl, NULL, &flow_act, NULL, 0);
136 vport->ingress.offloads.drop_rule = flow_rule;
142 struct mlx5_vport *vport)
144 if (!vport->ingress.offloads.drop_rule)
147 mlx5_del_flow_rules(vport->ingress.offloads.drop_rule);
148 vport->ingress.offloads.drop_rule = NULL;
152 struct mlx5_vport *vport)
157 err = esw_acl_ingress_mod_metadata_create(esw, vport);
160 "vport(%d) create ingress modify metadata, err(%d)\n",
161 vport->vport, err);
166 if (esw_acl_ingress_prio_tag_enabled(esw, vport)) {
167 err = esw_acl_ingress_prio_tag_create(esw, vport);
170 "vport(%d) create ingress prio tag rule, err(%d)\n",
171 vport->vport, err);
179 esw_acl_ingress_mod_metadata_destroy(esw, vport);
184 struct mlx5_vport *vport)
186 esw_acl_ingress_allow_rule_destroy(vport);
187 esw_acl_ingress_mod_metadata_destroy(esw, vport);
188 esw_acl_ingress_src_port_drop_destroy(esw, vport);
192 struct mlx5_vport *vport)
205 if (vport->vport == MLX5_VPORT_UPLINK) {
212 g = mlx5_create_flow_group(vport->ingress.acl, flow_group_in);
215 esw_warn(esw->dev, "vport[%d] ingress create drop flow group, err(%d)\n",
216 vport->vport, ret);
219 vport->ingress.offloads.drop_grp = g;
223 if (esw_acl_ingress_prio_tag_enabled(esw, vport)) {
236 g = mlx5_create_flow_group(vport->ingress.acl, flow_group_in);
239 esw_warn(esw->dev, "vport[%d] ingress create untagged flow group, err(%d)\n",
240 vport->vport, ret);
243 vport->ingress.offloads.metadata_prio_tag_grp = g;
256 g = mlx5_create_flow_group(vport->ingress.acl, flow_group_in);
259 esw_warn(esw->dev, "vport[%d] ingress create drop flow group, err(%d)\n",
260 vport->vport, ret);
263 vport->ingress.offloads.metadata_allmatch_grp = g;
270 if (!IS_ERR_OR_NULL(vport->ingress.offloads.metadata_prio_tag_grp)) {
271 mlx5_destroy_flow_group(vport->ingress.offloads.metadata_prio_tag_grp);
272 vport->ingress.offloads.metadata_prio_tag_grp = NULL;
275 if (!IS_ERR_OR_NULL(vport->ingress.offloads.drop_grp)) {
276 mlx5_destroy_flow_group(vport->ingress.offloads.drop_grp);
277 vport->ingress.offloads.drop_grp = NULL;
284 static void esw_acl_ingress_ofld_groups_destroy(struct mlx5_vport *vport)
286 if (vport->ingress.offloads.metadata_allmatch_grp) {
287 mlx5_destroy_flow_group(vport->ingress.offloads.metadata_allmatch_grp);
288 vport->ingress.offloads.metadata_allmatch_grp = NULL;
291 if (vport->ingress.offloads.metadata_prio_tag_grp) {
292 mlx5_destroy_flow_group(vport->ingress.offloads.metadata_prio_tag_grp);
293 vport->ingress.offloads.metadata_prio_tag_grp = NULL;
296 if (vport->ingress.offloads.drop_grp) {
297 mlx5_destroy_flow_group(vport->ingress.offloads.drop_grp);
298 vport->ingress.offloads.drop_grp = NULL;
303 struct mlx5_vport *vport)
309 !esw_acl_ingress_prio_tag_enabled(esw, vport))
312 esw_acl_ingress_allow_rule_destroy(vport);
316 if (vport->vport == MLX5_VPORT_UPLINK)
318 if (esw_acl_ingress_prio_tag_enabled(esw, vport))
321 vport->ingress.acl = esw_acl_table_create(esw, vport,
324 if (IS_ERR(vport->ingress.acl)) {
325 err = PTR_ERR(vport->ingress.acl);
326 vport->ingress.acl = NULL;
330 err = esw_acl_ingress_ofld_groups_create(esw, vport);
335 "vport[%d] configure ingress rules\n", vport->vport);
337 err = esw_acl_ingress_ofld_rules_create(esw, vport);
344 esw_acl_ingress_ofld_groups_destroy(vport);
346 esw_acl_ingress_table_destroy(vport);
351 struct mlx5_vport *vport)
353 esw_acl_ingress_ofld_rules_destroy(esw, vport);
354 esw_acl_ingress_ofld_groups_destroy(vport);
355 esw_acl_ingress_table_destroy(vport);
362 struct mlx5_vport *vport = mlx5_eswitch_get_vport(esw, vport_num);
365 if (WARN_ON_ONCE(IS_ERR(vport))) {
366 esw_warn(esw->dev, "vport(%d) invalid!\n", vport_num);
367 return PTR_ERR(vport);
370 esw_acl_ingress_ofld_rules_destroy(esw, vport);
372 vport->metadata = metadata ? metadata : vport->default_metadata;
374 /* Recreate ingress acl rules with vport->metadata */
375 err = esw_acl_ingress_ofld_rules_create(esw, vport);
382 vport->metadata = vport->default_metadata;
388 struct mlx5_vport *vport = mlx5_eswitch_get_vport(esw, vport_num);
390 if (IS_ERR(vport)) {
391 esw_warn(esw->dev, "vport(%d) invalid!\n", vport_num);
392 return PTR_ERR(vport);
395 return esw_acl_ingress_src_port_drop_create(esw, vport);
400 struct mlx5_vport *vport = mlx5_eswitch_get_vport(esw, vport_num);
402 if (WARN_ON_ONCE(IS_ERR(vport))) {
403 esw_warn(esw->dev, "vport(%d) invalid!\n", vport_num);
407 esw_acl_ingress_src_port_drop_destroy(esw, vport);