Lines Matching refs:flow
260 struct sw_flow *flow; in ovs_dp_process_packet() local
269 flow = ovs_flow_tbl_lookup_stats(&dp->table, key, &n_mask_hit); in ovs_dp_process_packet()
270 if (unlikely(!flow)) { in ovs_dp_process_packet()
287 ovs_flow_stats_update(flow, key->tp.flags, skb); in ovs_dp_process_packet()
288 sf_acts = rcu_dereference(flow->sf_acts); in ovs_dp_process_packet()
550 struct sw_flow *flow; in ovs_packet_cmd_execute() local
593 flow = ovs_flow_alloc(); in ovs_packet_cmd_execute()
594 err = PTR_ERR(flow); in ovs_packet_cmd_execute()
595 if (IS_ERR(flow)) in ovs_packet_cmd_execute()
599 packet, &flow->key, log); in ovs_packet_cmd_execute()
604 &flow->key, &acts, log); in ovs_packet_cmd_execute()
608 rcu_assign_pointer(flow->sf_acts, acts); in ovs_packet_cmd_execute()
609 packet->priority = flow->key.phy.priority; in ovs_packet_cmd_execute()
610 packet->mark = flow->key.phy.skb_mark; in ovs_packet_cmd_execute()
618 input_vport = ovs_vport_rcu(dp, flow->key.phy.in_port); in ovs_packet_cmd_execute()
627 sf_acts = rcu_dereference(flow->sf_acts); in ovs_packet_cmd_execute()
630 err = ovs_execute_actions(dp, packet, sf_acts, &flow->key); in ovs_packet_cmd_execute()
634 ovs_flow_free(flow, false); in ovs_packet_cmd_execute()
640 ovs_flow_free(flow, false); in ovs_packet_cmd_execute()
751 static int ovs_flow_cmd_fill_stats(const struct sw_flow *flow, in ovs_flow_cmd_fill_stats() argument
758 ovs_flow_stats_get(flow, &stats, &used, &tcp_flags); in ovs_flow_cmd_fill_stats()
776 static int ovs_flow_cmd_fill_actions(const struct sw_flow *flow, in ovs_flow_cmd_fill_actions() argument
796 sf_acts = rcu_dereference_ovsl(flow->sf_acts); in ovs_flow_cmd_fill_actions()
816 static int ovs_flow_cmd_fill_info(const struct sw_flow *flow, int dp_ifindex, in ovs_flow_cmd_fill_info() argument
831 err = ovs_nla_put_identifier(flow, skb); in ovs_flow_cmd_fill_info()
835 if (should_fill_key(&flow->id, ufid_flags)) { in ovs_flow_cmd_fill_info()
836 err = ovs_nla_put_masked_key(flow, skb); in ovs_flow_cmd_fill_info()
842 err = ovs_nla_put_mask(flow, skb); in ovs_flow_cmd_fill_info()
847 err = ovs_flow_cmd_fill_stats(flow, skb); in ovs_flow_cmd_fill_info()
852 err = ovs_flow_cmd_fill_actions(flow, skb, skb_orig_len); in ovs_flow_cmd_fill_info()
887 static struct sk_buff *ovs_flow_cmd_build_info(const struct sw_flow *flow, in ovs_flow_cmd_build_info() argument
895 skb = ovs_flow_cmd_alloc_info(ovsl_dereference(flow->sf_acts), in ovs_flow_cmd_build_info()
896 &flow->id, info, always, ufid_flags); in ovs_flow_cmd_build_info()
900 retval = ovs_flow_cmd_fill_info(flow, dp_ifindex, skb, in ovs_flow_cmd_build_info()
912 struct sw_flow *flow = NULL, *new_flow; in ovs_flow_cmd_new() local
982 flow = ovs_flow_tbl_lookup_ufid(&dp->table, &new_flow->id); in ovs_flow_cmd_new()
983 if (!flow) in ovs_flow_cmd_new()
984 flow = ovs_flow_tbl_lookup(&dp->table, &key); in ovs_flow_cmd_new()
985 if (likely(!flow)) { in ovs_flow_cmd_new()
1022 if (unlikely(!ovs_flow_cmp(flow, &match))) { in ovs_flow_cmd_new()
1023 if (ovs_identifier_is_key(&flow->id)) in ovs_flow_cmd_new()
1024 flow = ovs_flow_tbl_lookup_exact(&dp->table, in ovs_flow_cmd_new()
1027 flow = NULL; in ovs_flow_cmd_new()
1028 if (!flow) { in ovs_flow_cmd_new()
1034 old_acts = ovsl_dereference(flow->sf_acts); in ovs_flow_cmd_new()
1035 rcu_assign_pointer(flow->sf_acts, acts); in ovs_flow_cmd_new()
1038 error = ovs_flow_cmd_fill_info(flow, in ovs_flow_cmd_new()
1095 struct sw_flow *flow; in ovs_flow_cmd_set() local
1147 flow = ovs_flow_tbl_lookup_ufid(&dp->table, &sfid); in ovs_flow_cmd_set()
1149 flow = ovs_flow_tbl_lookup_exact(&dp->table, &match); in ovs_flow_cmd_set()
1150 if (unlikely(!flow)) { in ovs_flow_cmd_set()
1157 old_acts = ovsl_dereference(flow->sf_acts); in ovs_flow_cmd_set()
1158 rcu_assign_pointer(flow->sf_acts, acts); in ovs_flow_cmd_set()
1161 error = ovs_flow_cmd_fill_info(flow, in ovs_flow_cmd_set()
1171 reply = ovs_flow_cmd_build_info(flow, ovs_header->dp_ifindex, in ovs_flow_cmd_set()
1183 ovs_flow_stats_clear(flow); in ovs_flow_cmd_set()
1209 struct sw_flow *flow; in ovs_flow_cmd_get() local
1239 flow = ovs_flow_tbl_lookup_ufid(&dp->table, &ufid); in ovs_flow_cmd_get()
1241 flow = ovs_flow_tbl_lookup_exact(&dp->table, &match); in ovs_flow_cmd_get()
1242 if (!flow) { in ovs_flow_cmd_get()
1247 reply = ovs_flow_cmd_build_info(flow, ovs_header->dp_ifindex, info, in ovs_flow_cmd_get()
1268 struct sw_flow *flow = NULL; in ovs_flow_cmd_del() local
1299 flow = ovs_flow_tbl_lookup_ufid(&dp->table, &ufid); in ovs_flow_cmd_del()
1301 flow = ovs_flow_tbl_lookup_exact(&dp->table, &match); in ovs_flow_cmd_del()
1302 if (unlikely(!flow)) { in ovs_flow_cmd_del()
1307 ovs_flow_tbl_remove(&dp->table, flow); in ovs_flow_cmd_del()
1310 reply = ovs_flow_cmd_alloc_info((const struct sw_flow_actions __force *) flow->sf_acts, in ovs_flow_cmd_del()
1311 &flow->id, info, false, ufid_flags); in ovs_flow_cmd_del()
1315 err = ovs_flow_cmd_fill_info(flow, ovs_header->dp_ifindex, in ovs_flow_cmd_del()
1329 ovs_flow_free(flow, true); in ovs_flow_cmd_del()
1360 struct sw_flow *flow; in ovs_flow_cmd_dump() local
1365 flow = ovs_flow_tbl_dump_next(ti, &bucket, &obj); in ovs_flow_cmd_dump()
1366 if (!flow) in ovs_flow_cmd_dump()
1369 if (ovs_flow_cmd_fill_info(flow, ovs_header->dp_ifindex, skb, in ovs_flow_cmd_dump()