MCPcopy Create free account
hub / github.com/F-Stack/f-stack / key_allocsa_tcpmd5

Function key_allocsa_tcpmd5

freebsd/netipsec/key.c:960–1004  ·  view source on GitHub ↗

* Allocating an SA entry for an *INBOUND* or *OUTBOUND* TCP packet, signed * or should be signed by MD5 signature. * We don't use key_allocsa() for such lookups, because we don't know SPI. * Unlike ESP and AH protocols, SPI isn't transmitted in the TCP header with * signed packet. We use SADB only as storage for password. * OUT: positive: corresponding SA for given saidx found. * NULL: SA n

Source from the content-addressed store, hash-verified

958 * NULL: SA not found
959 */
960struct secasvar *
961key_allocsa_tcpmd5(struct secasindex *saidx)
962{
963 SAHTREE_RLOCK_TRACKER;
964 struct secashead *sah;
965 struct secasvar *sav;
966
967 IPSEC_ASSERT(saidx->proto == IPPROTO_TCP,
968 ("unexpected security protocol %u", saidx->proto));
969 IPSEC_ASSERT(saidx->mode == IPSEC_MODE_TCPMD5,
970 ("unexpected mode %u", saidx->mode));
971
972 SAHTREE_RLOCK();
973 LIST_FOREACH(sah, SAHADDRHASH_HASH(saidx), addrhash) {
974 KEYDBG(IPSEC_DUMP,
975 printf("%s: checking SAH\n", __func__);
976 kdebug_secash(sah, " "));
977 if (sah->saidx.proto != IPPROTO_TCP)
978 continue;
979 if (!key_sockaddrcmp(&saidx->dst.sa, &sah->saidx.dst.sa, 0) &&
980 !key_sockaddrcmp(&saidx->src.sa, &sah->saidx.src.sa, 0))
981 break;
982 }
983 if (sah != NULL) {
984 if (V_key_preferred_oldsa)
985 sav = TAILQ_LAST(&sah->savtree_alive, secasvar_queue);
986 else
987 sav = TAILQ_FIRST(&sah->savtree_alive);
988 if (sav != NULL)
989 SAV_ADDREF(sav);
990 } else
991 sav = NULL;
992 SAHTREE_RUNLOCK();
993
994 if (sav != NULL) {
995 KEYDBG(IPSEC_STAMP,
996 printf("%s: return SA(%p)\n", __func__, sav));
997 KEYDBG(IPSEC_DATA, kdebug_secasv(sav));
998 } else {
999 KEYDBG(IPSEC_STAMP,
1000 printf("%s: SA not found\n", __func__));
1001 KEYDBG(IPSEC_DATA, kdebug_secasindex(saidx, NULL));
1002 }
1003 return (sav);
1004}
1005
1006/*
1007 * Allocating an SA entry for an *OUTBOUND* packet.

Callers 2

tcp_ipsec_inputFunction · 0.85
tcp_ipsec_outputFunction · 0.85

Calls 5

kdebug_secashFunction · 0.85
key_sockaddrcmpFunction · 0.85
kdebug_secasvFunction · 0.85
kdebug_secasindexFunction · 0.85
printfFunction · 0.50

Tested by

no test coverage detected