/Linux-v5.4/net/sched/ |
D | sch_atm.c | 76 struct atm_flow_data *flow; in lookup_flow() local 78 list_for_each_entry(flow, &p->flows, list) { in lookup_flow() 79 if (flow->common.classid == classid) in lookup_flow() 80 return flow; in lookup_flow() 90 struct atm_flow_data *flow = (struct atm_flow_data *)arg; in atm_tc_graft() local 93 sch, p, flow, new, old); in atm_tc_graft() 94 if (list_empty(&flow->list)) in atm_tc_graft() 98 *old = flow->q; in atm_tc_graft() 99 flow->q = new; in atm_tc_graft() 107 struct atm_flow_data *flow = (struct atm_flow_data *)cl; in atm_tc_leaf() local [all …]
|
D | sch_fq_codel.c | 117 static inline struct sk_buff *dequeue_head(struct fq_codel_flow *flow) in dequeue_head() argument 119 struct sk_buff *skb = flow->head; in dequeue_head() 121 flow->head = skb->next; in dequeue_head() 127 static inline void flow_queue_add(struct fq_codel_flow *flow, in flow_queue_add() argument 130 if (flow->head == NULL) in flow_queue_add() 131 flow->head = skb; in flow_queue_add() 133 flow->tail->next = skb; in flow_queue_add() 134 flow->tail = skb; in flow_queue_add() 144 struct fq_codel_flow *flow; in fq_codel_drop() local 165 flow = &q->flows[idx]; in fq_codel_drop() [all …]
|
D | sch_hhf.c | 184 struct hh_flow_state *flow, *next; in seek_list() local 190 list_for_each_entry_safe(flow, next, head, flowchain) { in seek_list() 191 u32 prev = flow->hit_timestamp + q->hhf_evict_timeout; in seek_list() 197 if (list_is_last(&flow->flowchain, head)) in seek_list() 199 list_del(&flow->flowchain); in seek_list() 200 kfree(flow); in seek_list() 202 } else if (flow->hash_id == hash) { in seek_list() 203 return flow; in seek_list() 215 struct hh_flow_state *flow; in alloc_new_hh() local 220 list_for_each_entry(flow, head, flowchain) { in alloc_new_hh() [all …]
|
D | cls_flow.c | 66 static u32 flow_get_src(const struct sk_buff *skb, const struct flow_keys *flow) in flow_get_src() argument 68 __be32 src = flow_get_u32_src(flow); in flow_get_src() 76 static u32 flow_get_dst(const struct sk_buff *skb, const struct flow_keys *flow) in flow_get_dst() argument 78 __be32 dst = flow_get_u32_dst(flow); in flow_get_dst() 87 const struct flow_keys *flow) in flow_get_proto() argument 89 return flow->basic.ip_proto; in flow_get_proto() 93 const struct flow_keys *flow) in flow_get_proto_src() argument 95 if (flow->ports.ports) in flow_get_proto_src() 96 return ntohs(flow->ports.src); in flow_get_proto_src() 102 const struct flow_keys *flow) in flow_get_proto_dst() argument [all …]
|
/Linux-v5.4/include/net/ |
D | fq_impl.h | 15 struct fq_flow *flow, in fq_adjust_removal() argument 18 struct fq_tin *tin = flow->tin; in fq_adjust_removal() 22 flow->backlog -= skb->len; in fq_adjust_removal() 27 static void fq_rejigger_backlog(struct fq *fq, struct fq_flow *flow) in fq_rejigger_backlog() argument 31 if (flow->backlog == 0) { in fq_rejigger_backlog() 32 list_del_init(&flow->backlogchain); in fq_rejigger_backlog() 34 i = flow; in fq_rejigger_backlog() 37 if (i->backlog < flow->backlog) in fq_rejigger_backlog() 40 list_move_tail(&flow->backlogchain, in fq_rejigger_backlog() 46 struct fq_flow *flow) in fq_flow_dequeue() argument [all …]
|
/Linux-v5.4/drivers/net/wireless/broadcom/brcm80211/brcmfmac/ |
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 …]
|
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-v5.4/drivers/gpu/ipu-v3/ |
D | ipu-dp.c | 45 u32 flow; member 63 struct ipu_flow flow[IPUV3_NUM_FLOWS]; member 81 struct ipu_flow *flow = to_flow(dp); in ipu_dp_set_global_alpha() local 82 struct ipu_dp_priv *priv = flow->priv; in ipu_dp_set_global_alpha() 87 reg = readl(flow->base + DP_COM_CONF); in ipu_dp_set_global_alpha() 92 writel(reg, flow->base + DP_COM_CONF); in ipu_dp_set_global_alpha() 95 reg = readl(flow->base + DP_GRAPH_WIND_CTRL) & 0x00FFFFFFL; in ipu_dp_set_global_alpha() 97 flow->base + DP_GRAPH_WIND_CTRL); in ipu_dp_set_global_alpha() 99 reg = readl(flow->base + DP_COM_CONF); in ipu_dp_set_global_alpha() 100 writel(reg | DP_COM_CONF_GWAM, flow->base + DP_COM_CONF); in ipu_dp_set_global_alpha() [all …]
|
/Linux-v5.4/net/openvswitch/ |
D | flow_table.c | 68 struct sw_flow *flow; in ovs_flow_alloc() local 71 flow = kmem_cache_zalloc(flow_cache, GFP_KERNEL); in ovs_flow_alloc() 72 if (!flow) in ovs_flow_alloc() 75 flow->stats_last_writer = -1; in ovs_flow_alloc() 86 RCU_INIT_POINTER(flow->stats[0], stats); in ovs_flow_alloc() 88 cpumask_set_cpu(0, &flow->cpu_used_mask); in ovs_flow_alloc() 90 return flow; in ovs_flow_alloc() 92 kmem_cache_free(flow_cache, flow); in ovs_flow_alloc() 101 static void flow_free(struct sw_flow *flow) in flow_free() argument 105 if (ovs_identifier_is_key(&flow->id)) in flow_free() [all …]
|
/Linux-v5.4/net/netfilter/ |
D | nf_flow_table_core.c | 18 struct flow_offload flow; member 27 flow_offload_fill_dir(struct flow_offload *flow, struct nf_conn *ct, in flow_offload_fill_dir() argument 31 struct flow_offload_tuple *ft = &flow->tuplehash[dir].tuple; in flow_offload_fill_dir() 64 struct flow_offload *flow; in flow_offload_alloc() local 74 flow = &entry->flow; in flow_offload_alloc() 84 flow_offload_fill_dir(flow, ct, route, FLOW_OFFLOAD_DIR_ORIGINAL); in flow_offload_alloc() 85 flow_offload_fill_dir(flow, ct, route, FLOW_OFFLOAD_DIR_REPLY); in flow_offload_alloc() 88 flow->flags |= FLOW_OFFLOAD_SNAT; in flow_offload_alloc() 90 flow->flags |= FLOW_OFFLOAD_DNAT; in flow_offload_alloc() 92 return flow; in flow_offload_alloc() [all …]
|
D | nf_flow_table_ip.c | 19 static int nf_flow_state_check(struct flow_offload *flow, int proto, in nf_flow_state_check() argument 32 flow_offload_teardown(flow); in nf_flow_state_check() 92 static int nf_flow_snat_ip(const struct flow_offload *flow, struct sk_buff *skb, in nf_flow_snat_ip() argument 101 new_addr = flow->tuplehash[FLOW_OFFLOAD_DIR_REPLY].tuple.dst_v4.s_addr; in nf_flow_snat_ip() 106 new_addr = flow->tuplehash[FLOW_OFFLOAD_DIR_ORIGINAL].tuple.src_v4.s_addr; in nf_flow_snat_ip() 117 static int nf_flow_dnat_ip(const struct flow_offload *flow, struct sk_buff *skb, in nf_flow_dnat_ip() argument 126 new_addr = flow->tuplehash[FLOW_OFFLOAD_DIR_REPLY].tuple.src_v4.s_addr; in nf_flow_dnat_ip() 131 new_addr = flow->tuplehash[FLOW_OFFLOAD_DIR_ORIGINAL].tuple.dst_v4.s_addr; in nf_flow_dnat_ip() 142 static int nf_flow_nat_ip(const struct flow_offload *flow, struct sk_buff *skb, in nf_flow_nat_ip() argument 147 if (flow->flags & FLOW_OFFLOAD_SNAT && in nf_flow_nat_ip() [all …]
|
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-v5.4/drivers/net/ethernet/broadcom/bnxt/ |
D | bnxt_tc.c | 174 struct bnxt_tc_flow *flow) in bnxt_tc_parse_flow() argument 191 flow->l2_key.ether_type = match.key->n_proto; in bnxt_tc_parse_flow() 192 flow->l2_mask.ether_type = match.mask->n_proto; in bnxt_tc_parse_flow() 196 flow->l4_key.ip_proto = match.key->ip_proto; in bnxt_tc_parse_flow() 197 flow->l4_mask.ip_proto = match.mask->ip_proto; in bnxt_tc_parse_flow() 205 flow->flags |= BNXT_TC_FLOW_FLAGS_ETH_ADDRS; in bnxt_tc_parse_flow() 206 ether_addr_copy(flow->l2_key.dmac, match.key->dst); in bnxt_tc_parse_flow() 207 ether_addr_copy(flow->l2_mask.dmac, match.mask->dst); in bnxt_tc_parse_flow() 208 ether_addr_copy(flow->l2_key.smac, match.key->src); in bnxt_tc_parse_flow() 209 ether_addr_copy(flow->l2_mask.smac, match.mask->src); in bnxt_tc_parse_flow() [all …]
|
/Linux-v5.4/drivers/infiniband/hw/hfi1/ |
D | tid_rdma.c | 134 struct tid_rdma_flow *flow, 875 static u32 tid_rdma_find_phys_blocks_4k(struct tid_rdma_flow *flow, in tid_rdma_find_phys_blocks_4k() argument 892 trace_hfi1_tid_flow_page(flow->req->qp, flow, 0, 0, 0, vaddr); in tid_rdma_find_phys_blocks_4k() 895 trace_hfi1_tid_flow_page(flow->req->qp, flow, i, 0, 0, in tid_rdma_find_phys_blocks_4k() 929 trace_hfi1_tid_pageset(flow->req->qp, setcount, in tid_rdma_find_phys_blocks_4k() 1013 static u32 tid_rdma_find_phys_blocks_8k(struct tid_rdma_flow *flow, in tid_rdma_find_phys_blocks_8k() argument 1027 trace_hfi1_tid_flow_page(flow->req->qp, flow, i, 1, 0, v0); in tid_rdma_find_phys_blocks_8k() 1030 trace_hfi1_tid_flow_page(flow->req->qp, flow, i, 1, 1, v1); in tid_rdma_find_phys_blocks_8k() 1080 static u32 kern_find_pages(struct tid_rdma_flow *flow, in kern_find_pages() argument 1084 struct tid_rdma_request *req = flow->req; in kern_find_pages() [all …]
|
/Linux-v5.4/drivers/net/ethernet/mellanox/mlx5/core/ |
D | en_tc.c | 214 struct mlx5e_tc_flow *flow); 216 static struct mlx5e_tc_flow *mlx5e_flow_get(struct mlx5e_tc_flow *flow) in mlx5e_flow_get() argument 218 if (!flow || !refcount_inc_not_zero(&flow->refcnt)) in mlx5e_flow_get() 220 return flow; in mlx5e_flow_get() 224 struct mlx5e_tc_flow *flow) in mlx5e_flow_put() argument 226 if (refcount_dec_and_test(&flow->refcnt)) { in mlx5e_flow_put() 227 mlx5e_tc_del_flow(priv, flow); in mlx5e_flow_put() 228 kfree_rcu(flow, rcu_head); in mlx5e_flow_put() 232 static void __flow_flag_set(struct mlx5e_tc_flow *flow, unsigned long flag) in __flow_flag_set() argument 236 set_bit(flag, &flow->flags); in __flow_flag_set() [all …]
|
/Linux-v5.4/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ |
D | tls.c | 39 static void mlx5e_tls_set_ipv4_flow(void *flow, struct sock *sk) in mlx5e_tls_set_ipv4_flow() argument 43 MLX5_SET(tls_flow, flow, ipv6, 0); in mlx5e_tls_set_ipv4_flow() 44 memcpy(MLX5_ADDR_OF(tls_flow, flow, dst_ipv4_dst_ipv6.ipv4_layout.ipv4), in mlx5e_tls_set_ipv4_flow() 46 memcpy(MLX5_ADDR_OF(tls_flow, flow, src_ipv4_src_ipv6.ipv4_layout.ipv4), in mlx5e_tls_set_ipv4_flow() 51 static void mlx5e_tls_set_ipv6_flow(void *flow, struct sock *sk) in mlx5e_tls_set_ipv6_flow() argument 55 MLX5_SET(tls_flow, flow, ipv6, 1); in mlx5e_tls_set_ipv6_flow() 56 memcpy(MLX5_ADDR_OF(tls_flow, flow, dst_ipv4_dst_ipv6.ipv6_layout.ipv6), in mlx5e_tls_set_ipv6_flow() 58 memcpy(MLX5_ADDR_OF(tls_flow, flow, src_ipv4_src_ipv6.ipv6_layout.ipv6), in mlx5e_tls_set_ipv6_flow() 63 static void mlx5e_tls_set_flow_tcp_ports(void *flow, struct sock *sk) in mlx5e_tls_set_flow_tcp_ports() argument 67 memcpy(MLX5_ADDR_OF(tls_flow, flow, src_port), &inet->inet_sport, in mlx5e_tls_set_flow_tcp_ports() [all …]
|
/Linux-v5.4/samples/bpf/ |
D | sockex2_kern.c | 62 struct flow_key_record *flow) in parse_ip() argument 72 flow->src = load_word(skb, nhoff + offsetof(struct iphdr, saddr)); in parse_ip() 73 flow->dst = load_word(skb, nhoff + offsetof(struct iphdr, daddr)); in parse_ip() 86 struct flow_key_record *flow) in parse_ipv6() argument 90 flow->src = ipv6_addr_hash(skb, in parse_ipv6() 92 flow->dst = ipv6_addr_hash(skb, in parse_ipv6() 100 struct flow_key_record *flow) in flow_dissector() argument 120 nhoff = parse_ip(skb, nhoff, &ip_proto, flow); in flow_dissector() 122 nhoff = parse_ipv6(skb, nhoff, &ip_proto, flow); in flow_dissector() 158 nhoff = parse_ip(skb, nhoff, &ip_proto, flow); in flow_dissector() [all …]
|
/Linux-v5.4/drivers/net/ethernet/netronome/nfp/flower/ |
D | match.c | 13 struct flow_cls_offload *flow, u8 key_type) in nfp_flower_compile_meta_tci() argument 15 struct flow_rule *rule = flow_cls_offload_flow_rule(flow); in nfp_flower_compile_meta_tci() 81 struct flow_cls_offload *flow) in nfp_flower_compile_mac() argument 83 struct flow_rule *rule = flow_cls_offload_flow_rule(flow); in nfp_flower_compile_mac() 133 struct flow_cls_offload *flow) in nfp_flower_compile_tport() argument 135 struct flow_rule *rule = flow_cls_offload_flow_rule(flow); in nfp_flower_compile_tport() 154 struct flow_cls_offload *flow) in nfp_flower_compile_ip_ext() argument 156 struct flow_rule *rule = flow_cls_offload_flow_rule(flow); in nfp_flower_compile_ip_ext() 228 struct flow_cls_offload *flow) in nfp_flower_compile_ipv4() argument 230 struct flow_rule *rule = flow_cls_offload_flow_rule(flow); in nfp_flower_compile_ipv4() [all …]
|
/Linux-v5.4/drivers/infiniband/hw/usnic/ |
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 …]
|
/Linux-v5.4/Documentation/networking/ |
D | openvswitch.txt | 5 flow-level packet processing on selected network devices. It can be 7 VLAN processing, network access control, flow-based network control, 12 within a bridge). Each datapath also has associated with it a "flow 19 extracting its flow key and looking it up in the flow table. If there 20 is a matching flow, it executes the associated actions. If there is 22 its processing, userspace will likely set up a flow to handle further 32 versions to parse additional protocols as part of the flow key. It 36 applications to work with any version of the flow key, past or future. 40 flow key that it parsed from the packet. Userspace then extracts its 41 own notion of a flow key from the packet and compares it against the [all …]
|
/Linux-v5.4/net/ipv4/netfilter/ |
D | ipt_rpfilter.c | 58 struct flowi4 flow; in rpfilter_mt() local 74 memset(&flow, 0, sizeof(flow)); in rpfilter_mt() 75 flow.flowi4_iif = LOOPBACK_IFINDEX; in rpfilter_mt() 76 flow.daddr = iph->saddr; in rpfilter_mt() 77 flow.saddr = rpfilter_get_saddr(iph->daddr); in rpfilter_mt() 78 flow.flowi4_mark = info->flags & XT_RPFILTER_VALID_MARK ? skb->mark : 0; in rpfilter_mt() 79 flow.flowi4_tos = RT_TOS(iph->tos); in rpfilter_mt() 80 flow.flowi4_scope = RT_SCOPE_UNIVERSE; in rpfilter_mt() 81 flow.flowi4_oif = l3mdev_master_ifindex_rcu(xt_in(par)); in rpfilter_mt() 83 return rpfilter_lookup_reverse(xt_net(par), &flow, xt_in(par), info->flags) ^ invert; in rpfilter_mt()
|
/Linux-v5.4/Documentation/bpf/ |
D | prog_flow_dissector.rst | 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 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 86 +-- flow dissector starts here 94 In this case VLAN information has been processed before the flow dissector [all …]
|
/Linux-v5.4/tools/testing/selftests/bpf/progs/ |
D | test_xdp_noinline.c | 122 struct flow_key flow; member 244 pckt->flow.port16[0] = udp->source; in parse_udp() 245 pckt->flow.port16[1] = udp->dest; in parse_udp() 247 pckt->flow.port16[0] = udp->dest; in parse_udp() 248 pckt->flow.port16[1] = udp->source; in parse_udp() 268 pckt->flow.port16[0] = tcp->source; in parse_tcp() 269 pckt->flow.port16[1] = tcp->dest; in parse_tcp() 271 pckt->flow.port16[0] = tcp->dest; in parse_tcp() 272 pckt->flow.port16[1] = tcp->source; in parse_tcp() 307 ip_suffix = pckt->flow.srcv6[3] ^ pckt->flow.port16[0]; in encap_v6() [all …]
|
/Linux-v5.4/Documentation/core-api/ |
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-v5.4/drivers/net/ethernet/mellanox/mlx5/core/fpga/ |
D | tls.c | 187 static void mlx5_fpga_tls_flow_to_cmd(void *flow, void *cmd) in mlx5_fpga_tls_flow_to_cmd() argument 189 memcpy(MLX5_ADDR_OF(tls_cmd, cmd, src_port), flow, in mlx5_fpga_tls_flow_to_cmd() 192 MLX5_SET(tls_cmd, cmd, ipv6, MLX5_GET(tls_flow, flow, ipv6)); in mlx5_fpga_tls_flow_to_cmd() 194 MLX5_GET(tls_flow, flow, direction_sx)); in mlx5_fpga_tls_flow_to_cmd() 202 void *flow; in mlx5_fpga_tls_resync_rx() local 213 flow = idr_find(&mdev->fpga->tls->rx_idr, ntohl(handle)); in mlx5_fpga_tls_resync_rx() 214 if (unlikely(!flow)) { in mlx5_fpga_tls_resync_rx() 220 mlx5_fpga_tls_flow_to_cmd(flow, cmd); in mlx5_fpga_tls_resync_rx() 240 void *flow, u32 swid, gfp_t flags) in mlx5_fpga_tls_send_teardown_cmd() argument 255 mlx5_fpga_tls_flow_to_cmd(flow, cmd); in mlx5_fpga_tls_send_teardown_cmd() [all …]
|