Lines Matching defs:dir

78  * xfrm_pol_inexact_bin = hash(dir,type,family,if_id);
118 u8 dir, type;
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;
327 dir = xfrm_policy_id2dir(xp->index);
367 km_policy_expired(xp, dir, 0, 0);
379 if (!xfrm_policy_delete(xp, dir))
380 km_policy_expired(xp, dir, 1, 0);
463 unsigned short family, int dir,
468 *dbits = net->xfrm.policy_bydst[dir].dbits4;
469 *sbits = net->xfrm.policy_bydst[dir].sbits4;
473 *dbits = net->xfrm.policy_bydst[dir].dbits6;
474 *sbits = net->xfrm.policy_bydst[dir].sbits6;
485 unsigned short family, int dir)
487 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask;
492 __get_hash_thresh(net, family, dir, &dbits, &sbits);
498 return rcu_dereference_check(net->xfrm.policy_bydst[dir].table,
505 unsigned short family, int dir)
507 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask;
512 __get_hash_thresh(net, family, dir, &dbits, &sbits);
515 return rcu_dereference_check(net->xfrm.policy_bydst[dir].table,
523 int dir)
535 __get_hash_thresh(net, pol->family, dir, &dbits, &sbits);
576 static void xfrm_bydst_resize(struct net *net, int dir)
578 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask;
591 odst = rcu_dereference_protected(net->xfrm.policy_bydst[dir].table,
595 xfrm_dst_hash_transfer(net, odst + i, ndst, nhashmask, dir);
597 rcu_assign_pointer(net->xfrm.policy_bydst[dir].table, ndst);
598 net->xfrm.policy_bydst[dir].hmask = nhashmask;
633 static inline int xfrm_bydst_should_resize(struct net *net, int dir, int *total)
635 unsigned int cnt = net->xfrm.policy_count[dir];
636 unsigned int hmask = net->xfrm.policy_bydst[dir].hmask;
676 int dir, total;
681 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) {
682 if (xfrm_bydst_should_resize(net, dir, &total))
683 xfrm_bydst_resize(net, dir);
696 xfrm_policy_inexact_alloc_bin(const struct xfrm_policy *pol, u8 dir)
702 .dir = dir,
992 u16 family, u8 prefixlen, u8 dir)
1127 struct xfrm_policy *policy, u8 dir)
1147 dir);
1161 policy->selector.prefixlen_d, dir);
1177 policy->selector.prefixlen_s, dir);
1186 xfrm_policy_inexact_insert(struct xfrm_policy *policy, u8 dir, int excl)
1193 bin = xfrm_policy_inexact_alloc_bin(policy, dir);
1200 chain = xfrm_policy_inexact_alloc_chain(bin, policy, dir);
1212 chain = &net->xfrm.policy_inexact[dir];
1232 int dir;
1258 dir = xfrm_policy_id2dir(policy->index);
1259 if (policy->walk.dead || dir >= XFRM_POLICY_MAX)
1262 if ((dir & XFRM_POLICY_MASK) == XFRM_POLICY_OUT) {
1284 bin = xfrm_policy_inexact_alloc_bin(policy, dir);
1288 if (!xfrm_policy_inexact_alloc_chain(bin, policy, dir))
1293 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) {
1297 &net->xfrm.policy_inexact[dir],
1303 hmask = net->xfrm.policy_bydst[dir].hmask;
1304 odst = net->xfrm.policy_bydst[dir].table;
1309 if ((dir & XFRM_POLICY_MASK) == XFRM_POLICY_OUT) {
1310 /* dir out => dst = remote, src = local */
1311 net->xfrm.policy_bydst[dir].dbits4 = rbits4;
1312 net->xfrm.policy_bydst[dir].sbits4 = lbits4;
1313 net->xfrm.policy_bydst[dir].dbits6 = rbits6;
1314 net->xfrm.policy_bydst[dir].sbits6 = lbits6;
1316 /* dir in/fwd => dst = local, src = remote */
1317 net->xfrm.policy_bydst[dir].dbits4 = lbits4;
1318 net->xfrm.policy_bydst[dir].sbits4 = rbits4;
1319 net->xfrm.policy_bydst[dir].dbits6 = lbits6;
1320 net->xfrm.policy_bydst[dir].sbits6 = rbits6;
1328 dir = xfrm_policy_id2dir(policy->index);
1329 if (dir >= XFRM_POLICY_MAX) {
1335 policy->family, dir);
1338 void *p = xfrm_policy_inexact_insert(policy, dir, 0);
1372 static u32 xfrm_gen_index(struct net *net, int dir, u32 index)
1381 idx = (net->xfrm.idx_generator | dir);
1454 u32 a = k->type << 24 | k->dir << 16 | k->family;
1477 ret = b->k.dir ^ key->dir;
1570 int xfrm_policy_insert(int dir, struct xfrm_policy *policy, int excl)
1577 chain = policy_hash_bysel(net, &policy->selector, policy->family, dir);
1581 delpol = xfrm_policy_inexact_insert(policy, dir, excl);
1588 __xfrm_policy_link(policy, dir);
1598 __xfrm_policy_unlink(delpol, dir);
1600 policy->index = delpol ? delpol->index : xfrm_gen_index(net, dir, policy->index);
1610 else if (xfrm_bydst_should_resize(net, dir, NULL))
1619 u32 if_id, u8 type, int dir, struct xfrm_selector *sel,
1641 u8 type, int dir, struct xfrm_selector *sel,
1650 chain = policy_hash_bysel(net, sel, sel->family, dir);
1656 sel->family, dir, if_id);
1674 if_id, type, dir,
1683 pol = __xfrm_policy_bysel_ctx(chain, mark, if_id, type, dir,
1695 __xfrm_policy_unlink(pol, dir);
1711 u8 type, int dir, u32 id, int delete, int *err)
1717 if (xfrm_policy_id2dir(id) != dir)
1735 __xfrm_policy_unlink(pol, dir);
1780 int dir, err = 0, cnt = 0;
1791 dir = xfrm_policy_id2dir(pol->index);
1793 dir >= XFRM_POLICY_MAX ||
1797 __xfrm_policy_unlink(pol, dir);
1890 u8 type, u16 family, int dir, u32 if_id)
1905 dir);
1982 u8 dir, u32 if_id)
1987 .dir = dir,
1999 u8 dir, u32 if_id)
2006 bin = xfrm_policy_inexact_lookup_rcu(net, type, family, dir, if_id);
2016 u8 type, u16 family, int dir, u32 if_id)
2030 err = xfrm_policy_match(pol, fl, type, family, dir, if_id);
2055 u8 type, u16 family, int dir, u32 if_id)
2063 fl, type, family, dir,
2078 u16 family, u8 dir,
2098 chain = policy_hash_direct(net, daddr, saddr, family, dir);
2103 err = xfrm_policy_match(pol, fl, type, family, dir, if_id);
2116 bin = xfrm_policy_inexact_lookup_rcu(net, type, family, dir, if_id);
2122 family, dir, if_id);
2143 u16 family, u8 dir, u32 if_id)
2149 dir, if_id);
2154 dir, if_id);
2157 static struct xfrm_policy *xfrm_sk_policy_lookup(const struct sock *sk, int dir,
2165 pol = rcu_dereference(sk->sk_policy[dir]);
2184 dir);
2201 static void __xfrm_policy_link(struct xfrm_policy *pol, int dir)
2206 net->xfrm.policy_count[dir]++;
2211 int dir)
2226 net->xfrm.policy_count[dir]--;
2231 static void xfrm_sk_policy_link(struct xfrm_policy *pol, int dir)
2233 __xfrm_policy_link(pol, XFRM_POLICY_MAX + dir);
2236 static void xfrm_sk_policy_unlink(struct xfrm_policy *pol, int dir)
2238 __xfrm_policy_unlink(pol, XFRM_POLICY_MAX + dir);
2241 int xfrm_policy_delete(struct xfrm_policy *pol, int dir)
2246 pol = __xfrm_policy_unlink(pol, dir);
2256 int xfrm_sk_policy_insert(struct sock *sk, int dir, struct xfrm_policy *pol)
2267 old_pol = rcu_dereference_protected(sk->sk_policy[dir],
2271 pol->index = xfrm_gen_index(net, XFRM_POLICY_MAX+dir, 0);
2272 xfrm_sk_policy_link(pol, dir);
2274 rcu_assign_pointer(sk->sk_policy[dir], pol);
2282 xfrm_sk_policy_unlink(old_pol, dir);
2292 static struct xfrm_policy *clone_policy(const struct xfrm_policy *old, int dir)
2317 xfrm_sk_policy_link(newp, dir);
2946 u16 family, u8 dir,
2956 pols[0] = xfrm_policy_lookup(net, fl, family, dir, if_id);
3042 u8 dir = XFRM_POLICY_OUT;
3097 xdst = xfrm_bundle_lookup(net, fl, family, dir, &xflo, if_id);
3166 net->xfrm.policy_default[dir] == XFRM_USERPOLICY_BLOCK) {
3553 int __xfrm_policy_check(struct sock *sk, int dir, struct sk_buff *skb,
3582 reverse = dir & ~XFRM_POLICY_MASK;
3583 dir &= XFRM_POLICY_MASK;
3608 if (sk && sk->sk_policy[dir]) {
3609 pol = xfrm_sk_policy_lookup(sk, dir, &fl, family, if_id);
3617 pol = xfrm_policy_lookup(net, &fl, family, dir, if_id);
3625 if (net->xfrm.policy_default[dir] == XFRM_USERPOLICY_BLOCK) {
4064 int dir, err;
4084 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) {
4087 net->xfrm.policy_count[dir] = 0;
4088 net->xfrm.policy_count[XFRM_POLICY_MAX + dir] = 0;
4089 INIT_HLIST_HEAD(&net->xfrm.policy_inexact[dir]);
4091 htab = &net->xfrm.policy_bydst[dir];
4115 for (dir--; dir >= 0; dir--) {
4118 htab = &net->xfrm.policy_bydst[dir];
4130 int dir;
4140 for (dir = 0; dir < XFRM_POLICY_MAX; dir++) {
4143 WARN_ON(!hlist_empty(&net->xfrm.policy_inexact[dir]));
4145 htab = &net->xfrm.policy_bydst[dir];
4314 u8 dir, u8 type, struct net *net, u32 if_id)
4321 chain = policy_hash_direct(net, &sel->daddr, &sel->saddr, sel->family, dir);
4331 chain = &net->xfrm.policy_inexact[dir];
4450 int xfrm_migrate(const struct xfrm_selector *sel, u8 dir, u8 type,
4466 if (dir >= XFRM_POLICY_MAX) {
4472 if ((pol = xfrm_migrate_policy_find(sel, dir, type, net, if_id)) == NULL) {
4504 km_migrate(sel, dir, type, m, num_migrate, k, encap);