Lines Matching defs:f
1356 static unsigned int fanout_demux_hash(struct packet_fanout *f,
1363 static unsigned int fanout_demux_lb(struct packet_fanout *f,
1367 unsigned int val = atomic_inc_return(&f->rr_cur);
1372 static unsigned int fanout_demux_cpu(struct packet_fanout *f,
1379 static unsigned int fanout_demux_rnd(struct packet_fanout *f,
1386 static unsigned int fanout_demux_rollover(struct packet_fanout *f,
1394 po = pkt_sk(rcu_dereference(f->arr[idx]));
1406 po_next = pkt_sk(rcu_dereference(f->arr[i]));
1426 static unsigned int fanout_demux_qm(struct packet_fanout *f,
1433 static unsigned int fanout_demux_bpf(struct packet_fanout *f,
1441 prog = rcu_dereference(f->bpf_prog);
1449 static bool fanout_has_flag(struct packet_fanout *f, u16 flag)
1451 return f->flags & (flag >> 8);
1457 struct packet_fanout *f = pt->af_packet_priv;
1458 unsigned int num = READ_ONCE(f->num_members);
1459 struct net *net = read_pnet(&f->net);
1468 if (fanout_has_flag(f, PACKET_FANOUT_FLAG_DEFRAG)) {
1473 switch (f->type) {
1476 idx = fanout_demux_hash(f, skb, num);
1479 idx = fanout_demux_lb(f, skb, num);
1482 idx = fanout_demux_cpu(f, skb, num);
1485 idx = fanout_demux_rnd(f, skb, num);
1488 idx = fanout_demux_qm(f, skb, num);
1491 idx = fanout_demux_rollover(f, skb, 0, false, num);
1495 idx = fanout_demux_bpf(f, skb, num);
1499 if (fanout_has_flag(f, PACKET_FANOUT_FLAG_ROLLOVER))
1500 idx = fanout_demux_rollover(f, skb, idx, true, num);
1502 po = pkt_sk(rcu_dereference(f->arr[idx]));
1513 struct packet_fanout *f = po->fanout;
1515 spin_lock(&f->lock);
1516 rcu_assign_pointer(f->arr[f->num_members], sk);
1518 f->num_members++;
1519 if (f->num_members == 1)
1520 dev_add_pack(&f->prot_hook);
1521 spin_unlock(&f->lock);
1526 struct packet_fanout *f = po->fanout;
1529 spin_lock(&f->lock);
1530 for (i = 0; i < f->num_members; i++) {
1531 if (rcu_dereference_protected(f->arr[i],
1532 lockdep_is_held(&f->lock)) == sk)
1535 BUG_ON(i >= f->num_members);
1536 rcu_assign_pointer(f->arr[i],
1537 rcu_dereference_protected(f->arr[f->num_members - 1],
1538 lockdep_is_held(&f->lock)));
1539 f->num_members--;
1540 if (f->num_members == 0)
1541 __dev_remove_pack(&f->prot_hook);
1542 spin_unlock(&f->lock);
1553 static void fanout_init_data(struct packet_fanout *f)
1555 switch (f->type) {
1557 atomic_set(&f->rr_cur, 0);
1561 RCU_INIT_POINTER(f->bpf_prog, NULL);
1566 static void __fanout_set_data_bpf(struct packet_fanout *f, struct bpf_prog *new)
1570 spin_lock(&f->lock);
1571 old = rcu_dereference_protected(f->bpf_prog, lockdep_is_held(&f->lock));
1572 rcu_assign_pointer(f->bpf_prog, new);
1573 spin_unlock(&f->lock);
1637 static void fanout_release_data(struct packet_fanout *f)
1639 switch (f->type) {
1642 __fanout_set_data_bpf(f, NULL);
1648 struct packet_fanout *f;
1650 list_for_each_entry(f, &fanout_list, list) {
1651 if (f->id == candidate_id &&
1652 read_pnet(&f->net) == sock_net(sk)) {
1681 struct packet_fanout *f, *match;
1735 list_for_each_entry(f, &fanout_list, list) {
1736 if (f->id == id &&
1737 read_pnet(&f->net) == sock_net(sk)) {
1738 match = f;
1821 struct packet_fanout *f;
1824 f = po->fanout;
1825 if (f) {
1828 if (refcount_dec_and_test(&f->sk_ref))
1829 list_del(&f->list);
1831 f = NULL;
1835 return f;
3120 struct packet_fanout *f;
3160 f = fanout_release(sk);
3165 if (f) {
3166 fanout_release_data(f);
3167 kvfree(f);