Lines Matching refs:dir

58 static void __xfrm_policy_link(struct xfrm_policy *pol, int dir);
60 int dir);
182 int dir; in xfrm_policy_timer() local
189 dir = xfrm_policy_id2dir(xp->index); in xfrm_policy_timer()
229 km_policy_expired(xp, dir, 0, 0); in xfrm_policy_timer()
241 if (!xfrm_policy_delete(xp, dir)) in xfrm_policy_timer()
242 km_policy_expired(xp, dir, 1, 0); in xfrm_policy_timer()
355 unsigned short family, int dir, 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()
377 unsigned short family, int dir) 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()
395 unsigned short family, int dir) 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()
412 int dir) 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()
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()
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()
560 int dir, total; in xfrm_hash_resize() local
565 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) { in xfrm_hash_resize()
566 if (xfrm_bydst_should_resize(net, dir, &total)) in xfrm_hash_resize()
567 xfrm_bydst_resize(net, dir); in xfrm_hash_resize()
586 int dir; in xfrm_hash_rebuild() local
605 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) { 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()
611 if ((dir & XFRM_POLICY_MASK) == XFRM_POLICY_OUT) { 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()
657 static u32 xfrm_gen_index(struct net *net, int dir, u32 index) in xfrm_gen_index() argument
668 idx = (idx_generator | dir); in xfrm_gen_index()
747 int xfrm_policy_insert(int dir, struct xfrm_policy *policy, int excl) in xfrm_policy_insert() argument
756 chain = policy_hash_bysel(net, &policy->selector, policy->family, dir); in xfrm_policy_insert()
783 __xfrm_policy_link(policy, dir); in xfrm_policy_insert()
794 __xfrm_policy_unlink(delpol, dir); in xfrm_policy_insert()
796 policy->index = delpol ? delpol->index : xfrm_gen_index(net, dir, policy->index); in xfrm_policy_insert()
806 else if (xfrm_bydst_should_resize(net, dir, NULL)) in xfrm_policy_insert()
814 int dir, struct xfrm_selector *sel, in xfrm_policy_bysel_ctx() argument
823 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 int dir, u32 id, int delete, int *err) in xfrm_policy_byid() argument
859 if (xfrm_policy_id2dir(id) != dir) in xfrm_policy_byid()
877 __xfrm_policy_unlink(pol, dir); in xfrm_policy_byid()
895 int dir, err = 0; in xfrm_policy_flush_secctx_check() local
897 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) { in xfrm_policy_flush_secctx_check()
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()
939 int dir, err = 0, cnt = 0; in xfrm_policy_flush() local
947 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) { in xfrm_policy_flush()
953 &net->xfrm.policy_inexact[dir], bydst) { in xfrm_policy_flush()
956 __xfrm_policy_unlink(pol, dir); 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()
975 __xfrm_policy_unlink(pol, dir); in xfrm_policy_flush()
1069 u8 type, u16 family, int dir) in xfrm_policy_match() argument
1083 dir); in xfrm_policy_match()
1090 u16 family, u8 dir) in xfrm_policy_lookup_bytype() argument
1104 chain = policy_hash_direct(net, daddr, saddr, family, dir); in xfrm_policy_lookup_bytype()
1107 err = xfrm_policy_match(pol, fl, type, family, dir); in xfrm_policy_lookup_bytype()
1121 chain = &net->xfrm.policy_inexact[dir]; in xfrm_policy_lookup_bytype()
1123 err = xfrm_policy_match(pol, fl, type, family, dir); 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()
1157 static int flow_to_policy_dir(int dir) in flow_to_policy_dir() argument
1162 return dir; in flow_to_policy_dir()
1164 switch (dir) { in flow_to_policy_dir()
1177 u8 dir, struct flow_cache_object *old_obj, void *ctx) in xfrm_policy_lookup() argument
1184 pol = __xfrm_policy_lookup(net, fl, family, flow_to_policy_dir(dir)); in xfrm_policy_lookup()
1195 static inline int policy_to_flow_dir(int dir) in policy_to_flow_dir() argument
1200 return dir; in policy_to_flow_dir()
1201 switch (dir) { in policy_to_flow_dir()
1212 static struct xfrm_policy *xfrm_sk_policy_lookup(struct sock *sk, int dir, in xfrm_sk_policy_lookup() argument
1219 if ((pol = sk->sk_policy[dir]) != NULL) { in xfrm_sk_policy_lookup()
1231 policy_to_flow_dir(dir)); in xfrm_sk_policy_lookup()
1246 static void __xfrm_policy_link(struct xfrm_policy *pol, int dir) in __xfrm_policy_link() argument
1251 net->xfrm.policy_count[dir]++; in __xfrm_policy_link()
1256 int dir) in __xfrm_policy_unlink() argument
1270 net->xfrm.policy_count[dir]--; in __xfrm_policy_unlink()
1275 static void xfrm_sk_policy_link(struct xfrm_policy *pol, int dir) in xfrm_sk_policy_link() argument
1277 __xfrm_policy_link(pol, XFRM_POLICY_MAX + dir); in xfrm_sk_policy_link()
1280 static void xfrm_sk_policy_unlink(struct xfrm_policy *pol, int dir) in xfrm_sk_policy_unlink() argument
1282 __xfrm_policy_unlink(pol, XFRM_POLICY_MAX + dir); in xfrm_sk_policy_unlink()
1285 int xfrm_policy_delete(struct xfrm_policy *pol, int dir) in xfrm_policy_delete() argument
1290 pol = __xfrm_policy_unlink(pol, dir); in xfrm_policy_delete()
1300 int xfrm_sk_policy_insert(struct sock *sk, int dir, struct xfrm_policy *pol) in xfrm_sk_policy_insert() argument
1311 old_pol = sk->sk_policy[dir]; in xfrm_sk_policy_insert()
1312 sk->sk_policy[dir] = pol; in xfrm_sk_policy_insert()
1315 pol->index = xfrm_gen_index(net, XFRM_POLICY_MAX+dir, 0); in xfrm_sk_policy_insert()
1316 xfrm_sk_policy_link(pol, dir); in xfrm_sk_policy_insert()
1325 xfrm_sk_policy_unlink(old_pol, dir); in xfrm_sk_policy_insert()
1335 static struct xfrm_policy *clone_policy(const struct xfrm_policy *old, int dir) in clone_policy() argument
1358 xfrm_sk_policy_link(newp, dir); in clone_policy()
2064 xfrm_bundle_lookup(struct net *net, const struct flowi *fl, u16 family, u8 dir, in xfrm_bundle_lookup() argument
2097 flow_to_policy_dir(dir)); in xfrm_bundle_lookup()
2196 u8 dir = policy_to_flow_dir(XFRM_POLICY_OUT); in xfrm_lookup() local
2247 flo = flow_cache_lookup(net, fl, family, dir, in xfrm_lookup()
2443 int __xfrm_policy_check(struct sock *sk, int dir, struct sk_buff *skb, in __xfrm_policy_check() argument
2457 reverse = dir & ~XFRM_POLICY_MASK; in __xfrm_policy_check()
2458 dir &= XFRM_POLICY_MASK; in __xfrm_policy_check()
2459 fl_dir = policy_to_flow_dir(dir); in __xfrm_policy_check()
2482 if (sk && sk->sk_policy[dir]) { in __xfrm_policy_check()
2483 pol = xfrm_sk_policy_lookup(sk, dir, &fl); in __xfrm_policy_check()
2921 int dir; in xfrm_policy_init() local
2937 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) { 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()
2969 for (dir--; dir >= 0; dir--) { in xfrm_policy_init()
2972 htab = &net->xfrm.policy_bydst[dir]; in xfrm_policy_init()
2983 int dir; in xfrm_policy_fini() local
2993 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) { 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()
3156 u8 dir, u8 type, struct net *net) in xfrm_migrate_policy_find() argument
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()
3294 int xfrm_migrate(const struct xfrm_selector *sel, u8 dir, u8 type, in xfrm_migrate() argument
3309 if ((pol = xfrm_migrate_policy_find(sel, dir, type, net)) == NULL) { in xfrm_migrate()
3340 km_migrate(sel, dir, type, m, num_migrate, k); in xfrm_migrate()