Lines Matching refs:dir

118 	u8 dir, type;  member
169 static void __xfrm_policy_link(struct xfrm_policy *pol, int dir);
171 int dir);
174 xfrm_policy_inexact_lookup(struct net *net, u8 type, u16 family, u8 dir,
179 u8 type, u16 family, u8 dir, u32 if_id);
320 int dir; in xfrm_policy_timer() local
327 dir = xfrm_policy_id2dir(xp->index); in xfrm_policy_timer()
367 km_policy_expired(xp, dir, 0, 0); in xfrm_policy_timer()
379 if (!xfrm_policy_delete(xp, dir)) in xfrm_policy_timer()
380 km_policy_expired(xp, dir, 1, 0); in xfrm_policy_timer()
466 unsigned short family, int dir, in __get_hash_thresh() argument
471 *dbits = net->xfrm.policy_bydst[dir].dbits4; in __get_hash_thresh()
472 *sbits = net->xfrm.policy_bydst[dir].sbits4; in __get_hash_thresh()
476 *dbits = net->xfrm.policy_bydst[dir].dbits6; in __get_hash_thresh()
477 *sbits = net->xfrm.policy_bydst[dir].sbits6; in __get_hash_thresh()
488 unsigned short family, int dir) in policy_hash_bysel() argument
490 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; in policy_hash_bysel()
495 __get_hash_thresh(net, family, dir, &dbits, &sbits); in policy_hash_bysel()
501 return rcu_dereference_check(net->xfrm.policy_bydst[dir].table, in policy_hash_bysel()
508 unsigned short family, int dir) in policy_hash_direct() argument
510 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; in policy_hash_direct()
515 __get_hash_thresh(net, family, dir, &dbits, &sbits); in policy_hash_direct()
518 return rcu_dereference_check(net->xfrm.policy_bydst[dir].table, in policy_hash_direct()
526 int dir) in xfrm_dst_hash_transfer() argument
538 __get_hash_thresh(net, pol->family, dir, &dbits, &sbits); in xfrm_dst_hash_transfer()
579 static void xfrm_bydst_resize(struct net *net, int dir) in xfrm_bydst_resize() argument
581 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; in xfrm_bydst_resize()
594 odst = rcu_dereference_protected(net->xfrm.policy_bydst[dir].table, in xfrm_bydst_resize()
598 xfrm_dst_hash_transfer(net, odst + i, ndst, nhashmask, dir); in xfrm_bydst_resize()
600 rcu_assign_pointer(net->xfrm.policy_bydst[dir].table, ndst); in xfrm_bydst_resize()
601 net->xfrm.policy_bydst[dir].hmask = nhashmask; in xfrm_bydst_resize()
636 static inline int xfrm_bydst_should_resize(struct net *net, int dir, int *total) in xfrm_bydst_should_resize() argument
638 unsigned int cnt = net->xfrm.policy_count[dir]; in xfrm_bydst_should_resize()
639 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask; in xfrm_bydst_should_resize()
679 int dir, total; in xfrm_hash_resize() local
684 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) { in xfrm_hash_resize()
685 if (xfrm_bydst_should_resize(net, dir, &total)) in xfrm_hash_resize()
686 xfrm_bydst_resize(net, dir); in xfrm_hash_resize()
699 xfrm_policy_inexact_alloc_bin(const struct xfrm_policy *pol, u8 dir) in xfrm_policy_inexact_alloc_bin() argument
705 .dir = dir, in xfrm_policy_inexact_alloc_bin()
995 u16 family, u8 prefixlen, u8 dir) in xfrm_policy_inexact_insert_node() argument
1130 struct xfrm_policy *policy, u8 dir) in xfrm_policy_inexact_alloc_chain() argument
1150 dir); in xfrm_policy_inexact_alloc_chain()
1164 policy->selector.prefixlen_d, dir); in xfrm_policy_inexact_alloc_chain()
1180 policy->selector.prefixlen_s, dir); in xfrm_policy_inexact_alloc_chain()
1189 xfrm_policy_inexact_insert(struct xfrm_policy *policy, u8 dir, int excl) in xfrm_policy_inexact_insert() argument
1196 bin = xfrm_policy_inexact_alloc_bin(policy, dir); in xfrm_policy_inexact_insert()
1203 chain = xfrm_policy_inexact_alloc_chain(bin, policy, dir); in xfrm_policy_inexact_insert()
1215 chain = &net->xfrm.policy_inexact[dir]; in xfrm_policy_inexact_insert()
1235 int dir; in xfrm_hash_rebuild() local
1264 dir = xfrm_policy_id2dir(policy->index); in xfrm_hash_rebuild()
1265 if (dir >= XFRM_POLICY_MAX) in xfrm_hash_rebuild()
1268 if ((dir & XFRM_POLICY_MASK) == XFRM_POLICY_OUT) { in xfrm_hash_rebuild()
1290 bin = xfrm_policy_inexact_alloc_bin(policy, dir); in xfrm_hash_rebuild()
1294 if (!xfrm_policy_inexact_alloc_chain(bin, policy, dir)) in xfrm_hash_rebuild()
1299 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) { in xfrm_hash_rebuild()
1303 &net->xfrm.policy_inexact[dir], in xfrm_hash_rebuild()
1309 hmask = net->xfrm.policy_bydst[dir].hmask; in xfrm_hash_rebuild()
1310 odst = net->xfrm.policy_bydst[dir].table; in xfrm_hash_rebuild()
1315 if ((dir & XFRM_POLICY_MASK) == XFRM_POLICY_OUT) { in xfrm_hash_rebuild()
1317 net->xfrm.policy_bydst[dir].dbits4 = rbits4; in xfrm_hash_rebuild()
1318 net->xfrm.policy_bydst[dir].sbits4 = lbits4; in xfrm_hash_rebuild()
1319 net->xfrm.policy_bydst[dir].dbits6 = rbits6; in xfrm_hash_rebuild()
1320 net->xfrm.policy_bydst[dir].sbits6 = lbits6; in xfrm_hash_rebuild()
1323 net->xfrm.policy_bydst[dir].dbits4 = lbits4; in xfrm_hash_rebuild()
1324 net->xfrm.policy_bydst[dir].sbits4 = rbits4; in xfrm_hash_rebuild()
1325 net->xfrm.policy_bydst[dir].dbits6 = lbits6; in xfrm_hash_rebuild()
1326 net->xfrm.policy_bydst[dir].sbits6 = rbits6; in xfrm_hash_rebuild()
1334 dir = xfrm_policy_id2dir(policy->index); in xfrm_hash_rebuild()
1335 if (dir >= XFRM_POLICY_MAX) { in xfrm_hash_rebuild()
1341 policy->family, dir); in xfrm_hash_rebuild()
1344 void *p = xfrm_policy_inexact_insert(policy, dir, 0); in xfrm_hash_rebuild()
1378 static u32 xfrm_gen_index(struct net *net, int dir, u32 index) in xfrm_gen_index() argument
1387 idx = (net->xfrm.idx_generator | dir); in xfrm_gen_index()
1460 u32 a = k->type << 24 | k->dir << 16 | k->family; in xfrm_pol_bin_key()
1483 ret = b->k.dir ^ key->dir; in xfrm_pol_bin_cmp()
1579 int xfrm_policy_insert(int dir, struct xfrm_policy *policy, int excl) in xfrm_policy_insert() argument
1586 chain = policy_hash_bysel(net, &policy->selector, policy->family, dir); in xfrm_policy_insert()
1590 delpol = xfrm_policy_inexact_insert(policy, dir, excl); in xfrm_policy_insert()
1597 __xfrm_policy_link(policy, dir); in xfrm_policy_insert()
1607 __xfrm_policy_unlink(delpol, dir); in xfrm_policy_insert()
1609 policy->index = delpol ? delpol->index : xfrm_gen_index(net, dir, policy->index); in xfrm_policy_insert()
1619 else if (xfrm_bydst_should_resize(net, dir, NULL)) in xfrm_policy_insert()
1628 u32 if_id, u8 type, int dir, struct xfrm_selector *sel, in __xfrm_policy_bysel_ctx() argument
1650 u8 type, int dir, struct xfrm_selector *sel, in xfrm_policy_bysel_ctx() argument
1659 chain = policy_hash_bysel(net, sel, sel->family, dir); in xfrm_policy_bysel_ctx()
1665 sel->family, dir, if_id); in xfrm_policy_bysel_ctx()
1683 if_id, type, dir, in xfrm_policy_bysel_ctx()
1692 pol = __xfrm_policy_bysel_ctx(chain, mark, if_id, type, dir, in xfrm_policy_bysel_ctx()
1704 __xfrm_policy_unlink(pol, dir); in xfrm_policy_bysel_ctx()
1720 u8 type, int dir, u32 id, int delete, int *err) in xfrm_policy_byid() argument
1726 if (xfrm_policy_id2dir(id) != dir) in xfrm_policy_byid()
1744 __xfrm_policy_unlink(pol, dir); in xfrm_policy_byid()
1818 int dir, err = 0, cnt = 0; in xfrm_policy_flush() local
1832 dir = xfrm_policy_id2dir(pol->index); in xfrm_policy_flush()
1833 if (dir >= XFRM_POLICY_MAX || in xfrm_policy_flush()
1837 __xfrm_policy_unlink(pol, dir); in xfrm_policy_flush()
1858 int dir, err = 0, cnt = 0; in xfrm_dev_policy_flush() local
1872 dir = xfrm_policy_id2dir(pol->index); in xfrm_dev_policy_flush()
1873 if (dir >= XFRM_POLICY_MAX || in xfrm_dev_policy_flush()
1877 __xfrm_policy_unlink(pol, dir); in xfrm_dev_policy_flush()
2061 u8 dir, u32 if_id) in xfrm_policy_inexact_lookup_rcu() argument
2066 .dir = dir, in xfrm_policy_inexact_lookup_rcu()
2078 u8 dir, u32 if_id) in xfrm_policy_inexact_lookup() argument
2085 bin = xfrm_policy_inexact_lookup_rcu(net, type, family, dir, if_id); in xfrm_policy_inexact_lookup()
2156 u16 family, u8 dir, in xfrm_policy_lookup_bytype() argument
2176 chain = policy_hash_direct(net, daddr, saddr, family, dir); in xfrm_policy_lookup_bytype()
2197 bin = xfrm_policy_inexact_lookup_rcu(net, type, family, dir, if_id); in xfrm_policy_lookup_bytype()
2224 u16 family, u8 dir, u32 if_id) in xfrm_policy_lookup() argument
2230 dir, if_id); in xfrm_policy_lookup()
2235 dir, if_id); in xfrm_policy_lookup()
2238 static struct xfrm_policy *xfrm_sk_policy_lookup(const struct sock *sk, int dir, in xfrm_sk_policy_lookup() argument
2246 pol = rcu_dereference(sk->sk_policy[dir]); in xfrm_sk_policy_lookup()
2281 static void __xfrm_policy_link(struct xfrm_policy *pol, int dir) in __xfrm_policy_link() argument
2286 net->xfrm.policy_count[dir]++; in __xfrm_policy_link()
2291 int dir) in __xfrm_policy_unlink() argument
2306 net->xfrm.policy_count[dir]--; in __xfrm_policy_unlink()
2311 static void xfrm_sk_policy_link(struct xfrm_policy *pol, int dir) in xfrm_sk_policy_link() argument
2313 __xfrm_policy_link(pol, XFRM_POLICY_MAX + dir); in xfrm_sk_policy_link()
2316 static void xfrm_sk_policy_unlink(struct xfrm_policy *pol, int dir) in xfrm_sk_policy_unlink() argument
2318 __xfrm_policy_unlink(pol, XFRM_POLICY_MAX + dir); in xfrm_sk_policy_unlink()
2321 int xfrm_policy_delete(struct xfrm_policy *pol, int dir) in xfrm_policy_delete() argument
2326 pol = __xfrm_policy_unlink(pol, dir); in xfrm_policy_delete()
2336 int xfrm_sk_policy_insert(struct sock *sk, int dir, struct xfrm_policy *pol) in xfrm_sk_policy_insert() argument
2347 old_pol = rcu_dereference_protected(sk->sk_policy[dir], in xfrm_sk_policy_insert()
2351 pol->index = xfrm_gen_index(net, XFRM_POLICY_MAX+dir, 0); in xfrm_sk_policy_insert()
2352 xfrm_sk_policy_link(pol, dir); in xfrm_sk_policy_insert()
2354 rcu_assign_pointer(sk->sk_policy[dir], pol); in xfrm_sk_policy_insert()
2362 xfrm_sk_policy_unlink(old_pol, dir); in xfrm_sk_policy_insert()
2372 static struct xfrm_policy *clone_policy(const struct xfrm_policy *old, int dir) in clone_policy() argument
2397 xfrm_sk_policy_link(newp, dir); in clone_policy()
3028 u16 family, u8 dir, in xfrm_bundle_lookup() argument
3038 pols[0] = xfrm_policy_lookup(net, fl, family, dir, if_id); in xfrm_bundle_lookup()
3124 u8 dir = XFRM_POLICY_OUT; in xfrm_lookup_with_ifid() local
3179 xdst = xfrm_bundle_lookup(net, fl, family, dir, &xflo, if_id); in xfrm_lookup_with_ifid()
3248 net->xfrm.policy_default[dir] == XFRM_USERPOLICY_BLOCK) { in xfrm_lookup_with_ifid()
3595 int __xfrm_policy_check(struct sock *sk, int dir, struct sk_buff *skb, in __xfrm_policy_check() argument
3624 reverse = dir & ~XFRM_POLICY_MASK; in __xfrm_policy_check()
3625 dir &= XFRM_POLICY_MASK; in __xfrm_policy_check()
3650 if (sk && sk->sk_policy[dir]) { in __xfrm_policy_check()
3651 pol = xfrm_sk_policy_lookup(sk, dir, &fl, family, if_id); in __xfrm_policy_check()
3659 pol = xfrm_policy_lookup(net, &fl, family, dir, if_id); in __xfrm_policy_check()
3667 if (net->xfrm.policy_default[dir] == XFRM_USERPOLICY_BLOCK) { in __xfrm_policy_check()
4109 int dir, err; in xfrm_policy_init() local
4129 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) { in xfrm_policy_init()
4132 net->xfrm.policy_count[dir] = 0; in xfrm_policy_init()
4133 net->xfrm.policy_count[XFRM_POLICY_MAX + dir] = 0; in xfrm_policy_init()
4134 INIT_HLIST_HEAD(&net->xfrm.policy_inexact[dir]); in xfrm_policy_init()
4136 htab = &net->xfrm.policy_bydst[dir]; in xfrm_policy_init()
4160 for (dir--; dir >= 0; dir--) { in xfrm_policy_init()
4163 htab = &net->xfrm.policy_bydst[dir]; in xfrm_policy_init()
4175 int dir; in xfrm_policy_fini() local
4185 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) { in xfrm_policy_fini()
4188 WARN_ON(!hlist_empty(&net->xfrm.policy_inexact[dir])); in xfrm_policy_fini()
4190 htab = &net->xfrm.policy_bydst[dir]; in xfrm_policy_fini()
4356 u8 dir, u8 type, struct net *net, u32 if_id) in xfrm_migrate_policy_find() argument
4363 chain = policy_hash_direct(net, &sel->daddr, &sel->saddr, sel->family, dir); in xfrm_migrate_policy_find()
4373 chain = &net->xfrm.policy_inexact[dir]; in xfrm_migrate_policy_find()
4501 int xfrm_migrate(const struct xfrm_selector *sel, u8 dir, u8 type, in xfrm_migrate() argument
4519 if (dir >= XFRM_POLICY_MAX) { in xfrm_migrate()
4526 pol = xfrm_migrate_policy_find(sel, dir, type, net, if_id); in xfrm_migrate()
4561 km_migrate(sel, dir, type, m, num_migrate, k, encap); in xfrm_migrate()