Lines Matching refs:la
98 StartPointIn(struct libalias *la, in StartPointIn() argument
109 grp = SPLAY_FIND(splay_in, &la->linkSplayIn, &needle); in StartPointIn()
117 SPLAY_INSERT(splay_in, &la->linkSplayIn, grp); in StartPointIn()
155 ShowAliasStats(struct libalias *la) in ShowAliasStats() argument
157 LIBALIAS_LOCK_ASSERT(la); in ShowAliasStats()
159 if (la->logDesc) { in ShowAliasStats()
160 int tot = la->icmpLinkCount + la->udpLinkCount + in ShowAliasStats()
161 (la->sctpLinkCount>>1) + /* sctp counts half associations */ in ShowAliasStats()
162 la->tcpLinkCount + la->pptpLinkCount + in ShowAliasStats()
163 la->protoLinkCount + la->fragmentIdLinkCount + in ShowAliasStats()
164 la->fragmentPtrLinkCount; in ShowAliasStats()
166 AliasLog(la->logDesc, in ShowAliasStats()
168 la->icmpLinkCount, in ShowAliasStats()
169 la->udpLinkCount, in ShowAliasStats()
170 la->tcpLinkCount, in ShowAliasStats()
171 la->sctpLinkCount>>1, /* sctp counts half associations */ in ShowAliasStats()
172 la->pptpLinkCount, in ShowAliasStats()
173 la->protoLinkCount, in ShowAliasStats()
174 la->fragmentIdLinkCount, in ShowAliasStats()
175 la->fragmentPtrLinkCount, in ShowAliasStats()
178 AliasLog(la->logDesc, " (sock=%u)\n", la->sockCount); in ShowAliasStats()
183 void SctpShowAliasStats(struct libalias *la) in SctpShowAliasStats() argument
185 ShowAliasStats(la); in SctpShowAliasStats()
190 _RandomPort(struct libalias *la) { in _RandomPort() argument
193 port = la->aliasPortLower + in _RandomPort()
194 arc4random_uniform(la->aliasPortLength); in _RandomPort()
205 GetNewPort(struct libalias *la, struct alias_link *lnk, int alias_port_param) in GetNewPort() argument
211 LIBALIAS_LOCK_ASSERT(la); in GetNewPort()
244 port = (la->packetAliasMode & PKT_ALIAS_SAME_PORTS) in GetNewPort()
246 : _RandomPort(la); in GetNewPort()
249 for (i = 0; i < max_trials; i++, port = _RandomPort(la)) { in GetNewPort()
253 grp = StartPointIn(la, lnk->alias_addr, port, lnk->link_type, 0); in GetNewPort()
275 if ((la->packetAliasMode & PKT_ALIAS_USE_SOCKETS) && in GetNewPort()
279 if (!GetSocket(la, port, &lnk->sockfd, lnk->link_type)) { in GetNewPort()
291 GetSocket(struct libalias *la, u_short port_net, int *sockfd, int link_type) in GetSocket() argument
297 LIBALIAS_LOCK_ASSERT(la); in GetSocket()
325 la->sockCount++; in GetSocket()
342 FindNewPortGroup(struct libalias *la, in FindNewPortGroup() argument
356 LIBALIAS_LOCK_ASSERT(la); in FindNewPortGroup()
379 if (la->packetAliasMode & PKT_ALIAS_SAME_PORTS) { in FindNewPortGroup()
388 port = _RandomPort(la); in FindNewPortGroup()
392 for (i = 0; i < max_trials; i++, port = _RandomPort(la)) { in FindNewPortGroup()
401 if ((search_result = FindLinkIn(la, dst_addr, in FindNewPortGroup()
421 CleanupAliasData(struct libalias *la, int deletePermanent) in CleanupAliasData() argument
425 LIBALIAS_LOCK_ASSERT(la); in CleanupAliasData()
428 TAILQ_FOREACH_SAFE(lnk, &la->checkExpire, expire.list, lnk_tmp) in CleanupAliasData()
432 CleanupLink(struct libalias *la, struct alias_link **lnk, int deletePermanent) in CleanupLink() argument
434 LIBALIAS_LOCK_ASSERT(la); in CleanupLink()
446 TAILQ_REMOVE(&la->checkExpire, (*lnk), expire.list); in CleanupLink()
447 TAILQ_INSERT_TAIL(&la->checkExpire, (*lnk), expire.list); in CleanupLink()
451 UseLink(struct libalias *la, struct alias_link *lnk) in UseLink() argument
453 CleanupLink(la, &lnk, 0); in UseLink()
463 struct libalias *la = lnk->la; in DeleteLink() local
465 LIBALIAS_LOCK_ASSERT(la); in DeleteLink()
493 SPLAY_REMOVE(splay_out, &la->linkSplayOut, lnk); in DeleteLink()
500 grp = StartPointIn(la, lnk->alias_addr, lnk->alias_port, lnk->link_type, 0); in DeleteLink()
504 SPLAY_REMOVE(splay_in, &la->linkSplayIn, grp); in DeleteLink()
512 TAILQ_REMOVE(&la->checkExpire, lnk, expire.list); in DeleteLink()
517 la->sockCount--; in DeleteLink()
524 la->icmpLinkCount--; in DeleteLink()
527 la->udpLinkCount--; in DeleteLink()
530 la->tcpLinkCount--; in DeleteLink()
534 la->pptpLinkCount--; in DeleteLink()
537 la->fragmentIdLinkCount--; in DeleteLink()
540 la->fragmentPtrLinkCount--; in DeleteLink()
547 la->protoLinkCount--; in DeleteLink()
556 if (la->packetAliasMode & PKT_ALIAS_LOG) { in DeleteLink()
557 ShowAliasStats(la); in DeleteLink()
562 AddLink(struct libalias *la, struct in_addr src_addr, struct in_addr dst_addr, in AddLink() argument
568 LIBALIAS_LOCK_ASSERT(la); in AddLink()
579 lnk->la = la; in AddLink()
625 if (GetNewPort(la, lnk, alias_port_param) != 0) { in AddLink()
632 la->icmpLinkCount++; in AddLink()
635 la->udpLinkCount++; in AddLink()
651 la->tcpLinkCount++; in AddLink()
663 la->pptpLinkCount++; in AddLink()
666 la->fragmentIdLinkCount++; in AddLink()
669 la->fragmentPtrLinkCount++; in AddLink()
674 la->protoLinkCount++; in AddLink()
680 LIST_INSERT_HEAD(&la->pptpList, lnk, pptp.list); in AddLink()
685 grp = StartPointIn(la, alias_addr, lnk->alias_port, link_type, 1); in AddLink()
692 SPLAY_INSERT(splay_out, &la->linkSplayOut, lnk); in AddLink()
704 TAILQ_INSERT_TAIL(&la->checkExpire, lnk, expire.list); in AddLink()
706 if (la->packetAliasMode & PKT_ALIAS_LOG) in AddLink()
707 ShowAliasStats(la); in AddLink()
728 struct libalias *la = old_lnk->la; in ReLink() local
730 LIBALIAS_LOCK_ASSERT(la); in ReLink()
731 new_lnk = AddLink(la, src_addr, dst_addr, alias_addr, in ReLink()
746 _SearchLinkOut(struct libalias *la, struct in_addr src_addr, in _SearchLinkOut() argument
760 lnk = SPLAY_FIND(splay_out, &la->linkSplayOut, &needle); in _SearchLinkOut()
761 return (UseLink(la, lnk)); in _SearchLinkOut()
765 _FindLinkOut(struct libalias *la, struct in_addr src_addr, in _FindLinkOut() argument
774 LIBALIAS_LOCK_ASSERT(la); in _FindLinkOut()
775 lnk = _SearchLinkOut(la, src_addr, dst_addr, src_port, dst_port, link_type); in _FindLinkOut()
781 lnk = _SearchLinkOut(la, src_addr, dst_addr, src_port, 0, in _FindLinkOut()
784 lnk = _SearchLinkOut(la, src_addr, ANY_ADDR, src_port, in _FindLinkOut()
789 lnk = _SearchLinkOut(la, src_addr, ANY_ADDR, src_port, 0, in _FindLinkOut()
802 FindLinkOut(struct libalias *la, struct in_addr src_addr, in FindLinkOut() argument
811 LIBALIAS_LOCK_ASSERT(la); in FindLinkOut()
812 lnk = _FindLinkOut(la, src_addr, dst_addr, src_port, dst_port, in FindLinkOut()
822 if (la->aliasAddress.s_addr != INADDR_ANY && in FindLinkOut()
823 src_addr.s_addr == la->aliasAddress.s_addr) { in FindLinkOut()
824 lnk = _FindLinkOut(la, ANY_ADDR, dst_addr, src_port, dst_port, in FindLinkOut()
832 _FindLinkIn(struct libalias *la, struct in_addr dst_addr, in _FindLinkIn() argument
848 LIBALIAS_LOCK_ASSERT(la); in _FindLinkIn()
863 grp = StartPointIn(la, alias_addr, alias_port, link_type, 0); in _FindLinkIn()
874 found = UseLink(la, lnk); in _FindLinkIn()
878 grp = StartPointIn(la, alias_addr, alias_port, link_type, 0); in _FindLinkIn()
954 FindLinkIn(struct libalias *la, struct in_addr dst_addr, in FindLinkIn() argument
963 LIBALIAS_LOCK_ASSERT(la); in FindLinkIn()
964 lnk = _FindLinkIn(la, dst_addr, alias_addr, dst_port, alias_port, in FindLinkIn()
974 if (la->aliasAddress.s_addr != INADDR_ANY && in FindLinkIn()
975 alias_addr.s_addr == la->aliasAddress.s_addr) { in FindLinkIn()
976 lnk = _FindLinkIn(la, dst_addr, ANY_ADDR, dst_port, alias_port, in FindLinkIn()
1000 FindIcmpIn(struct libalias *la, struct in_addr dst_addr, in FindIcmpIn() argument
1007 LIBALIAS_LOCK_ASSERT(la); in FindIcmpIn()
1008 lnk = FindLinkIn(la, dst_addr, alias_addr, in FindIcmpIn()
1011 if (lnk == NULL && create && !(la->packetAliasMode & PKT_ALIAS_DENY_INCOMING)) { in FindIcmpIn()
1014 target_addr = FindOriginalAddress(la, alias_addr); in FindIcmpIn()
1015 lnk = AddLink(la, target_addr, dst_addr, alias_addr, in FindIcmpIn()
1023 FindIcmpOut(struct libalias *la, struct in_addr src_addr, in FindIcmpOut() argument
1030 LIBALIAS_LOCK_ASSERT(la); in FindIcmpOut()
1031 lnk = FindLinkOut(la, src_addr, dst_addr, in FindIcmpOut()
1037 alias_addr = FindAliasAddress(la, src_addr); in FindIcmpOut()
1038 lnk = AddLink(la, src_addr, dst_addr, alias_addr, in FindIcmpOut()
1046 FindFragmentIn1(struct libalias *la, struct in_addr dst_addr, in FindFragmentIn1() argument
1052 LIBALIAS_LOCK_ASSERT(la); in FindFragmentIn1()
1053 lnk = FindLinkIn(la, dst_addr, alias_addr, in FindFragmentIn1()
1058 lnk = AddLink(la, ANY_ADDR, dst_addr, alias_addr, in FindFragmentIn1()
1067 FindFragmentIn2(struct libalias *la, struct in_addr dst_addr, in FindFragmentIn2() argument
1070 LIBALIAS_LOCK_ASSERT(la); in FindFragmentIn2()
1071 return FindLinkIn(la, dst_addr, alias_addr, in FindFragmentIn2()
1077 AddFragmentPtrLink(struct libalias *la, struct in_addr dst_addr, in AddFragmentPtrLink() argument
1080 LIBALIAS_LOCK_ASSERT(la); in AddFragmentPtrLink()
1081 return AddLink(la, ANY_ADDR, dst_addr, ANY_ADDR, in AddFragmentPtrLink()
1087 FindFragmentPtr(struct libalias *la, struct in_addr dst_addr, in FindFragmentPtr() argument
1090 LIBALIAS_LOCK_ASSERT(la); in FindFragmentPtr()
1091 return FindLinkIn(la, dst_addr, ANY_ADDR, in FindFragmentPtr()
1097 FindProtoIn(struct libalias *la, struct in_addr dst_addr, in FindProtoIn() argument
1103 LIBALIAS_LOCK_ASSERT(la); in FindProtoIn()
1104 lnk = FindLinkIn(la, dst_addr, alias_addr, in FindProtoIn()
1108 if (lnk == NULL && !(la->packetAliasMode & PKT_ALIAS_DENY_INCOMING)) { in FindProtoIn()
1111 target_addr = FindOriginalAddress(la, alias_addr); in FindProtoIn()
1112 lnk = AddLink(la, target_addr, dst_addr, alias_addr, in FindProtoIn()
1120 FindProtoOut(struct libalias *la, struct in_addr src_addr, in FindProtoOut() argument
1126 LIBALIAS_LOCK_ASSERT(la); in FindProtoOut()
1127 lnk = FindLinkOut(la, src_addr, dst_addr, in FindProtoOut()
1134 alias_addr = FindAliasAddress(la, src_addr); in FindProtoOut()
1135 lnk = AddLink(la, src_addr, dst_addr, alias_addr, in FindProtoOut()
1143 FindUdpTcpIn(struct libalias *la, struct in_addr dst_addr, in FindUdpTcpIn() argument
1153 LIBALIAS_LOCK_ASSERT(la); in FindUdpTcpIn()
1166 lnk = FindLinkIn(la, dst_addr, alias_addr, in FindUdpTcpIn()
1170 if (lnk == NULL && create && !(la->packetAliasMode & PKT_ALIAS_DENY_INCOMING)) { in FindUdpTcpIn()
1173 target_addr = FindOriginalAddress(la, alias_addr); in FindUdpTcpIn()
1174 lnk = AddLink(la, target_addr, dst_addr, alias_addr, in FindUdpTcpIn()
1182 FindUdpTcpOut(struct libalias *la, struct in_addr src_addr, in FindUdpTcpOut() argument
1192 LIBALIAS_LOCK_ASSERT(la); in FindUdpTcpOut()
1205 lnk = FindLinkOut(la, src_addr, dst_addr, src_port, dst_port, link_type, create); in FindUdpTcpOut()
1210 alias_addr = FindAliasAddress(la, src_addr); in FindUdpTcpOut()
1211 lnk = AddLink(la, src_addr, dst_addr, alias_addr, in FindUdpTcpOut()
1219 AddPptp(struct libalias *la, struct in_addr src_addr, in AddPptp() argument
1226 LIBALIAS_LOCK_ASSERT(la); in AddPptp()
1227 lnk = AddLink(la, src_addr, dst_addr, alias_addr, in AddPptp()
1235 FindPptpOutByCallId(struct libalias *la, struct in_addr src_addr, in FindPptpOutByCallId() argument
1241 LIBALIAS_LOCK_ASSERT(la); in FindPptpOutByCallId()
1242 LIST_FOREACH(lnk, &la->pptpList, pptp.list) in FindPptpOutByCallId()
1248 return (UseLink(la, lnk)); in FindPptpOutByCallId()
1252 FindPptpOutByPeerCallId(struct libalias *la, struct in_addr src_addr, in FindPptpOutByPeerCallId() argument
1258 LIBALIAS_LOCK_ASSERT(la); in FindPptpOutByPeerCallId()
1259 LIST_FOREACH(lnk, &la->pptpList, pptp.list) in FindPptpOutByPeerCallId()
1265 return (UseLink(la, lnk)); in FindPptpOutByPeerCallId()
1269 FindPptpInByCallId(struct libalias *la, struct in_addr dst_addr, in FindPptpInByCallId() argument
1275 LIBALIAS_LOCK_ASSERT(la); in FindPptpInByCallId()
1277 LIST_FOREACH(lnk, &la->pptpList, pptp.list) in FindPptpInByCallId()
1283 return (UseLink(la, lnk)); in FindPptpInByCallId()
1287 FindPptpInByPeerCallId(struct libalias *la, struct in_addr dst_addr, in FindPptpInByPeerCallId() argument
1293 LIBALIAS_LOCK_ASSERT(la); in FindPptpInByPeerCallId()
1294 LIST_FOREACH(lnk, &la->pptpList, pptp.list) in FindPptpInByPeerCallId()
1304 FindRtspOut(struct libalias *la, struct in_addr src_addr, in FindRtspOut() argument
1313 LIBALIAS_LOCK_ASSERT(la); in FindRtspOut()
1326 lnk = FindLinkOut(la, src_addr, dst_addr, src_port, 0, link_type, 1); in FindRtspOut()
1331 alias_addr = FindAliasAddress(la, src_addr); in FindRtspOut()
1332 lnk = AddLink(la, src_addr, dst_addr, alias_addr, in FindRtspOut()
1340 FindOriginalAddress(struct libalias *la, struct in_addr alias_addr) in FindOriginalAddress() argument
1344 LIBALIAS_LOCK_ASSERT(la); in FindOriginalAddress()
1345 lnk = FindLinkIn(la, ANY_ADDR, alias_addr, in FindOriginalAddress()
1348 if (la->targetAddress.s_addr == INADDR_ANY) in FindOriginalAddress()
1350 else if (la->targetAddress.s_addr == INADDR_NONE) in FindOriginalAddress()
1351 return (la->aliasAddress.s_addr != INADDR_ANY) ? in FindOriginalAddress()
1352 la->aliasAddress : alias_addr; in FindOriginalAddress()
1354 return (la->targetAddress); in FindOriginalAddress()
1363 return (la->aliasAddress.s_addr != INADDR_ANY) ? in FindOriginalAddress()
1364 la->aliasAddress : alias_addr; in FindOriginalAddress()
1371 FindAliasAddress(struct libalias *la, struct in_addr original_addr) in FindAliasAddress() argument
1375 LIBALIAS_LOCK_ASSERT(la); in FindAliasAddress()
1376 lnk = FindLinkOut(la, original_addr, ANY_ADDR, in FindAliasAddress()
1379 return (la->aliasAddress.s_addr != INADDR_ANY) ? in FindAliasAddress()
1380 la->aliasAddress : original_addr; in FindAliasAddress()
1383 return (la->aliasAddress.s_addr != INADDR_ANY) ? in FindAliasAddress()
1384 la->aliasAddress : original_addr; in FindAliasAddress()
1496 return (lnk->la->aliasAddress); in GetOriginalAddress()
1511 return (lnk->la->aliasAddress); in GetAliasAddress()
1517 GetDefaultAliasAddress(struct libalias *la) in GetDefaultAliasAddress() argument
1519 LIBALIAS_LOCK_ASSERT(la); in GetDefaultAliasAddress()
1520 return (la->aliasAddress); in GetDefaultAliasAddress()
1524 SetDefaultAliasAddress(struct libalias *la, struct in_addr alias_addr) in SetDefaultAliasAddress() argument
1526 LIBALIAS_LOCK_ASSERT(la); in SetDefaultAliasAddress()
1527 la->aliasAddress = alias_addr; in SetDefaultAliasAddress()
1739 LIBALIAS_LOCK_ASSERT(lnk->la); in SetDestCallId()
1761 HouseKeeping(struct libalias *la) in HouseKeeping() argument
1766 LIBALIAS_LOCK_ASSERT(la); in HouseKeeping()
1797 if (packets < (la->udpLinkCount + la->tcpLinkCount)) { in HouseKeeping()
1798 struct alias_link * lnk = TAILQ_FIRST(&la->checkExpire); in HouseKeeping()
1800 CleanupLink(la, &lnk, 0); in HouseKeeping()
1806 InitPacketAliasLog(struct libalias *la) in InitPacketAliasLog() argument
1808 LIBALIAS_LOCK_ASSERT(la); in InitPacketAliasLog()
1809 if (~la->packetAliasMode & PKT_ALIAS_LOG) { in InitPacketAliasLog()
1811 if ((la->logDesc = malloc(LIBALIAS_BUF_SIZE))) in InitPacketAliasLog()
1814 if ((la->logDesc = fopen("/var/log/alias.log", "w"))) in InitPacketAliasLog()
1815 fprintf(la->logDesc, "PacketAlias/InitPacketAliasLog: Packet alias logging enabled.\n"); in InitPacketAliasLog()
1819 la->packetAliasMode |= PKT_ALIAS_LOG; in InitPacketAliasLog()
1827 UninitPacketAliasLog(struct libalias *la) in UninitPacketAliasLog() argument
1829 LIBALIAS_LOCK_ASSERT(la); in UninitPacketAliasLog()
1830 if (la->logDesc) { in UninitPacketAliasLog()
1832 free(la->logDesc); in UninitPacketAliasLog()
1834 fclose(la->logDesc); in UninitPacketAliasLog()
1836 la->logDesc = NULL; in UninitPacketAliasLog()
1838 la->packetAliasMode &= ~PKT_ALIAS_LOG; in UninitPacketAliasLog()
1862 LibAliasRedirectPort(struct libalias *la, struct in_addr src_addr, u_short src_port, in LibAliasRedirectPort() argument
1870 LIBALIAS_LOCK(la); in LibAliasRedirectPort()
1890 lnk = AddLink(la, src_addr, dst_addr, alias_addr, in LibAliasRedirectPort()
1905 LIBALIAS_UNLOCK(la); in LibAliasRedirectPort()
1911 LibAliasAddServer(struct libalias *la, struct alias_link *lnk, struct in_addr addr, u_short port) in LibAliasAddServer() argument
1916 LIBALIAS_LOCK(la); in LibAliasAddServer()
1917 (void)la; in LibAliasAddServer()
1938 SPLAY_REMOVE(splay_out, &la->linkSplayOut, lnk); in LibAliasAddServer()
1952 LIBALIAS_UNLOCK(la); in LibAliasAddServer()
1959 LibAliasRedirectProto(struct libalias *la, struct in_addr src_addr, in LibAliasRedirectProto() argument
1966 LIBALIAS_LOCK(la); in LibAliasRedirectProto()
1967 lnk = AddLink(la, src_addr, dst_addr, alias_addr, in LibAliasRedirectProto()
1981 LIBALIAS_UNLOCK(la); in LibAliasRedirectProto()
1987 LibAliasRedirectAddr(struct libalias *la, struct in_addr src_addr, in LibAliasRedirectAddr() argument
1992 LIBALIAS_LOCK(la); in LibAliasRedirectAddr()
1993 lnk = AddLink(la, src_addr, ANY_ADDR, alias_addr, in LibAliasRedirectAddr()
2007 LIBALIAS_UNLOCK(la); in LibAliasRedirectAddr()
2013 LibAliasRedirectDynamic(struct libalias *la, struct alias_link *lnk) in LibAliasRedirectDynamic() argument
2017 LIBALIAS_LOCK(la); in LibAliasRedirectDynamic()
2018 (void)la; in LibAliasRedirectDynamic()
2026 LIBALIAS_UNLOCK(la); in LibAliasRedirectDynamic()
2033 LibAliasRedirectDelete(struct libalias *la, struct alias_link *lnk) in LibAliasRedirectDelete() argument
2035 LIBALIAS_LOCK(la); in LibAliasRedirectDelete()
2036 (void)la; in LibAliasRedirectDelete()
2038 LIBALIAS_UNLOCK(la); in LibAliasRedirectDelete()
2042 LibAliasSetAddress(struct libalias *la, struct in_addr addr) in LibAliasSetAddress() argument
2044 LIBALIAS_LOCK(la); in LibAliasSetAddress()
2045 if (la->packetAliasMode & PKT_ALIAS_RESET_ON_ADDR_CHANGE in LibAliasSetAddress()
2046 && la->aliasAddress.s_addr != addr.s_addr) in LibAliasSetAddress()
2047 CleanupAliasData(la, 0); in LibAliasSetAddress()
2049 la->aliasAddress = addr; in LibAliasSetAddress()
2050 LIBALIAS_UNLOCK(la); in LibAliasSetAddress()
2054 LibAliasSetAliasPortRange(struct libalias *la, u_short port_low, in LibAliasSetAliasPortRange() argument
2057 LIBALIAS_LOCK(la); in LibAliasSetAliasPortRange()
2059 la->aliasPortLower = port_low; in LibAliasSetAliasPortRange()
2061 la->aliasPortLength = port_high - port_low + 1; in LibAliasSetAliasPortRange()
2064 la->aliasPortLower = 0x8000; in LibAliasSetAliasPortRange()
2065 la->aliasPortLength = 0x8000; in LibAliasSetAliasPortRange()
2067 LIBALIAS_UNLOCK(la); in LibAliasSetAliasPortRange()
2071 LibAliasSetTarget(struct libalias *la, struct in_addr target_addr) in LibAliasSetTarget() argument
2073 LIBALIAS_LOCK(la); in LibAliasSetTarget()
2074 la->targetAddress = target_addr; in LibAliasSetTarget()
2075 LIBALIAS_UNLOCK(la); in LibAliasSetTarget()
2086 LibAliasInit(struct libalias *la) in LibAliasInit() argument
2088 if (la == NULL) { in LibAliasInit()
2091 la = malloc(sizeof *la, M_ALIAS, M_WAITOK | M_ZERO); in LibAliasInit()
2093 la = calloc(sizeof *la, 1); in LibAliasInit()
2094 if (la == NULL) in LibAliasInit()
2095 return (la); in LibAliasInit()
2103 LIST_INSERT_HEAD(&instancehead, la, instancelist); in LibAliasInit()
2111 SPLAY_INIT(&la->linkSplayIn); in LibAliasInit()
2112 SPLAY_INIT(&la->linkSplayOut); in LibAliasInit()
2113 LIST_INIT(&la->pptpList); in LibAliasInit()
2114 TAILQ_INIT(&la->checkExpire); in LibAliasInit()
2116 AliasSctpInit(la); in LibAliasInit()
2118 LIBALIAS_LOCK_INIT(la); in LibAliasInit()
2119 LIBALIAS_LOCK(la); in LibAliasInit()
2121 LIBALIAS_LOCK(la); in LibAliasInit()
2122 CleanupAliasData(la, 1); in LibAliasInit()
2124 AliasSctpTerm(la); in LibAliasInit()
2125 AliasSctpInit(la); in LibAliasInit()
2129 la->aliasAddress.s_addr = INADDR_ANY; in LibAliasInit()
2130 la->targetAddress.s_addr = INADDR_ANY; in LibAliasInit()
2131 la->aliasPortLower = 0x8000; in LibAliasInit()
2132 la->aliasPortLength = 0x8000; in LibAliasInit()
2134 la->icmpLinkCount = 0; in LibAliasInit()
2135 la->udpLinkCount = 0; in LibAliasInit()
2136 la->tcpLinkCount = 0; in LibAliasInit()
2137 la->sctpLinkCount = 0; in LibAliasInit()
2138 la->pptpLinkCount = 0; in LibAliasInit()
2139 la->protoLinkCount = 0; in LibAliasInit()
2140 la->fragmentIdLinkCount = 0; in LibAliasInit()
2141 la->fragmentPtrLinkCount = 0; in LibAliasInit()
2142 la->sockCount = 0; in LibAliasInit()
2144 la->packetAliasMode = PKT_ALIAS_SAME_PORTS in LibAliasInit()
2150 la->fireWallFD = -1; in LibAliasInit()
2155 LIBALIAS_UNLOCK(la); in LibAliasInit()
2156 return (la); in LibAliasInit()
2160 LibAliasUninit(struct libalias *la) in LibAliasUninit() argument
2162 LIBALIAS_LOCK(la); in LibAliasUninit()
2164 AliasSctpTerm(la); in LibAliasUninit()
2166 CleanupAliasData(la, 1); in LibAliasUninit()
2167 UninitPacketAliasLog(la); in LibAliasUninit()
2169 UninitPunchFW(la); in LibAliasUninit()
2171 LIST_REMOVE(la, instancelist); in LibAliasUninit()
2172 LIBALIAS_UNLOCK(la); in LibAliasUninit()
2173 LIBALIAS_LOCK_DESTROY(la); in LibAliasUninit()
2174 free(la); in LibAliasUninit()
2180 struct libalias *la, in LibAliasSetMode() argument
2188 LIBALIAS_LOCK(la); in LibAliasSetMode()
2191 if (InitPacketAliasLog(la) == ENOMEM) in LibAliasSetMode()
2195 UninitPacketAliasLog(la); in LibAliasSetMode()
2200 InitPunchFW(la); in LibAliasSetMode()
2203 UninitPunchFW(la); in LibAliasSetMode()
2207 la->packetAliasMode = (flags & mask) | (la->packetAliasMode & ~mask); in LibAliasSetMode()
2208 res = la->packetAliasMode; in LibAliasSetMode()
2210 LIBALIAS_UNLOCK(la); in LibAliasSetMode()
2298 InitPunchFW(struct libalias *la) in InitPunchFW() argument
2300 la->fireWallField = malloc(la->fireWallNumNums); in InitPunchFW()
2301 if (la->fireWallField) { in InitPunchFW()
2302 memset(la->fireWallField, 0, la->fireWallNumNums); in InitPunchFW()
2303 if (la->fireWallFD < 0) { in InitPunchFW()
2304 la->fireWallFD = socket(AF_INET, SOCK_RAW, IPPROTO_RAW); in InitPunchFW()
2306 ClearAllFWHoles(la); in InitPunchFW()
2307 la->fireWallActiveNum = la->fireWallBaseNum; in InitPunchFW()
2312 UninitPunchFW(struct libalias *la) in UninitPunchFW() argument
2314 ClearAllFWHoles(la); in UninitPunchFW()
2315 if (la->fireWallFD >= 0) in UninitPunchFW()
2316 close(la->fireWallFD); in UninitPunchFW()
2317 la->fireWallFD = -1; in UninitPunchFW()
2318 if (la->fireWallField) in UninitPunchFW()
2319 free(la->fireWallField); in UninitPunchFW()
2320 la->fireWallField = NULL; in UninitPunchFW()
2321 la->packetAliasMode &= ~PKT_ALIAS_PUNCH_FW; in UninitPunchFW()
2328 struct libalias *la; in PunchFWHole() local
2333 la = lnk->la; in PunchFWHole()
2336 if (!(la->packetAliasMode & PKT_ALIAS_PUNCH_FW) || in PunchFWHole()
2337 la->fireWallFD < 0 || in PunchFWHole()
2346 for (fwhole = la->fireWallActiveNum; in PunchFWHole()
2347 fwhole < la->fireWallBaseNum + la->fireWallNumNums && in PunchFWHole()
2348 fw_tstfield(la, la->fireWallField, fwhole); in PunchFWHole()
2350 if (fwhole == la->fireWallBaseNum + la->fireWallNumNums) { in PunchFWHole()
2351 for (fwhole = la->fireWallBaseNum; in PunchFWHole()
2352 fwhole < la->fireWallActiveNum && in PunchFWHole()
2353 fw_tstfield(la, la->fireWallField, fwhole); in PunchFWHole()
2355 if (fwhole == la->fireWallActiveNum) { in PunchFWHole()
2357 la->fireWallActiveNum = la->fireWallBaseNum; in PunchFWHole()
2365 la->fireWallActiveNum = fwhole + 1; in PunchFWHole()
2381 r = setsockopt(la->fireWallFD, IPPROTO_IP, IP_FW_ADD, rulebuf, i); in PunchFWHole()
2389 r = setsockopt(la->fireWallFD, IPPROTO_IP, IP_FW_ADD, rulebuf, i); in PunchFWHole()
2396 fw_setfield(la, la->fireWallField, fwhole); in PunchFWHole()
2404 struct libalias *la; in ClearFWHole() local
2406 la = lnk->la; in ClearFWHole()
2415 while (!setsockopt(la->fireWallFD, IPPROTO_IP, IP_FW_DEL, in ClearFWHole()
2417 fw_clrfield(la, la->fireWallField, fwhole); in ClearFWHole()
2424 ClearAllFWHoles(struct libalias *la) in ClearAllFWHoles() argument
2429 if (la->fireWallFD < 0) in ClearAllFWHoles()
2433 for (i = la->fireWallBaseNum; i < la->fireWallBaseNum + la->fireWallNumNums; i++) { in ClearAllFWHoles()
2436 while (!setsockopt(la->fireWallFD, IPPROTO_IP, IP_FW_DEL, &r, sizeof r)); in ClearAllFWHoles()
2439 memset(la->fireWallField, 0, la->fireWallNumNums); in ClearAllFWHoles()
2445 LibAliasSetFWBase(struct libalias *la, unsigned int base, unsigned int num) in LibAliasSetFWBase() argument
2447 LIBALIAS_LOCK(la); in LibAliasSetFWBase()
2449 la->fireWallBaseNum = base; in LibAliasSetFWBase()
2450 la->fireWallNumNums = num; in LibAliasSetFWBase()
2452 LIBALIAS_UNLOCK(la); in LibAliasSetFWBase()
2456 LibAliasSetSkinnyPort(struct libalias *la, unsigned int port) in LibAliasSetSkinnyPort() argument
2458 LIBALIAS_LOCK(la); in LibAliasSetSkinnyPort()
2459 la->skinnyPort = port; in LibAliasSetSkinnyPort()
2460 LIBALIAS_UNLOCK(la); in LibAliasSetSkinnyPort()
2467 FindSctpRedirectAddress(struct libalias *la, struct sctp_nat_msg *sm) in FindSctpRedirectAddress() argument
2472 LIBALIAS_LOCK_ASSERT(la); in FindSctpRedirectAddress()
2473 lnk = FindLinkIn(la, sm->ip_hdr->ip_src, sm->ip_hdr->ip_dst, in FindSctpRedirectAddress()
2479 redir = FindOriginalAddress(la,sm->ip_hdr->ip_dst); in FindSctpRedirectAddress()
2480 if (redir.s_addr == la->aliasAddress.s_addr || in FindSctpRedirectAddress()
2481 redir.s_addr == la->targetAddress.s_addr) { in FindSctpRedirectAddress()
2483 lnk = FindLinkIn(la, sm->ip_hdr->ip_src, sm->ip_hdr->ip_dst, in FindSctpRedirectAddress()