Lines Matching refs:la
287 struct libalias *la; member
403 void SctpShowAliasStats(struct libalias *la);
474 ShowAliasStats(struct libalias *la) in ShowAliasStats() argument
477 LIBALIAS_LOCK_ASSERT(la); in ShowAliasStats()
479 if (la->logDesc) { in ShowAliasStats()
480 int tot = la->icmpLinkCount + la->udpLinkCount + in ShowAliasStats()
481 (la->sctpLinkCount>>1) + /* sctp counts half associations */ in ShowAliasStats()
482 la->tcpLinkCount + la->pptpLinkCount + in ShowAliasStats()
483 la->protoLinkCount + la->fragmentIdLinkCount + in ShowAliasStats()
484 la->fragmentPtrLinkCount; in ShowAliasStats()
486 AliasLog(la->logDesc, in ShowAliasStats()
488 la->icmpLinkCount, in ShowAliasStats()
489 la->udpLinkCount, in ShowAliasStats()
490 la->tcpLinkCount, in ShowAliasStats()
491 la->sctpLinkCount>>1, /* sctp counts half associations */ in ShowAliasStats()
492 la->pptpLinkCount, in ShowAliasStats()
493 la->protoLinkCount, in ShowAliasStats()
494 la->fragmentIdLinkCount, in ShowAliasStats()
495 la->fragmentPtrLinkCount, tot); in ShowAliasStats()
497 AliasLog(la->logDesc, " (sock=%u)\n", la->sockCount); in ShowAliasStats()
502 void SctpShowAliasStats(struct libalias *la) in SctpShowAliasStats() argument
505 ShowAliasStats(la); in SctpShowAliasStats()
564 GetNewPort(struct libalias *la, struct alias_link *lnk, int alias_port_param) in GetNewPort() argument
571 LIBALIAS_LOCK_ASSERT(la); in GetNewPort()
589 if (la->packetAliasMode & PKT_ALIAS_SAME_PORTS) { in GetNewPort()
620 search_result = FindLinkIn(la, lnk->dst_addr, lnk->alias_addr, in GetNewPort()
634 if ((la->packetAliasMode & PKT_ALIAS_USE_SOCKETS) in GetNewPort()
638 if (GetSocket(la, port_net, &lnk->sockfd, lnk->link_type)) { in GetNewPort()
665 GetSocket(struct libalias *la, u_short port_net, int *sockfd, int link_type) in GetSocket() argument
671 LIBALIAS_LOCK_ASSERT(la); in GetSocket()
699 la->sockCount++; in GetSocket()
716 FindNewPortGroup(struct libalias *la, in FindNewPortGroup() argument
730 LIBALIAS_LOCK_ASSERT(la); in FindNewPortGroup()
753 if (la->packetAliasMode & PKT_ALIAS_SAME_PORTS) { in FindNewPortGroup()
776 if ((search_result = FindLinkIn(la, dst_addr, in FindNewPortGroup()
803 CleanupAliasData(struct libalias *la) in CleanupAliasData() argument
808 LIBALIAS_LOCK_ASSERT(la); in CleanupAliasData()
810 lnk = LIST_FIRST(&la->linkTableOut[i]); in CleanupAliasData()
818 la->cleanupIndex = 0; in CleanupAliasData()
822 IncrementalCleanup(struct libalias *la) in IncrementalCleanup() argument
826 LIBALIAS_LOCK_ASSERT(la); in IncrementalCleanup()
827 LIST_FOREACH_SAFE(lnk, &la->linkTableOut[la->cleanupIndex++], in IncrementalCleanup()
829 if (la->timeStamp - lnk->timestamp > lnk->expire_time) in IncrementalCleanup()
833 if (la->cleanupIndex == LINK_TABLE_OUT_SIZE) in IncrementalCleanup()
834 la->cleanupIndex = 0; in IncrementalCleanup()
840 struct libalias *la = lnk->la; in DeleteLink() local
842 LIBALIAS_LOCK_ASSERT(la); in DeleteLink()
844 if (la->deleteAllLinks == 0 && lnk->flags & LINK_PERMANENT) in DeleteLink()
870 la->sockCount--; in DeleteLink()
877 la->icmpLinkCount--; in DeleteLink()
880 la->udpLinkCount--; in DeleteLink()
883 la->tcpLinkCount--; in DeleteLink()
887 la->pptpLinkCount--; in DeleteLink()
890 la->fragmentIdLinkCount--; in DeleteLink()
893 la->fragmentPtrLinkCount--; in DeleteLink()
900 la->protoLinkCount--; in DeleteLink()
908 if (la->packetAliasMode & PKT_ALIAS_LOG) { in DeleteLink()
909 ShowAliasStats(la); in DeleteLink()
914 AddLink(struct libalias *la, struct in_addr src_addr, struct in_addr dst_addr, in AddLink() argument
921 LIBALIAS_LOCK_ASSERT(la); in AddLink()
925 lnk->la = la; in AddLink()
940 lnk->timestamp = la->timeStamp; in AddLink()
976 if (GetNewPort(la, lnk, alias_port_param) != 0) { in AddLink()
985 la->icmpLinkCount++; in AddLink()
988 la->udpLinkCount++; in AddLink()
995 la->tcpLinkCount++; in AddLink()
1014 la->pptpLinkCount++; in AddLink()
1017 la->fragmentIdLinkCount++; in AddLink()
1020 la->fragmentPtrLinkCount++; in AddLink()
1025 la->protoLinkCount++; in AddLink()
1032 LIST_INSERT_HEAD(&la->linkTableOut[start_point], lnk, list_out); in AddLink()
1036 LIST_INSERT_HEAD(&la->linkTableIn[start_point], lnk, list_in); in AddLink()
1043 if (la->packetAliasMode & PKT_ALIAS_LOG) { in AddLink()
1044 ShowAliasStats(la); in AddLink()
1061 struct libalias *la = old_lnk->la; in ReLink() local
1063 LIBALIAS_LOCK_ASSERT(la); in ReLink()
1064 new_lnk = AddLink(la, src_addr, dst_addr, alias_addr, in ReLink()
1079 _FindLinkOut(struct libalias *la, struct in_addr src_addr, in _FindLinkOut() argument
1089 LIBALIAS_LOCK_ASSERT(la); in _FindLinkOut()
1091 LIST_FOREACH(lnk, &la->linkTableOut[i], list_out) { in _FindLinkOut()
1098 lnk->timestamp = la->timeStamp; in _FindLinkOut()
1106 lnk = _FindLinkOut(la, src_addr, dst_addr, src_port, 0, in _FindLinkOut()
1109 lnk = _FindLinkOut(la, src_addr, la->nullAddress, src_port, in _FindLinkOut()
1114 lnk = _FindLinkOut(la, src_addr, la->nullAddress, src_port, 0, in _FindLinkOut()
1128 FindLinkOut(struct libalias *la, struct in_addr src_addr, in FindLinkOut() argument
1137 LIBALIAS_LOCK_ASSERT(la); in FindLinkOut()
1138 lnk = _FindLinkOut(la, src_addr, dst_addr, src_port, dst_port, in FindLinkOut()
1148 if (la->aliasAddress.s_addr != INADDR_ANY && in FindLinkOut()
1149 src_addr.s_addr == la->aliasAddress.s_addr) { in FindLinkOut()
1150 lnk = _FindLinkOut(la, la->nullAddress, dst_addr, src_port, dst_port, in FindLinkOut()
1158 _FindLinkIn(struct libalias *la, struct in_addr dst_addr, in _FindLinkIn() argument
1173 LIBALIAS_LOCK_ASSERT(la); in _FindLinkIn()
1191 LIST_FOREACH(lnk, &la->linkTableIn[start_point], list_in) { in _FindLinkIn()
1232 lnk_fully_specified->timestamp = la->timeStamp; in _FindLinkIn()
1271 FindLinkIn(struct libalias *la, struct in_addr dst_addr, in FindLinkIn() argument
1280 LIBALIAS_LOCK_ASSERT(la); in FindLinkIn()
1281 lnk = _FindLinkIn(la, dst_addr, alias_addr, dst_port, alias_port, in FindLinkIn()
1291 if (la->aliasAddress.s_addr != INADDR_ANY && in FindLinkIn()
1292 alias_addr.s_addr == la->aliasAddress.s_addr) { in FindLinkIn()
1293 lnk = _FindLinkIn(la, dst_addr, la->nullAddress, dst_port, alias_port, in FindLinkIn()
1317 FindIcmpIn(struct libalias *la, struct in_addr dst_addr, in FindIcmpIn() argument
1324 LIBALIAS_LOCK_ASSERT(la); in FindIcmpIn()
1325 lnk = FindLinkIn(la, dst_addr, alias_addr, in FindIcmpIn()
1328 if (lnk == NULL && create && !(la->packetAliasMode & PKT_ALIAS_DENY_INCOMING)) { in FindIcmpIn()
1331 target_addr = FindOriginalAddress(la, alias_addr); in FindIcmpIn()
1332 lnk = AddLink(la, target_addr, dst_addr, alias_addr, in FindIcmpIn()
1340 FindIcmpOut(struct libalias *la, struct in_addr src_addr, in FindIcmpOut() argument
1347 LIBALIAS_LOCK_ASSERT(la); in FindIcmpOut()
1348 lnk = FindLinkOut(la, src_addr, dst_addr, in FindIcmpOut()
1354 alias_addr = FindAliasAddress(la, src_addr); in FindIcmpOut()
1355 lnk = AddLink(la, src_addr, dst_addr, alias_addr, in FindIcmpOut()
1363 FindFragmentIn1(struct libalias *la, struct in_addr dst_addr, in FindFragmentIn1() argument
1369 LIBALIAS_LOCK_ASSERT(la); in FindFragmentIn1()
1370 lnk = FindLinkIn(la, dst_addr, alias_addr, in FindFragmentIn1()
1375 lnk = AddLink(la, la->nullAddress, dst_addr, alias_addr, in FindFragmentIn1()
1383 FindFragmentIn2(struct libalias *la, struct in_addr dst_addr, /* Doesn't add a link if in FindFragmentIn2() argument
1389 LIBALIAS_LOCK_ASSERT(la); in FindFragmentIn2()
1390 return FindLinkIn(la, dst_addr, alias_addr, in FindFragmentIn2()
1396 AddFragmentPtrLink(struct libalias *la, struct in_addr dst_addr, in AddFragmentPtrLink() argument
1400 LIBALIAS_LOCK_ASSERT(la); in AddFragmentPtrLink()
1401 return AddLink(la, la->nullAddress, dst_addr, la->nullAddress, in AddFragmentPtrLink()
1407 FindFragmentPtr(struct libalias *la, struct in_addr dst_addr, in FindFragmentPtr() argument
1411 LIBALIAS_LOCK_ASSERT(la); in FindFragmentPtr()
1412 return FindLinkIn(la, dst_addr, la->nullAddress, in FindFragmentPtr()
1418 FindProtoIn(struct libalias *la, struct in_addr dst_addr, in FindProtoIn() argument
1424 LIBALIAS_LOCK_ASSERT(la); in FindProtoIn()
1425 lnk = FindLinkIn(la, dst_addr, alias_addr, in FindProtoIn()
1429 if (lnk == NULL && !(la->packetAliasMode & PKT_ALIAS_DENY_INCOMING)) { in FindProtoIn()
1432 target_addr = FindOriginalAddress(la, alias_addr); in FindProtoIn()
1433 lnk = AddLink(la, target_addr, dst_addr, alias_addr, in FindProtoIn()
1441 FindProtoOut(struct libalias *la, struct in_addr src_addr, in FindProtoOut() argument
1447 LIBALIAS_LOCK_ASSERT(la); in FindProtoOut()
1448 lnk = FindLinkOut(la, src_addr, dst_addr, in FindProtoOut()
1455 alias_addr = FindAliasAddress(la, src_addr); in FindProtoOut()
1456 lnk = AddLink(la, src_addr, dst_addr, alias_addr, in FindProtoOut()
1464 FindUdpTcpIn(struct libalias *la, struct in_addr dst_addr, in FindUdpTcpIn() argument
1474 LIBALIAS_LOCK_ASSERT(la); in FindUdpTcpIn()
1487 lnk = FindLinkIn(la, dst_addr, alias_addr, in FindUdpTcpIn()
1491 if (lnk == NULL && create && !(la->packetAliasMode & PKT_ALIAS_DENY_INCOMING)) { in FindUdpTcpIn()
1494 target_addr = FindOriginalAddress(la, alias_addr); in FindUdpTcpIn()
1495 lnk = AddLink(la, target_addr, dst_addr, alias_addr, in FindUdpTcpIn()
1503 FindUdpTcpOut(struct libalias *la, struct in_addr src_addr, in FindUdpTcpOut() argument
1513 LIBALIAS_LOCK_ASSERT(la); in FindUdpTcpOut()
1526 lnk = FindLinkOut(la, src_addr, dst_addr, src_port, dst_port, link_type, create); in FindUdpTcpOut()
1531 alias_addr = FindAliasAddress(la, src_addr); in FindUdpTcpOut()
1532 lnk = AddLink(la, src_addr, dst_addr, alias_addr, in FindUdpTcpOut()
1540 AddPptp(struct libalias *la, struct in_addr src_addr, in AddPptp() argument
1547 LIBALIAS_LOCK_ASSERT(la); in AddPptp()
1548 lnk = AddLink(la, src_addr, dst_addr, alias_addr, in AddPptp()
1556 FindPptpOutByCallId(struct libalias *la, struct in_addr src_addr, in FindPptpOutByCallId() argument
1563 LIBALIAS_LOCK_ASSERT(la); in FindPptpOutByCallId()
1565 LIST_FOREACH(lnk, &la->linkTableOut[i], list_out) in FindPptpOutByCallId()
1576 FindPptpOutByPeerCallId(struct libalias *la, struct in_addr src_addr, in FindPptpOutByPeerCallId() argument
1583 LIBALIAS_LOCK_ASSERT(la); in FindPptpOutByPeerCallId()
1585 LIST_FOREACH(lnk, &la->linkTableOut[i], list_out) in FindPptpOutByPeerCallId()
1596 FindPptpInByCallId(struct libalias *la, struct in_addr dst_addr, in FindPptpInByCallId() argument
1603 LIBALIAS_LOCK_ASSERT(la); in FindPptpInByCallId()
1605 LIST_FOREACH(lnk, &la->linkTableIn[i], list_in) in FindPptpInByCallId()
1616 FindPptpInByPeerCallId(struct libalias *la, struct in_addr dst_addr, in FindPptpInByPeerCallId() argument
1622 LIBALIAS_LOCK_ASSERT(la); in FindPptpInByPeerCallId()
1623 lnk = FindLinkIn(la, dst_addr, alias_addr, in FindPptpInByPeerCallId()
1631 FindRtspOut(struct libalias *la, struct in_addr src_addr, in FindRtspOut() argument
1640 LIBALIAS_LOCK_ASSERT(la); in FindRtspOut()
1653 lnk = FindLinkOut(la, src_addr, dst_addr, src_port, 0, link_type, 1); in FindRtspOut()
1658 alias_addr = FindAliasAddress(la, src_addr); in FindRtspOut()
1659 lnk = AddLink(la, src_addr, dst_addr, alias_addr, in FindRtspOut()
1667 FindOriginalAddress(struct libalias *la, struct in_addr alias_addr) in FindOriginalAddress() argument
1671 LIBALIAS_LOCK_ASSERT(la); in FindOriginalAddress()
1672 lnk = FindLinkIn(la, la->nullAddress, alias_addr, in FindOriginalAddress()
1675 la->newDefaultLink = 1; in FindOriginalAddress()
1676 if (la->targetAddress.s_addr == INADDR_ANY) in FindOriginalAddress()
1678 else if (la->targetAddress.s_addr == INADDR_NONE) in FindOriginalAddress()
1679 return (la->aliasAddress.s_addr != INADDR_ANY) ? in FindOriginalAddress()
1680 la->aliasAddress : alias_addr; in FindOriginalAddress()
1682 return (la->targetAddress); in FindOriginalAddress()
1691 return (la->aliasAddress.s_addr != INADDR_ANY) ? in FindOriginalAddress()
1692 la->aliasAddress : alias_addr; in FindOriginalAddress()
1699 FindAliasAddress(struct libalias *la, struct in_addr original_addr) in FindAliasAddress() argument
1703 LIBALIAS_LOCK_ASSERT(la); in FindAliasAddress()
1704 lnk = FindLinkOut(la, original_addr, la->nullAddress, in FindAliasAddress()
1707 return (la->aliasAddress.s_addr != INADDR_ANY) ? in FindAliasAddress()
1708 la->aliasAddress : original_addr; in FindAliasAddress()
1711 return (la->aliasAddress.s_addr != INADDR_ANY) ? in FindAliasAddress()
1712 la->aliasAddress : original_addr; in FindAliasAddress()
1824 return (lnk->la->aliasAddress); in GetOriginalAddress()
1839 return (lnk->la->aliasAddress); in GetAliasAddress()
1845 GetDefaultAliasAddress(struct libalias *la) in GetDefaultAliasAddress() argument
1848 LIBALIAS_LOCK_ASSERT(la); in GetDefaultAliasAddress()
1849 return (la->aliasAddress); in GetDefaultAliasAddress()
1853 SetDefaultAliasAddress(struct libalias *la, struct in_addr alias_addr) in SetDefaultAliasAddress() argument
1856 LIBALIAS_LOCK_ASSERT(la); in SetDefaultAliasAddress()
1857 la->aliasAddress = alias_addr; in SetDefaultAliasAddress()
2050 ClearCheckNewLink(struct libalias *la) in ClearCheckNewLink() argument
2053 LIBALIAS_LOCK_ASSERT(la); in ClearCheckNewLink()
2054 la->newDefaultLink = 0; in ClearCheckNewLink()
2074 struct libalias *la = lnk->la; in SetDestCallId() local
2076 LIBALIAS_LOCK_ASSERT(la); in SetDestCallId()
2077 la->deleteAllLinks = 1; in SetDestCallId()
2080 la->deleteAllLinks = 0; in SetDestCallId()
2100 HouseKeeping(struct libalias *la) in HouseKeeping() argument
2107 LIBALIAS_LOCK_ASSERT(la); in HouseKeeping()
2114 la->timeStamp = time_uptime; in HouseKeeping()
2117 la->timeStamp = tv.tv_sec; in HouseKeeping()
2121 n = LINK_TABLE_OUT_SIZE * (la->timeStamp - la->lastCleanupTime); in HouseKeeping()
2128 la->lastCleanupTime = la->timeStamp; in HouseKeeping()
2130 IncrementalCleanup(la); in HouseKeeping()
2136 la->lastCleanupTime = la->timeStamp; in HouseKeeping()
2142 InitPacketAliasLog(struct libalias *la) in InitPacketAliasLog() argument
2145 LIBALIAS_LOCK_ASSERT(la); in InitPacketAliasLog()
2146 if (~la->packetAliasMode & PKT_ALIAS_LOG) { in InitPacketAliasLog()
2148 if ((la->logDesc = malloc(LIBALIAS_BUF_SIZE))) in InitPacketAliasLog()
2151 if ((la->logDesc = fopen("/var/log/alias.log", "w"))) in InitPacketAliasLog()
2152 fprintf(la->logDesc, "PacketAlias/InitPacketAliasLog: Packet alias logging enabled.\n"); in InitPacketAliasLog()
2156 la->packetAliasMode |= PKT_ALIAS_LOG; in InitPacketAliasLog()
2164 UninitPacketAliasLog(struct libalias *la) in UninitPacketAliasLog() argument
2167 LIBALIAS_LOCK_ASSERT(la); in UninitPacketAliasLog()
2168 if (la->logDesc) { in UninitPacketAliasLog()
2170 free(la->logDesc); in UninitPacketAliasLog()
2172 fclose(la->logDesc); in UninitPacketAliasLog()
2174 la->logDesc = NULL; in UninitPacketAliasLog()
2176 la->packetAliasMode &= ~PKT_ALIAS_LOG; in UninitPacketAliasLog()
2200 LibAliasRedirectPort(struct libalias *la, struct in_addr src_addr, u_short src_port, in LibAliasRedirectPort() argument
2208 LIBALIAS_LOCK(la); in LibAliasRedirectPort()
2228 lnk = AddLink(la, src_addr, dst_addr, alias_addr, in LibAliasRedirectPort()
2243 LIBALIAS_UNLOCK(la); in LibAliasRedirectPort()
2249 LibAliasAddServer(struct libalias *la, struct alias_link *lnk, struct in_addr addr, u_short port) in LibAliasAddServer() argument
2254 LIBALIAS_LOCK(la); in LibAliasAddServer()
2255 (void)la; in LibAliasAddServer()
2280 LIBALIAS_UNLOCK(la); in LibAliasAddServer()
2287 LibAliasRedirectProto(struct libalias *la, struct in_addr src_addr, in LibAliasRedirectProto() argument
2294 LIBALIAS_LOCK(la); in LibAliasRedirectProto()
2295 lnk = AddLink(la, src_addr, dst_addr, alias_addr, in LibAliasRedirectProto()
2309 LIBALIAS_UNLOCK(la); in LibAliasRedirectProto()
2315 LibAliasRedirectAddr(struct libalias *la, struct in_addr src_addr, in LibAliasRedirectAddr() argument
2320 LIBALIAS_LOCK(la); in LibAliasRedirectAddr()
2321 lnk = AddLink(la, src_addr, la->nullAddress, alias_addr, in LibAliasRedirectAddr()
2335 LIBALIAS_UNLOCK(la); in LibAliasRedirectAddr()
2341 LibAliasRedirectDynamic(struct libalias *la, struct alias_link *lnk) in LibAliasRedirectDynamic() argument
2345 LIBALIAS_LOCK(la); in LibAliasRedirectDynamic()
2346 (void)la; in LibAliasRedirectDynamic()
2354 LIBALIAS_UNLOCK(la); in LibAliasRedirectDynamic()
2359 LibAliasRedirectDelete(struct libalias *la, struct alias_link *lnk) in LibAliasRedirectDelete() argument
2364 LIBALIAS_LOCK(la); in LibAliasRedirectDelete()
2365 la->deleteAllLinks = 1; in LibAliasRedirectDelete()
2367 la->deleteAllLinks = 0; in LibAliasRedirectDelete()
2368 LIBALIAS_UNLOCK(la); in LibAliasRedirectDelete()
2372 LibAliasSetAddress(struct libalias *la, struct in_addr addr) in LibAliasSetAddress() argument
2375 LIBALIAS_LOCK(la); in LibAliasSetAddress()
2376 if (la->packetAliasMode & PKT_ALIAS_RESET_ON_ADDR_CHANGE in LibAliasSetAddress()
2377 && la->aliasAddress.s_addr != addr.s_addr) in LibAliasSetAddress()
2378 CleanupAliasData(la); in LibAliasSetAddress()
2380 la->aliasAddress = addr; in LibAliasSetAddress()
2381 LIBALIAS_UNLOCK(la); in LibAliasSetAddress()
2385 LibAliasSetTarget(struct libalias *la, struct in_addr target_addr) in LibAliasSetTarget() argument
2388 LIBALIAS_LOCK(la); in LibAliasSetTarget()
2389 la->targetAddress = target_addr; in LibAliasSetTarget()
2390 LIBALIAS_UNLOCK(la); in LibAliasSetTarget()
2402 LibAliasInit(struct libalias *la) in LibAliasInit() argument
2409 if (la == NULL) { in LibAliasInit()
2412 la = malloc(sizeof *la, M_ALIAS, M_WAITOK | M_ZERO); in LibAliasInit()
2414 la = calloc(sizeof *la, 1); in LibAliasInit()
2415 if (la == NULL) in LibAliasInit()
2416 return (la); in LibAliasInit()
2423 LIST_INSERT_HEAD(&instancehead, la, instancelist); in LibAliasInit()
2426 la->timeStamp = time_uptime; in LibAliasInit()
2427 la->lastCleanupTime = time_uptime; in LibAliasInit()
2430 la->timeStamp = tv.tv_sec; in LibAliasInit()
2431 la->lastCleanupTime = tv.tv_sec; in LibAliasInit()
2435 LIST_INIT(&la->linkTableOut[i]); in LibAliasInit()
2437 LIST_INIT(&la->linkTableIn[i]); in LibAliasInit()
2439 AliasSctpInit(la); in LibAliasInit()
2441 LIBALIAS_LOCK_INIT(la); in LibAliasInit()
2442 LIBALIAS_LOCK(la); in LibAliasInit()
2444 LIBALIAS_LOCK(la); in LibAliasInit()
2445 la->deleteAllLinks = 1; in LibAliasInit()
2446 CleanupAliasData(la); in LibAliasInit()
2447 la->deleteAllLinks = 0; in LibAliasInit()
2449 AliasSctpTerm(la); in LibAliasInit()
2450 AliasSctpInit(la); in LibAliasInit()
2454 la->aliasAddress.s_addr = INADDR_ANY; in LibAliasInit()
2455 la->targetAddress.s_addr = INADDR_ANY; in LibAliasInit()
2457 la->icmpLinkCount = 0; in LibAliasInit()
2458 la->udpLinkCount = 0; in LibAliasInit()
2459 la->tcpLinkCount = 0; in LibAliasInit()
2460 la->sctpLinkCount = 0; in LibAliasInit()
2461 la->pptpLinkCount = 0; in LibAliasInit()
2462 la->protoLinkCount = 0; in LibAliasInit()
2463 la->fragmentIdLinkCount = 0; in LibAliasInit()
2464 la->fragmentPtrLinkCount = 0; in LibAliasInit()
2465 la->sockCount = 0; in LibAliasInit()
2467 la->cleanupIndex = 0; in LibAliasInit()
2469 la->packetAliasMode = PKT_ALIAS_SAME_PORTS in LibAliasInit()
2475 la->fireWallFD = -1; in LibAliasInit()
2480 LIBALIAS_UNLOCK(la); in LibAliasInit()
2481 return (la); in LibAliasInit()
2485 LibAliasUninit(struct libalias *la) in LibAliasUninit() argument
2488 LIBALIAS_LOCK(la); in LibAliasUninit()
2490 AliasSctpTerm(la); in LibAliasUninit()
2492 la->deleteAllLinks = 1; in LibAliasUninit()
2493 CleanupAliasData(la); in LibAliasUninit()
2494 la->deleteAllLinks = 0; in LibAliasUninit()
2495 UninitPacketAliasLog(la); in LibAliasUninit()
2497 UninitPunchFW(la); in LibAliasUninit()
2499 LIST_REMOVE(la, instancelist); in LibAliasUninit()
2500 LIBALIAS_UNLOCK(la); in LibAliasUninit()
2501 LIBALIAS_LOCK_DESTROY(la); in LibAliasUninit()
2502 free(la); in LibAliasUninit()
2508 struct libalias *la, in LibAliasSetMode() argument
2516 LIBALIAS_LOCK(la); in LibAliasSetMode()
2520 if (InitPacketAliasLog(la) == ENOMEM) in LibAliasSetMode()
2525 UninitPacketAliasLog(la); in LibAliasSetMode()
2530 InitPunchFW(la); in LibAliasSetMode()
2534 UninitPunchFW(la); in LibAliasSetMode()
2539 la->packetAliasMode = (flags & mask) | (la->packetAliasMode & ~mask); in LibAliasSetMode()
2540 res = la->packetAliasMode; in LibAliasSetMode()
2542 LIBALIAS_UNLOCK(la); in LibAliasSetMode()
2547 LibAliasCheckNewLink(struct libalias *la) in LibAliasCheckNewLink() argument
2551 LIBALIAS_LOCK(la); in LibAliasCheckNewLink()
2552 res = la->newDefaultLink; in LibAliasCheckNewLink()
2553 LIBALIAS_UNLOCK(la); in LibAliasCheckNewLink()
2640 static void ClearAllFWHoles(struct libalias *la);
2642 #define fw_setfield(la, field, num) \ argument
2644 (field)[(num) - la->fireWallBaseNum] = 1; \
2647 #define fw_clrfield(la, field, num) \ argument
2649 (field)[(num) - la->fireWallBaseNum] = 0; \
2652 #define fw_tstfield(la, field, num) ((field)[(num) - la->fireWallBaseNum]) argument
2655 InitPunchFW(struct libalias *la) in InitPunchFW() argument
2658 la->fireWallField = malloc(la->fireWallNumNums); in InitPunchFW()
2659 if (la->fireWallField) { in InitPunchFW()
2660 memset(la->fireWallField, 0, la->fireWallNumNums); in InitPunchFW()
2661 if (la->fireWallFD < 0) { in InitPunchFW()
2662 la->fireWallFD = socket(AF_INET, SOCK_RAW, IPPROTO_RAW); in InitPunchFW()
2664 ClearAllFWHoles(la); in InitPunchFW()
2665 la->fireWallActiveNum = la->fireWallBaseNum; in InitPunchFW()
2670 UninitPunchFW(struct libalias *la) in UninitPunchFW() argument
2673 ClearAllFWHoles(la); in UninitPunchFW()
2674 if (la->fireWallFD >= 0) in UninitPunchFW()
2675 close(la->fireWallFD); in UninitPunchFW()
2676 la->fireWallFD = -1; in UninitPunchFW()
2677 if (la->fireWallField) in UninitPunchFW()
2678 free(la->fireWallField); in UninitPunchFW()
2679 la->fireWallField = NULL; in UninitPunchFW()
2680 la->packetAliasMode &= ~PKT_ALIAS_PUNCH_FW; in UninitPunchFW()
2687 struct libalias *la; in PunchFWHole() local
2692 la = lnk->la; in PunchFWHole()
2695 if (!(la->packetAliasMode & PKT_ALIAS_PUNCH_FW) || in PunchFWHole()
2696 la->fireWallFD < 0 || in PunchFWHole()
2705 for (fwhole = la->fireWallActiveNum; in PunchFWHole()
2706 fwhole < la->fireWallBaseNum + la->fireWallNumNums && in PunchFWHole()
2707 fw_tstfield(la, la->fireWallField, fwhole); in PunchFWHole()
2709 if (fwhole == la->fireWallBaseNum + la->fireWallNumNums) { in PunchFWHole()
2710 for (fwhole = la->fireWallBaseNum; in PunchFWHole()
2711 fwhole < la->fireWallActiveNum && in PunchFWHole()
2712 fw_tstfield(la, la->fireWallField, fwhole); in PunchFWHole()
2714 if (fwhole == la->fireWallActiveNum) { in PunchFWHole()
2716 la->fireWallActiveNum = la->fireWallBaseNum; in PunchFWHole()
2724 la->fireWallActiveNum = fwhole + 1; in PunchFWHole()
2740 r = setsockopt(la->fireWallFD, IPPROTO_IP, IP_FW_ADD, rulebuf, i); in PunchFWHole()
2748 r = setsockopt(la->fireWallFD, IPPROTO_IP, IP_FW_ADD, rulebuf, i); in PunchFWHole()
2755 fw_setfield(la, la->fireWallField, fwhole); in PunchFWHole()
2763 struct libalias *la; in ClearFWHole() local
2765 la = lnk->la; in ClearFWHole()
2775 while (!setsockopt(la->fireWallFD, IPPROTO_IP, IP_FW_DEL, in ClearFWHole()
2777 fw_clrfield(la, la->fireWallField, fwhole); in ClearFWHole()
2784 ClearAllFWHoles(struct libalias *la) in ClearAllFWHoles() argument
2789 if (la->fireWallFD < 0) in ClearAllFWHoles()
2793 for (i = la->fireWallBaseNum; i < la->fireWallBaseNum + la->fireWallNumNums; i++) { in ClearAllFWHoles()
2796 while (!setsockopt(la->fireWallFD, IPPROTO_IP, IP_FW_DEL, &r, sizeof r)); in ClearAllFWHoles()
2799 memset(la->fireWallField, 0, la->fireWallNumNums); in ClearAllFWHoles()
2805 LibAliasSetFWBase(struct libalias *la, unsigned int base, unsigned int num) in LibAliasSetFWBase() argument
2808 LIBALIAS_LOCK(la); in LibAliasSetFWBase()
2810 la->fireWallBaseNum = base; in LibAliasSetFWBase()
2811 la->fireWallNumNums = num; in LibAliasSetFWBase()
2813 LIBALIAS_UNLOCK(la); in LibAliasSetFWBase()
2817 LibAliasSetSkinnyPort(struct libalias *la, unsigned int port) in LibAliasSetSkinnyPort() argument
2820 LIBALIAS_LOCK(la); in LibAliasSetSkinnyPort()
2821 la->skinnyPort = port; in LibAliasSetSkinnyPort()
2822 LIBALIAS_UNLOCK(la); in LibAliasSetSkinnyPort()
2829 FindSctpRedirectAddress(struct libalias *la, struct sctp_nat_msg *sm) in FindSctpRedirectAddress() argument
2834 LIBALIAS_LOCK_ASSERT(la); in FindSctpRedirectAddress()
2835 lnk = FindLinkIn(la, sm->ip_hdr->ip_src, sm->ip_hdr->ip_dst, in FindSctpRedirectAddress()
2840 redir = FindOriginalAddress(la,sm->ip_hdr->ip_dst); in FindSctpRedirectAddress()
2841 if (redir.s_addr == la->aliasAddress.s_addr || in FindSctpRedirectAddress()
2842 redir.s_addr == la->targetAddress.s_addr) { /* No address found */ in FindSctpRedirectAddress()
2843 lnk = FindLinkIn(la, sm->ip_hdr->ip_src, sm->ip_hdr->ip_dst, in FindSctpRedirectAddress()