Lines Matching refs:la

100 StartPointIn(struct libalias *la,  in StartPointIn()  argument
111 grp = SPLAY_FIND(splay_in, &la->linkSplayIn, &needle); in StartPointIn()
119 SPLAY_INSERT(splay_in, &la->linkSplayIn, grp); in StartPointIn()
157 ShowAliasStats(struct libalias *la) in ShowAliasStats() argument
159 LIBALIAS_LOCK_ASSERT(la); in ShowAliasStats()
161 if (la->logDesc) { in ShowAliasStats()
162 int tot = la->icmpLinkCount + la->udpLinkCount + in ShowAliasStats()
163 (la->sctpLinkCount>>1) + /* sctp counts half associations */ in ShowAliasStats()
164 la->tcpLinkCount + la->pptpLinkCount + in ShowAliasStats()
165 la->protoLinkCount + la->fragmentIdLinkCount + in ShowAliasStats()
166 la->fragmentPtrLinkCount; in ShowAliasStats()
168 AliasLog(la->logDesc, in ShowAliasStats()
170 la->icmpLinkCount, in ShowAliasStats()
171 la->udpLinkCount, in ShowAliasStats()
172 la->tcpLinkCount, in ShowAliasStats()
173 la->sctpLinkCount>>1, /* sctp counts half associations */ in ShowAliasStats()
174 la->pptpLinkCount, in ShowAliasStats()
175 la->protoLinkCount, in ShowAliasStats()
176 la->fragmentIdLinkCount, in ShowAliasStats()
177 la->fragmentPtrLinkCount, in ShowAliasStats()
180 AliasLog(la->logDesc, " (sock=%u)\n", la->sockCount); in ShowAliasStats()
185 void SctpShowAliasStats(struct libalias *la) in SctpShowAliasStats() argument
187 ShowAliasStats(la); in SctpShowAliasStats()
192 _RandomPort(struct libalias *la) { in _RandomPort() argument
195 port = la->aliasPortLower + in _RandomPort()
196 arc4random_uniform(la->aliasPortLength); in _RandomPort()
207 GetNewPort(struct libalias *la, struct alias_link *lnk, int alias_port_param) in GetNewPort() argument
213 LIBALIAS_LOCK_ASSERT(la); in GetNewPort()
240 if ((la->packetAliasMode & PKT_ALIAS_UDP_EIM) && in GetNewPort()
246 la, lnk->src_addr, lnk->src_port, lnk->link_type); in GetNewPort()
259 port = (la->packetAliasMode & PKT_ALIAS_SAME_PORTS) in GetNewPort()
261 : _RandomPort(la); in GetNewPort()
264 for (i = 0; i < max_trials; i++, port = _RandomPort(la)) { in GetNewPort()
268 grp = StartPointIn(la, lnk->alias_addr, port, lnk->link_type, 0); in GetNewPort()
275 if ((la->packetAliasMode & PKT_ALIAS_UDP_EIM) && in GetNewPort()
298 if ((la->packetAliasMode & PKT_ALIAS_USE_SOCKETS) && in GetNewPort()
302 if (!GetSocket(la, port, &lnk->sockfd, lnk->link_type)) { in GetNewPort()
314 GetSocket(struct libalias *la, u_short port_net, int *sockfd, int link_type) in GetSocket() argument
320 LIBALIAS_LOCK_ASSERT(la); in GetSocket()
348 la->sockCount++; in GetSocket()
365 FindNewPortGroup(struct libalias *la, in FindNewPortGroup() argument
379 LIBALIAS_LOCK_ASSERT(la); in FindNewPortGroup()
402 if (la->packetAliasMode & PKT_ALIAS_SAME_PORTS) { in FindNewPortGroup()
411 port = _RandomPort(la); in FindNewPortGroup()
415 for (i = 0; i < max_trials; i++, port = _RandomPort(la)) { in FindNewPortGroup()
424 if ((search_result = FindLinkIn(la, dst_addr, in FindNewPortGroup()
444 CleanupAliasData(struct libalias *la, int deletePermanent) in CleanupAliasData() argument
448 LIBALIAS_LOCK_ASSERT(la); in CleanupAliasData()
451 TAILQ_FOREACH_SAFE(lnk, &la->checkExpire, expire.list, lnk_tmp) in CleanupAliasData()
455 CleanupLink(struct libalias *la, struct alias_link **lnk, int deletePermanent) in CleanupLink() argument
457 LIBALIAS_LOCK_ASSERT(la); in CleanupLink()
469 TAILQ_REMOVE(&la->checkExpire, (*lnk), expire.list); in CleanupLink()
470 TAILQ_INSERT_TAIL(&la->checkExpire, (*lnk), expire.list); in CleanupLink()
474 UseLink(struct libalias *la, struct alias_link *lnk) in UseLink() argument
476 CleanupLink(la, &lnk, 0); in UseLink()
486 struct libalias *la = lnk->la; in DeleteLink() local
488 LIBALIAS_LOCK_ASSERT(la); in DeleteLink()
516 SPLAY_REMOVE(splay_out, &la->linkSplayOut, lnk); in DeleteLink()
524 &la->linkSplayInternalEndpoint, lnk); in DeleteLink()
527 grp = StartPointIn(la, lnk->alias_addr, lnk->alias_port, lnk->link_type, 0); in DeleteLink()
531 SPLAY_REMOVE(splay_in, &la->linkSplayIn, grp); in DeleteLink()
539 TAILQ_REMOVE(&la->checkExpire, lnk, expire.list); in DeleteLink()
544 la->sockCount--; in DeleteLink()
551 la->icmpLinkCount--; in DeleteLink()
554 la->udpLinkCount--; in DeleteLink()
557 la->tcpLinkCount--; in DeleteLink()
561 la->pptpLinkCount--; in DeleteLink()
564 la->fragmentIdLinkCount--; in DeleteLink()
567 la->fragmentPtrLinkCount--; in DeleteLink()
574 la->protoLinkCount--; in DeleteLink()
583 if (la->packetAliasMode & PKT_ALIAS_LOG) { in DeleteLink()
584 ShowAliasStats(la); in DeleteLink()
589 AddLink(struct libalias *la, struct in_addr src_addr, struct in_addr dst_addr, in AddLink() argument
595 LIBALIAS_LOCK_ASSERT(la); in AddLink()
606 lnk->la = la; in AddLink()
652 if (GetNewPort(la, lnk, alias_port_param) != 0) { in AddLink()
659 la->icmpLinkCount++; in AddLink()
662 la->udpLinkCount++; in AddLink()
678 la->tcpLinkCount++; in AddLink()
690 la->pptpLinkCount++; in AddLink()
693 la->fragmentIdLinkCount++; in AddLink()
696 la->fragmentPtrLinkCount++; in AddLink()
701 la->protoLinkCount++; in AddLink()
707 LIST_INSERT_HEAD(&la->pptpList, lnk, pptp.list); in AddLink()
712 grp = StartPointIn(la, alias_addr, lnk->alias_port, link_type, 1); in AddLink()
719 SPLAY_INSERT(splay_out, &la->linkSplayOut, lnk); in AddLink()
729 &la->linkSplayInternalEndpoint, lnk); in AddLink()
735 TAILQ_INSERT_TAIL(&la->checkExpire, lnk, expire.list); in AddLink()
737 if (la->packetAliasMode & PKT_ALIAS_LOG) in AddLink()
738 ShowAliasStats(la); in AddLink()
759 struct libalias *la = old_lnk->la; in ReLink() local
761 LIBALIAS_LOCK_ASSERT(la); in ReLink()
762 new_lnk = AddLink(la, src_addr, dst_addr, alias_addr, in ReLink()
777 _SearchLinkOut(struct libalias *la, struct in_addr src_addr, in _SearchLinkOut() argument
791 lnk = SPLAY_FIND(splay_out, &la->linkSplayOut, &needle); in _SearchLinkOut()
792 return (UseLink(la, lnk)); in _SearchLinkOut()
796 _FindLinkOut(struct libalias *la, struct in_addr src_addr, in _FindLinkOut() argument
805 LIBALIAS_LOCK_ASSERT(la); in _FindLinkOut()
806 lnk = _SearchLinkOut(la, src_addr, dst_addr, src_port, dst_port, link_type); in _FindLinkOut()
812 lnk = _SearchLinkOut(la, src_addr, dst_addr, src_port, 0, in _FindLinkOut()
815 lnk = _SearchLinkOut(la, src_addr, ANY_ADDR, src_port, in _FindLinkOut()
820 lnk = _SearchLinkOut(la, src_addr, ANY_ADDR, src_port, 0, in _FindLinkOut()
833 FindLinkOut(struct libalias *la, struct in_addr src_addr, in FindLinkOut() argument
842 LIBALIAS_LOCK_ASSERT(la); in FindLinkOut()
843 lnk = _FindLinkOut(la, src_addr, dst_addr, src_port, dst_port, in FindLinkOut()
853 if (la->aliasAddress.s_addr != INADDR_ANY && in FindLinkOut()
854 src_addr.s_addr == la->aliasAddress.s_addr) { in FindLinkOut()
855 lnk = _FindLinkOut(la, ANY_ADDR, dst_addr, src_port, dst_port, in FindLinkOut()
863 _FindLinkIn(struct libalias *la, struct in_addr dst_addr, in _FindLinkIn() argument
879 LIBALIAS_LOCK_ASSERT(la); in _FindLinkIn()
894 grp = StartPointIn(la, alias_addr, alias_port, link_type, 0); in _FindLinkIn()
905 found = UseLink(la, lnk); in _FindLinkIn()
909 grp = StartPointIn(la, alias_addr, alias_port, link_type, 0); in _FindLinkIn()
985 FindLinkIn(struct libalias *la, struct in_addr dst_addr, in FindLinkIn() argument
994 LIBALIAS_LOCK_ASSERT(la); in FindLinkIn()
995 lnk = _FindLinkIn(la, dst_addr, alias_addr, dst_port, alias_port, in FindLinkIn()
999 (la->packetAliasMode & PKT_ALIAS_UDP_EIM) && in FindLinkIn()
1001 !(la->packetAliasMode & PKT_ALIAS_DENY_INCOMING)) { in FindLinkIn()
1002 lnk = _FindLinkIn(la, ANY_ADDR, alias_addr, 0, alias_port, in FindLinkIn()
1013 if (la->aliasAddress.s_addr != INADDR_ANY && in FindLinkIn()
1014 alias_addr.s_addr == la->aliasAddress.s_addr) { in FindLinkIn()
1015 lnk = _FindLinkIn(la, dst_addr, ANY_ADDR, dst_port, alias_port, in FindLinkIn()
1023 FindLinkByInternalEndpoint(struct libalias *la, struct in_addr src_addr, in FindLinkByInternalEndpoint() argument
1032 LIBALIAS_LOCK_ASSERT(la); in FindLinkByInternalEndpoint()
1033 return SPLAY_FIND(splay_internal_endpoint, &la->linkSplayInternalEndpoint, &needle); in FindLinkByInternalEndpoint()
1053 FindIcmpIn(struct libalias *la, struct in_addr dst_addr, in FindIcmpIn() argument
1060 LIBALIAS_LOCK_ASSERT(la); in FindIcmpIn()
1061 lnk = FindLinkIn(la, dst_addr, alias_addr, in FindIcmpIn()
1064 if (lnk == NULL && create && !(la->packetAliasMode & PKT_ALIAS_DENY_INCOMING)) { in FindIcmpIn()
1067 target_addr = FindOriginalAddress(la, alias_addr); in FindIcmpIn()
1068 lnk = AddLink(la, target_addr, dst_addr, alias_addr, in FindIcmpIn()
1076 FindIcmpOut(struct libalias *la, struct in_addr src_addr, in FindIcmpOut() argument
1083 LIBALIAS_LOCK_ASSERT(la); in FindIcmpOut()
1084 lnk = FindLinkOut(la, src_addr, dst_addr, in FindIcmpOut()
1090 alias_addr = FindAliasAddress(la, src_addr); in FindIcmpOut()
1091 lnk = AddLink(la, src_addr, dst_addr, alias_addr, in FindIcmpOut()
1099 FindFragmentIn1(struct libalias *la, struct in_addr dst_addr, in FindFragmentIn1() argument
1105 LIBALIAS_LOCK_ASSERT(la); in FindFragmentIn1()
1106 lnk = FindLinkIn(la, dst_addr, alias_addr, in FindFragmentIn1()
1111 lnk = AddLink(la, ANY_ADDR, dst_addr, alias_addr, in FindFragmentIn1()
1120 FindFragmentIn2(struct libalias *la, struct in_addr dst_addr, in FindFragmentIn2() argument
1123 LIBALIAS_LOCK_ASSERT(la); in FindFragmentIn2()
1124 return FindLinkIn(la, dst_addr, alias_addr, in FindFragmentIn2()
1130 AddFragmentPtrLink(struct libalias *la, struct in_addr dst_addr, in AddFragmentPtrLink() argument
1133 LIBALIAS_LOCK_ASSERT(la); in AddFragmentPtrLink()
1134 return AddLink(la, ANY_ADDR, dst_addr, ANY_ADDR, in AddFragmentPtrLink()
1140 FindFragmentPtr(struct libalias *la, struct in_addr dst_addr, in FindFragmentPtr() argument
1143 LIBALIAS_LOCK_ASSERT(la); in FindFragmentPtr()
1144 return FindLinkIn(la, dst_addr, ANY_ADDR, in FindFragmentPtr()
1150 FindProtoIn(struct libalias *la, struct in_addr dst_addr, in FindProtoIn() argument
1156 LIBALIAS_LOCK_ASSERT(la); in FindProtoIn()
1157 lnk = FindLinkIn(la, dst_addr, alias_addr, in FindProtoIn()
1161 if (lnk == NULL && !(la->packetAliasMode & PKT_ALIAS_DENY_INCOMING)) { in FindProtoIn()
1164 target_addr = FindOriginalAddress(la, alias_addr); in FindProtoIn()
1165 lnk = AddLink(la, target_addr, dst_addr, alias_addr, in FindProtoIn()
1173 FindProtoOut(struct libalias *la, struct in_addr src_addr, in FindProtoOut() argument
1179 LIBALIAS_LOCK_ASSERT(la); in FindProtoOut()
1180 lnk = FindLinkOut(la, src_addr, dst_addr, in FindProtoOut()
1187 alias_addr = FindAliasAddress(la, src_addr); in FindProtoOut()
1188 lnk = AddLink(la, src_addr, dst_addr, alias_addr, in FindProtoOut()
1196 FindUdpTcpIn(struct libalias *la, struct in_addr dst_addr, in FindUdpTcpIn() argument
1206 LIBALIAS_LOCK_ASSERT(la); in FindUdpTcpIn()
1219 lnk = FindLinkIn(la, dst_addr, alias_addr, in FindUdpTcpIn()
1223 if (lnk == NULL && create && !(la->packetAliasMode & PKT_ALIAS_DENY_INCOMING)) { in FindUdpTcpIn()
1226 target_addr = FindOriginalAddress(la, alias_addr); in FindUdpTcpIn()
1227 lnk = AddLink(la, target_addr, dst_addr, alias_addr, in FindUdpTcpIn()
1235 FindUdpTcpOut(struct libalias *la, struct in_addr src_addr, in FindUdpTcpOut() argument
1245 LIBALIAS_LOCK_ASSERT(la); in FindUdpTcpOut()
1258 lnk = FindLinkOut(la, src_addr, dst_addr, src_port, dst_port, link_type, create); in FindUdpTcpOut()
1263 alias_addr = FindAliasAddress(la, src_addr); in FindUdpTcpOut()
1264 lnk = AddLink(la, src_addr, dst_addr, alias_addr, in FindUdpTcpOut()
1272 AddPptp(struct libalias *la, struct in_addr src_addr, in AddPptp() argument
1279 LIBALIAS_LOCK_ASSERT(la); in AddPptp()
1280 lnk = AddLink(la, src_addr, dst_addr, alias_addr, in AddPptp()
1288 FindPptpOutByCallId(struct libalias *la, struct in_addr src_addr, in FindPptpOutByCallId() argument
1294 LIBALIAS_LOCK_ASSERT(la); in FindPptpOutByCallId()
1295 LIST_FOREACH(lnk, &la->pptpList, pptp.list) in FindPptpOutByCallId()
1301 return (UseLink(la, lnk)); in FindPptpOutByCallId()
1305 FindPptpOutByPeerCallId(struct libalias *la, struct in_addr src_addr, in FindPptpOutByPeerCallId() argument
1311 LIBALIAS_LOCK_ASSERT(la); in FindPptpOutByPeerCallId()
1312 LIST_FOREACH(lnk, &la->pptpList, pptp.list) in FindPptpOutByPeerCallId()
1318 return (UseLink(la, lnk)); in FindPptpOutByPeerCallId()
1322 FindPptpInByCallId(struct libalias *la, struct in_addr dst_addr, in FindPptpInByCallId() argument
1328 LIBALIAS_LOCK_ASSERT(la); in FindPptpInByCallId()
1330 LIST_FOREACH(lnk, &la->pptpList, pptp.list) in FindPptpInByCallId()
1336 return (UseLink(la, lnk)); in FindPptpInByCallId()
1340 FindPptpInByPeerCallId(struct libalias *la, struct in_addr dst_addr, in FindPptpInByPeerCallId() argument
1346 LIBALIAS_LOCK_ASSERT(la); in FindPptpInByPeerCallId()
1347 LIST_FOREACH(lnk, &la->pptpList, pptp.list) in FindPptpInByPeerCallId()
1357 FindRtspOut(struct libalias *la, struct in_addr src_addr, in FindRtspOut() argument
1366 LIBALIAS_LOCK_ASSERT(la); in FindRtspOut()
1379 lnk = FindLinkOut(la, src_addr, dst_addr, src_port, 0, link_type, 1); in FindRtspOut()
1384 alias_addr = FindAliasAddress(la, src_addr); in FindRtspOut()
1385 lnk = AddLink(la, src_addr, dst_addr, alias_addr, in FindRtspOut()
1393 FindOriginalAddress(struct libalias *la, struct in_addr alias_addr) in FindOriginalAddress() argument
1397 LIBALIAS_LOCK_ASSERT(la); in FindOriginalAddress()
1398 lnk = FindLinkIn(la, ANY_ADDR, alias_addr, in FindOriginalAddress()
1401 if (la->targetAddress.s_addr == INADDR_ANY) in FindOriginalAddress()
1403 else if (la->targetAddress.s_addr == INADDR_NONE) in FindOriginalAddress()
1404 return (la->aliasAddress.s_addr != INADDR_ANY) ? in FindOriginalAddress()
1405 la->aliasAddress : alias_addr; in FindOriginalAddress()
1407 return (la->targetAddress); in FindOriginalAddress()
1416 return (la->aliasAddress.s_addr != INADDR_ANY) ? in FindOriginalAddress()
1417 la->aliasAddress : alias_addr; in FindOriginalAddress()
1424 FindAliasAddress(struct libalias *la, struct in_addr original_addr) in FindAliasAddress() argument
1428 LIBALIAS_LOCK_ASSERT(la); in FindAliasAddress()
1429 lnk = FindLinkOut(la, original_addr, ANY_ADDR, in FindAliasAddress()
1432 return (la->aliasAddress.s_addr != INADDR_ANY) ? in FindAliasAddress()
1433 la->aliasAddress : original_addr; in FindAliasAddress()
1436 return (la->aliasAddress.s_addr != INADDR_ANY) ? in FindAliasAddress()
1437 la->aliasAddress : original_addr; in FindAliasAddress()
1549 return (lnk->la->aliasAddress); in GetOriginalAddress()
1564 return (lnk->la->aliasAddress); in GetAliasAddress()
1570 GetDefaultAliasAddress(struct libalias *la) in GetDefaultAliasAddress() argument
1572 LIBALIAS_LOCK_ASSERT(la); in GetDefaultAliasAddress()
1573 return (la->aliasAddress); in GetDefaultAliasAddress()
1577 SetDefaultAliasAddress(struct libalias *la, struct in_addr alias_addr) in SetDefaultAliasAddress() argument
1579 LIBALIAS_LOCK_ASSERT(la); in SetDefaultAliasAddress()
1580 la->aliasAddress = alias_addr; in SetDefaultAliasAddress()
1792 LIBALIAS_LOCK_ASSERT(lnk->la); in SetDestCallId()
1814 HouseKeeping(struct libalias *la) in HouseKeeping() argument
1819 LIBALIAS_LOCK_ASSERT(la); in HouseKeeping()
1850 if (packets < (la->udpLinkCount + la->tcpLinkCount)) { in HouseKeeping()
1851 struct alias_link * lnk = TAILQ_FIRST(&la->checkExpire); in HouseKeeping()
1853 CleanupLink(la, &lnk, 0); in HouseKeeping()
1859 InitPacketAliasLog(struct libalias *la) in InitPacketAliasLog() argument
1861 LIBALIAS_LOCK_ASSERT(la); in InitPacketAliasLog()
1862 if (~la->packetAliasMode & PKT_ALIAS_LOG) { in InitPacketAliasLog()
1864 if ((la->logDesc = malloc(LIBALIAS_BUF_SIZE))) in InitPacketAliasLog()
1867 if ((la->logDesc = fopen("/var/log/alias.log", "w"))) in InitPacketAliasLog()
1868 fprintf(la->logDesc, "PacketAlias/InitPacketAliasLog: Packet alias logging enabled.\n"); in InitPacketAliasLog()
1872 la->packetAliasMode |= PKT_ALIAS_LOG; in InitPacketAliasLog()
1880 UninitPacketAliasLog(struct libalias *la) in UninitPacketAliasLog() argument
1882 LIBALIAS_LOCK_ASSERT(la); in UninitPacketAliasLog()
1883 if (la->logDesc) { in UninitPacketAliasLog()
1885 free(la->logDesc); in UninitPacketAliasLog()
1887 fclose(la->logDesc); in UninitPacketAliasLog()
1889 la->logDesc = NULL; in UninitPacketAliasLog()
1891 la->packetAliasMode &= ~PKT_ALIAS_LOG; in UninitPacketAliasLog()
1915 LibAliasRedirectPort(struct libalias *la, struct in_addr src_addr, u_short src_port, in LibAliasRedirectPort() argument
1923 LIBALIAS_LOCK(la); in LibAliasRedirectPort()
1943 lnk = AddLink(la, src_addr, dst_addr, alias_addr, in LibAliasRedirectPort()
1958 LIBALIAS_UNLOCK(la); in LibAliasRedirectPort()
1964 LibAliasAddServer(struct libalias *la, struct alias_link *lnk, struct in_addr addr, u_short port) in LibAliasAddServer() argument
1969 LIBALIAS_LOCK(la); in LibAliasAddServer()
1970 (void)la; in LibAliasAddServer()
1991 SPLAY_REMOVE(splay_out, &la->linkSplayOut, lnk); in LibAliasAddServer()
2005 LIBALIAS_UNLOCK(la); in LibAliasAddServer()
2012 LibAliasRedirectProto(struct libalias *la, struct in_addr src_addr, in LibAliasRedirectProto() argument
2019 LIBALIAS_LOCK(la); in LibAliasRedirectProto()
2020 lnk = AddLink(la, src_addr, dst_addr, alias_addr, in LibAliasRedirectProto()
2034 LIBALIAS_UNLOCK(la); in LibAliasRedirectProto()
2040 LibAliasRedirectAddr(struct libalias *la, struct in_addr src_addr, in LibAliasRedirectAddr() argument
2045 LIBALIAS_LOCK(la); in LibAliasRedirectAddr()
2046 lnk = AddLink(la, src_addr, ANY_ADDR, alias_addr, in LibAliasRedirectAddr()
2060 LIBALIAS_UNLOCK(la); in LibAliasRedirectAddr()
2066 LibAliasRedirectDynamic(struct libalias *la, struct alias_link *lnk) in LibAliasRedirectDynamic() argument
2070 LIBALIAS_LOCK(la); in LibAliasRedirectDynamic()
2071 (void)la; in LibAliasRedirectDynamic()
2079 LIBALIAS_UNLOCK(la); in LibAliasRedirectDynamic()
2086 LibAliasRedirectDelete(struct libalias *la, struct alias_link *lnk) in LibAliasRedirectDelete() argument
2088 LIBALIAS_LOCK(la); in LibAliasRedirectDelete()
2089 (void)la; in LibAliasRedirectDelete()
2091 LIBALIAS_UNLOCK(la); in LibAliasRedirectDelete()
2095 LibAliasSetAddress(struct libalias *la, struct in_addr addr) in LibAliasSetAddress() argument
2097 LIBALIAS_LOCK(la); in LibAliasSetAddress()
2098 if (la->packetAliasMode & PKT_ALIAS_RESET_ON_ADDR_CHANGE in LibAliasSetAddress()
2099 && la->aliasAddress.s_addr != addr.s_addr) in LibAliasSetAddress()
2100 CleanupAliasData(la, 0); in LibAliasSetAddress()
2102 la->aliasAddress = addr; in LibAliasSetAddress()
2103 LIBALIAS_UNLOCK(la); in LibAliasSetAddress()
2107 LibAliasSetAliasPortRange(struct libalias *la, u_short port_low, in LibAliasSetAliasPortRange() argument
2110 LIBALIAS_LOCK(la); in LibAliasSetAliasPortRange()
2112 la->aliasPortLower = port_low; in LibAliasSetAliasPortRange()
2114 la->aliasPortLength = port_high - port_low + 1; in LibAliasSetAliasPortRange()
2117 la->aliasPortLower = 0x8000; in LibAliasSetAliasPortRange()
2118 la->aliasPortLength = 0x8000; in LibAliasSetAliasPortRange()
2120 LIBALIAS_UNLOCK(la); in LibAliasSetAliasPortRange()
2124 LibAliasSetTarget(struct libalias *la, struct in_addr target_addr) in LibAliasSetTarget() argument
2126 LIBALIAS_LOCK(la); in LibAliasSetTarget()
2127 la->targetAddress = target_addr; in LibAliasSetTarget()
2128 LIBALIAS_UNLOCK(la); in LibAliasSetTarget()
2139 LibAliasInit(struct libalias *la) in LibAliasInit() argument
2141 if (la == NULL) { in LibAliasInit()
2144 la = malloc(sizeof *la, M_ALIAS, M_WAITOK | M_ZERO); in LibAliasInit()
2146 la = calloc(sizeof *la, 1); in LibAliasInit()
2147 if (la == NULL) in LibAliasInit()
2148 return (la); in LibAliasInit()
2156 LIST_INSERT_HEAD(&instancehead, la, instancelist); in LibAliasInit()
2164 SPLAY_INIT(&la->linkSplayIn); in LibAliasInit()
2165 SPLAY_INIT(&la->linkSplayOut); in LibAliasInit()
2166 SPLAY_INIT(&la->linkSplayInternalEndpoint); in LibAliasInit()
2167 LIST_INIT(&la->pptpList); in LibAliasInit()
2168 TAILQ_INIT(&la->checkExpire); in LibAliasInit()
2170 AliasSctpInit(la); in LibAliasInit()
2172 LIBALIAS_LOCK_INIT(la); in LibAliasInit()
2173 LIBALIAS_LOCK(la); in LibAliasInit()
2175 LIBALIAS_LOCK(la); in LibAliasInit()
2176 CleanupAliasData(la, 1); in LibAliasInit()
2178 AliasSctpTerm(la); in LibAliasInit()
2179 AliasSctpInit(la); in LibAliasInit()
2183 la->aliasAddress.s_addr = INADDR_ANY; in LibAliasInit()
2184 la->targetAddress.s_addr = INADDR_ANY; in LibAliasInit()
2185 la->aliasPortLower = 0x8000; in LibAliasInit()
2186 la->aliasPortLength = 0x8000; in LibAliasInit()
2188 la->icmpLinkCount = 0; in LibAliasInit()
2189 la->udpLinkCount = 0; in LibAliasInit()
2190 la->tcpLinkCount = 0; in LibAliasInit()
2191 la->sctpLinkCount = 0; in LibAliasInit()
2192 la->pptpLinkCount = 0; in LibAliasInit()
2193 la->protoLinkCount = 0; in LibAliasInit()
2194 la->fragmentIdLinkCount = 0; in LibAliasInit()
2195 la->fragmentPtrLinkCount = 0; in LibAliasInit()
2196 la->sockCount = 0; in LibAliasInit()
2198 la->packetAliasMode = PKT_ALIAS_SAME_PORTS in LibAliasInit()
2204 la->fireWallFD = -1; in LibAliasInit()
2209 LIBALIAS_UNLOCK(la); in LibAliasInit()
2210 return (la); in LibAliasInit()
2214 LibAliasUninit(struct libalias *la) in LibAliasUninit() argument
2216 LIBALIAS_LOCK(la); in LibAliasUninit()
2218 AliasSctpTerm(la); in LibAliasUninit()
2220 CleanupAliasData(la, 1); in LibAliasUninit()
2221 UninitPacketAliasLog(la); in LibAliasUninit()
2223 UninitPunchFW(la); in LibAliasUninit()
2225 LIST_REMOVE(la, instancelist); in LibAliasUninit()
2226 LIBALIAS_UNLOCK(la); in LibAliasUninit()
2227 LIBALIAS_LOCK_DESTROY(la); in LibAliasUninit()
2228 free(la); in LibAliasUninit()
2234 struct libalias *la, in LibAliasSetMode() argument
2242 LIBALIAS_LOCK(la); in LibAliasSetMode()
2245 if (InitPacketAliasLog(la) == ENOMEM) in LibAliasSetMode()
2249 UninitPacketAliasLog(la); in LibAliasSetMode()
2254 InitPunchFW(la); in LibAliasSetMode()
2257 UninitPunchFW(la); in LibAliasSetMode()
2261 la->packetAliasMode = (flags & mask) | (la->packetAliasMode & ~mask); in LibAliasSetMode()
2262 res = la->packetAliasMode; in LibAliasSetMode()
2264 LIBALIAS_UNLOCK(la); in LibAliasSetMode()
2352 InitPunchFW(struct libalias *la) in InitPunchFW() argument
2354 la->fireWallField = malloc(la->fireWallNumNums); in InitPunchFW()
2355 if (la->fireWallField) { in InitPunchFW()
2356 memset(la->fireWallField, 0, la->fireWallNumNums); in InitPunchFW()
2357 if (la->fireWallFD < 0) { in InitPunchFW()
2358 la->fireWallFD = socket(AF_INET, SOCK_RAW, IPPROTO_RAW); in InitPunchFW()
2360 ClearAllFWHoles(la); in InitPunchFW()
2361 la->fireWallActiveNum = la->fireWallBaseNum; in InitPunchFW()
2366 UninitPunchFW(struct libalias *la) in UninitPunchFW() argument
2368 ClearAllFWHoles(la); in UninitPunchFW()
2369 if (la->fireWallFD >= 0) in UninitPunchFW()
2370 close(la->fireWallFD); in UninitPunchFW()
2371 la->fireWallFD = -1; in UninitPunchFW()
2372 if (la->fireWallField) in UninitPunchFW()
2373 free(la->fireWallField); in UninitPunchFW()
2374 la->fireWallField = NULL; in UninitPunchFW()
2375 la->packetAliasMode &= ~PKT_ALIAS_PUNCH_FW; in UninitPunchFW()
2382 struct libalias *la; in PunchFWHole() local
2387 la = lnk->la; in PunchFWHole()
2390 if (!(la->packetAliasMode & PKT_ALIAS_PUNCH_FW) || in PunchFWHole()
2391 la->fireWallFD < 0 || in PunchFWHole()
2400 for (fwhole = la->fireWallActiveNum; in PunchFWHole()
2401 fwhole < la->fireWallBaseNum + la->fireWallNumNums && in PunchFWHole()
2402 fw_tstfield(la, la->fireWallField, fwhole); in PunchFWHole()
2404 if (fwhole == la->fireWallBaseNum + la->fireWallNumNums) { in PunchFWHole()
2405 for (fwhole = la->fireWallBaseNum; in PunchFWHole()
2406 fwhole < la->fireWallActiveNum && in PunchFWHole()
2407 fw_tstfield(la, la->fireWallField, fwhole); in PunchFWHole()
2409 if (fwhole == la->fireWallActiveNum) { in PunchFWHole()
2411 la->fireWallActiveNum = la->fireWallBaseNum; in PunchFWHole()
2419 la->fireWallActiveNum = fwhole + 1; in PunchFWHole()
2435 r = setsockopt(la->fireWallFD, IPPROTO_IP, IP_FW_ADD, rulebuf, i); in PunchFWHole()
2443 r = setsockopt(la->fireWallFD, IPPROTO_IP, IP_FW_ADD, rulebuf, i); in PunchFWHole()
2450 fw_setfield(la, la->fireWallField, fwhole); in PunchFWHole()
2458 struct libalias *la; in ClearFWHole() local
2460 la = lnk->la; in ClearFWHole()
2469 while (!setsockopt(la->fireWallFD, IPPROTO_IP, IP_FW_DEL, in ClearFWHole()
2471 fw_clrfield(la, la->fireWallField, fwhole); in ClearFWHole()
2478 ClearAllFWHoles(struct libalias *la) in ClearAllFWHoles() argument
2483 if (la->fireWallFD < 0) in ClearAllFWHoles()
2487 for (i = la->fireWallBaseNum; i < la->fireWallBaseNum + la->fireWallNumNums; i++) { in ClearAllFWHoles()
2490 while (!setsockopt(la->fireWallFD, IPPROTO_IP, IP_FW_DEL, &r, sizeof r)); in ClearAllFWHoles()
2493 memset(la->fireWallField, 0, la->fireWallNumNums); in ClearAllFWHoles()
2499 LibAliasSetFWBase(struct libalias *la, unsigned int base, unsigned int num) in LibAliasSetFWBase() argument
2501 LIBALIAS_LOCK(la); in LibAliasSetFWBase()
2503 la->fireWallBaseNum = base; in LibAliasSetFWBase()
2504 la->fireWallNumNums = num; in LibAliasSetFWBase()
2506 LIBALIAS_UNLOCK(la); in LibAliasSetFWBase()
2510 LibAliasSetSkinnyPort(struct libalias *la, unsigned int port) in LibAliasSetSkinnyPort() argument
2512 LIBALIAS_LOCK(la); in LibAliasSetSkinnyPort()
2513 la->skinnyPort = port; in LibAliasSetSkinnyPort()
2514 LIBALIAS_UNLOCK(la); in LibAliasSetSkinnyPort()
2521 FindSctpRedirectAddress(struct libalias *la, struct sctp_nat_msg *sm) in FindSctpRedirectAddress() argument
2526 LIBALIAS_LOCK_ASSERT(la); in FindSctpRedirectAddress()
2527 lnk = FindLinkIn(la, sm->ip_hdr->ip_src, sm->ip_hdr->ip_dst, in FindSctpRedirectAddress()
2533 redir = FindOriginalAddress(la,sm->ip_hdr->ip_dst); in FindSctpRedirectAddress()
2534 if (redir.s_addr == la->aliasAddress.s_addr || in FindSctpRedirectAddress()
2535 redir.s_addr == la->targetAddress.s_addr) { in FindSctpRedirectAddress()
2537 lnk = FindLinkIn(la, sm->ip_hdr->ip_src, sm->ip_hdr->ip_dst, in FindSctpRedirectAddress()