/linux/tools/testing/selftests/tc-testing/tc-tests/filters/ |
H A D | flow.json | 4 "name": "Add flow filter with map key and ops", 7 "flow" 15 …"cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 protocol ip flow map key ds… 17 "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 protocol ip prio 1 flow", 18 …"matchPattern": "filter parent ffff: protocol ip pref 1 flow chain [0-9]+ handle 0x1 map keys dst … 26 "name": "Add flow filter with map key or ops", 29 "flow" 37 …"cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 protocol ip flow map key ds… 39 "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 protocol ip prio 1 flow", 40 …"matchPattern": "filter parent ffff: protocol ip pref 1 flow chain [0-9]+ handle 0x1 map keys dst.… [all …]
|
/linux/drivers/net/wireless/broadcom/brcm80211/brcmfmac/ |
H A D | flowring.c | 43 brcmf_flowring_is_tdls_mac(struct brcmf_flowring *flow, u8 mac[ETH_ALEN]) in brcmf_flowring_is_tdls_mac() argument 47 search = flow->tdls_entry; in brcmf_flowring_is_tdls_mac() 59 u32 brcmf_flowring_lookup(struct brcmf_flowring *flow, u8 da[ETH_ALEN], in brcmf_flowring_lookup() argument 71 sta = (flow->addr_mode[ifidx] == ADDR_INDIRECT); in brcmf_flowring_lookup() 77 if ((sta) && (flow->tdls_active) && in brcmf_flowring_lookup() 78 (brcmf_flowring_is_tdls_mac(flow, da))) { in brcmf_flowring_lookup() 85 hash = flow->hash; in brcmf_flowring_lookup() 103 u32 brcmf_flowring_create(struct brcmf_flowring *flow, u8 da[ETH_ALEN], in brcmf_flowring_create() argument 116 sta = (flow->addr_mode[ifidx] == ADDR_INDIRECT); in brcmf_flowring_create() 122 if ((sta) && (flow->tdls_active) && in brcmf_flowring_create() [all …]
|
H A D | flowring.h | 50 u32 brcmf_flowring_lookup(struct brcmf_flowring *flow, u8 da[ETH_ALEN], 52 u32 brcmf_flowring_create(struct brcmf_flowring *flow, u8 da[ETH_ALEN], 54 void brcmf_flowring_delete(struct brcmf_flowring *flow, u16 flowid); 55 void brcmf_flowring_open(struct brcmf_flowring *flow, u16 flowid); 56 u8 brcmf_flowring_tid(struct brcmf_flowring *flow, u16 flowid); 57 u32 brcmf_flowring_enqueue(struct brcmf_flowring *flow, u16 flowid, 59 struct sk_buff *brcmf_flowring_dequeue(struct brcmf_flowring *flow, u16 flowid); 60 void brcmf_flowring_reinsert(struct brcmf_flowring *flow, u16 flowid, 62 u32 brcmf_flowring_qlen(struct brcmf_flowring *flow, u16 flowid); 63 u8 brcmf_flowring_ifidx_get(struct brcmf_flowring *flow, u16 flowid); [all …]
|
/linux/drivers/net/phy/mscc/ |
H A D | mscc_macsec.c | 371 struct macsec_flow *flow) in vsc8584_macsec_flow() argument 374 enum macsec_bank bank = flow->bank; in vsc8584_macsec_flow() 375 u32 val, match = 0, mask = 0, action = 0, idx = flow->index; in vsc8584_macsec_flow() 377 if (flow->match.tagged) in vsc8584_macsec_flow() 379 if (flow->match.untagged) in vsc8584_macsec_flow() 382 if (bank == MACSEC_INGR && flow->assoc_num >= 0) { in vsc8584_macsec_flow() 383 match |= MSCC_MS_SAM_MISC_MATCH_AN(flow->assoc_num); in vsc8584_macsec_flow() 387 if (bank == MACSEC_INGR && flow->match.sci && flow->rx_sa->sc->sci) { in vsc8584_macsec_flow() 388 u64 sci = (__force u64)flow->rx_sa->sc->sci; in vsc8584_macsec_flow() 400 if (flow->match.etype) { in vsc8584_macsec_flow() [all …]
|
/linux/include/net/ |
H A D | fq_impl.h | 16 __fq_adjust_removal(struct fq *fq, struct fq_flow *flow, unsigned int packets, in __fq_adjust_removal() argument 19 struct fq_tin *tin = flow->tin; in __fq_adjust_removal() 24 flow->backlog -= bytes; in __fq_adjust_removal() 28 if (flow->backlog) in __fq_adjust_removal() 31 if (flow == &tin->default_flow) { in __fq_adjust_removal() 36 idx = flow - fq->flows; in __fq_adjust_removal() 41 struct fq_flow *flow, in fq_adjust_removal() argument 44 __fq_adjust_removal(fq, flow, 1, skb->len, skb->truesize); in fq_adjust_removal() 48 struct fq_flow *flow) in fq_flow_dequeue() argument 54 skb = __skb_dequeue(&flow->queue); in fq_flow_dequeue() [all …]
|
/linux/drivers/gpu/ipu-v3/ |
H A D | ipu-dp.c | 46 u32 flow; member 64 struct ipu_flow flow[IPUV3_NUM_FLOWS]; member 82 struct ipu_flow *flow = to_flow(dp); in ipu_dp_set_global_alpha() local 83 struct ipu_dp_priv *priv = flow->priv; in ipu_dp_set_global_alpha() 88 reg = readl(flow->base + DP_COM_CONF); in ipu_dp_set_global_alpha() 93 writel(reg, flow->base + DP_COM_CONF); in ipu_dp_set_global_alpha() 96 reg = readl(flow->base + DP_GRAPH_WIND_CTRL) & 0x00FFFFFFL; in ipu_dp_set_global_alpha() 98 flow->base + DP_GRAPH_WIND_CTRL); in ipu_dp_set_global_alpha() 100 reg = readl(flow->base + DP_COM_CONF); in ipu_dp_set_global_alpha() 101 writel(reg | DP_COM_CONF_GWAM, flow->base + DP_COM_CONF); in ipu_dp_set_global_alpha() [all …]
|
/linux/Documentation/networking/ |
H A D | openvswitch.rst | 8 flow-level packet processing on selected network devices. It can be 10 VLAN processing, network access control, flow-based network control, 15 within a bridge). Each datapath also has associated with it a "flow 22 extracting its flow key and looking it up in the flow table. If there 23 is a matching flow, it executes the associated actions. If there is 25 its processing, userspace will likely set up a flow to handle further 29 Flow key compatibility 35 versions to parse additional protocols as part of the flow key. It 39 applications to work with any version of the flow key, past or future. 43 flow key that it parsed from the packet. Userspace then extracts its [all …]
|
H A D | scaling.rst | 19 - RFS: Receive Flow Steering 20 - Accelerated Receive Flow Steering 31 of logical flows. Packets for each flow are steered to a separate receive 51 both directions of the flow to land on the same Rx queue (and CPU). The 143 RX flow hash indirection table for eth0 with 13 RX ring(s): 149 RX flow hash indirection table for eth0 with 13 RX ring(s): 157 # ethtool -N eth0 flow-type tcp6 dst-port 22 context 1 188 flow hash over the packet’s addresses or ports (2-tuple or 4-tuple hash 190 associated flow of the packet. The hash is either provided by hardware 195 packet’s flow. [all …]
|
/linux/drivers/net/ethernet/broadcom/bnxt/ |
H A D | bnxt_tc.c | 44 /* Return the dst fid of the func for flow forwarding 370 struct bnxt_tc_flow *flow) in bnxt_tc_parse_flow() argument 391 flow->l2_key.ether_type = match.key->n_proto; in bnxt_tc_parse_flow() 392 flow->l2_mask.ether_type = match.mask->n_proto; in bnxt_tc_parse_flow() 396 flow->l4_key.ip_proto = match.key->ip_proto; in bnxt_tc_parse_flow() 397 flow->l4_mask.ip_proto = match.mask->ip_proto; in bnxt_tc_parse_flow() 405 flow->flags |= BNXT_TC_FLOW_FLAGS_ETH_ADDRS; in bnxt_tc_parse_flow() 406 ether_addr_copy(flow->l2_key.dmac, match.key->dst); in bnxt_tc_parse_flow() 407 ether_addr_copy(flow->l2_mask.dmac, match.mask->dst); in bnxt_tc_parse_flow() 408 ether_addr_copy(flow->l2_key.smac, match.key->src); in bnxt_tc_parse_flow() [all …]
|
/linux/drivers/net/ethernet/mellanox/mlx5/core/en/ |
H A D | tc_priv.h | 92 /* Flow can be associated with multiple encap IDs. 99 struct list_head peer[MLX5_MAX_PORTS]; /* flows with peer flow */ 104 struct net_device *orig_dev; /* netdev adding flow first */ 106 struct list_head tmp_list; /* temporary flow list used by neigh update */ 131 struct mlx5e_tc_flow *flow, 136 mlx5e_tc_get_encap_attr(struct mlx5e_tc_flow *flow); 138 void mlx5e_tc_unoffload_flow_post_acts(struct mlx5e_tc_flow *flow); 139 int mlx5e_tc_offload_flow_post_acts(struct mlx5e_tc_flow *flow); 141 bool mlx5e_is_eswitch_flow(struct mlx5e_tc_flow *flow); 142 bool mlx5e_is_ft_flow(struct mlx5e_tc_flow *flow); [all …]
|
H A D | tc_tun_encap.c | 83 int mlx5e_tc_set_attr_rx_tun(struct mlx5e_tc_flow *flow, in mlx5e_tc_set_attr_rx_tun() argument 86 struct mlx5_esw_flow_attr *esw_attr = flow->attr->esw_attr; in mlx5e_tc_set_attr_rx_tun() 126 flow_flag_set(flow, TUN_RX); in mlx5e_tc_set_attr_rx_tun() 127 flow->attr->tun_ip_version = ip_version; in mlx5e_tc_set_attr_rx_tun() 136 /* Flow can be associated with multiple encap entries. in mlx5e_tc_flow_all_encaps_valid() 137 * Before offloading the flow verify that all of them have in mlx5e_tc_flow_all_encaps_valid() 162 struct mlx5e_tc_flow *flow; in mlx5e_tc_encap_flows_add() local 183 list_for_each_entry(flow, flow_list, tmp_list) { in mlx5e_tc_encap_flows_add() 184 if (!mlx5e_is_offloaded_flow(flow) || !flow_flag_test(flow, SLOW)) in mlx5e_tc_encap_flows_add() 187 spec = &flow->attr->parse_attr->spec; in mlx5e_tc_encap_flows_add() [all …]
|
/linux/net/openvswitch/ |
H A D | flow_table.c | 6 #include "flow.h" 74 struct sw_flow *flow; in ovs_flow_alloc() local 77 flow = kmem_cache_zalloc(flow_cache, GFP_KERNEL); in ovs_flow_alloc() 78 if (!flow) in ovs_flow_alloc() 81 flow->stats_last_writer = -1; in ovs_flow_alloc() 82 flow->cpu_used_mask = (struct cpumask *)&flow->stats[nr_cpu_ids]; in ovs_flow_alloc() 93 RCU_INIT_POINTER(flow->stats[0], stats); in ovs_flow_alloc() 95 cpumask_set_cpu(0, flow->cpu_used_mask); in ovs_flow_alloc() 97 return flow; in ovs_flow_alloc() 99 kmem_cache_free(flow_cache, flow); in ovs_flow_alloc() [all …]
|
/linux/net/netfilter/ |
H A D | nf_flow_table_offload.c | 24 struct flow_offload *flow; member 224 const struct flow_offload *flow, in flow_offload_eth_src() argument 236 this_tuple = &flow->tuplehash[dir].tuple; in flow_offload_eth_src() 243 other_tuple = &flow->tuplehash[!dir].tuple; in flow_offload_eth_src() 271 const struct flow_offload *flow, in flow_offload_eth_dst() argument 286 this_tuple = &flow->tuplehash[dir].tuple; in flow_offload_eth_dst() 293 other_tuple = &flow->tuplehash[!dir].tuple; in flow_offload_eth_dst() 328 const struct flow_offload *flow, in flow_offload_ipv4_snat() argument 339 addr = flow->tuplehash[FLOW_OFFLOAD_DIR_REPLY].tuple.dst_v4.s_addr; in flow_offload_ipv4_snat() 343 addr = flow->tuplehash[FLOW_OFFLOAD_DIR_ORIGINAL].tuple.src_v4.s_addr; in flow_offload_ipv4_snat() [all …]
|
H A D | nf_flow_table_ip.c | 22 static int nf_flow_state_check(struct flow_offload *flow, int proto, in nf_flow_state_check() argument 31 if (tcph->syn && test_bit(NF_FLOW_CLOSING, &flow->flags)) { in nf_flow_state_check() 32 flow_offload_teardown(flow); in nf_flow_state_check() 37 !test_bit(NF_FLOW_CLOSING, &flow->flags)) in nf_flow_state_check() 38 set_bit(NF_FLOW_CLOSING, &flow->flags); in nf_flow_state_check() 80 static void nf_flow_snat_ip(const struct flow_offload *flow, in nf_flow_snat_ip() argument 89 new_addr = flow->tuplehash[FLOW_OFFLOAD_DIR_REPLY].tuple.dst_v4.s_addr; in nf_flow_snat_ip() 94 new_addr = flow->tuplehash[FLOW_OFFLOAD_DIR_ORIGINAL].tuple.src_v4.s_addr; in nf_flow_snat_ip() 103 static void nf_flow_dnat_ip(const struct flow_offload *flow, in nf_flow_dnat_ip() argument 112 new_addr = flow->tuplehash[FLOW_OFFLOAD_DIR_REPLY].tuple.src_v4.s_addr; in nf_flow_dnat_ip() [all …]
|
H A D | nf_tables_offload.c | 12 struct nft_flow_rule *flow; in nft_flow_rule_alloc() local 14 flow = kzalloc(sizeof(struct nft_flow_rule), GFP_KERNEL); in nft_flow_rule_alloc() 15 if (!flow) in nft_flow_rule_alloc() 18 flow->rule = flow_rule_alloc(num_actions); in nft_flow_rule_alloc() 19 if (!flow->rule) { in nft_flow_rule_alloc() 20 kfree(flow); in nft_flow_rule_alloc() 24 flow->rule->match.dissector = &flow->match.dissector; in nft_flow_rule_alloc() 25 flow->rule->match.mask = &flow->match.mask; in nft_flow_rule_alloc() 26 flow->rule->match.key = &flow->match.key; in nft_flow_rule_alloc() 28 return flow; in nft_flow_rule_alloc() [all …]
|
/linux/drivers/infiniband/hw/hfi1/ |
H A D | tid_rdma.c | 37 /* Maximum number of packets within a flow generation. */ 134 struct tid_rdma_flow *flow, 439 /* Flow and tid waiter functions */ 529 * This should be done after the hardware flow and 698 /* Flow functions */ 700 * kern_reserve_flow - allocate a hardware flow 702 * @last: the index of the preferred flow. Use RXE_NUM_TID_FLOWS to 706 * flow for use in receiving KDETH data packets. If a preferred flow is 707 * specified the function will attempt to reserve that flow again, if 721 /* Attempt to reserve the preferred flow index */ in kern_reserve_flow() [all …]
|
/linux/drivers/net/ethernet/netronome/nfp/flower/ |
H A D | conntrack.h | 38 * struct nfp_fl_ct_zone_entry - Zone entry containing conntrack flow information 109 /* NFP flow entry flags. */ 114 * struct nfp_fl_ct_flow_entry - Flow entry containing conntrack flow information 115 * @cookie: Flow cookie, same as original TC flow, used as key 117 * @chain_index: Chain index of the original flow 118 * @goto_chain_index: goto chain index of the flow 121 * @children: List of tc_merge flows this flow forms part of 122 * @rule: Reference to the original TC flow rule 127 * @flags: Used to indicate flow flag like NAT which used by merge. 149 * @cookie: Flow cookie, combination of pre and post ct cookies [all …]
|
H A D | offload.c | 589 nfp_flower_update_merge_with_actions(struct nfp_fl_payload *flow, in nfp_flower_update_merge_with_actions() argument 608 while (act_off < flow->meta.act_len) { in nfp_flower_update_merge_with_actions() 609 a = (struct nfp_fl_act_head *)&flow->action_data[act_off]; in nfp_flower_update_merge_with_actions() 705 nfp_flower_populate_merge_match(struct nfp_fl_payload *flow, in nfp_flower_populate_merge_match() argument 710 u8 *mask = flow->mask_data; in nfp_flower_populate_merge_match() 908 /* Copy any pre-actions to the start of merge flow action list. */ in nfp_flower_merge_action() 957 /* Flow link code should only be accessed under RTNL. */ 971 if (link->sub_flow.flow == sub_flow) { in nfp_flower_unlink_flows() 986 link->merge_flow.flow = merge_flow; in nfp_flower_link_flows() 988 link->sub_flow.flow = sub_flow; in nfp_flower_link_flows() [all …]
|
/linux/Documentation/bpf/ |
H A D | prog_flow_dissector.rst | 10 Flow dissector is a routine that parses metadata out of the packets. It's 11 used in the various places in the networking subsystem (RFS, flow hash, etc). 13 BPF flow dissector is an attempt to reimplement C-based flow dissector logic 20 BPF flow dissector programs operate on an ``__sk_buff``. However, only the 22 ``flow_keys`` is ``struct bpf_flow_keys`` and contains flow dissector input 31 Flow dissector BPF program should fill out the rest of the ``struct 41 In the VLAN-less case, this is what the initial state of the BPF flow 49 +-- flow dissector starts here 58 In case of VLAN, flow dissector can be called with the two different states. 67 +-- flow dissector starts here [all …]
|
/linux/drivers/net/ethernet/intel/ice/ |
H A D | ice_ethtool_fdir.c | 4 /* flow director ethtool support for ice */ 36 * flow type values 37 * @flow: filter type to be converted 39 * Returns the corresponding ethtool flow type. 41 static int ice_fltr_to_ethtool_flow(enum ice_fltr_ptype flow) in ice_fltr_to_ethtool_flow() argument 43 switch (flow) { in ice_fltr_to_ethtool_flow() 63 /* 0 is undefined ethtool flow */ in ice_fltr_to_ethtool_flow() 69 * ice_ethtool_flow_to_fltr - convert ethtool flow type to filter enum 70 * @eth: Ethtool flow type to be converted 72 * Returns flow enum [all …]
|
/linux/Documentation/core-api/ |
H A D | genericirq.rst | 52 optimize the flow of the interrupt handling for each specific interrupt 58 the flow control in the super-handler. This leads to a mix of flow logic 62 have different flow handling. 64 A more natural abstraction is the clean separation of the 'irq flow' and 68 reveals that most of them can use a generic set of 'irq flow' methods 71 IRQ flow itself but not in the chip details - and thus provides a more 74 Each interrupt descriptor is assigned its own high-level flow handler, 76 flow handler implementation also makes it simple to provide 82 IRQ-flow implementation for 'level type' interrupts and add a 104 2. High-level IRQ flow handlers [all …]
|
/linux/Documentation/hwmon/ |
H A D | aquacomputer_d5next.rst | 14 * Aquacomputer High Flow Next sensor 19 * Aquacomputer High Flow USB flow meter 20 * Aquacomputer MPS Flow devices 31 virtual temperature sensors, as well as two flow sensors. The fans expose their 48 The Octo exposes four physical and sixteen virtual temperature sensors, a flow sensor 50 and current. Flow sensor pulses are also available. 52 The Quadro exposes four physical and sixteen virtual temperature sensors, a flow 54 voltage and current. Flow sensor pulses are also available. 59 The High Flow Next exposes +5V voltages, water quality, conductivity and flow readings. 65 filled with coolant. Pump RPM and flow can be set to enhance on-device calculations, [all …]
|
/linux/samples/bpf/ |
H A D | sockex2_kern.c | 63 struct flow_key_record *flow) in parse_ip() argument 73 flow->src = load_word(skb, nhoff + offsetof(struct iphdr, saddr)); in parse_ip() 74 flow->dst = load_word(skb, nhoff + offsetof(struct iphdr, daddr)); in parse_ip() 87 struct flow_key_record *flow) in parse_ipv6() argument 91 flow->src = ipv6_addr_hash(skb, in parse_ipv6() 93 flow->dst = ipv6_addr_hash(skb, in parse_ipv6() 101 struct flow_key_record *flow) in flow_dissector() argument 121 nhoff = parse_ip(skb, nhoff, &ip_proto, flow); in flow_dissector() 123 nhoff = parse_ipv6(skb, nhoff, &ip_proto, flow); in flow_dissector() 159 nhoff = parse_ip(skb, nhoff, &ip_proto, flow); in flow_dissector() [all …]
|
/linux/net/sched/ |
H A D | sch_hhf.c | 20 * buckets. Initially, a new flow starts as non-heavy-hitter. Once classified 37 * - For a heavy-hitter flow: *all* of its k array counters must be large. 38 * - For a non-heavy-hitter flow: some of its k array counters can be large 59 * Once a flow is classified as heavy-hitter, we also save its per-flow state 60 * in an exact-matching flow table so that its subsequent packets can be 66 * - If the flow-id of p (e.g., TCP 5-tuple) is already in the exact-matching 67 * heavy-hitter flow table, denoted table T, then send p to the heavy-hitter 70 * + If F decides that p belongs to a non-heavy-hitter flow, then send p 72 * + Otherwise, if F decides that p belongs to a new heavy-hitter flow, 73 * then set up a new flow entry for the flow-id of p in the table T and [all …]
|
/linux/drivers/infiniband/hw/usnic/ |
H A D | usnic_fwd.c | 203 struct usnic_fwd_flow *flow; in usnic_fwd_alloc_flow() local 213 flow = kzalloc(sizeof(*flow), GFP_ATOMIC); in usnic_fwd_alloc_flow() 214 if (!flow) in usnic_fwd_alloc_flow() 255 flow->flow_id = (uint32_t) a0; in usnic_fwd_alloc_flow() 256 flow->vnic_idx = uaction->vnic_idx; in usnic_fwd_alloc_flow() 257 flow->ufdev = ufdev; in usnic_fwd_alloc_flow() 263 return flow; in usnic_fwd_alloc_flow() 265 kfree(flow); in usnic_fwd_alloc_flow() 269 int usnic_fwd_dealloc_flow(struct usnic_fwd_flow *flow) in usnic_fwd_dealloc_flow() argument 274 a0 = flow->flow_id; in usnic_fwd_dealloc_flow() [all …]
|