Lines Matching refs:net
118 static inline struct dst_entry *__xfrm_dst_lookup(struct net *net, int tos, in __xfrm_dst_lookup() argument
130 dst = afinfo->dst_lookup(net, tos, saddr, daddr); in __xfrm_dst_lookup()
142 struct net *net = xs_net(x); in xfrm_dst_lookup() local
156 dst = __xfrm_dst_lookup(net, tos, saddr, daddr, family); in xfrm_dst_lookup()
280 struct xfrm_policy *xfrm_policy_alloc(struct net *net, gfp_t gfp) in xfrm_policy_alloc() argument
287 write_pnet(&policy->xp_net, net); in xfrm_policy_alloc()
348 static inline unsigned int idx_hash(struct net *net, u32 index) in idx_hash() argument
350 return __idx_hash(index, net->xfrm.policy_idx_hmask); in idx_hash()
354 static void __get_hash_thresh(struct net *net, in __get_hash_thresh() argument
360 *dbits = net->xfrm.policy_bydst[dir].dbits4; in __get_hash_thresh()
361 *sbits = net->xfrm.policy_bydst[dir].sbits4; in __get_hash_thresh()
365 *dbits = net->xfrm.policy_bydst[dir].dbits6; in __get_hash_thresh()
366 *sbits = net->xfrm.policy_bydst[dir].sbits6; in __get_hash_thresh()
375 static struct hlist_head *policy_hash_bysel(struct net *net, in policy_hash_bysel() argument
379 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; in policy_hash_bysel()
384 __get_hash_thresh(net, family, dir, &dbits, &sbits); in policy_hash_bysel()
388 &net->xfrm.policy_inexact[dir] : in policy_hash_bysel()
389 net->xfrm.policy_bydst[dir].table + hash); in policy_hash_bysel()
392 static struct hlist_head *policy_hash_direct(struct net *net, in policy_hash_direct() argument
397 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; in policy_hash_direct()
402 __get_hash_thresh(net, family, dir, &dbits, &sbits); in policy_hash_direct()
405 return net->xfrm.policy_bydst[dir].table + hash; in policy_hash_direct()
408 static void xfrm_dst_hash_transfer(struct net *net, in xfrm_dst_hash_transfer() argument
424 __get_hash_thresh(net, pol->family, dir, &dbits, &sbits); in xfrm_dst_hash_transfer()
465 static void xfrm_bydst_resize(struct net *net, int dir) in xfrm_bydst_resize() argument
467 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; in xfrm_bydst_resize()
470 struct hlist_head *odst = net->xfrm.policy_bydst[dir].table; in xfrm_bydst_resize()
477 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_bydst_resize()
480 xfrm_dst_hash_transfer(net, odst + i, ndst, nhashmask, dir); in xfrm_bydst_resize()
482 net->xfrm.policy_bydst[dir].table = ndst; in xfrm_bydst_resize()
483 net->xfrm.policy_bydst[dir].hmask = nhashmask; in xfrm_bydst_resize()
485 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_bydst_resize()
490 static void xfrm_byidx_resize(struct net *net, int total) in xfrm_byidx_resize() argument
492 unsigned int hmask = net->xfrm.policy_idx_hmask; in xfrm_byidx_resize()
495 struct hlist_head *oidx = net->xfrm.policy_byidx; in xfrm_byidx_resize()
502 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_byidx_resize()
507 net->xfrm.policy_byidx = nidx; in xfrm_byidx_resize()
508 net->xfrm.policy_idx_hmask = nhashmask; in xfrm_byidx_resize()
510 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_byidx_resize()
515 static inline int xfrm_bydst_should_resize(struct net *net, int dir, int *total) in xfrm_bydst_should_resize() argument
517 unsigned int cnt = net->xfrm.policy_count[dir]; in xfrm_bydst_should_resize()
518 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; in xfrm_bydst_should_resize()
530 static inline int xfrm_byidx_should_resize(struct net *net, int total) in xfrm_byidx_should_resize() argument
532 unsigned int hmask = net->xfrm.policy_idx_hmask; in xfrm_byidx_should_resize()
541 void xfrm_spd_getinfo(struct net *net, struct xfrmk_spdinfo *si) in xfrm_spd_getinfo() argument
543 read_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_spd_getinfo()
544 si->incnt = net->xfrm.policy_count[XFRM_POLICY_IN]; in xfrm_spd_getinfo()
545 si->outcnt = net->xfrm.policy_count[XFRM_POLICY_OUT]; in xfrm_spd_getinfo()
546 si->fwdcnt = net->xfrm.policy_count[XFRM_POLICY_FWD]; in xfrm_spd_getinfo()
547 si->inscnt = net->xfrm.policy_count[XFRM_POLICY_IN+XFRM_POLICY_MAX]; in xfrm_spd_getinfo()
548 si->outscnt = net->xfrm.policy_count[XFRM_POLICY_OUT+XFRM_POLICY_MAX]; in xfrm_spd_getinfo()
549 si->fwdscnt = net->xfrm.policy_count[XFRM_POLICY_FWD+XFRM_POLICY_MAX]; in xfrm_spd_getinfo()
550 si->spdhcnt = net->xfrm.policy_idx_hmask; in xfrm_spd_getinfo()
552 read_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_spd_getinfo()
559 struct net *net = container_of(work, struct net, xfrm.policy_hash_work); in xfrm_hash_resize() local
566 if (xfrm_bydst_should_resize(net, dir, &total)) in xfrm_hash_resize()
567 xfrm_bydst_resize(net, dir); in xfrm_hash_resize()
569 if (xfrm_byidx_should_resize(net, total)) in xfrm_hash_resize()
570 xfrm_byidx_resize(net, total); in xfrm_hash_resize()
577 struct net *net = container_of(work, struct net, in xfrm_hash_rebuild() local
594 seq = read_seqbegin(&net->xfrm.policy_hthresh.lock); in xfrm_hash_rebuild()
596 lbits4 = net->xfrm.policy_hthresh.lbits4; in xfrm_hash_rebuild()
597 rbits4 = net->xfrm.policy_hthresh.rbits4; in xfrm_hash_rebuild()
598 lbits6 = net->xfrm.policy_hthresh.lbits6; in xfrm_hash_rebuild()
599 rbits6 = net->xfrm.policy_hthresh.rbits6; in xfrm_hash_rebuild()
600 } while (read_seqretry(&net->xfrm.policy_hthresh.lock, seq)); in xfrm_hash_rebuild()
602 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_hash_rebuild()
606 INIT_HLIST_HEAD(&net->xfrm.policy_inexact[dir]); in xfrm_hash_rebuild()
607 hmask = net->xfrm.policy_bydst[dir].hmask; in xfrm_hash_rebuild()
608 odst = net->xfrm.policy_bydst[dir].table; in xfrm_hash_rebuild()
613 net->xfrm.policy_bydst[dir].dbits4 = rbits4; in xfrm_hash_rebuild()
614 net->xfrm.policy_bydst[dir].sbits4 = lbits4; in xfrm_hash_rebuild()
615 net->xfrm.policy_bydst[dir].dbits6 = rbits6; in xfrm_hash_rebuild()
616 net->xfrm.policy_bydst[dir].sbits6 = lbits6; in xfrm_hash_rebuild()
619 net->xfrm.policy_bydst[dir].dbits4 = lbits4; in xfrm_hash_rebuild()
620 net->xfrm.policy_bydst[dir].sbits4 = rbits4; in xfrm_hash_rebuild()
621 net->xfrm.policy_bydst[dir].dbits6 = lbits6; in xfrm_hash_rebuild()
622 net->xfrm.policy_bydst[dir].sbits6 = rbits6; in xfrm_hash_rebuild()
627 list_for_each_entry_reverse(policy, &net->xfrm.policy_all, walk.all) { in xfrm_hash_rebuild()
629 chain = policy_hash_bysel(net, &policy->selector, in xfrm_hash_rebuild()
644 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_hash_rebuild()
649 void xfrm_policy_hash_rebuild(struct net *net) in xfrm_policy_hash_rebuild() argument
651 schedule_work(&net->xfrm.policy_hthresh.work); in xfrm_policy_hash_rebuild()
657 static u32 xfrm_gen_index(struct net *net, int dir, u32 index) in xfrm_gen_index() argument
677 list = net->xfrm.policy_byidx + idx_hash(net, idx); in xfrm_gen_index()
749 struct net *net = xp_net(policy); in xfrm_policy_insert() local
755 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_insert()
756 chain = policy_hash_bysel(net, &policy->selector, policy->family, dir); in xfrm_policy_insert()
766 write_unlock_bh(&net->xfrm.xfrm_policy_lock); 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 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_insert()
806 else if (xfrm_bydst_should_resize(net, dir, NULL)) in xfrm_policy_insert()
807 schedule_work(&net->xfrm.policy_hash_work); in xfrm_policy_insert()
813 struct xfrm_policy *xfrm_policy_bysel_ctx(struct net *net, u32 mark, u8 type, in xfrm_policy_bysel_ctx() argument
822 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_bysel_ctx()
823 chain = policy_hash_bysel(net, sel, sel->family, dir); in xfrm_policy_bysel_ctx()
835 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_bysel_ctx()
844 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_bysel_ctx()
852 struct xfrm_policy *xfrm_policy_byid(struct net *net, u32 mark, u8 type, in xfrm_policy_byid() argument
863 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_byid()
864 chain = net->xfrm.policy_byidx + idx_hash(net, id); in xfrm_policy_byid()
874 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_byid()
883 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_byid()
893 xfrm_policy_flush_secctx_check(struct net *net, u8 type, bool task_valid) in xfrm_policy_flush_secctx_check() argument
902 &net->xfrm.policy_inexact[dir], bydst) { in xfrm_policy_flush_secctx_check()
911 for (i = net->xfrm.policy_bydst[dir].hmask; i >= 0; i--) { in xfrm_policy_flush_secctx_check()
913 net->xfrm.policy_bydst[dir].table + i, in xfrm_policy_flush_secctx_check()
931 xfrm_policy_flush_secctx_check(struct net *net, u8 type, bool task_valid) in xfrm_policy_flush_secctx_check() argument
937 int xfrm_policy_flush(struct net *net, u8 type, bool task_valid) in xfrm_policy_flush() argument
941 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_flush()
943 err = xfrm_policy_flush_secctx_check(net, type, task_valid); in xfrm_policy_flush()
953 &net->xfrm.policy_inexact[dir], bydst) { in xfrm_policy_flush()
957 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_flush()
964 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_flush()
968 for (i = net->xfrm.policy_bydst[dir].hmask; i >= 0; i--) { in xfrm_policy_flush()
971 net->xfrm.policy_bydst[dir].table + i, in xfrm_policy_flush()
976 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_flush()
982 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_flush()
991 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_flush()
996 int xfrm_policy_walk(struct net *net, struct xfrm_policy_walk *walk, in xfrm_policy_walk() argument
1011 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_walk()
1013 x = list_first_entry(&net->xfrm.policy_all, struct xfrm_policy_walk_entry, all); in xfrm_policy_walk()
1016 list_for_each_entry_from(x, &net->xfrm.policy_all, all) { in xfrm_policy_walk()
1037 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_walk()
1051 void xfrm_policy_walk_done(struct xfrm_policy_walk *walk, struct net *net) in xfrm_policy_walk_done() argument
1056 write_lock_bh(&net->xfrm.xfrm_policy_lock); /*FIXME where is net? */ in xfrm_policy_walk_done()
1058 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_walk_done()
1088 static struct xfrm_policy *xfrm_policy_lookup_bytype(struct net *net, u8 type, in xfrm_policy_lookup_bytype() argument
1103 read_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_lookup_bytype()
1104 chain = policy_hash_direct(net, daddr, saddr, family, dir); in xfrm_policy_lookup_bytype()
1121 chain = &net->xfrm.policy_inexact[dir]; in xfrm_policy_lookup_bytype()
1139 read_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_lookup_bytype()
1145 __xfrm_policy_lookup(struct net *net, const struct flowi *fl, u16 family, u8 dir) in __xfrm_policy_lookup() argument
1150 pol = xfrm_policy_lookup_bytype(net, XFRM_POLICY_TYPE_SUB, fl, family, dir); in __xfrm_policy_lookup()
1154 return xfrm_policy_lookup_bytype(net, XFRM_POLICY_TYPE_MAIN, fl, family, dir); in __xfrm_policy_lookup()
1176 xfrm_policy_lookup(struct net *net, const struct flowi *fl, u16 family, in xfrm_policy_lookup() argument
1184 pol = __xfrm_policy_lookup(net, fl, family, flow_to_policy_dir(dir)); in xfrm_policy_lookup()
1216 struct net *net = sock_net(sk); in xfrm_sk_policy_lookup() local
1218 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
1250 list_add(&pol->walk.all, &net->xfrm.policy_all); in __xfrm_policy_link()
1251 net->xfrm.policy_count[dir]++; in __xfrm_policy_link()
1258 struct net *net = xp_net(pol); in __xfrm_policy_unlink() local
1270 net->xfrm.policy_count[dir]--; in __xfrm_policy_unlink()
1287 struct net *net = xp_net(pol); in xfrm_policy_delete() local
1289 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_delete()
1291 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_delete()
1302 struct net *net = xp_net(pol); in xfrm_sk_policy_insert() local
1310 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_sk_policy_insert()
1315 pol->index = xfrm_gen_index(net, XFRM_POLICY_MAX+dir, 0); in xfrm_sk_policy_insert()
1327 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_sk_policy_insert()
1338 struct net *net = xp_net(old); in clone_policy() local
1357 write_lock_bh(&net->xfrm.xfrm_policy_lock); in clone_policy()
1359 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in clone_policy()
1379 xfrm_get_saddr(struct net *net, xfrm_address_t *local, xfrm_address_t *remote, in xfrm_get_saddr() argument
1387 err = afinfo->get_saddr(net, local, remote); in xfrm_get_saddr()
1398 struct net *net = xp_net(policy); in xfrm_tmpl_resolve_one() local
1416 error = xfrm_get_saddr(net, &tmp, remote, tmpl->encap_family); in xfrm_tmpl_resolve_one()
1557 static inline struct xfrm_dst *xfrm_alloc_dst(struct net *net, int family) in xfrm_alloc_dst() argument
1568 dst_ops = &net->xfrm.xfrm4_dst_ops; in xfrm_alloc_dst()
1572 dst_ops = &net->xfrm.xfrm6_dst_ops; in xfrm_alloc_dst()
1586 afinfo->init_dst(net, xdst); in xfrm_alloc_dst()
1639 struct net *net = xp_net(policy); in xfrm_bundle_create() local
1664 struct xfrm_dst *xdst = xfrm_alloc_dst(net, family); in xfrm_bundle_create()
1846 struct net *net = xp_net(pols[0]); in xfrm_resolve_and_create_bundle() local
1856 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTPOLERROR); in xfrm_resolve_and_create_bundle()
1862 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTBUNDLEGENERROR); in xfrm_resolve_and_create_bundle()
1874 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTBUNDLECHECKERROR); in xfrm_resolve_and_create_bundle()
2004 static struct xfrm_dst *xfrm_create_dummy_bundle(struct net *net, in xfrm_create_dummy_bundle() argument
2016 xdst = xfrm_alloc_dst(net, family); in xfrm_create_dummy_bundle()
2021 net->xfrm.sysctl_larval_drop || in xfrm_create_dummy_bundle()
2064 xfrm_bundle_lookup(struct net *net, const struct flowi *fl, u16 family, u8 dir, in xfrm_bundle_lookup() argument
2096 pols[0] = __xfrm_policy_lookup(net, fl, family, in xfrm_bundle_lookup()
2143 xdst = xfrm_create_dummy_bundle(net, xflo, fl, num_xfrms, family); in xfrm_bundle_lookup()
2156 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTPOLERROR); in xfrm_bundle_lookup()
2165 static struct dst_entry *make_blackhole(struct net *net, u16 family, in make_blackhole() argument
2175 ret = afinfo->blackhole_route(net, dst_orig); in make_blackhole()
2187 struct dst_entry *xfrm_lookup(struct net *net, struct dst_entry *dst_orig, in xfrm_lookup() argument
2244 !net->xfrm.policy_count[XFRM_POLICY_OUT]) in xfrm_lookup()
2247 flo = flow_cache_lookup(net, fl, family, dir, in xfrm_lookup()
2271 if (net->xfrm.sysctl_larval_drop) { in xfrm_lookup()
2272 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTNOSTATES); in xfrm_lookup()
2279 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTNOSTATES); in xfrm_lookup()
2298 XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTPOLBLOCK); in xfrm_lookup()
2335 struct dst_entry *xfrm_lookup_route(struct net *net, struct dst_entry *dst_orig, in xfrm_lookup_route() argument
2339 struct dst_entry *dst = xfrm_lookup(net, dst_orig, fl, sk, in xfrm_lookup_route()
2344 return make_blackhole(net, dst_orig->ops->family, dst_orig); in xfrm_lookup_route()
2446 struct net *net = dev_net(skb->dev); in __xfrm_policy_check() local
2462 XFRM_INC_STATS(net, LINUX_MIB_XFRMINHDRERROR); in __xfrm_policy_check()
2475 XFRM_INC_STATS(net, LINUX_MIB_XFRMINSTATEMISMATCH); in __xfrm_policy_check()
2485 XFRM_INC_STATS(net, LINUX_MIB_XFRMINPOLERROR); in __xfrm_policy_check()
2493 flo = flow_cache_lookup(net, &fl, family, fl_dir, in __xfrm_policy_check()
2502 XFRM_INC_STATS(net, LINUX_MIB_XFRMINPOLERROR); in __xfrm_policy_check()
2509 XFRM_INC_STATS(net, LINUX_MIB_XFRMINNOPOLS); in __xfrm_policy_check()
2521 pols[1] = xfrm_policy_lookup_bytype(net, XFRM_POLICY_TYPE_MAIN, in __xfrm_policy_check()
2526 XFRM_INC_STATS(net, LINUX_MIB_XFRMINPOLERROR); in __xfrm_policy_check()
2550 XFRM_INC_STATS(net, LINUX_MIB_XFRMINPOLBLOCK); in __xfrm_policy_check()
2554 XFRM_INC_STATS(net, LINUX_MIB_XFRMINBUFFERERROR); in __xfrm_policy_check()
2562 xfrm_tmpl_sort(stp, tpp, xfrm_nr, family, net); in __xfrm_policy_check()
2578 XFRM_INC_STATS(net, LINUX_MIB_XFRMINTMPLMISMATCH); in __xfrm_policy_check()
2584 XFRM_INC_STATS(net, LINUX_MIB_XFRMINTMPLMISMATCH); in __xfrm_policy_check()
2591 XFRM_INC_STATS(net, LINUX_MIB_XFRMINPOLBLOCK); in __xfrm_policy_check()
2603 struct net *net = dev_net(skb->dev); in __xfrm_route_forward() local
2609 XFRM_INC_STATS(net, LINUX_MIB_XFRMFWDHDRERROR); in __xfrm_route_forward()
2615 dst = xfrm_lookup(net, skb_dst(skb), &fl, NULL, XFRM_LOOKUP_QUEUE); in __xfrm_route_forward()
2687 void xfrm_garbage_collect(struct net *net) in xfrm_garbage_collect() argument
2689 flow_cache_flush(net); in xfrm_garbage_collect()
2693 static void xfrm_garbage_collect_deferred(struct net *net) in xfrm_garbage_collect_deferred() argument
2695 flow_cache_flush_deferred(net); in xfrm_garbage_collect_deferred()
2890 static int __net_init xfrm_statistics_init(struct net *net) in xfrm_statistics_init() argument
2893 net->mib.xfrm_statistics = alloc_percpu(struct linux_xfrm_mib); in xfrm_statistics_init()
2894 if (!net->mib.xfrm_statistics) in xfrm_statistics_init()
2896 rv = xfrm_proc_init(net); in xfrm_statistics_init()
2898 free_percpu(net->mib.xfrm_statistics); in xfrm_statistics_init()
2902 static void xfrm_statistics_fini(struct net *net) in xfrm_statistics_fini() argument
2904 xfrm_proc_fini(net); in xfrm_statistics_fini()
2905 free_percpu(net->mib.xfrm_statistics); in xfrm_statistics_fini()
2908 static int __net_init xfrm_statistics_init(struct net *net) in xfrm_statistics_init() argument
2913 static void xfrm_statistics_fini(struct net *net) in xfrm_statistics_fini() argument
2918 static int __net_init xfrm_policy_init(struct net *net) in xfrm_policy_init() argument
2923 if (net_eq(net, &init_net)) in xfrm_policy_init()
2932 net->xfrm.policy_byidx = xfrm_hash_alloc(sz); in xfrm_policy_init()
2933 if (!net->xfrm.policy_byidx) in xfrm_policy_init()
2935 net->xfrm.policy_idx_hmask = hmask; in xfrm_policy_init()
2940 net->xfrm.policy_count[dir] = 0; in xfrm_policy_init()
2941 net->xfrm.policy_count[XFRM_POLICY_MAX + dir] = 0; in xfrm_policy_init()
2942 INIT_HLIST_HEAD(&net->xfrm.policy_inexact[dir]); in xfrm_policy_init()
2944 htab = &net->xfrm.policy_bydst[dir]; in xfrm_policy_init()
2954 net->xfrm.policy_hthresh.lbits4 = 32; in xfrm_policy_init()
2955 net->xfrm.policy_hthresh.rbits4 = 32; in xfrm_policy_init()
2956 net->xfrm.policy_hthresh.lbits6 = 128; in xfrm_policy_init()
2957 net->xfrm.policy_hthresh.rbits6 = 128; in xfrm_policy_init()
2959 seqlock_init(&net->xfrm.policy_hthresh.lock); in xfrm_policy_init()
2961 INIT_LIST_HEAD(&net->xfrm.policy_all); in xfrm_policy_init()
2962 INIT_WORK(&net->xfrm.policy_hash_work, xfrm_hash_resize); in xfrm_policy_init()
2963 INIT_WORK(&net->xfrm.policy_hthresh.work, xfrm_hash_rebuild); in xfrm_policy_init()
2964 if (net_eq(net, &init_net)) in xfrm_policy_init()
2972 htab = &net->xfrm.policy_bydst[dir]; in xfrm_policy_init()
2975 xfrm_hash_free(net->xfrm.policy_byidx, sz); in xfrm_policy_init()
2980 static void xfrm_policy_fini(struct net *net) in xfrm_policy_fini() argument
2985 flush_work(&net->xfrm.policy_hash_work); in xfrm_policy_fini()
2987 xfrm_policy_flush(net, XFRM_POLICY_TYPE_SUB, false); in xfrm_policy_fini()
2989 xfrm_policy_flush(net, XFRM_POLICY_TYPE_MAIN, false); in xfrm_policy_fini()
2991 WARN_ON(!list_empty(&net->xfrm.policy_all)); in xfrm_policy_fini()
2996 WARN_ON(!hlist_empty(&net->xfrm.policy_inexact[dir])); in xfrm_policy_fini()
2998 htab = &net->xfrm.policy_bydst[dir]; in xfrm_policy_fini()
3004 sz = (net->xfrm.policy_idx_hmask + 1) * sizeof(struct hlist_head); in xfrm_policy_fini()
3005 WARN_ON(!hlist_empty(net->xfrm.policy_byidx)); in xfrm_policy_fini()
3006 xfrm_hash_free(net->xfrm.policy_byidx, sz); in xfrm_policy_fini()
3009 static int __net_init xfrm_net_init(struct net *net) in xfrm_net_init() argument
3013 rv = xfrm_statistics_init(net); in xfrm_net_init()
3016 rv = xfrm_state_init(net); in xfrm_net_init()
3019 rv = xfrm_policy_init(net); in xfrm_net_init()
3022 rv = xfrm_sysctl_init(net); in xfrm_net_init()
3025 rv = flow_cache_init(net); in xfrm_net_init()
3030 spin_lock_init(&net->xfrm.xfrm_state_lock); in xfrm_net_init()
3031 rwlock_init(&net->xfrm.xfrm_policy_lock); in xfrm_net_init()
3032 mutex_init(&net->xfrm.xfrm_cfg_mutex); in xfrm_net_init()
3037 xfrm_sysctl_fini(net); in xfrm_net_init()
3039 xfrm_policy_fini(net); in xfrm_net_init()
3041 xfrm_state_fini(net); in xfrm_net_init()
3043 xfrm_statistics_fini(net); in xfrm_net_init()
3048 static void __net_exit xfrm_net_exit(struct net *net) in xfrm_net_exit() argument
3050 flow_cache_fini(net); in xfrm_net_exit()
3051 xfrm_sysctl_fini(net); in xfrm_net_exit()
3052 xfrm_policy_fini(net); in xfrm_net_exit()
3053 xfrm_state_fini(net); in xfrm_net_exit()
3054 xfrm_statistics_fini(net); in xfrm_net_exit()
3156 u8 dir, u8 type, struct net *net) in xfrm_migrate_policy_find() argument
3162 read_lock_bh(&net->xfrm.xfrm_policy_lock); /*FIXME*/ in xfrm_migrate_policy_find()
3163 chain = policy_hash_direct(net, &sel->daddr, &sel->saddr, sel->family, dir); in xfrm_migrate_policy_find()
3172 chain = &net->xfrm.policy_inexact[dir]; in xfrm_migrate_policy_find()
3185 read_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_migrate_policy_find()
3296 struct xfrm_kmaddress *k, struct net *net) in xfrm_migrate() argument
3309 if ((pol = xfrm_migrate_policy_find(sel, dir, type, net)) == NULL) { in xfrm_migrate()
3316 if ((x = xfrm_migrate_state_find(mp, net))) { in xfrm_migrate()