| 574 | } |
| 575 | |
| 576 | static struct secpolicy * |
| 577 | ipsec4_getpolicy(const struct mbuf *m, struct inpcb *inp, u_int dir, |
| 578 | int needport) |
| 579 | { |
| 580 | struct secpolicyindex spidx; |
| 581 | struct secpolicy *sp; |
| 582 | |
| 583 | sp = ipsec_getpcbpolicy(inp, dir); |
| 584 | if (sp == NULL && key_havesp(dir)) { |
| 585 | /* Make an index to look for a policy. */ |
| 586 | ipsec4_setspidx_ipaddr(m, &spidx); |
| 587 | ipsec4_get_ulp(m, &spidx, needport); |
| 588 | spidx.dir = dir; |
| 589 | sp = key_allocsp(&spidx, dir); |
| 590 | } |
| 591 | if (sp == NULL) /* No SP found, use system default. */ |
| 592 | sp = key_allocsp_default(); |
| 593 | return (sp); |
| 594 | } |
| 595 | |
| 596 | /* |
| 597 | * Check security policy for *OUTBOUND* IPv4 packet. |
no test coverage detected