• Home
  • Raw
  • Download

Lines Matching refs:net

117 static inline struct dst_entry *__xfrm_dst_lookup(struct net *net, int tos,  in __xfrm_dst_lookup()  argument
129 dst = afinfo->dst_lookup(net, tos, saddr, daddr, mark); in __xfrm_dst_lookup()
141 struct net *net = xs_net(x); in xfrm_dst_lookup() local
155 dst = __xfrm_dst_lookup(net, tos, saddr, daddr, family, mark); in xfrm_dst_lookup()
279 struct xfrm_policy *xfrm_policy_alloc(struct net *net, gfp_t gfp) in xfrm_policy_alloc() argument
286 write_pnet(&policy->xp_net, net); in xfrm_policy_alloc()
347 static inline unsigned int idx_hash(struct net *net, u32 index) in idx_hash() argument
349 return __idx_hash(index, net->xfrm.policy_idx_hmask); in idx_hash()
353 static void __get_hash_thresh(struct net *net, in __get_hash_thresh() argument
359 *dbits = net->xfrm.policy_bydst[dir].dbits4; in __get_hash_thresh()
360 *sbits = net->xfrm.policy_bydst[dir].sbits4; in __get_hash_thresh()
364 *dbits = net->xfrm.policy_bydst[dir].dbits6; in __get_hash_thresh()
365 *sbits = net->xfrm.policy_bydst[dir].sbits6; in __get_hash_thresh()
374 static struct hlist_head *policy_hash_bysel(struct net *net, in policy_hash_bysel() argument
378 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; in policy_hash_bysel()
383 __get_hash_thresh(net, family, dir, &dbits, &sbits); in policy_hash_bysel()
387 &net->xfrm.policy_inexact[dir] : in policy_hash_bysel()
388 net->xfrm.policy_bydst[dir].table + hash); in policy_hash_bysel()
391 static struct hlist_head *policy_hash_direct(struct net *net, in policy_hash_direct() argument
396 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; in policy_hash_direct()
401 __get_hash_thresh(net, family, dir, &dbits, &sbits); in policy_hash_direct()
404 return net->xfrm.policy_bydst[dir].table + hash; in policy_hash_direct()
407 static void xfrm_dst_hash_transfer(struct net *net, in xfrm_dst_hash_transfer() argument
423 __get_hash_thresh(net, pol->family, dir, &dbits, &sbits); in xfrm_dst_hash_transfer()
464 static void xfrm_bydst_resize(struct net *net, int dir) in xfrm_bydst_resize() argument
466 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; in xfrm_bydst_resize()
469 struct hlist_head *odst = net->xfrm.policy_bydst[dir].table; in xfrm_bydst_resize()
476 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_bydst_resize()
479 xfrm_dst_hash_transfer(net, odst + i, ndst, nhashmask, dir); in xfrm_bydst_resize()
481 net->xfrm.policy_bydst[dir].table = ndst; in xfrm_bydst_resize()
482 net->xfrm.policy_bydst[dir].hmask = nhashmask; in xfrm_bydst_resize()
484 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_bydst_resize()
489 static void xfrm_byidx_resize(struct net *net, int total) in xfrm_byidx_resize() argument
491 unsigned int hmask = net->xfrm.policy_idx_hmask; in xfrm_byidx_resize()
494 struct hlist_head *oidx = net->xfrm.policy_byidx; in xfrm_byidx_resize()
501 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_byidx_resize()
506 net->xfrm.policy_byidx = nidx; in xfrm_byidx_resize()
507 net->xfrm.policy_idx_hmask = nhashmask; in xfrm_byidx_resize()
509 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_byidx_resize()
514 static inline int xfrm_bydst_should_resize(struct net *net, int dir, int *total) in xfrm_bydst_should_resize() argument
516 unsigned int cnt = net->xfrm.policy_count[dir]; in xfrm_bydst_should_resize()
517 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; in xfrm_bydst_should_resize()
529 static inline int xfrm_byidx_should_resize(struct net *net, int total) in xfrm_byidx_should_resize() argument
531 unsigned int hmask = net->xfrm.policy_idx_hmask; in xfrm_byidx_should_resize()
540 void xfrm_spd_getinfo(struct net *net, struct xfrmk_spdinfo *si) in xfrm_spd_getinfo() argument
542 read_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_spd_getinfo()
543 si->incnt = net->xfrm.policy_count[XFRM_POLICY_IN]; in xfrm_spd_getinfo()
544 si->outcnt = net->xfrm.policy_count[XFRM_POLICY_OUT]; in xfrm_spd_getinfo()
545 si->fwdcnt = net->xfrm.policy_count[XFRM_POLICY_FWD]; in xfrm_spd_getinfo()
546 si->inscnt = net->xfrm.policy_count[XFRM_POLICY_IN+XFRM_POLICY_MAX]; in xfrm_spd_getinfo()
547 si->outscnt = net->xfrm.policy_count[XFRM_POLICY_OUT+XFRM_POLICY_MAX]; in xfrm_spd_getinfo()
548 si->fwdscnt = net->xfrm.policy_count[XFRM_POLICY_FWD+XFRM_POLICY_MAX]; in xfrm_spd_getinfo()
549 si->spdhcnt = net->xfrm.policy_idx_hmask; in xfrm_spd_getinfo()
551 read_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_spd_getinfo()
558 struct net *net = container_of(work, struct net, xfrm.policy_hash_work); in xfrm_hash_resize() local
565 if (xfrm_bydst_should_resize(net, dir, &total)) in xfrm_hash_resize()
566 xfrm_bydst_resize(net, dir); in xfrm_hash_resize()
568 if (xfrm_byidx_should_resize(net, total)) in xfrm_hash_resize()
569 xfrm_byidx_resize(net, total); in xfrm_hash_resize()
576 struct net *net = container_of(work, struct net, in xfrm_hash_rebuild() local
593 seq = read_seqbegin(&net->xfrm.policy_hthresh.lock); in xfrm_hash_rebuild()
595 lbits4 = net->xfrm.policy_hthresh.lbits4; in xfrm_hash_rebuild()
596 rbits4 = net->xfrm.policy_hthresh.rbits4; in xfrm_hash_rebuild()
597 lbits6 = net->xfrm.policy_hthresh.lbits6; in xfrm_hash_rebuild()
598 rbits6 = net->xfrm.policy_hthresh.rbits6; in xfrm_hash_rebuild()
599 } while (read_seqretry(&net->xfrm.policy_hthresh.lock, seq)); in xfrm_hash_rebuild()
601 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_hash_rebuild()
605 INIT_HLIST_HEAD(&net->xfrm.policy_inexact[dir]); in xfrm_hash_rebuild()
606 hmask = net->xfrm.policy_bydst[dir].hmask; in xfrm_hash_rebuild()
607 odst = net->xfrm.policy_bydst[dir].table; in xfrm_hash_rebuild()
612 net->xfrm.policy_bydst[dir].dbits4 = rbits4; in xfrm_hash_rebuild()
613 net->xfrm.policy_bydst[dir].sbits4 = lbits4; in xfrm_hash_rebuild()
614 net->xfrm.policy_bydst[dir].dbits6 = rbits6; in xfrm_hash_rebuild()
615 net->xfrm.policy_bydst[dir].sbits6 = lbits6; in xfrm_hash_rebuild()
618 net->xfrm.policy_bydst[dir].dbits4 = lbits4; in xfrm_hash_rebuild()
619 net->xfrm.policy_bydst[dir].sbits4 = rbits4; in xfrm_hash_rebuild()
620 net->xfrm.policy_bydst[dir].dbits6 = lbits6; in xfrm_hash_rebuild()
621 net->xfrm.policy_bydst[dir].sbits6 = rbits6; in xfrm_hash_rebuild()
626 list_for_each_entry_reverse(policy, &net->xfrm.policy_all, walk.all) { in xfrm_hash_rebuild()
628 chain = policy_hash_bysel(net, &policy->selector, in xfrm_hash_rebuild()
643 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_hash_rebuild()
648 void xfrm_policy_hash_rebuild(struct net *net) in xfrm_policy_hash_rebuild() argument
650 schedule_work(&net->xfrm.policy_hthresh.work); in xfrm_policy_hash_rebuild()
656 static u32 xfrm_gen_index(struct net *net, int dir, u32 index) in xfrm_gen_index() argument
676 list = net->xfrm.policy_byidx + idx_hash(net, idx); in xfrm_gen_index()
748 struct net *net = xp_net(policy); in xfrm_policy_insert() local
754 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_insert()
755 chain = policy_hash_bysel(net, &policy->selector, policy->family, dir); in xfrm_policy_insert()
765 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_insert()
783 net->xfrm.policy_count[dir]++; in xfrm_policy_insert()
784 atomic_inc(&net->xfrm.flow_cache_genid); in xfrm_policy_insert()
788 rt_genid_bump_ipv4(net); in xfrm_policy_insert()
790 rt_genid_bump_ipv6(net); in xfrm_policy_insert()
796 policy->index = delpol ? delpol->index : xfrm_gen_index(net, dir, policy->index); in xfrm_policy_insert()
797 hlist_add_head(&policy->byidx, net->xfrm.policy_byidx+idx_hash(net, policy->index)); in xfrm_policy_insert()
802 list_add(&policy->walk.all, &net->xfrm.policy_all); in xfrm_policy_insert()
803 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_insert()
807 else if (xfrm_bydst_should_resize(net, dir, NULL)) in xfrm_policy_insert()
808 schedule_work(&net->xfrm.policy_hash_work); in xfrm_policy_insert()
814 struct xfrm_policy *xfrm_policy_bysel_ctx(struct net *net, u32 mark, u8 type, in xfrm_policy_bysel_ctx() argument
823 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_bysel_ctx()
824 chain = policy_hash_bysel(net, sel, sel->family, dir); in xfrm_policy_bysel_ctx()
836 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_bysel_ctx()
845 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_bysel_ctx()
853 struct xfrm_policy *xfrm_policy_byid(struct net *net, u32 mark, u8 type, in xfrm_policy_byid() argument
864 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_byid()
865 chain = net->xfrm.policy_byidx + idx_hash(net, id); in xfrm_policy_byid()
875 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_byid()
884 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_byid()
894 xfrm_policy_flush_secctx_check(struct net *net, u8 type, bool task_valid) in xfrm_policy_flush_secctx_check() argument
903 &net->xfrm.policy_inexact[dir], bydst) { in xfrm_policy_flush_secctx_check()
912 for (i = net->xfrm.policy_bydst[dir].hmask; i >= 0; i--) { in xfrm_policy_flush_secctx_check()
914 net->xfrm.policy_bydst[dir].table + i, in xfrm_policy_flush_secctx_check()
932 xfrm_policy_flush_secctx_check(struct net *net, u8 type, bool task_valid) in xfrm_policy_flush_secctx_check() argument
938 int xfrm_policy_flush(struct net *net, u8 type, bool task_valid) in xfrm_policy_flush() argument
942 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_flush()
944 err = xfrm_policy_flush_secctx_check(net, type, task_valid); in xfrm_policy_flush()
954 &net->xfrm.policy_inexact[dir], bydst) { in xfrm_policy_flush()
958 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_flush()
965 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_flush()
969 for (i = net->xfrm.policy_bydst[dir].hmask; i >= 0; i--) { in xfrm_policy_flush()
972 net->xfrm.policy_bydst[dir].table + i, in xfrm_policy_flush()
977 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_flush()
983 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_flush()
992 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_flush()
997 int xfrm_policy_walk(struct net *net, struct xfrm_policy_walk *walk, in xfrm_policy_walk() argument
1012 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_walk()
1014 x = list_first_entry(&net->xfrm.policy_all, struct xfrm_policy_walk_entry, all); in xfrm_policy_walk()
1017 list_for_each_entry_from(x, &net->xfrm.policy_all, all) { in xfrm_policy_walk()
1038 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_walk()
1052 void xfrm_policy_walk_done(struct xfrm_policy_walk *walk, struct net *net) in xfrm_policy_walk_done() argument
1057 write_lock_bh(&net->xfrm.xfrm_policy_lock); /*FIXME where is net? */ in xfrm_policy_walk_done()
1059 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_walk_done()
1089 static struct xfrm_policy *xfrm_policy_lookup_bytype(struct net *net, u8 type, in xfrm_policy_lookup_bytype() argument
1104 read_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_lookup_bytype()
1105 chain = policy_hash_direct(net, daddr, saddr, family, dir); in xfrm_policy_lookup_bytype()
1122 chain = &net->xfrm.policy_inexact[dir]; in xfrm_policy_lookup_bytype()
1140 read_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_lookup_bytype()
1146 __xfrm_policy_lookup(struct net *net, const struct flowi *fl, u16 family, u8 dir) in __xfrm_policy_lookup() argument
1151 pol = xfrm_policy_lookup_bytype(net, XFRM_POLICY_TYPE_SUB, fl, family, dir); in __xfrm_policy_lookup()
1155 return xfrm_policy_lookup_bytype(net, XFRM_POLICY_TYPE_MAIN, fl, family, dir); in __xfrm_policy_lookup()
1177 xfrm_policy_lookup(struct net *net, const struct flowi *fl, u16 family, in xfrm_policy_lookup() argument
1185 pol = __xfrm_policy_lookup(net, fl, family, flow_to_policy_dir(dir)); in xfrm_policy_lookup()
1217 struct net *net = sock_net(sk); in xfrm_sk_policy_lookup() local
1219 read_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_sk_policy_lookup()
1242 read_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_sk_policy_lookup()
1248 struct net *net = xp_net(pol); in __xfrm_policy_link() local
1249 struct hlist_head *chain = policy_hash_bysel(net, &pol->selector, in __xfrm_policy_link()
1252 list_add(&pol->walk.all, &net->xfrm.policy_all); in __xfrm_policy_link()
1254 hlist_add_head(&pol->byidx, net->xfrm.policy_byidx+idx_hash(net, pol->index)); in __xfrm_policy_link()
1255 net->xfrm.policy_count[dir]++; in __xfrm_policy_link()
1258 if (xfrm_bydst_should_resize(net, dir, NULL)) in __xfrm_policy_link()
1259 schedule_work(&net->xfrm.policy_hash_work); in __xfrm_policy_link()
1265 struct net *net = xp_net(pol); in __xfrm_policy_unlink() local
1273 net->xfrm.policy_count[dir]--; in __xfrm_policy_unlink()
1280 struct net *net = xp_net(pol); in xfrm_policy_delete() local
1282 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_delete()
1284 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_delete()
1295 struct net *net = sock_net(sk); in xfrm_sk_policy_insert() local
1303 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_sk_policy_insert()
1308 pol->index = xfrm_gen_index(net, XFRM_POLICY_MAX+dir, 0); in xfrm_sk_policy_insert()
1320 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_sk_policy_insert()
1331 struct net *net = xp_net(old); in clone_policy() local
1351 write_lock_bh(&net->xfrm.xfrm_policy_lock); in clone_policy()
1353 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in clone_policy()
1373 xfrm_get_saddr(struct net *net, xfrm_address_t *local, xfrm_address_t *remote, in xfrm_get_saddr() argument
1381 err = afinfo->get_saddr(net, local, remote, mark); in xfrm_get_saddr()
1392 struct net *net = xp_net(policy); in xfrm_tmpl_resolve_one() local
1410 error = xfrm_get_saddr(net, &tmp, remote, in xfrm_tmpl_resolve_one()
1552 static inline struct xfrm_dst *xfrm_alloc_dst(struct net *net, int family) in xfrm_alloc_dst() argument
1563 dst_ops = &net->xfrm.xfrm4_dst_ops; in xfrm_alloc_dst()
1567 dst_ops = &net->xfrm.xfrm6_dst_ops; in xfrm_alloc_dst()
1581 afinfo->init_dst(net, xdst); in xfrm_alloc_dst()
1634 struct net *net = xp_net(policy); in xfrm_bundle_create() local
1659 struct xfrm_dst *xdst = xfrm_alloc_dst(net, family); in xfrm_bundle_create()
1805 struct net *net = xp_net(pols[0]); in xfrm_resolve_and_create_bundle() local
1815 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTPOLERROR); in xfrm_resolve_and_create_bundle()
1821 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTBUNDLEGENERROR); in xfrm_resolve_and_create_bundle()
1954 static struct xfrm_dst *xfrm_create_dummy_bundle(struct net *net, in xfrm_create_dummy_bundle() argument
1966 xdst = xfrm_alloc_dst(net, family); in xfrm_create_dummy_bundle()
1971 net->xfrm.sysctl_larval_drop || in xfrm_create_dummy_bundle()
2014 xfrm_bundle_lookup(struct net *net, const struct flowi *fl, u16 family, u8 dir, in xfrm_bundle_lookup() argument
2046 pols[0] = __xfrm_policy_lookup(net, fl, family, in xfrm_bundle_lookup()
2093 xdst = xfrm_create_dummy_bundle(net, xflo, fl, num_xfrms, family); in xfrm_bundle_lookup()
2106 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTPOLERROR); in xfrm_bundle_lookup()
2115 static struct dst_entry *make_blackhole(struct net *net, u16 family, in make_blackhole() argument
2125 ret = afinfo->blackhole_route(net, dst_orig); in make_blackhole()
2137 struct dst_entry *xfrm_lookup(struct net *net, struct dst_entry *dst_orig, in xfrm_lookup() argument
2194 !net->xfrm.policy_count[XFRM_POLICY_OUT]) in xfrm_lookup()
2197 flo = flow_cache_lookup(net, fl, family, dir, in xfrm_lookup()
2221 if (net->xfrm.sysctl_larval_drop) { in xfrm_lookup()
2222 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTNOSTATES); in xfrm_lookup()
2229 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTNOSTATES); in xfrm_lookup()
2248 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTPOLBLOCK); in xfrm_lookup()
2285 struct dst_entry *xfrm_lookup_route(struct net *net, struct dst_entry *dst_orig, in xfrm_lookup_route() argument
2289 struct dst_entry *dst = xfrm_lookup(net, dst_orig, fl, sk, in xfrm_lookup_route()
2294 return make_blackhole(net, dst_orig->ops->family, dst_orig); in xfrm_lookup_route()
2396 struct net *net = dev_net(skb->dev); in __xfrm_policy_check() local
2412 XFRM_INC_STATS(net, LINUX_MIB_XFRMINHDRERROR); in __xfrm_policy_check()
2425 XFRM_INC_STATS(net, LINUX_MIB_XFRMINSTATEMISMATCH); in __xfrm_policy_check()
2435 XFRM_INC_STATS(net, LINUX_MIB_XFRMINPOLERROR); in __xfrm_policy_check()
2443 flo = flow_cache_lookup(net, &fl, family, fl_dir, in __xfrm_policy_check()
2452 XFRM_INC_STATS(net, LINUX_MIB_XFRMINPOLERROR); in __xfrm_policy_check()
2459 XFRM_INC_STATS(net, LINUX_MIB_XFRMINNOPOLS); in __xfrm_policy_check()
2471 pols[1] = xfrm_policy_lookup_bytype(net, XFRM_POLICY_TYPE_MAIN, in __xfrm_policy_check()
2476 XFRM_INC_STATS(net, LINUX_MIB_XFRMINPOLERROR); in __xfrm_policy_check()
2500 XFRM_INC_STATS(net, LINUX_MIB_XFRMINPOLBLOCK); in __xfrm_policy_check()
2504 XFRM_INC_STATS(net, LINUX_MIB_XFRMINBUFFERERROR); in __xfrm_policy_check()
2512 xfrm_tmpl_sort(stp, tpp, xfrm_nr, family, net); in __xfrm_policy_check()
2528 XFRM_INC_STATS(net, LINUX_MIB_XFRMINTMPLMISMATCH); in __xfrm_policy_check()
2534 XFRM_INC_STATS(net, LINUX_MIB_XFRMINTMPLMISMATCH); in __xfrm_policy_check()
2541 XFRM_INC_STATS(net, LINUX_MIB_XFRMINPOLBLOCK); in __xfrm_policy_check()
2553 struct net *net = dev_net(skb->dev); in __xfrm_route_forward() local
2559 XFRM_INC_STATS(net, LINUX_MIB_XFRMFWDHDRERROR); in __xfrm_route_forward()
2565 dst = xfrm_lookup(net, skb_dst(skb), &fl, NULL, XFRM_LOOKUP_QUEUE); in __xfrm_route_forward()
2637 void xfrm_garbage_collect(struct net *net) in xfrm_garbage_collect() argument
2639 flow_cache_flush(net); in xfrm_garbage_collect()
2643 static void xfrm_garbage_collect_deferred(struct net *net) in xfrm_garbage_collect_deferred() argument
2645 flow_cache_flush_deferred(net); in xfrm_garbage_collect_deferred()
2840 static int __net_init xfrm_statistics_init(struct net *net) in xfrm_statistics_init() argument
2843 net->mib.xfrm_statistics = alloc_percpu(struct linux_xfrm_mib); in xfrm_statistics_init()
2844 if (!net->mib.xfrm_statistics) in xfrm_statistics_init()
2846 rv = xfrm_proc_init(net); in xfrm_statistics_init()
2848 free_percpu(net->mib.xfrm_statistics); in xfrm_statistics_init()
2852 static void xfrm_statistics_fini(struct net *net) in xfrm_statistics_fini() argument
2854 xfrm_proc_fini(net); in xfrm_statistics_fini()
2855 free_percpu(net->mib.xfrm_statistics); in xfrm_statistics_fini()
2858 static int __net_init xfrm_statistics_init(struct net *net) in xfrm_statistics_init() argument
2863 static void xfrm_statistics_fini(struct net *net) in xfrm_statistics_fini() argument
2868 static int __net_init xfrm_policy_init(struct net *net) in xfrm_policy_init() argument
2873 if (net_eq(net, &init_net)) in xfrm_policy_init()
2882 net->xfrm.policy_byidx = xfrm_hash_alloc(sz); in xfrm_policy_init()
2883 if (!net->xfrm.policy_byidx) in xfrm_policy_init()
2885 net->xfrm.policy_idx_hmask = hmask; in xfrm_policy_init()
2890 net->xfrm.policy_count[dir] = 0; in xfrm_policy_init()
2891 INIT_HLIST_HEAD(&net->xfrm.policy_inexact[dir]); in xfrm_policy_init()
2893 htab = &net->xfrm.policy_bydst[dir]; in xfrm_policy_init()
2903 net->xfrm.policy_hthresh.lbits4 = 32; in xfrm_policy_init()
2904 net->xfrm.policy_hthresh.rbits4 = 32; in xfrm_policy_init()
2905 net->xfrm.policy_hthresh.lbits6 = 128; in xfrm_policy_init()
2906 net->xfrm.policy_hthresh.rbits6 = 128; in xfrm_policy_init()
2908 seqlock_init(&net->xfrm.policy_hthresh.lock); in xfrm_policy_init()
2910 INIT_LIST_HEAD(&net->xfrm.policy_all); in xfrm_policy_init()
2911 INIT_WORK(&net->xfrm.policy_hash_work, xfrm_hash_resize); in xfrm_policy_init()
2912 INIT_WORK(&net->xfrm.policy_hthresh.work, xfrm_hash_rebuild); in xfrm_policy_init()
2913 if (net_eq(net, &init_net)) in xfrm_policy_init()
2921 htab = &net->xfrm.policy_bydst[dir]; in xfrm_policy_init()
2924 xfrm_hash_free(net->xfrm.policy_byidx, sz); in xfrm_policy_init()
2929 static void xfrm_policy_fini(struct net *net) in xfrm_policy_fini() argument
2934 flush_work(&net->xfrm.policy_hash_work); in xfrm_policy_fini()
2936 xfrm_policy_flush(net, XFRM_POLICY_TYPE_SUB, false); in xfrm_policy_fini()
2938 xfrm_policy_flush(net, XFRM_POLICY_TYPE_MAIN, false); in xfrm_policy_fini()
2940 WARN_ON(!list_empty(&net->xfrm.policy_all)); in xfrm_policy_fini()
2945 WARN_ON(!hlist_empty(&net->xfrm.policy_inexact[dir])); in xfrm_policy_fini()
2947 htab = &net->xfrm.policy_bydst[dir]; in xfrm_policy_fini()
2953 sz = (net->xfrm.policy_idx_hmask + 1) * sizeof(struct hlist_head); in xfrm_policy_fini()
2954 WARN_ON(!hlist_empty(net->xfrm.policy_byidx)); in xfrm_policy_fini()
2955 xfrm_hash_free(net->xfrm.policy_byidx, sz); in xfrm_policy_fini()
2958 static int __net_init xfrm_net_init(struct net *net) in xfrm_net_init() argument
2963 spin_lock_init(&net->xfrm.xfrm_state_lock); in xfrm_net_init()
2964 rwlock_init(&net->xfrm.xfrm_policy_lock); in xfrm_net_init()
2965 mutex_init(&net->xfrm.xfrm_cfg_mutex); in xfrm_net_init()
2967 rv = xfrm_statistics_init(net); in xfrm_net_init()
2970 rv = xfrm_state_init(net); in xfrm_net_init()
2973 rv = xfrm_policy_init(net); in xfrm_net_init()
2976 rv = xfrm_sysctl_init(net); in xfrm_net_init()
2979 rv = flow_cache_init(net); in xfrm_net_init()
2986 xfrm_sysctl_fini(net); in xfrm_net_init()
2988 xfrm_policy_fini(net); in xfrm_net_init()
2990 xfrm_state_fini(net); in xfrm_net_init()
2992 xfrm_statistics_fini(net); in xfrm_net_init()
2997 static void __net_exit xfrm_net_exit(struct net *net) in xfrm_net_exit() argument
2999 flow_cache_fini(net); in xfrm_net_exit()
3000 xfrm_sysctl_fini(net); in xfrm_net_exit()
3001 xfrm_policy_fini(net); in xfrm_net_exit()
3002 xfrm_state_fini(net); in xfrm_net_exit()
3003 xfrm_statistics_fini(net); in xfrm_net_exit()
3105 u8 dir, u8 type, struct net *net) in xfrm_migrate_policy_find() argument
3111 read_lock_bh(&net->xfrm.xfrm_policy_lock); /*FIXME*/ in xfrm_migrate_policy_find()
3112 chain = policy_hash_direct(net, &sel->daddr, &sel->saddr, sel->family, dir); in xfrm_migrate_policy_find()
3121 chain = &net->xfrm.policy_inexact[dir]; in xfrm_migrate_policy_find()
3134 read_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_migrate_policy_find()
3245 struct xfrm_kmaddress *k, struct net *net) in xfrm_migrate() argument
3264 if ((pol = xfrm_migrate_policy_find(sel, dir, type, net)) == NULL) { in xfrm_migrate()
3271 if ((x = xfrm_migrate_state_find(mp, net))) { in xfrm_migrate()