Lines Matching full:spec

160 static void setup_fte_reg_a_with_tag(struct mlx5_flow_spec *spec,
162 static void setup_fte_reg_a_no_tag(struct mlx5_flow_spec *spec);
164 static void setup_fte_no_frags(struct mlx5_flow_spec *spec) in setup_fte_no_frags() argument
167 spec->match_criteria_enable |= MLX5_MATCH_OUTER_HEADERS; in setup_fte_no_frags()
169 MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria, outer_headers.frag); in setup_fte_no_frags()
170 MLX5_SET(fte_match_param, spec->match_value, outer_headers.frag, 0); in setup_fte_no_frags()
173 static void setup_fte_esp(struct mlx5_flow_spec *spec) in setup_fte_esp() argument
176 spec->match_criteria_enable |= MLX5_MATCH_OUTER_HEADERS; in setup_fte_esp()
178 MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria, outer_headers.ip_protocol); in setup_fte_esp()
179 MLX5_SET(fte_match_param, spec->match_value, outer_headers.ip_protocol, IPPROTO_ESP); in setup_fte_esp()
182 static void setup_fte_spi(struct mlx5_flow_spec *spec, u32 spi, bool encap) in setup_fte_spi() argument
185 spec->match_criteria_enable |= MLX5_MATCH_MISC_PARAMETERS; in setup_fte_spi()
188 MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria, misc_parameters.inner_esp_spi); in setup_fte_spi()
189 MLX5_SET(fte_match_param, spec->match_value, misc_parameters.inner_esp_spi, spi); in setup_fte_spi()
191 MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria, misc_parameters.outer_esp_spi); in setup_fte_spi()
192 MLX5_SET(fte_match_param, spec->match_value, misc_parameters.outer_esp_spi, spi); in setup_fte_spi()
197 setup_fte_vid(struct mlx5_flow_spec *spec, u16 vid) in setup_fte_vid() argument
200 spec->match_criteria_enable |= MLX5_MATCH_OUTER_HEADERS; in setup_fte_vid()
202 MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria, in setup_fte_vid()
204 MLX5_SET(fte_match_param, spec->match_value, in setup_fte_vid()
206 MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria, in setup_fte_vid()
208 MLX5_SET(fte_match_param, spec->match_value, outer_headers.first_vid, in setup_fte_vid()
213 clear_fte_vid(struct mlx5_flow_spec *spec) in clear_fte_vid() argument
215 MLX5_SET(fte_match_param, spec->match_criteria, in clear_fte_vid()
217 MLX5_SET(fte_match_param, spec->match_value, in clear_fte_vid()
219 MLX5_SET(fte_match_param, spec->match_criteria, in clear_fte_vid()
221 MLX5_SET(fte_match_param, spec->match_value, in clear_fte_vid()
226 setup_fte_no_vid(struct mlx5_flow_spec *spec) in setup_fte_no_vid() argument
228 MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria, in setup_fte_no_vid()
230 MLX5_SET(fte_match_param, spec->match_value, in setup_fte_no_vid()
309 struct mlx5_flow_spec *spec; in ipsec_miss_create() local
314 spec = kvzalloc(sizeof(*spec), GFP_KERNEL); in ipsec_miss_create()
315 if (!flow_group_in || !spec) { in ipsec_miss_create()
346 kvfree(spec); in ipsec_miss_create()
472 static void setup_fte_addr4(struct mlx5_flow_spec *spec, __be32 *saddr, in setup_fte_addr4() argument
475 spec->match_criteria_enable |= MLX5_MATCH_OUTER_HEADERS; in setup_fte_addr4()
477 MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria, outer_headers.ip_version); in setup_fte_addr4()
478 MLX5_SET(fte_match_param, spec->match_value, outer_headers.ip_version, 4); in setup_fte_addr4()
480 memcpy(MLX5_ADDR_OF(fte_match_param, spec->match_value, in setup_fte_addr4()
482 memcpy(MLX5_ADDR_OF(fte_match_param, spec->match_value, in setup_fte_addr4()
484 MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria, in setup_fte_addr4()
486 MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria, in setup_fte_addr4()
490 static void setup_fte_addr6(struct mlx5_flow_spec *spec, __be32 *saddr, in setup_fte_addr6() argument
493 spec->match_criteria_enable |= MLX5_MATCH_OUTER_HEADERS; in setup_fte_addr6()
495 MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria, outer_headers.ip_version); in setup_fte_addr6()
496 MLX5_SET(fte_match_param, spec->match_value, outer_headers.ip_version, 6); in setup_fte_addr6()
498 memcpy(MLX5_ADDR_OF(fte_match_param, spec->match_value, in setup_fte_addr6()
500 memcpy(MLX5_ADDR_OF(fte_match_param, spec->match_value, in setup_fte_addr6()
502 memset(MLX5_ADDR_OF(fte_match_param, spec->match_criteria, in setup_fte_addr6()
504 memset(MLX5_ADDR_OF(fte_match_param, spec->match_criteria, in setup_fte_addr6()
509 setup_fte_ip_version(struct mlx5_flow_spec *spec, u8 family) in setup_fte_ip_version() argument
511 spec->match_criteria_enable |= MLX5_MATCH_OUTER_HEADERS; in setup_fte_ip_version()
513 MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria, outer_headers.ip_version); in setup_fte_ip_version()
514 MLX5_SET(fte_match_param, spec->match_value, outer_headers.ip_version, in setup_fte_ip_version()
527 struct mlx5_flow_spec *spec; in rx_add_rule() local
534 spec = kvzalloc(sizeof(*spec), GFP_KERNEL); in rx_add_rule()
535 if (!spec) in rx_add_rule()
574 setup_fte_addr4(spec, &attrs->saddr.a4, &attrs->daddr.a4); in rx_add_rule()
576 setup_fte_addr6(spec, attrs->saddr.a6, attrs->daddr.a6); in rx_add_rule()
579 setup_fte_esp(spec); in rx_add_rule()
581 setup_fte_spi(spec, attrs->spi, attrs->encap); in rx_add_rule()
582 setup_fte_no_frags(spec); in rx_add_rule()
585 setup_fte_vid(spec, sa_entry->vid); in rx_add_rule()
587 setup_fte_no_vid(spec); in rx_add_rule()
589 rule = mlx5_add_flow_rules(rx->ft.sa, spec, &flow_act, dest, 2); in rx_add_rule()
599 clear_fte_vid(spec); in rx_add_rule()
600 setup_fte_vid(spec, 0); in rx_add_rule()
601 rule = mlx5_add_flow_rules(rx->ft.sa, spec, &flow_act, dest, 2); in rx_add_rule()
612 kvfree(spec); in rx_add_rule()
628 kvfree(spec); in rx_add_rule()
801 struct mlx5_flow_spec *spec; in tx_create_kspi_bypass_rules() local
804 spec = kvzalloc(sizeof(*spec), GFP_KERNEL); in tx_create_kspi_bypass_rules()
805 if (!spec) in tx_create_kspi_bypass_rules()
812 setup_fte_reg_a_with_tag(spec, IPSEC_ACCEL_DRV_SPI_BYPASS); in tx_create_kspi_bypass_rules()
813 rule = mlx5_add_flow_rules(tx->ft.sa_kspi, spec, &flow_act_kspi, in tx_create_kspi_bypass_rules()
825 memset(spec, 0, sizeof(*spec)); in tx_create_kspi_bypass_rules()
826 setup_fte_reg_a_no_tag(spec); in tx_create_kspi_bypass_rules()
827 rule = mlx5_add_flow_rules(tx->ft.sa_kspi, spec, &flow_act, &dest, 1); in tx_create_kspi_bypass_rules()
835 kvfree(spec); in tx_create_kspi_bypass_rules()
840 kvfree(spec); in tx_create_kspi_bypass_rules()
1039 static void setup_fte_reg_a_with_tag(struct mlx5_flow_spec *spec, in setup_fte_reg_a_with_tag() argument
1043 spec->match_criteria_enable |= MLX5_MATCH_MISC_PARAMETERS_2; in setup_fte_reg_a_with_tag()
1045 MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria, in setup_fte_reg_a_with_tag()
1047 MLX5_SET(fte_match_param, spec->match_value, in setup_fte_reg_a_with_tag()
1052 static void setup_fte_reg_a_no_tag(struct mlx5_flow_spec *spec) in setup_fte_reg_a_no_tag() argument
1055 spec->match_criteria_enable |= MLX5_MATCH_MISC_PARAMETERS_2; in setup_fte_reg_a_no_tag()
1057 MLX5_SET(fte_match_param, spec->match_criteria, in setup_fte_reg_a_no_tag()
1060 MLX5_SET(fte_match_param, spec->match_value, in setup_fte_reg_a_no_tag()
1065 static void setup_fte_reg_c0(struct mlx5_flow_spec *spec, u32 reqid) in setup_fte_reg_c0() argument
1068 spec->match_criteria_enable |= MLX5_MATCH_MISC_PARAMETERS_2; in setup_fte_reg_c0()
1070 MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria, in setup_fte_reg_c0()
1072 MLX5_SET(fte_match_param, spec->match_value, in setup_fte_reg_c0()
1076 static void setup_fte_upper_proto_match(struct mlx5_flow_spec *spec, struct upspec *upspec) in setup_fte_upper_proto_match() argument
1082 spec->match_criteria, udp_dport); in setup_fte_upper_proto_match()
1083 MLX5_SET(fte_match_set_lyr_2_4, spec->match_value, in setup_fte_upper_proto_match()
1089 spec->match_criteria, udp_sport); in setup_fte_upper_proto_match()
1090 MLX5_SET(fte_match_set_lyr_2_4, spec->match_value, in setup_fte_upper_proto_match()
1097 spec->match_criteria, tcp_dport); in setup_fte_upper_proto_match()
1098 MLX5_SET(fte_match_set_lyr_2_4, spec->match_value, in setup_fte_upper_proto_match()
1104 spec->match_criteria, tcp_sport); in setup_fte_upper_proto_match()
1105 MLX5_SET(fte_match_set_lyr_2_4, spec->match_value, in setup_fte_upper_proto_match()
1113 spec->match_criteria_enable |= MLX5_MATCH_OUTER_HEADERS; in setup_fte_upper_proto_match()
1114 MLX5_SET_TO_ONES(fte_match_set_lyr_2_4, spec->match_criteria, ip_protocol); in setup_fte_upper_proto_match()
1115 MLX5_SET(fte_match_set_lyr_2_4, spec->match_value, ip_protocol, upspec->proto); in setup_fte_upper_proto_match()
1127 struct mlx5_flow_spec *spec; in tx_add_kspi_rule() local
1130 spec = kvzalloc(sizeof(*spec), GFP_KERNEL); in tx_add_kspi_rule()
1131 if (!spec) in tx_add_kspi_rule()
1134 setup_fte_no_frags(spec); in tx_add_kspi_rule()
1135 setup_fte_reg_a_with_tag(spec, sa_entry->kspi); in tx_add_kspi_rule()
1137 rule = mlx5_add_flow_rules(tx->ft.sa_kspi, spec, flow_act, dest, num_dest); in tx_add_kspi_rule()
1144 kvfree(spec); in tx_add_kspi_rule()
1148 kvfree(spec); in tx_add_kspi_rule()
1162 struct mlx5_flow_spec *spec; in tx_add_reqid_ip_rules() local
1165 spec = kvzalloc(sizeof(*spec), GFP_KERNEL); in tx_add_reqid_ip_rules()
1166 if (!spec) in tx_add_reqid_ip_rules()
1172 setup_fte_no_frags(spec); in tx_add_reqid_ip_rules()
1173 setup_fte_reg_c0(spec, attrs->reqid); in tx_add_reqid_ip_rules()
1174 rule = mlx5_add_flow_rules(tx->ft.sa, spec, flow_act, dest, num_dest); in tx_add_reqid_ip_rules()
1181 memset(spec, 0, sizeof(*spec)); in tx_add_reqid_ip_rules()
1185 setup_fte_addr4(spec, &attrs->saddr.a4, &attrs->daddr.a4); in tx_add_reqid_ip_rules()
1187 setup_fte_addr6(spec, attrs->saddr.a6, attrs->daddr.a6); in tx_add_reqid_ip_rules()
1188 setup_fte_no_frags(spec); in tx_add_reqid_ip_rules()
1190 rule = mlx5_add_flow_rules(tx->ft.sa, spec, flow_act, dest, num_dest); in tx_add_reqid_ip_rules()
1197 kvfree(spec); in tx_add_reqid_ip_rules()
1203 kvfree(spec); in tx_add_reqid_ip_rules()
1283 struct mlx5_flow_spec *spec; in tx_add_policy() local
1291 spec = kvzalloc(sizeof(*spec), GFP_KERNEL); in tx_add_policy()
1292 if (!spec) { in tx_add_policy()
1298 setup_fte_addr4(spec, &attrs->saddr.a4, &attrs->daddr.a4); in tx_add_policy()
1300 setup_fte_addr6(spec, attrs->saddr.a6, attrs->daddr.a6); in tx_add_policy()
1302 setup_fte_no_frags(spec); in tx_add_policy()
1303 setup_fte_upper_proto_match(spec, &attrs->upspec); in tx_add_policy()
1329 rule = mlx5_add_flow_rules(ft, spec, &flow_act, dest, dstn); in tx_add_policy()
1336 kvfree(spec); in tx_add_policy()
1345 kvfree(spec); in tx_add_policy()
1359 struct mlx5_flow_spec *spec; in rx_add_policy() local
1369 spec = kvzalloc(sizeof(*spec), GFP_KERNEL); in rx_add_policy()
1370 if (!spec) { in rx_add_policy()
1396 setup_fte_addr4(spec, &attrs->saddr.a4, &attrs->daddr.a4); in rx_add_policy()
1398 setup_fte_addr6(spec, attrs->saddr.a6, attrs->daddr.a6); in rx_add_policy()
1400 setup_fte_no_frags(spec); in rx_add_policy()
1401 setup_fte_upper_proto_match(spec, &attrs->upspec); in rx_add_policy()
1403 setup_fte_vid(spec, attrs->vid); in rx_add_policy()
1405 setup_fte_no_vid(spec); in rx_add_policy()
1407 rule = mlx5_add_flow_rules(ft, spec, &flow_act, dest, dstn); in rx_add_policy()
1418 clear_fte_vid(spec); in rx_add_policy()
1419 setup_fte_vid(spec, 0); in rx_add_policy()
1420 rule = mlx5_add_flow_rules(ft, spec, &flow_act, dest, dstn); in rx_add_policy()
1431 kvfree(spec); in rx_add_policy()
1437 kvfree(spec); in rx_add_policy()
1534 struct mlx5_flow_spec *spec; in ipsec_status_rule() local
1537 spec = kvzalloc(sizeof(*spec), GFP_KERNEL); in ipsec_status_rule()
1538 if (!spec) in ipsec_status_rule()
1565 rule = mlx5_add_flow_rules(rx->ft.status, spec, &flow_act, dest, 2); in ipsec_status_rule()
1572 kvfree(spec); in ipsec_status_rule()
1580 kvfree(spec); in ipsec_status_rule()
1642 static void ipsec_roce_setup_udp_dport(struct mlx5_flow_spec *spec, u16 dport) in ipsec_roce_setup_udp_dport() argument
1644 spec->match_criteria_enable |= MLX5_MATCH_OUTER_HEADERS; in ipsec_roce_setup_udp_dport()
1645 MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria, outer_headers.ip_protocol); in ipsec_roce_setup_udp_dport()
1646 MLX5_SET(fte_match_param, spec->match_value, outer_headers.ip_protocol, IPPROTO_UDP); in ipsec_roce_setup_udp_dport()
1647 MLX5_SET_TO_ONES(fte_match_param, spec->match_criteria, outer_headers.udp_dport); in ipsec_roce_setup_udp_dport()
1648 MLX5_SET(fte_match_param, spec->match_value, outer_headers.udp_dport, dport); in ipsec_roce_setup_udp_dport()
1657 struct mlx5_flow_spec *spec; in ipsec_roce_rx_rule_setup() local
1660 spec = kvzalloc(sizeof(*spec), GFP_KERNEL); in ipsec_roce_rx_rule_setup()
1661 if (!spec) in ipsec_roce_rx_rule_setup()
1664 ipsec_roce_setup_udp_dport(spec, ROCE_V2_UDP_DPORT); in ipsec_roce_rx_rule_setup()
1671 rule = mlx5_add_flow_rules(roce->ft, spec, &flow_act, &dst, 1); in ipsec_roce_rx_rule_setup()
1691 kvfree(spec); in ipsec_roce_rx_rule_setup()
1697 kvfree(spec); in ipsec_roce_rx_rule_setup()
1869 struct mlx5_flow_spec *spec; in ipsec_fs_rx_ip_type_catchall_rules_create() local
1872 spec = kvzalloc(sizeof(*spec), GFP_KERNEL); in ipsec_fs_rx_ip_type_catchall_rules_create()
1873 if (!spec) { in ipsec_fs_rx_ip_type_catchall_rules_create()
1881 setup_fte_ip_version(spec, AF_INET); in ipsec_fs_rx_ip_type_catchall_rules_create()
1882 rule = mlx5_add_flow_rules(ipsec->rx_ip_type->ft, spec, &flow_act, &dst, 1); in ipsec_fs_rx_ip_type_catchall_rules_create()
1893 setup_fte_ip_version(spec, AF_INET6); in ipsec_fs_rx_ip_type_catchall_rules_create()
1894 rule = mlx5_add_flow_rules(ipsec->rx_ip_type->ft, spec, &flow_act, &dst, 1); in ipsec_fs_rx_ip_type_catchall_rules_create()
1918 kvfree(spec); in ipsec_fs_rx_ip_type_catchall_rules_create()