Lines Matching refs:flow

261 	struct sw_flow *flow;  in ovs_dp_process_packet()  local
270 flow = ovs_flow_tbl_lookup_stats(&dp->table, key, &n_mask_hit); in ovs_dp_process_packet()
271 if (unlikely(!flow)) { in ovs_dp_process_packet()
288 ovs_flow_stats_update(flow, key->tp.flags, skb); in ovs_dp_process_packet()
289 sf_acts = rcu_dereference(flow->sf_acts); in ovs_dp_process_packet()
516 struct sw_flow *flow; in ovs_packet_cmd_execute() local
551 flow = ovs_flow_alloc(); in ovs_packet_cmd_execute()
552 err = PTR_ERR(flow); in ovs_packet_cmd_execute()
553 if (IS_ERR(flow)) in ovs_packet_cmd_execute()
557 &flow->key, log); in ovs_packet_cmd_execute()
562 &flow->key, &acts, log); in ovs_packet_cmd_execute()
566 rcu_assign_pointer(flow->sf_acts, acts); in ovs_packet_cmd_execute()
568 packet->priority = flow->key.phy.priority; in ovs_packet_cmd_execute()
569 packet->mark = flow->key.phy.skb_mark; in ovs_packet_cmd_execute()
577 input_vport = ovs_vport_rcu(dp, flow->key.phy.in_port); in ovs_packet_cmd_execute()
585 sf_acts = rcu_dereference(flow->sf_acts); in ovs_packet_cmd_execute()
588 err = ovs_execute_actions(dp, packet, sf_acts, &flow->key); in ovs_packet_cmd_execute()
592 ovs_flow_free(flow, false); in ovs_packet_cmd_execute()
598 ovs_flow_free(flow, false); in ovs_packet_cmd_execute()
708 static int ovs_flow_cmd_fill_stats(const struct sw_flow *flow, in ovs_flow_cmd_fill_stats() argument
715 ovs_flow_stats_get(flow, &stats, &used, &tcp_flags); in ovs_flow_cmd_fill_stats()
733 static int ovs_flow_cmd_fill_actions(const struct sw_flow *flow, in ovs_flow_cmd_fill_actions() argument
753 sf_acts = rcu_dereference_ovsl(flow->sf_acts); in ovs_flow_cmd_fill_actions()
773 static int ovs_flow_cmd_fill_info(const struct sw_flow *flow, int dp_ifindex, in ovs_flow_cmd_fill_info() argument
788 err = ovs_nla_put_identifier(flow, skb); in ovs_flow_cmd_fill_info()
792 if (should_fill_key(&flow->id, ufid_flags)) { in ovs_flow_cmd_fill_info()
793 err = ovs_nla_put_masked_key(flow, skb); in ovs_flow_cmd_fill_info()
799 err = ovs_nla_put_mask(flow, skb); in ovs_flow_cmd_fill_info()
804 err = ovs_flow_cmd_fill_stats(flow, skb); in ovs_flow_cmd_fill_info()
809 err = ovs_flow_cmd_fill_actions(flow, skb, skb_orig_len); in ovs_flow_cmd_fill_info()
844 static struct sk_buff *ovs_flow_cmd_build_info(const struct sw_flow *flow, in ovs_flow_cmd_build_info() argument
852 skb = ovs_flow_cmd_alloc_info(ovsl_dereference(flow->sf_acts), in ovs_flow_cmd_build_info()
853 &flow->id, info, always, ufid_flags); in ovs_flow_cmd_build_info()
857 retval = ovs_flow_cmd_fill_info(flow, dp_ifindex, skb, in ovs_flow_cmd_build_info()
868 struct sw_flow *flow = NULL, *new_flow; in ovs_flow_cmd_new() local
938 flow = ovs_flow_tbl_lookup_ufid(&dp->table, &new_flow->id); in ovs_flow_cmd_new()
939 if (!flow) in ovs_flow_cmd_new()
940 flow = ovs_flow_tbl_lookup(&dp->table, &key); in ovs_flow_cmd_new()
941 if (likely(!flow)) { in ovs_flow_cmd_new()
978 if (unlikely(!ovs_flow_cmp(flow, &match))) { in ovs_flow_cmd_new()
979 if (ovs_identifier_is_key(&flow->id)) in ovs_flow_cmd_new()
980 flow = ovs_flow_tbl_lookup_exact(&dp->table, in ovs_flow_cmd_new()
983 flow = NULL; in ovs_flow_cmd_new()
984 if (!flow) { in ovs_flow_cmd_new()
990 old_acts = ovsl_dereference(flow->sf_acts); in ovs_flow_cmd_new()
991 rcu_assign_pointer(flow->sf_acts, acts); in ovs_flow_cmd_new()
994 error = ovs_flow_cmd_fill_info(flow, in ovs_flow_cmd_new()
1049 struct sw_flow *flow; in ovs_flow_cmd_set() local
1101 flow = ovs_flow_tbl_lookup_ufid(&dp->table, &sfid); in ovs_flow_cmd_set()
1103 flow = ovs_flow_tbl_lookup_exact(&dp->table, &match); in ovs_flow_cmd_set()
1104 if (unlikely(!flow)) { in ovs_flow_cmd_set()
1111 old_acts = ovsl_dereference(flow->sf_acts); in ovs_flow_cmd_set()
1112 rcu_assign_pointer(flow->sf_acts, acts); in ovs_flow_cmd_set()
1115 error = ovs_flow_cmd_fill_info(flow, in ovs_flow_cmd_set()
1125 reply = ovs_flow_cmd_build_info(flow, ovs_header->dp_ifindex, in ovs_flow_cmd_set()
1137 ovs_flow_stats_clear(flow); in ovs_flow_cmd_set()
1162 struct sw_flow *flow; in ovs_flow_cmd_get() local
1192 flow = ovs_flow_tbl_lookup_ufid(&dp->table, &ufid); in ovs_flow_cmd_get()
1194 flow = ovs_flow_tbl_lookup_exact(&dp->table, &match); in ovs_flow_cmd_get()
1195 if (!flow) { in ovs_flow_cmd_get()
1200 reply = ovs_flow_cmd_build_info(flow, ovs_header->dp_ifindex, info, in ovs_flow_cmd_get()
1220 struct sw_flow *flow = NULL; in ovs_flow_cmd_del() local
1251 flow = ovs_flow_tbl_lookup_ufid(&dp->table, &ufid); in ovs_flow_cmd_del()
1253 flow = ovs_flow_tbl_lookup_exact(&dp->table, &match); in ovs_flow_cmd_del()
1254 if (unlikely(!flow)) { in ovs_flow_cmd_del()
1259 ovs_flow_tbl_remove(&dp->table, flow); in ovs_flow_cmd_del()
1262 reply = ovs_flow_cmd_alloc_info((const struct sw_flow_actions __force *) flow->sf_acts, in ovs_flow_cmd_del()
1263 &flow->id, info, false, ufid_flags); in ovs_flow_cmd_del()
1267 err = ovs_flow_cmd_fill_info(flow, ovs_header->dp_ifindex, in ovs_flow_cmd_del()
1281 ovs_flow_free(flow, true); in ovs_flow_cmd_del()
1312 struct sw_flow *flow; in ovs_flow_cmd_dump() local
1317 flow = ovs_flow_tbl_dump_next(ti, &bucket, &obj); in ovs_flow_cmd_dump()
1318 if (!flow) in ovs_flow_cmd_dump()
1321 if (ovs_flow_cmd_fill_info(flow, ovs_header->dp_ifindex, skb, in ovs_flow_cmd_dump()