mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 23:52:08 +02:00
nfp: flower: refactor match functions to take flow_rule as input
This is a small cleanup to pass in flow->rule to some of the compile functions instead of extracting it every time. This is will also be useful for conntrack patches later. Signed-off-by: Louis Peens <louis.peens@corigine.com> Signed-off-by: Yinjun Zhang <yinjun.zhang@corigine.com> Signed-off-by: Simon Horman <simon.horman@corigine.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
16416d37f0
commit
4b15fb1876
|
|
@ -468,7 +468,7 @@ nfp_flower_compile_ipv6_gre_tun(struct nfp_flower_ipv6_gre_tun *ext,
|
|||
struct nfp_flower_ipv6_gre_tun *msk,
|
||||
struct flow_rule *rule);
|
||||
int nfp_flower_compile_flow_match(struct nfp_app *app,
|
||||
struct flow_cls_offload *flow,
|
||||
struct flow_rule *rule,
|
||||
struct nfp_fl_key_ls *key_ls,
|
||||
struct net_device *netdev,
|
||||
struct nfp_fl_payload *nfp_flow,
|
||||
|
|
@ -479,8 +479,7 @@ int nfp_flower_compile_action(struct nfp_app *app,
|
|||
struct net_device *netdev,
|
||||
struct nfp_fl_payload *nfp_flow,
|
||||
struct netlink_ext_ack *extack);
|
||||
int nfp_compile_flow_metadata(struct nfp_app *app,
|
||||
struct flow_cls_offload *flow,
|
||||
int nfp_compile_flow_metadata(struct nfp_app *app, u32 cookie,
|
||||
struct nfp_fl_payload *nfp_flow,
|
||||
struct net_device *netdev,
|
||||
struct netlink_ext_ack *extack);
|
||||
|
|
|
|||
|
|
@ -511,14 +511,13 @@ nfp_flower_compile_ipv6_gre_tun(struct nfp_flower_ipv6_gre_tun *ext,
|
|||
}
|
||||
|
||||
int nfp_flower_compile_flow_match(struct nfp_app *app,
|
||||
struct flow_cls_offload *flow,
|
||||
struct flow_rule *rule,
|
||||
struct nfp_fl_key_ls *key_ls,
|
||||
struct net_device *netdev,
|
||||
struct nfp_fl_payload *nfp_flow,
|
||||
enum nfp_flower_tun_type tun_type,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct flow_rule *rule = flow_cls_offload_flow_rule(flow);
|
||||
struct nfp_flower_priv *priv = app->priv;
|
||||
bool qinq_sup;
|
||||
u32 port_id;
|
||||
|
|
|
|||
|
|
@ -290,8 +290,7 @@ nfp_check_mask_remove(struct nfp_app *app, char *mask_data, u32 mask_len,
|
|||
return true;
|
||||
}
|
||||
|
||||
int nfp_compile_flow_metadata(struct nfp_app *app,
|
||||
struct flow_cls_offload *flow,
|
||||
int nfp_compile_flow_metadata(struct nfp_app *app, u32 cookie,
|
||||
struct nfp_fl_payload *nfp_flow,
|
||||
struct net_device *netdev,
|
||||
struct netlink_ext_ack *extack)
|
||||
|
|
@ -310,7 +309,7 @@ int nfp_compile_flow_metadata(struct nfp_app *app,
|
|||
}
|
||||
|
||||
nfp_flow->meta.host_ctx_id = cpu_to_be32(stats_cxt);
|
||||
nfp_flow->meta.host_cookie = cpu_to_be64(flow->cookie);
|
||||
nfp_flow->meta.host_cookie = cpu_to_be64(cookie);
|
||||
nfp_flow->ingress_dev = netdev;
|
||||
|
||||
ctx_entry = kzalloc(sizeof(*ctx_entry), GFP_KERNEL);
|
||||
|
|
@ -357,7 +356,7 @@ int nfp_compile_flow_metadata(struct nfp_app *app,
|
|||
priv->stats[stats_cxt].bytes = 0;
|
||||
priv->stats[stats_cxt].used = jiffies;
|
||||
|
||||
check_entry = nfp_flower_search_fl_table(app, flow->cookie, netdev);
|
||||
check_entry = nfp_flower_search_fl_table(app, cookie, netdev);
|
||||
if (check_entry) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "invalid entry: cannot offload duplicate flow entry");
|
||||
if (nfp_release_stats_entry(app, stats_cxt)) {
|
||||
|
|
|
|||
|
|
@ -134,20 +134,16 @@ nfp_flower_xmit_flow(struct nfp_app *app, struct nfp_fl_payload *nfp_flow,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static bool nfp_flower_check_higher_than_mac(struct flow_cls_offload *f)
|
||||
static bool nfp_flower_check_higher_than_mac(struct flow_rule *rule)
|
||||
{
|
||||
struct flow_rule *rule = flow_cls_offload_flow_rule(f);
|
||||
|
||||
return flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_IPV4_ADDRS) ||
|
||||
flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_IPV6_ADDRS) ||
|
||||
flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_PORTS) ||
|
||||
flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_ICMP);
|
||||
}
|
||||
|
||||
static bool nfp_flower_check_higher_than_l3(struct flow_cls_offload *f)
|
||||
static bool nfp_flower_check_higher_than_l3(struct flow_rule *rule)
|
||||
{
|
||||
struct flow_rule *rule = flow_cls_offload_flow_rule(f);
|
||||
|
||||
return flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_PORTS) ||
|
||||
flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_ICMP);
|
||||
}
|
||||
|
|
@ -240,11 +236,10 @@ static int
|
|||
nfp_flower_calculate_key_layers(struct nfp_app *app,
|
||||
struct net_device *netdev,
|
||||
struct nfp_fl_key_ls *ret_key_ls,
|
||||
struct flow_cls_offload *flow,
|
||||
struct flow_rule *rule,
|
||||
enum nfp_flower_tun_type *tun_type,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct flow_rule *rule = flow_cls_offload_flow_rule(flow);
|
||||
struct flow_dissector *dissector = rule->match.dissector;
|
||||
struct flow_match_basic basic = { NULL, NULL};
|
||||
struct nfp_flower_priv *priv = app->priv;
|
||||
|
|
@ -452,7 +447,7 @@ nfp_flower_calculate_key_layers(struct nfp_app *app,
|
|||
NL_SET_ERR_MSG_MOD(extack, "unsupported offload: match on given EtherType is not supported");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
} else if (nfp_flower_check_higher_than_mac(flow)) {
|
||||
} else if (nfp_flower_check_higher_than_mac(rule)) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "unsupported offload: cannot match above L2 without specified EtherType");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
|
@ -471,7 +466,7 @@ nfp_flower_calculate_key_layers(struct nfp_app *app,
|
|||
}
|
||||
|
||||
if (!(key_layer & NFP_FLOWER_LAYER_TP) &&
|
||||
nfp_flower_check_higher_than_l3(flow)) {
|
||||
nfp_flower_check_higher_than_l3(rule)) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "unsupported offload: cannot match on L4 information without specified IP protocol type");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
|
@ -1005,9 +1000,7 @@ int nfp_flower_merge_offloaded_flows(struct nfp_app *app,
|
|||
struct nfp_fl_payload *sub_flow1,
|
||||
struct nfp_fl_payload *sub_flow2)
|
||||
{
|
||||
struct flow_cls_offload merge_tc_off;
|
||||
struct nfp_flower_priv *priv = app->priv;
|
||||
struct netlink_ext_ack *extack = NULL;
|
||||
struct nfp_fl_payload *merge_flow;
|
||||
struct nfp_fl_key_ls merge_key_ls;
|
||||
struct nfp_merge_info *merge_info;
|
||||
|
|
@ -1016,7 +1009,6 @@ int nfp_flower_merge_offloaded_flows(struct nfp_app *app,
|
|||
|
||||
ASSERT_RTNL();
|
||||
|
||||
extack = merge_tc_off.common.extack;
|
||||
if (sub_flow1 == sub_flow2 ||
|
||||
nfp_flower_is_merge_flow(sub_flow1) ||
|
||||
nfp_flower_is_merge_flow(sub_flow2))
|
||||
|
|
@ -1061,9 +1053,8 @@ int nfp_flower_merge_offloaded_flows(struct nfp_app *app,
|
|||
if (err)
|
||||
goto err_unlink_sub_flow1;
|
||||
|
||||
merge_tc_off.cookie = merge_flow->tc_flower_cookie;
|
||||
err = nfp_compile_flow_metadata(app, &merge_tc_off, merge_flow,
|
||||
merge_flow->ingress_dev, extack);
|
||||
err = nfp_compile_flow_metadata(app, merge_flow->tc_flower_cookie, merge_flow,
|
||||
merge_flow->ingress_dev, NULL);
|
||||
if (err)
|
||||
goto err_unlink_sub_flow2;
|
||||
|
||||
|
|
@ -1305,6 +1296,7 @@ static int
|
|||
nfp_flower_add_offload(struct nfp_app *app, struct net_device *netdev,
|
||||
struct flow_cls_offload *flow)
|
||||
{
|
||||
struct flow_rule *rule = flow_cls_offload_flow_rule(flow);
|
||||
enum nfp_flower_tun_type tun_type = NFP_FL_TUNNEL_NONE;
|
||||
struct nfp_flower_priv *priv = app->priv;
|
||||
struct netlink_ext_ack *extack = NULL;
|
||||
|
|
@ -1330,7 +1322,7 @@ nfp_flower_add_offload(struct nfp_app *app, struct net_device *netdev,
|
|||
if (!key_layer)
|
||||
return -ENOMEM;
|
||||
|
||||
err = nfp_flower_calculate_key_layers(app, netdev, key_layer, flow,
|
||||
err = nfp_flower_calculate_key_layers(app, netdev, key_layer, rule,
|
||||
&tun_type, extack);
|
||||
if (err)
|
||||
goto err_free_key_ls;
|
||||
|
|
@ -1341,7 +1333,7 @@ nfp_flower_add_offload(struct nfp_app *app, struct net_device *netdev,
|
|||
goto err_free_key_ls;
|
||||
}
|
||||
|
||||
err = nfp_flower_compile_flow_match(app, flow, key_layer, netdev,
|
||||
err = nfp_flower_compile_flow_match(app, rule, key_layer, netdev,
|
||||
flow_pay, tun_type, extack);
|
||||
if (err)
|
||||
goto err_destroy_flow;
|
||||
|
|
@ -1356,7 +1348,7 @@ nfp_flower_add_offload(struct nfp_app *app, struct net_device *netdev,
|
|||
goto err_destroy_flow;
|
||||
}
|
||||
|
||||
err = nfp_compile_flow_metadata(app, flow, flow_pay, netdev, extack);
|
||||
err = nfp_compile_flow_metadata(app, flow->cookie, flow_pay, netdev, extack);
|
||||
if (err)
|
||||
goto err_destroy_flow;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user