| 743 | } |
| 744 | |
| 745 | static struct secpolicy * |
| 746 | ipsec6_getpolicy(const struct mbuf *m, struct inpcb *inp, u_int dir, |
| 747 | int needport) |
| 748 | { |
| 749 | struct secpolicyindex spidx; |
| 750 | struct secpolicy *sp; |
| 751 | |
| 752 | sp = ipsec_getpcbpolicy(inp, dir); |
| 753 | if (sp == NULL && key_havesp(dir)) { |
| 754 | /* Make an index to look for a policy. */ |
| 755 | ipsec6_setspidx_ipaddr(m, &spidx); |
| 756 | ipsec6_get_ulp(m, &spidx, needport); |
| 757 | spidx.dir = dir; |
| 758 | sp = key_allocsp(&spidx, dir); |
| 759 | } |
| 760 | if (sp == NULL) /* No SP found, use system default. */ |
| 761 | sp = key_allocsp_default(); |
| 762 | return (sp); |
| 763 | } |
| 764 | |
| 765 | /* |
| 766 | * Check security policy for *OUTBOUND* IPv6 packet. |
no test coverage detected