Lines Matching defs:tdb
69 * Loop over a tdb chain, taking into consideration protocol tunneling. The
74 ipsp_process_packet(struct mbuf *m, struct tdb *tdb, int af, int tunalready)
94 if ((tdb->tdb_sproto == IPPROTO_ESP && !esp_enable) ||
95 (tdb->tdb_sproto == IPPROTO_AH && !atomic_load_int(&ah_enable)) ||
96 (tdb->tdb_sproto == IPPROTO_IPCOMP &&
105 if (!tdb->tdb_xform) {
112 if (tdb->tdb_flags & TDBF_INVALID) {
114 ipsp_address(&tdb->tdb_dst, buf, sizeof(buf)),
115 ntohl(tdb->tdb_spi), tdb->tdb_sproto);
121 switch (tdb->tdb_dst.sa.sa_family) {
132 ipsp_address(&tdb->tdb_dst, buf, sizeof(buf)),
133 ntohl(tdb->tdb_spi), tdb->tdb_sproto,
134 tdb->tdb_dst.sa.sa_family);
142 if (tdb->tdb_first_use == 0) {
143 tdb->tdb_first_use = gettime();
144 if (tdb->tdb_flags & TDBF_FIRSTUSE) {
145 if (timeout_add_sec(&tdb->tdb_first_tmo,
146 tdb->tdb_exp_first_use))
147 tdb_ref(tdb);
149 if (tdb->tdb_flags & TDBF_SOFT_FIRSTUSE) {
150 if (timeout_add_sec(&tdb->tdb_sfirst_tmo,
151 tdb->tdb_soft_first_use))
152 tdb_ref(tdb);
166 if (af == tdb->tdb_dst.sa.sa_family) {
203 if ((tdb->tdb_dst.sa.sa_family != af) || /* PF mismatch */
204 (tdb->tdb_flags & TDBF_TUNNELING) || /* Tunneling needed */
205 (tdb->tdb_xform->xf_type == XF_IP4) || /* ditto */
206 ((tdb->tdb_dst.sa.sa_family == AF_INET) &&
207 (tdb->tdb_dst.sin.sin_addr.s_addr != INADDR_ANY) &&
208 (tdb->tdb_dst.sin.sin_addr.s_addr != ip->ip_dst.s_addr)) ||
210 ((tdb->tdb_dst.sa.sa_family == AF_INET6) &&
211 (!IN6_IS_ADDR_UNSPECIFIED(&tdb->tdb_dst.sin6.sin6_addr)) &&
212 (!IN6_ARE_ADDR_EQUAL(&tdb->tdb_dst.sin6.sin6_addr,
254 error = ipip_output(&m, tdb);
260 if (tdb->tdb_dst.sa.sa_family == AF_INET && setdf) {
273 mtx_enter(&tdb->tdb_mtx);
274 tdb->tdb_flags |= TDBF_USEDTUNNEL;
275 mtx_leave(&tdb->tdb_mtx);
283 if (tdb->tdb_xform->xf_type == XF_IP4)
284 return ipsp_process_done(m, tdb);
287 switch (tdb->tdb_dst.sa.sa_family) {
372 tdbstat_add(tdb, tdb_ouncompbytes, m->m_pkthdr.len);
375 if (tdb->tdb_sproto == IPPROTO_IPCOMP) {
376 if ((m->m_pkthdr.len - hlen) < tdb->tdb_compalgxform->minlen) {
379 return ipsp_process_done(m, tdb);
384 return (*(tdb->tdb_xform->xf_output))(m, tdb, hlen, off);
396 ipsp_process_done(struct mbuf *m, struct tdb *tdb)
402 struct tdb *tdbo;
409 tdb->tdb_last_used = gettime();
411 if ((tdb->tdb_flags & TDBF_UDPENCAP) != 0) {
421 switch (tdb->tdb_dst.sa.sa_family) {
432 tdb->tdb_dst.sa.sa_family);
444 if (tdb->tdb_udpencap_port)
445 uh->uh_dport = tdb->tdb_udpencap_port;
450 if (tdb->tdb_dst.sa.sa_family == AF_INET6)
456 switch (tdb->tdb_dst.sa.sa_family) {
461 if ((tdb->tdb_flags & TDBF_UDPENCAP) != 0)
479 if ((tdb->tdb_flags & TDBF_UDPENCAP) != 0)
486 tdb->tdb_dst.sa.sa_family);
504 tdbi->dst = tdb->tdb_dst;
505 tdbi->proto = tdb->tdb_sproto;
506 tdbi->spi = tdb->tdb_spi;
507 tdbi->rdomain = tdb->tdb_rdomain;
512 tdbstat_pkt(tdb, tdb_opackets, tdb_obytes, m->m_pkthdr.len);
515 tdbo = tdb_ref(tdb->tdb_onext);
519 tdb->tdb_dst.sa.sa_family, 0);
526 pf_tag_packet(m, tdb->tdb_tag, -1);
529 if (tdb->tdb_rdomain != tdb->tdb_rdomain_post)
530 m->m_pkthdr.ph_rtableid = tdb->tdb_rdomain_post;
537 switch (tdb->tdb_dst.sa.sa_family) {
562 ipsec_hdrsz(struct tdb *tdbp)
620 struct tdb *tdbp;