Lines Matching refs:flow

250 	struct sw_flow *flow;  in ovs_dp_process_packet()  local
262 flow = ovs_flow_tbl_lookup_stats(&dp->table, key, skb_get_hash(skb), in ovs_dp_process_packet()
264 if (unlikely(!flow)) { in ovs_dp_process_packet()
295 ovs_flow_stats_update(flow, key->tp.flags, skb); in ovs_dp_process_packet()
296 sf_acts = rcu_dereference(flow->sf_acts); in ovs_dp_process_packet()
617 struct sw_flow *flow; in ovs_packet_cmd_execute() local
660 flow = ovs_flow_alloc(); in ovs_packet_cmd_execute()
661 err = PTR_ERR(flow); in ovs_packet_cmd_execute()
662 if (IS_ERR(flow)) in ovs_packet_cmd_execute()
666 packet, &flow->key, log); in ovs_packet_cmd_execute()
671 &flow->key, &acts, log); in ovs_packet_cmd_execute()
675 rcu_assign_pointer(flow->sf_acts, acts); in ovs_packet_cmd_execute()
676 packet->priority = flow->key.phy.priority; in ovs_packet_cmd_execute()
677 packet->mark = flow->key.phy.skb_mark; in ovs_packet_cmd_execute()
685 input_vport = ovs_vport_rcu(dp, flow->key.phy.in_port); in ovs_packet_cmd_execute()
694 sf_acts = rcu_dereference(flow->sf_acts); in ovs_packet_cmd_execute()
700 err = ovs_execute_actions(dp, packet, sf_acts, &flow->key); in ovs_packet_cmd_execute()
707 ovs_flow_free(flow, false); in ovs_packet_cmd_execute()
713 ovs_flow_free(flow, false); in ovs_packet_cmd_execute()
833 static int ovs_flow_cmd_fill_stats(const struct sw_flow *flow, in ovs_flow_cmd_fill_stats() argument
840 ovs_flow_stats_get(flow, &stats, &used, &tcp_flags); in ovs_flow_cmd_fill_stats()
861 static int ovs_flow_cmd_fill_actions(const struct sw_flow *flow, in ovs_flow_cmd_fill_actions() argument
881 sf_acts = rcu_dereference_ovsl(flow->sf_acts); in ovs_flow_cmd_fill_actions()
901 static int ovs_flow_cmd_fill_info(const struct sw_flow *flow, int dp_ifindex, in ovs_flow_cmd_fill_info() argument
916 err = ovs_nla_put_identifier(flow, skb); in ovs_flow_cmd_fill_info()
920 if (should_fill_key(&flow->id, ufid_flags)) { in ovs_flow_cmd_fill_info()
921 err = ovs_nla_put_masked_key(flow, skb); in ovs_flow_cmd_fill_info()
927 err = ovs_nla_put_mask(flow, skb); in ovs_flow_cmd_fill_info()
932 err = ovs_flow_cmd_fill_stats(flow, skb); in ovs_flow_cmd_fill_info()
937 err = ovs_flow_cmd_fill_actions(flow, skb, skb_orig_len); in ovs_flow_cmd_fill_info()
972 static struct sk_buff *ovs_flow_cmd_build_info(const struct sw_flow *flow, in ovs_flow_cmd_build_info() argument
980 skb = ovs_flow_cmd_alloc_info(ovsl_dereference(flow->sf_acts), in ovs_flow_cmd_build_info()
981 &flow->id, info, always, ufid_flags); in ovs_flow_cmd_build_info()
985 retval = ovs_flow_cmd_fill_info(flow, dp_ifindex, skb, in ovs_flow_cmd_build_info()
1000 struct sw_flow *flow = NULL, *new_flow; in ovs_flow_cmd_new() local
1076 flow = ovs_flow_tbl_lookup_ufid(&dp->table, &new_flow->id); in ovs_flow_cmd_new()
1077 if (!flow) in ovs_flow_cmd_new()
1078 flow = ovs_flow_tbl_lookup(&dp->table, key); in ovs_flow_cmd_new()
1079 if (likely(!flow)) { in ovs_flow_cmd_new()
1116 if (unlikely(!ovs_flow_cmp(flow, &match))) { in ovs_flow_cmd_new()
1117 if (ovs_identifier_is_key(&flow->id)) in ovs_flow_cmd_new()
1118 flow = ovs_flow_tbl_lookup_exact(&dp->table, in ovs_flow_cmd_new()
1121 flow = NULL; in ovs_flow_cmd_new()
1122 if (!flow) { in ovs_flow_cmd_new()
1128 old_acts = ovsl_dereference(flow->sf_acts); in ovs_flow_cmd_new()
1129 rcu_assign_pointer(flow->sf_acts, acts); in ovs_flow_cmd_new()
1132 error = ovs_flow_cmd_fill_info(flow, in ovs_flow_cmd_new()
1248 struct sw_flow *flow; in ovs_flow_cmd_set() local
1289 flow = ovs_flow_tbl_lookup_ufid(&dp->table, &sfid); in ovs_flow_cmd_set()
1291 flow = ovs_flow_tbl_lookup_exact(&dp->table, &match); in ovs_flow_cmd_set()
1292 if (unlikely(!flow)) { in ovs_flow_cmd_set()
1299 old_acts = ovsl_dereference(flow->sf_acts); in ovs_flow_cmd_set()
1300 rcu_assign_pointer(flow->sf_acts, acts); in ovs_flow_cmd_set()
1303 error = ovs_flow_cmd_fill_info(flow, in ovs_flow_cmd_set()
1313 reply = ovs_flow_cmd_build_info(flow, ovs_header->dp_ifindex, in ovs_flow_cmd_set()
1325 ovs_flow_stats_clear(flow); in ovs_flow_cmd_set()
1351 struct sw_flow *flow; in ovs_flow_cmd_get() local
1381 flow = ovs_flow_tbl_lookup_ufid(&dp->table, &ufid); in ovs_flow_cmd_get()
1383 flow = ovs_flow_tbl_lookup_exact(&dp->table, &match); in ovs_flow_cmd_get()
1384 if (!flow) { in ovs_flow_cmd_get()
1389 reply = ovs_flow_cmd_build_info(flow, ovs_header->dp_ifindex, info, in ovs_flow_cmd_get()
1410 struct sw_flow *flow = NULL; in ovs_flow_cmd_del() local
1441 flow = ovs_flow_tbl_lookup_ufid(&dp->table, &ufid); in ovs_flow_cmd_del()
1443 flow = ovs_flow_tbl_lookup_exact(&dp->table, &match); in ovs_flow_cmd_del()
1444 if (unlikely(!flow)) { in ovs_flow_cmd_del()
1449 ovs_flow_tbl_remove(&dp->table, flow); in ovs_flow_cmd_del()
1452 reply = ovs_flow_cmd_alloc_info((const struct sw_flow_actions __force *) flow->sf_acts, in ovs_flow_cmd_del()
1453 &flow->id, info, false, ufid_flags); in ovs_flow_cmd_del()
1457 err = ovs_flow_cmd_fill_info(flow, ovs_header->dp_ifindex, in ovs_flow_cmd_del()
1476 ovs_flow_free(flow, true); in ovs_flow_cmd_del()
1507 struct sw_flow *flow; in ovs_flow_cmd_dump() local
1512 flow = ovs_flow_tbl_dump_next(ti, &bucket, &obj); in ovs_flow_cmd_dump()
1513 if (!flow) in ovs_flow_cmd_dump()
1516 if (ovs_flow_cmd_fill_info(flow, ovs_header->dp_ifindex, skb, in ovs_flow_cmd_dump()