Lines Matching refs:pfk
81 static void pfkey_terminate_dump(struct pfkey_sock *pfk) in pfkey_terminate_dump() argument
83 if (pfk->dump.dump) { in pfkey_terminate_dump()
84 if (pfk->dump.skb) { in pfkey_terminate_dump()
85 kfree_skb(pfk->dump.skb); in pfkey_terminate_dump()
86 pfk->dump.skb = NULL; in pfkey_terminate_dump()
88 pfk->dump.done(pfk); in pfkey_terminate_dump()
89 pfk->dump.dump = NULL; in pfkey_terminate_dump()
90 pfk->dump.done = NULL; in pfkey_terminate_dump()
143 struct pfkey_sock *pfk; in pfkey_create() local
156 pfk = pfkey_sk(sk); in pfkey_create()
157 mutex_init(&pfk->dump_lock); in pfkey_create()
231 struct pfkey_sock *pfk = pfkey_sk(sk); in pfkey_broadcast() local
238 if (pfk->promisc) in pfkey_broadcast()
248 !pfk->registered) in pfkey_broadcast()
270 static int pfkey_do_dump(struct pfkey_sock *pfk) in pfkey_do_dump() argument
275 mutex_lock(&pfk->dump_lock); in pfkey_do_dump()
276 if (!pfk->dump.dump) { in pfkey_do_dump()
281 rc = pfk->dump.dump(pfk); in pfkey_do_dump()
287 if (pfk->dump.skb) { in pfkey_do_dump()
288 if (!pfkey_can_dump(&pfk->sk)) { in pfkey_do_dump()
293 hdr = (struct sadb_msg *) pfk->dump.skb->data; in pfkey_do_dump()
296 pfkey_broadcast(pfk->dump.skb, GFP_ATOMIC, BROADCAST_ONE, in pfkey_do_dump()
297 &pfk->sk, sock_net(&pfk->sk)); in pfkey_do_dump()
298 pfk->dump.skb = NULL; in pfkey_do_dump()
301 pfkey_terminate_dump(pfk); in pfkey_do_dump()
304 mutex_unlock(&pfk->dump_lock); in pfkey_do_dump()
1704 struct pfkey_sock *pfk = pfkey_sk(sk); in pfkey_register() local
1711 if (pfk->registered&(1<<hdr->sadb_msg_satype)) in pfkey_register()
1713 pfk->registered |= (1<<hdr->sadb_msg_satype); in pfkey_register()
1724 pfk->registered &= ~(1<<hdr->sadb_msg_satype); in pfkey_register()
1805 struct pfkey_sock *pfk = ptr; in dump_sa() local
1809 if (!pfkey_can_dump(&pfk->sk)) in dump_sa()
1817 out_hdr->sadb_msg_version = pfk->dump.msg_version; in dump_sa()
1823 out_hdr->sadb_msg_pid = pfk->dump.msg_portid; in dump_sa()
1825 if (pfk->dump.skb) in dump_sa()
1826 pfkey_broadcast(pfk->dump.skb, GFP_ATOMIC, BROADCAST_ONE, in dump_sa()
1827 &pfk->sk, sock_net(&pfk->sk)); in dump_sa()
1828 pfk->dump.skb = out_skb; in dump_sa()
1833 static int pfkey_dump_sa(struct pfkey_sock *pfk) in pfkey_dump_sa() argument
1835 struct net *net = sock_net(&pfk->sk); in pfkey_dump_sa()
1836 return xfrm_state_walk(net, &pfk->dump.u.state, dump_sa, (void *) pfk); in pfkey_dump_sa()
1839 static void pfkey_dump_sa_done(struct pfkey_sock *pfk) in pfkey_dump_sa_done() argument
1841 struct net *net = sock_net(&pfk->sk); in pfkey_dump_sa_done()
1843 xfrm_state_walk_done(&pfk->dump.u.state, net); in pfkey_dump_sa_done()
1850 struct pfkey_sock *pfk = pfkey_sk(sk); in pfkey_dump() local
1852 mutex_lock(&pfk->dump_lock); in pfkey_dump()
1853 if (pfk->dump.dump != NULL) { in pfkey_dump()
1854 mutex_unlock(&pfk->dump_lock); in pfkey_dump()
1860 mutex_unlock(&pfk->dump_lock); in pfkey_dump()
1871 mutex_unlock(&pfk->dump_lock); in pfkey_dump()
1876 mutex_unlock(&pfk->dump_lock); in pfkey_dump()
1889 pfk->dump.msg_version = hdr->sadb_msg_version; in pfkey_dump()
1890 pfk->dump.msg_portid = hdr->sadb_msg_pid; in pfkey_dump()
1891 pfk->dump.dump = pfkey_dump_sa; in pfkey_dump()
1892 pfk->dump.done = pfkey_dump_sa_done; in pfkey_dump()
1893 xfrm_state_walk_init(&pfk->dump.u.state, proto, filter); in pfkey_dump()
1894 mutex_unlock(&pfk->dump_lock); in pfkey_dump()
1896 return pfkey_do_dump(pfk); in pfkey_dump()
1901 struct pfkey_sock *pfk = pfkey_sk(sk); in pfkey_promisc() local
1909 pfk->promisc = satype; in pfkey_promisc()
2706 struct pfkey_sock *pfk = ptr; in dump_sp() local
2711 if (!pfkey_can_dump(&pfk->sk)) in dump_sp()
2725 out_hdr->sadb_msg_version = pfk->dump.msg_version; in dump_sp()
2730 out_hdr->sadb_msg_pid = pfk->dump.msg_portid; in dump_sp()
2732 if (pfk->dump.skb) in dump_sp()
2733 pfkey_broadcast(pfk->dump.skb, GFP_ATOMIC, BROADCAST_ONE, in dump_sp()
2734 &pfk->sk, sock_net(&pfk->sk)); in dump_sp()
2735 pfk->dump.skb = out_skb; in dump_sp()
2740 static int pfkey_dump_sp(struct pfkey_sock *pfk) in pfkey_dump_sp() argument
2742 struct net *net = sock_net(&pfk->sk); in pfkey_dump_sp()
2743 return xfrm_policy_walk(net, &pfk->dump.u.policy, dump_sp, (void *) pfk); in pfkey_dump_sp()
2746 static void pfkey_dump_sp_done(struct pfkey_sock *pfk) in pfkey_dump_sp_done() argument
2748 struct net *net = sock_net((struct sock *)pfk); in pfkey_dump_sp_done()
2750 xfrm_policy_walk_done(&pfk->dump.u.policy, net); in pfkey_dump_sp_done()
2755 struct pfkey_sock *pfk = pfkey_sk(sk); in pfkey_spddump() local
2757 mutex_lock(&pfk->dump_lock); in pfkey_spddump()
2758 if (pfk->dump.dump != NULL) { in pfkey_spddump()
2759 mutex_unlock(&pfk->dump_lock); in pfkey_spddump()
2763 pfk->dump.msg_version = hdr->sadb_msg_version; in pfkey_spddump()
2764 pfk->dump.msg_portid = hdr->sadb_msg_pid; in pfkey_spddump()
2765 pfk->dump.dump = pfkey_dump_sp; in pfkey_spddump()
2766 pfk->dump.done = pfkey_dump_sp_done; in pfkey_spddump()
2767 xfrm_policy_walk_init(&pfk->dump.u.policy, XFRM_POLICY_TYPE_MAIN); in pfkey_spddump()
2768 mutex_unlock(&pfk->dump_lock); in pfkey_spddump()
2770 return pfkey_do_dump(pfk); in pfkey_spddump()
3735 struct pfkey_sock *pfk = pfkey_sk(sk); in pfkey_recvmsg() local
3762 if (pfk->dump.dump != NULL && in pfkey_recvmsg()
3764 pfkey_do_dump(pfk); in pfkey_recvmsg()