Lines Matching refs:dir
62 static void __xfrm_policy_link(struct xfrm_policy *pol, int dir);
64 int dir);
194 int dir; in xfrm_policy_timer() local
201 dir = xfrm_policy_id2dir(xp->index); in xfrm_policy_timer()
241 km_policy_expired(xp, dir, 0, 0); in xfrm_policy_timer()
253 if (!xfrm_policy_delete(xp, dir)) in xfrm_policy_timer()
254 km_policy_expired(xp, dir, 1, 0); in xfrm_policy_timer()
337 unsigned short family, int dir, in __get_hash_thresh() argument
342 *dbits = net->xfrm.policy_bydst[dir].dbits4; in __get_hash_thresh()
343 *sbits = net->xfrm.policy_bydst[dir].sbits4; in __get_hash_thresh()
347 *dbits = net->xfrm.policy_bydst[dir].dbits6; in __get_hash_thresh()
348 *sbits = net->xfrm.policy_bydst[dir].sbits6; in __get_hash_thresh()
359 unsigned short family, int dir) in policy_hash_bysel() argument
361 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; in policy_hash_bysel()
366 __get_hash_thresh(net, family, dir, &dbits, &sbits); in policy_hash_bysel()
370 return &net->xfrm.policy_inexact[dir]; in policy_hash_bysel()
372 return rcu_dereference_check(net->xfrm.policy_bydst[dir].table, in policy_hash_bysel()
379 unsigned short family, int dir) in policy_hash_direct() argument
381 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; in policy_hash_direct()
386 __get_hash_thresh(net, family, dir, &dbits, &sbits); in policy_hash_direct()
389 return rcu_dereference_check(net->xfrm.policy_bydst[dir].table, in policy_hash_direct()
397 int dir) in xfrm_dst_hash_transfer() argument
409 __get_hash_thresh(net, pol->family, dir, &dbits, &sbits); in xfrm_dst_hash_transfer()
450 static void xfrm_bydst_resize(struct net *net, int dir) in xfrm_bydst_resize() argument
452 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; in xfrm_bydst_resize()
465 odst = rcu_dereference_protected(net->xfrm.policy_bydst[dir].table, in xfrm_bydst_resize()
468 odst = rcu_dereference_protected(net->xfrm.policy_bydst[dir].table, in xfrm_bydst_resize()
472 xfrm_dst_hash_transfer(net, odst + i, ndst, nhashmask, dir); in xfrm_bydst_resize()
474 rcu_assign_pointer(net->xfrm.policy_bydst[dir].table, ndst); in xfrm_bydst_resize()
475 net->xfrm.policy_bydst[dir].hmask = nhashmask; in xfrm_bydst_resize()
510 static inline int xfrm_bydst_should_resize(struct net *net, int dir, int *total) in xfrm_bydst_should_resize() argument
512 unsigned int cnt = net->xfrm.policy_count[dir]; in xfrm_bydst_should_resize()
513 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; in xfrm_bydst_should_resize()
553 int dir, total; in xfrm_hash_resize() local
558 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) { in xfrm_hash_resize()
559 if (xfrm_bydst_should_resize(net, dir, &total)) in xfrm_hash_resize()
560 xfrm_bydst_resize(net, dir); in xfrm_hash_resize()
579 int dir; in xfrm_hash_rebuild() local
598 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) { in xfrm_hash_rebuild()
599 INIT_HLIST_HEAD(&net->xfrm.policy_inexact[dir]); in xfrm_hash_rebuild()
600 hmask = net->xfrm.policy_bydst[dir].hmask; in xfrm_hash_rebuild()
601 odst = net->xfrm.policy_bydst[dir].table; in xfrm_hash_rebuild()
604 if ((dir & XFRM_POLICY_MASK) == XFRM_POLICY_OUT) { in xfrm_hash_rebuild()
606 net->xfrm.policy_bydst[dir].dbits4 = rbits4; in xfrm_hash_rebuild()
607 net->xfrm.policy_bydst[dir].sbits4 = lbits4; in xfrm_hash_rebuild()
608 net->xfrm.policy_bydst[dir].dbits6 = rbits6; in xfrm_hash_rebuild()
609 net->xfrm.policy_bydst[dir].sbits6 = lbits6; in xfrm_hash_rebuild()
612 net->xfrm.policy_bydst[dir].dbits4 = lbits4; in xfrm_hash_rebuild()
613 net->xfrm.policy_bydst[dir].sbits4 = rbits4; in xfrm_hash_rebuild()
614 net->xfrm.policy_bydst[dir].dbits6 = lbits6; in xfrm_hash_rebuild()
615 net->xfrm.policy_bydst[dir].sbits6 = rbits6; in xfrm_hash_rebuild()
655 static u32 xfrm_gen_index(struct net *net, int dir, u32 index) in xfrm_gen_index() argument
666 idx = (idx_generator | dir); in xfrm_gen_index()
745 int xfrm_policy_insert(int dir, struct xfrm_policy *policy, int excl) in xfrm_policy_insert() argument
754 chain = policy_hash_bysel(net, &policy->selector, policy->family, dir); in xfrm_policy_insert()
782 __xfrm_policy_link(policy, dir); in xfrm_policy_insert()
792 __xfrm_policy_unlink(delpol, dir); in xfrm_policy_insert()
794 policy->index = delpol ? delpol->index : xfrm_gen_index(net, dir, policy->index); in xfrm_policy_insert()
804 else if (xfrm_bydst_should_resize(net, dir, NULL)) in xfrm_policy_insert()
812 u8 type, int dir, in xfrm_policy_bysel_ctx() argument
822 chain = policy_hash_bysel(net, sel, sel->family, dir); in xfrm_policy_bysel_ctx()
838 __xfrm_policy_unlink(pol, dir); in xfrm_policy_bysel_ctx()
853 u8 type, int dir, u32 id, int delete, in xfrm_policy_byid() argument
860 if (xfrm_policy_id2dir(id) != dir) in xfrm_policy_byid()
879 __xfrm_policy_unlink(pol, dir); in xfrm_policy_byid()
897 int dir, err = 0; in xfrm_policy_flush_secctx_check() local
899 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) { in xfrm_policy_flush_secctx_check()
904 &net->xfrm.policy_inexact[dir], bydst) { in xfrm_policy_flush_secctx_check()
913 for (i = net->xfrm.policy_bydst[dir].hmask; i >= 0; i--) { in xfrm_policy_flush_secctx_check()
915 net->xfrm.policy_bydst[dir].table + i, in xfrm_policy_flush_secctx_check()
941 int dir, err = 0, cnt = 0; in xfrm_policy_flush() local
949 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) { in xfrm_policy_flush()
955 &net->xfrm.policy_inexact[dir], bydst) { in xfrm_policy_flush()
958 __xfrm_policy_unlink(pol, dir); in xfrm_policy_flush()
970 for (i = net->xfrm.policy_bydst[dir].hmask; i >= 0; i--) { in xfrm_policy_flush()
973 net->xfrm.policy_bydst[dir].table + i, in xfrm_policy_flush()
977 __xfrm_policy_unlink(pol, dir); in xfrm_policy_flush()
1073 u8 type, u16 family, int dir, u32 if_id) in xfrm_policy_match() argument
1088 dir); in xfrm_policy_match()
1095 u16 family, u8 dir, in xfrm_policy_lookup_bytype() argument
1114 chain = policy_hash_direct(net, daddr, saddr, family, dir); in xfrm_policy_lookup_bytype()
1120 err = xfrm_policy_match(pol, fl, type, family, dir, if_id); in xfrm_policy_lookup_bytype()
1134 chain = &net->xfrm.policy_inexact[dir]; in xfrm_policy_lookup_bytype()
1139 err = xfrm_policy_match(pol, fl, type, family, dir, if_id); in xfrm_policy_lookup_bytype()
1166 u16 family, u8 dir, u32 if_id) in xfrm_policy_lookup() argument
1172 dir, if_id); in xfrm_policy_lookup()
1177 dir, if_id); in xfrm_policy_lookup()
1180 static struct xfrm_policy *xfrm_sk_policy_lookup(const struct sock *sk, int dir, in xfrm_sk_policy_lookup() argument
1188 pol = rcu_dereference(sk->sk_policy[dir]); in xfrm_sk_policy_lookup()
1207 dir); in xfrm_sk_policy_lookup()
1224 static void __xfrm_policy_link(struct xfrm_policy *pol, int dir) in __xfrm_policy_link() argument
1229 net->xfrm.policy_count[dir]++; in __xfrm_policy_link()
1234 int dir) in __xfrm_policy_unlink() argument
1248 net->xfrm.policy_count[dir]--; in __xfrm_policy_unlink()
1253 static void xfrm_sk_policy_link(struct xfrm_policy *pol, int dir) in xfrm_sk_policy_link() argument
1255 __xfrm_policy_link(pol, XFRM_POLICY_MAX + dir); in xfrm_sk_policy_link()
1258 static void xfrm_sk_policy_unlink(struct xfrm_policy *pol, int dir) in xfrm_sk_policy_unlink() argument
1260 __xfrm_policy_unlink(pol, XFRM_POLICY_MAX + dir); in xfrm_sk_policy_unlink()
1263 int xfrm_policy_delete(struct xfrm_policy *pol, int dir) in xfrm_policy_delete() argument
1268 pol = __xfrm_policy_unlink(pol, dir); in xfrm_policy_delete()
1278 int xfrm_sk_policy_insert(struct sock *sk, int dir, struct xfrm_policy *pol) in xfrm_sk_policy_insert() argument
1289 old_pol = rcu_dereference_protected(sk->sk_policy[dir], in xfrm_sk_policy_insert()
1293 pol->index = xfrm_gen_index(net, XFRM_POLICY_MAX+dir, 0); in xfrm_sk_policy_insert()
1294 xfrm_sk_policy_link(pol, dir); in xfrm_sk_policy_insert()
1296 rcu_assign_pointer(sk->sk_policy[dir], pol); in xfrm_sk_policy_insert()
1304 xfrm_sk_policy_unlink(old_pol, dir); in xfrm_sk_policy_insert()
1314 static struct xfrm_policy *clone_policy(const struct xfrm_policy *old, int dir) in clone_policy() argument
1339 xfrm_sk_policy_link(newp, dir); in clone_policy()
1961 u16 family, u8 dir, in xfrm_bundle_lookup() argument
1971 pols[0] = xfrm_policy_lookup(net, fl, family, dir, if_id); in xfrm_bundle_lookup()
2057 u8 dir = XFRM_POLICY_OUT; in xfrm_lookup_with_ifid() local
2112 xdst = xfrm_bundle_lookup(net, fl, family, dir, &xflo, if_id); in xfrm_lookup_with_ifid()
2323 int __xfrm_policy_check(struct sock *sk, int dir, struct sk_buff *skb, in __xfrm_policy_check() argument
2349 reverse = dir & ~XFRM_POLICY_MASK; in __xfrm_policy_check()
2350 dir &= XFRM_POLICY_MASK; in __xfrm_policy_check()
2374 if (sk && sk->sk_policy[dir]) { in __xfrm_policy_check()
2375 pol = xfrm_sk_policy_lookup(sk, dir, &fl, family, if_id); in __xfrm_policy_check()
2383 pol = xfrm_policy_lookup(net, &fl, family, dir, if_id); in __xfrm_policy_check()
2818 int dir; in xfrm_policy_init() local
2834 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) { in xfrm_policy_init()
2837 net->xfrm.policy_count[dir] = 0; in xfrm_policy_init()
2838 net->xfrm.policy_count[XFRM_POLICY_MAX + dir] = 0; in xfrm_policy_init()
2839 INIT_HLIST_HEAD(&net->xfrm.policy_inexact[dir]); in xfrm_policy_init()
2841 htab = &net->xfrm.policy_bydst[dir]; in xfrm_policy_init()
2866 for (dir--; dir >= 0; dir--) { in xfrm_policy_init()
2869 htab = &net->xfrm.policy_bydst[dir]; in xfrm_policy_init()
2880 int dir; in xfrm_policy_fini() local
2890 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) { in xfrm_policy_fini()
2893 WARN_ON(!hlist_empty(&net->xfrm.policy_inexact[dir])); in xfrm_policy_fini()
2895 htab = &net->xfrm.policy_bydst[dir]; in xfrm_policy_fini()
3051 u8 dir, u8 type, struct net *net) in xfrm_migrate_policy_find() argument
3058 chain = policy_hash_direct(net, &sel->daddr, &sel->saddr, sel->family, dir); in xfrm_migrate_policy_find()
3067 chain = &net->xfrm.policy_inexact[dir]; in xfrm_migrate_policy_find()
3185 int xfrm_migrate(const struct xfrm_selector *sel, u8 dir, u8 type, in xfrm_migrate() argument
3201 if (dir >= XFRM_POLICY_MAX) { in xfrm_migrate()
3207 if ((pol = xfrm_migrate_policy_find(sel, dir, type, net)) == NULL) { in xfrm_migrate()
3239 km_migrate(sel, dir, type, m, num_migrate, k, encap); in xfrm_migrate()