Lines Matching refs:xfrm
351 return __idx_hash(index, net->xfrm.policy_idx_hmask); in idx_hash()
361 *dbits = net->xfrm.policy_bydst[dir].dbits4; in __get_hash_thresh()
362 *sbits = net->xfrm.policy_bydst[dir].sbits4; in __get_hash_thresh()
366 *dbits = net->xfrm.policy_bydst[dir].dbits6; in __get_hash_thresh()
367 *sbits = net->xfrm.policy_bydst[dir].sbits6; in __get_hash_thresh()
380 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; in policy_hash_bysel()
389 &net->xfrm.policy_inexact[dir] : in policy_hash_bysel()
390 net->xfrm.policy_bydst[dir].table + hash); in policy_hash_bysel()
398 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; in policy_hash_direct()
406 return net->xfrm.policy_bydst[dir].table + hash; in policy_hash_direct()
468 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; in xfrm_bydst_resize()
471 struct hlist_head *odst = net->xfrm.policy_bydst[dir].table; in xfrm_bydst_resize()
478 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_bydst_resize()
483 net->xfrm.policy_bydst[dir].table = ndst; in xfrm_bydst_resize()
484 net->xfrm.policy_bydst[dir].hmask = nhashmask; in xfrm_bydst_resize()
486 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_bydst_resize()
493 unsigned int hmask = net->xfrm.policy_idx_hmask; in xfrm_byidx_resize()
496 struct hlist_head *oidx = net->xfrm.policy_byidx; in xfrm_byidx_resize()
503 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_byidx_resize()
508 net->xfrm.policy_byidx = nidx; in xfrm_byidx_resize()
509 net->xfrm.policy_idx_hmask = nhashmask; in xfrm_byidx_resize()
511 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_byidx_resize()
518 unsigned int cnt = net->xfrm.policy_count[dir]; in xfrm_bydst_should_resize()
519 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; in xfrm_bydst_should_resize()
533 unsigned int hmask = net->xfrm.policy_idx_hmask; in xfrm_byidx_should_resize()
544 read_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_spd_getinfo()
545 si->incnt = net->xfrm.policy_count[XFRM_POLICY_IN]; in xfrm_spd_getinfo()
546 si->outcnt = net->xfrm.policy_count[XFRM_POLICY_OUT]; in xfrm_spd_getinfo()
547 si->fwdcnt = net->xfrm.policy_count[XFRM_POLICY_FWD]; in xfrm_spd_getinfo()
548 si->inscnt = net->xfrm.policy_count[XFRM_POLICY_IN+XFRM_POLICY_MAX]; in xfrm_spd_getinfo()
549 si->outscnt = net->xfrm.policy_count[XFRM_POLICY_OUT+XFRM_POLICY_MAX]; in xfrm_spd_getinfo()
550 si->fwdscnt = net->xfrm.policy_count[XFRM_POLICY_FWD+XFRM_POLICY_MAX]; in xfrm_spd_getinfo()
551 si->spdhcnt = net->xfrm.policy_idx_hmask; in xfrm_spd_getinfo()
553 read_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_spd_getinfo()
560 struct net *net = container_of(work, struct net, xfrm.policy_hash_work); in xfrm_hash_resize()
579 xfrm.policy_hthresh.work); in xfrm_hash_rebuild()
595 seq = read_seqbegin(&net->xfrm.policy_hthresh.lock); in xfrm_hash_rebuild()
597 lbits4 = net->xfrm.policy_hthresh.lbits4; in xfrm_hash_rebuild()
598 rbits4 = net->xfrm.policy_hthresh.rbits4; in xfrm_hash_rebuild()
599 lbits6 = net->xfrm.policy_hthresh.lbits6; in xfrm_hash_rebuild()
600 rbits6 = net->xfrm.policy_hthresh.rbits6; in xfrm_hash_rebuild()
601 } while (read_seqretry(&net->xfrm.policy_hthresh.lock, seq)); in xfrm_hash_rebuild()
603 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_hash_rebuild()
607 INIT_HLIST_HEAD(&net->xfrm.policy_inexact[dir]); in xfrm_hash_rebuild()
608 hmask = net->xfrm.policy_bydst[dir].hmask; in xfrm_hash_rebuild()
609 odst = net->xfrm.policy_bydst[dir].table; in xfrm_hash_rebuild()
614 net->xfrm.policy_bydst[dir].dbits4 = rbits4; in xfrm_hash_rebuild()
615 net->xfrm.policy_bydst[dir].sbits4 = lbits4; in xfrm_hash_rebuild()
616 net->xfrm.policy_bydst[dir].dbits6 = rbits6; in xfrm_hash_rebuild()
617 net->xfrm.policy_bydst[dir].sbits6 = lbits6; in xfrm_hash_rebuild()
620 net->xfrm.policy_bydst[dir].dbits4 = lbits4; in xfrm_hash_rebuild()
621 net->xfrm.policy_bydst[dir].sbits4 = rbits4; in xfrm_hash_rebuild()
622 net->xfrm.policy_bydst[dir].dbits6 = lbits6; in xfrm_hash_rebuild()
623 net->xfrm.policy_bydst[dir].sbits6 = rbits6; in xfrm_hash_rebuild()
628 list_for_each_entry_reverse(policy, &net->xfrm.policy_all, walk.all) { in xfrm_hash_rebuild()
645 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_hash_rebuild()
652 schedule_work(&net->xfrm.policy_hthresh.work); in xfrm_policy_hash_rebuild()
678 list = net->xfrm.policy_byidx + idx_hash(net, idx); in xfrm_gen_index()
756 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_insert()
767 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_insert()
785 atomic_inc(&net->xfrm.flow_cache_genid); in xfrm_policy_insert()
798 hlist_add_head(&policy->byidx, net->xfrm.policy_byidx+idx_hash(net, policy->index)); in xfrm_policy_insert()
803 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_insert()
808 schedule_work(&net->xfrm.policy_hash_work); in xfrm_policy_insert()
823 write_lock_bh(&net->xfrm.xfrm_policy_lock); 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()
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()
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()
942 write_lock_bh(&net->xfrm.xfrm_policy_lock); 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()
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()
1019 list_for_each_entry_from(x, &net->xfrm.policy_all, all) { in xfrm_policy_walk()
1040 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_walk()
1059 write_lock_bh(&net->xfrm.xfrm_policy_lock); /*FIXME where is net? */ in xfrm_policy_walk_done()
1061 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_walk_done()
1106 read_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_lookup_bytype()
1124 chain = &net->xfrm.policy_inexact[dir]; in xfrm_policy_lookup_bytype()
1145 read_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_lookup_bytype()
1225 read_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_sk_policy_lookup()
1250 read_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_sk_policy_lookup()
1259 list_add(&pol->walk.all, &net->xfrm.policy_all); in __xfrm_policy_link()
1260 net->xfrm.policy_count[dir]++; in __xfrm_policy_link()
1279 net->xfrm.policy_count[dir]--; in __xfrm_policy_unlink()
1298 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_delete()
1300 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_policy_delete()
1319 write_lock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_sk_policy_insert()
1321 lockdep_is_held(&net->xfrm.xfrm_policy_lock)); in xfrm_sk_policy_insert()
1337 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_sk_policy_insert()
1367 write_lock_bh(&net->xfrm.xfrm_policy_lock); in clone_policy()
1369 write_unlock_bh(&net->xfrm.xfrm_policy_lock); in clone_policy()
1415 struct xfrm_state **xfrm, unsigned short family) in xfrm_tmpl_resolve_one() argument
1447 xfrm[nx++] = x; in xfrm_tmpl_resolve_one()
1467 xfrm_state_put(xfrm[nx]); in xfrm_tmpl_resolve_one()
1473 struct xfrm_state **xfrm, unsigned short family) in xfrm_tmpl_resolve() argument
1476 struct xfrm_state **tpp = (npols > 1) ? tp : xfrm; in xfrm_tmpl_resolve()
1498 xfrm_state_sort(xfrm, tpp, cnx, family); in xfrm_tmpl_resolve()
1589 dst_ops = &net->xfrm.xfrm4_dst_ops; in xfrm_alloc_dst()
1593 dst_ops = &net->xfrm.xfrm6_dst_ops; in xfrm_alloc_dst()
1654 struct xfrm_state **xfrm, int nx, in xfrm_bundle_create() argument
1692 if (xfrm[i]->sel.family == AF_UNSPEC) { in xfrm_bundle_create()
1693 inner_mode = xfrm_ip2inner_mode(xfrm[i], in xfrm_bundle_create()
1701 inner_mode = xfrm[i]->inner_mode; in xfrm_bundle_create()
1713 if (xfrm[i]->props.mode != XFRM_MODE_TRANSPORT) { in xfrm_bundle_create()
1714 family = xfrm[i]->props.family; in xfrm_bundle_create()
1715 dst = xfrm_dst_lookup(xfrm[i], tos, fl->flowi_oif, in xfrm_bundle_create()
1723 dst1->xfrm = xfrm[i]; in xfrm_bundle_create()
1724 xdst->xfrm_genid = xfrm[i]->genid; in xfrm_bundle_create()
1736 header_len += xfrm[i]->props.header_len; in xfrm_bundle_create()
1737 if (xfrm[i]->type->flags & XFRM_TYPE_NON_FRAGMENT) in xfrm_bundle_create()
1738 nfheader_len += xfrm[i]->props.header_len; in xfrm_bundle_create()
1739 trailer_len += xfrm[i]->props.trailer_len; in xfrm_bundle_create()
1762 header_len -= xdst->u.dst.xfrm->props.header_len; in xfrm_bundle_create()
1763 trailer_len -= xdst->u.dst.xfrm->props.trailer_len; in xfrm_bundle_create()
1771 xfrm_state_put(xfrm[i]); in xfrm_bundle_create()
1866 struct xfrm_state *xfrm[XFRM_MAX_DEPTH]; in xfrm_resolve_and_create_bundle() local
1872 err = xfrm_tmpl_resolve(pols, num_pols, fl, xfrm, family); in xfrm_resolve_and_create_bundle()
1879 dst = xfrm_bundle_create(pols[0], xfrm, err, fl, dst_orig); in xfrm_resolve_and_create_bundle()
2039 net->xfrm.sysctl_larval_drop || in xfrm_create_dummy_bundle()
2263 !net->xfrm.policy_count[XFRM_POLICY_OUT]) in xfrm_lookup()
2290 if (net->xfrm.sysctl_larval_drop) { in xfrm_lookup()
2330 if (dst && dst->xfrm && in xfrm_lookup()
2331 dst->xfrm->props.mode == XFRM_MODE_TUNNEL) in xfrm_lookup()
2683 while ((dst = dst->child) && dst->xfrm && dst->dev == dev) { in xfrm_dst_ifdown()
2727 pmtu = xfrm_state_mtu(dst->xfrm, pmtu); in xfrm_init_pmtu()
2761 if (dst->xfrm->km.state != XFRM_STATE_VALID) in xfrm_bundle_ok()
2763 if (xdst->xfrm_genid != dst->xfrm->genid) in xfrm_bundle_ok()
2784 } while (dst->xfrm); in xfrm_bundle_ok()
2793 mtu = xfrm_state_mtu(dst->xfrm, mtu); in xfrm_bundle_ok()
2952 net->xfrm.policy_byidx = xfrm_hash_alloc(sz); in xfrm_policy_init()
2953 if (!net->xfrm.policy_byidx) in xfrm_policy_init()
2955 net->xfrm.policy_idx_hmask = hmask; in xfrm_policy_init()
2960 net->xfrm.policy_count[dir] = 0; in xfrm_policy_init()
2961 net->xfrm.policy_count[XFRM_POLICY_MAX + dir] = 0; in xfrm_policy_init()
2962 INIT_HLIST_HEAD(&net->xfrm.policy_inexact[dir]); in xfrm_policy_init()
2964 htab = &net->xfrm.policy_bydst[dir]; in xfrm_policy_init()
2974 net->xfrm.policy_hthresh.lbits4 = 32; in xfrm_policy_init()
2975 net->xfrm.policy_hthresh.rbits4 = 32; in xfrm_policy_init()
2976 net->xfrm.policy_hthresh.lbits6 = 128; in xfrm_policy_init()
2977 net->xfrm.policy_hthresh.rbits6 = 128; in xfrm_policy_init()
2979 seqlock_init(&net->xfrm.policy_hthresh.lock); in xfrm_policy_init()
2981 INIT_LIST_HEAD(&net->xfrm.policy_all); in xfrm_policy_init()
2982 INIT_WORK(&net->xfrm.policy_hash_work, xfrm_hash_resize); in xfrm_policy_init()
2983 INIT_WORK(&net->xfrm.policy_hthresh.work, xfrm_hash_rebuild); in xfrm_policy_init()
2992 htab = &net->xfrm.policy_bydst[dir]; in xfrm_policy_init()
2995 xfrm_hash_free(net->xfrm.policy_byidx, sz); in xfrm_policy_init()
3005 flush_work(&net->xfrm.policy_hash_work); in xfrm_policy_fini()
3011 WARN_ON(!list_empty(&net->xfrm.policy_all)); in xfrm_policy_fini()
3016 WARN_ON(!hlist_empty(&net->xfrm.policy_inexact[dir])); in xfrm_policy_fini()
3018 htab = &net->xfrm.policy_bydst[dir]; in xfrm_policy_fini()
3024 sz = (net->xfrm.policy_idx_hmask + 1) * sizeof(struct hlist_head); in xfrm_policy_fini()
3025 WARN_ON(!hlist_empty(net->xfrm.policy_byidx)); in xfrm_policy_fini()
3026 xfrm_hash_free(net->xfrm.policy_byidx, sz); in xfrm_policy_fini()
3050 spin_lock_init(&net->xfrm.xfrm_state_lock); in xfrm_net_init()
3051 rwlock_init(&net->xfrm.xfrm_policy_lock); in xfrm_net_init()
3052 mutex_init(&net->xfrm.xfrm_cfg_mutex); in xfrm_net_init()
3182 read_lock_bh(&net->xfrm.xfrm_policy_lock); /*FIXME*/ in xfrm_migrate_policy_find()
3192 chain = &net->xfrm.policy_inexact[dir]; in xfrm_migrate_policy_find()
3206 read_unlock_bh(&net->xfrm.xfrm_policy_lock); in xfrm_migrate_policy_find()