Lines Matching refs:pcbsp

192 ipsec_checkpcbcache(struct mbuf *m, struct inpcbpolicy *pcbsp, int dir)  in ipsec_checkpcbcache()  argument
199 KASSERT(pcbsp != NULL); in ipsec_checkpcbcache()
200 KASSERT(dir < __arraycount(pcbsp->sp_cache)); in ipsec_checkpcbcache()
201 KASSERT(inp_locked(pcbsp->sp_inp)); in ipsec_checkpcbcache()
209 if (ipsec_spdgen != pcbsp->sp_cache[dir].cachegen) { in ipsec_checkpcbcache()
210 ipsec_invalpcbcache(pcbsp, dir); in ipsec_checkpcbcache()
213 sp = pcbsp->sp_cache[dir].cachesp; in ipsec_checkpcbcache()
218 ipsec_invalpcbcache(pcbsp, dir); in ipsec_checkpcbcache()
221 if ((pcbsp->sp_cacheflags & IPSEC_PCBSP_CONNECTED) == 0) { in ipsec_checkpcbcache()
233 if (memcmp(&pcbsp->sp_cache[dir].cacheidx, &spidx, in ipsec_checkpcbcache()
255 key_sp_refcnt(sp), pcbsp->sp_cache[dir].cachesp); in ipsec_checkpcbcache()
262 ipsec_fillpcbcache(struct inpcbpolicy *pcbsp, struct mbuf *m, in ipsec_fillpcbcache() argument
267 KASSERT(dir < __arraycount(pcbsp->sp_cache)); in ipsec_fillpcbcache()
268 KASSERT(inp_locked(pcbsp->sp_inp)); in ipsec_fillpcbcache()
270 pcbsp->sp_cache[dir].cachesp = NULL; in ipsec_fillpcbcache()
271 pcbsp->sp_cache[dir].cachehint = IPSEC_PCBHINT_UNKNOWN; in ipsec_fillpcbcache()
272 if (ipsec_setspidx(m, &pcbsp->sp_cache[dir].cacheidx, dir, 1) != 0) { in ipsec_fillpcbcache()
275 pcbsp->sp_cache[dir].cachesp = sp; in ipsec_fillpcbcache()
276 if (pcbsp->sp_cache[dir].cachesp) { in ipsec_fillpcbcache()
281 if (pcbsp->sp_cacheflags & IPSEC_PCBSP_CONNECTED) { in ipsec_fillpcbcache()
282 switch (pcbsp->sp_cache[dir].cachesp->policy) { in ipsec_fillpcbcache()
285 pcbsp->sp_cache[dir].cachehint = in ipsec_fillpcbcache()
289 pcbsp->sp_cache[dir].cachehint = in ipsec_fillpcbcache()
294 pcbsp->sp_cache[dir].cachegen = ipsec_spdgen; in ipsec_fillpcbcache()
300 ipsec_invalpcbcache(struct inpcbpolicy *pcbsp, int dir) in ipsec_invalpcbcache() argument
304 KASSERT(inp_locked(pcbsp->sp_inp)); in ipsec_invalpcbcache()
309 pcbsp->sp_cache[i].cachesp = NULL; in ipsec_invalpcbcache()
310 pcbsp->sp_cache[i].cachehint = IPSEC_PCBHINT_UNKNOWN; in ipsec_invalpcbcache()
311 pcbsp->sp_cache[i].cachegen = 0; in ipsec_invalpcbcache()
312 memset(&pcbsp->sp_cache[i].cacheidx, 0, in ipsec_invalpcbcache()
313 sizeof(pcbsp->sp_cache[i].cacheidx)); in ipsec_invalpcbcache()
319 ipsec_pcbconn(struct inpcbpolicy *pcbsp) in ipsec_pcbconn() argument
322 KASSERT(inp_locked(pcbsp->sp_inp)); in ipsec_pcbconn()
324 pcbsp->sp_cacheflags |= IPSEC_PCBSP_CONNECTED; in ipsec_pcbconn()
325 ipsec_invalpcbcache(pcbsp, IPSEC_DIR_ANY); in ipsec_pcbconn()
329 ipsec_pcbdisconn(struct inpcbpolicy *pcbsp) in ipsec_pcbdisconn() argument
332 KASSERT(inp_locked(pcbsp->sp_inp)); in ipsec_pcbdisconn()
334 pcbsp->sp_cacheflags &= ~IPSEC_PCBSP_CONNECTED; in ipsec_pcbdisconn()
335 ipsec_invalpcbcache(pcbsp, IPSEC_DIR_ANY); in ipsec_pcbdisconn()
405 struct inpcbpolicy *pcbsp = NULL; in ipsec_getpolicybysock() local
439 pcbsp = inp->inp_sp; in ipsec_getpolicybysock()
448 KASSERT(pcbsp != NULL); in ipsec_getpolicybysock()
451 currsp = pcbsp->sp_in; in ipsec_getpolicybysock()
454 currsp = pcbsp->sp_out; in ipsec_getpolicybysock()
459 if (pcbsp->priv) { /* when privileged socket */ in ipsec_getpolicybysock()
514 KASSERTMSG(sp != NULL, "null SP (priv %u policy %u", pcbsp->priv, in ipsec_getpolicybysock()
518 pcbsp->priv, currsp->policy, sp, key_sp_refcnt(sp)); in ipsec_getpolicybysock()
519 ipsec_fillpcbcache(pcbsp, m, sp, dir); in ipsec_getpolicybysock()