Lines Matching defs:lnk
207 GetNewPort(struct libalias *la, struct alias_link *lnk, int alias_port_param)
227 lnk->alias_port = (u_short) alias_port_param;
241 lnk->link_type == LINK_UDP) {
246 la, lnk->src_addr, lnk->src_port, lnk->link_type);
248 lnk->alias_port = search_result->alias_port;
260 ? lnk->src_port
268 grp = StartPointIn(la, lnk->alias_addr, port, lnk->link_type, 0);
276 lnk->link_type == LINK_UDP)
280 if (lnk->dst_addr.s_addr ==
282 lnk->dst_port == search_result->dst_port)
299 (lnk->flags & LINK_PARTIALLY_SPECIFIED) &&
300 ((lnk->link_type == LINK_TCP) ||
301 (lnk->link_type == LINK_UDP))) {
302 if (!GetSocket(la, port, &lnk->sockfd, lnk->link_type)) {
307 lnk->alias_port = port;
446 struct alias_link *lnk, *lnk_tmp;
451 TAILQ_FOREACH_SAFE(lnk, &la->checkExpire, expire.list, lnk_tmp)
452 DeleteLink(&lnk, deletePermanent);
455 CleanupLink(struct libalias *la, struct alias_link **lnk, int deletePermanent)
459 if (lnk == NULL || *lnk == NULL)
462 if (LibAliasTime - (*lnk)->timestamp > (*lnk)->expire.time) {
463 DeleteLink(lnk, deletePermanent);
464 if ((*lnk) == NULL)
469 TAILQ_REMOVE(&la->checkExpire, (*lnk), expire.list);
470 TAILQ_INSERT_TAIL(&la->checkExpire, (*lnk), expire.list);
474 UseLink(struct libalias *la, struct alias_link *lnk)
476 CleanupLink(la, &lnk, 0);
477 if (lnk != NULL)
478 lnk->timestamp = LibAliasTime;
479 return (lnk);
485 struct alias_link *lnk = *plnk;
486 struct libalias *la = lnk->la;
490 if (!deletePermanent && (lnk->flags & LINK_PERMANENT))
495 ClearFWHole(lnk);
498 switch (lnk->link_type) {
500 LIST_REMOVE(lnk, pptp.list);
506 if (lnk->server != NULL) {
509 head = curr = lnk->server;
516 SPLAY_REMOVE(splay_out, &la->linkSplayOut, lnk);
520 LIST_REMOVE(lnk, all.in);
524 &la->linkSplayInternalEndpoint, lnk);
527 grp = StartPointIn(la, lnk->alias_addr, lnk->alias_port, lnk->link_type, 0);
539 TAILQ_REMOVE(&la->checkExpire, lnk, expire.list);
543 if (lnk->sockfd != -1) {
545 close(lnk->sockfd);
549 switch (lnk->link_type) {
558 free(lnk->data.tcp);
568 if (lnk->data.frag_ptr != NULL)
569 free(lnk->data.frag_ptr);
579 free(lnk);
593 struct alias_link *lnk;
597 lnk = malloc(sizeof(struct alias_link));
598 if (lnk == NULL) {
606 lnk->la = la;
607 lnk->src_addr = src_addr;
608 lnk->dst_addr = dst_addr;
609 lnk->alias_addr = alias_addr;
610 lnk->proxy_addr.s_addr = INADDR_ANY;
611 lnk->src_port = src_port;
612 lnk->dst_port = dst_port;
613 lnk->proxy_port = 0;
614 lnk->server = NULL;
615 lnk->link_type = link_type;
617 lnk->sockfd = -1;
619 lnk->flags = 0;
620 lnk->pflags = 0;
621 lnk->timestamp = LibAliasTime;
626 lnk->expire.time = ICMP_EXPIRE_TIME;
629 lnk->expire.time = UDP_EXPIRE_TIME;
632 lnk->expire.time = TCP_EXPIRE_INITIAL;
635 lnk->expire.time = FRAGMENT_ID_EXPIRE_TIME;
638 lnk->expire.time = FRAGMENT_PTR_EXPIRE_TIME;
641 lnk->expire.time = PROTO_EXPIRE_TIME;
647 lnk->flags |= LINK_UNKNOWN_DEST_ADDR;
649 lnk->flags |= LINK_UNKNOWN_DEST_PORT;
652 if (GetNewPort(la, lnk, alias_port_param) != 0) {
653 free(lnk);
674 free(lnk);
686 lnk->data.tcp = aux_tcp;
707 LIST_INSERT_HEAD(&la->pptpList, lnk, pptp.list);
712 grp = StartPointIn(la, alias_addr, lnk->alias_port, link_type, 1);
714 free(lnk);
719 SPLAY_INSERT(splay_out, &la->linkSplayOut, lnk);
722 if (lnk->flags & LINK_PARTIALLY_SPECIFIED)
723 LIST_INSERT_HEAD(&grp->partial, lnk, all.in);
725 LIST_INSERT_HEAD(&grp->full, lnk, all.in);
729 &la->linkSplayInternalEndpoint, lnk);
735 TAILQ_INSERT_TAIL(&la->checkExpire, lnk, expire.list);
740 return (lnk);
782 struct alias_link *lnk;
791 lnk = SPLAY_FIND(splay_out, &la->linkSplayOut, &needle);
792 return (UseLink(la, lnk));
803 struct alias_link *lnk;
806 lnk = _SearchLinkOut(la, src_addr, dst_addr, src_port, dst_port, link_type);
807 if (lnk != NULL || !replace_partial_links)
808 return (lnk);
812 lnk = _SearchLinkOut(la, src_addr, dst_addr, src_port, 0,
814 if (lnk == NULL)
815 lnk = _SearchLinkOut(la, src_addr, ANY_ADDR, src_port,
818 if (lnk == NULL &&
820 lnk = _SearchLinkOut(la, src_addr, ANY_ADDR, src_port, 0,
823 if (lnk != NULL) {
824 lnk = ReLink(lnk,
825 src_addr, dst_addr, lnk->alias_addr,
826 src_port, dst_port, lnk->alias_port,
829 return (lnk);
840 struct alias_link *lnk;
843 lnk = _FindLinkOut(la, src_addr, dst_addr, src_port, dst_port,
846 if (lnk == NULL) {
855 lnk = _FindLinkOut(la, ANY_ADDR, dst_addr, src_port, dst_port,
859 return (lnk);
872 struct alias_link *lnk;
900 LIST_FOREACH(lnk, &grp->full, all.in) {
901 if (lnk->dst_addr.s_addr == dst_addr.s_addr &&
902 lnk->dst_port == dst_port) {
905 found = UseLink(la, lnk);
917 LIST_FOREACH(lnk, &grp->full, all.in) {
918 if(lnk->dst_addr.s_addr == dst_addr.s_addr) {
919 lnk_unknown_dst_port = lnk;
925 LIST_FOREACH(lnk, &grp->full, all.in) {
926 if(lnk->dst_port == dst_port) {
927 lnk_unknown_dst_addr = lnk;
938 LIST_FOREACH(lnk, &grp->partial, all.in) {
939 int flags = (flags_in | lnk->flags) & LINK_PARTIALLY_SPECIFIED;
943 lnk_unknown_all = lnk;
945 lnk->dst_port == dst_port &&
947 lnk_unknown_dst_addr = lnk;
949 lnk->dst_addr.s_addr == dst_addr.s_addr) {
950 lnk_unknown_dst_port = lnk;
956 lnk = (lnk_unknown_dst_port != NULL) ? lnk_unknown_dst_port
960 if (lnk == NULL || !replace_partial_links)
961 return (lnk);
963 if (lnk->server != NULL) { /* LSNAT link */
964 src_addr = lnk->server->addr;
965 src_port = lnk->server->port;
966 lnk->server = lnk->server->next;
968 src_addr = lnk->src_addr;
969 src_port = lnk->src_port;
973 lnk->src_addr = src_addr;
974 lnk->src_port = src_port;
976 lnk = ReLink(lnk,
981 return (lnk);
992 struct alias_link *lnk;
995 lnk = _FindLinkIn(la, dst_addr, alias_addr, dst_port, alias_port,
998 if (lnk == NULL &&
1002 lnk = _FindLinkIn(la, ANY_ADDR, alias_addr, 0, alias_port,
1006 if (lnk == NULL) {
1015 lnk = _FindLinkIn(la, dst_addr, ANY_ADDR, dst_port, alias_port,
1019 return (lnk);
1058 struct alias_link *lnk;
1061 lnk = FindLinkIn(la, dst_addr, alias_addr,
1064 if (lnk == NULL && create && !(la->packetAliasMode & PKT_ALIAS_DENY_INCOMING)) {
1068 lnk = AddLink(la, target_addr, dst_addr, alias_addr,
1072 return (lnk);
1081 struct alias_link *lnk;
1084 lnk = FindLinkOut(la, src_addr, dst_addr,
1087 if (lnk == NULL && create) {
1091 lnk = AddLink(la, src_addr, dst_addr, alias_addr,
1095 return (lnk);
1103 struct alias_link *lnk;
1106 lnk = FindLinkIn(la, dst_addr, alias_addr,
1110 if (lnk == NULL) {
1111 lnk = AddLink(la, ANY_ADDR, dst_addr, alias_addr,
1115 return (lnk);
1154 struct alias_link *lnk;
1157 lnk = FindLinkIn(la, dst_addr, alias_addr,
1161 if (lnk == NULL && !(la->packetAliasMode & PKT_ALIAS_DENY_INCOMING)) {
1165 lnk = AddLink(la, target_addr, dst_addr, alias_addr,
1169 return (lnk);
1177 struct alias_link *lnk;
1180 lnk = FindLinkOut(la, src_addr, dst_addr,
1184 if (lnk == NULL) {
1188 lnk = AddLink(la, src_addr, dst_addr, alias_addr,
1192 return (lnk);
1204 struct alias_link *lnk;
1219 lnk = FindLinkIn(la, dst_addr, alias_addr,
1223 if (lnk == NULL && create && !(la->packetAliasMode & PKT_ALIAS_DENY_INCOMING)) {
1227 lnk = AddLink(la, target_addr, dst_addr, alias_addr,
1231 return (lnk);
1243 struct alias_link *lnk;
1258 lnk = FindLinkOut(la, src_addr, dst_addr, src_port, dst_port, link_type, create);
1260 if (lnk == NULL && create) {
1264 lnk = AddLink(la, src_addr, dst_addr, alias_addr,
1268 return (lnk);
1277 struct alias_link *lnk;
1280 lnk = AddLink(la, src_addr, dst_addr, alias_addr,
1284 return (lnk);
1292 struct alias_link *lnk;
1295 LIST_FOREACH(lnk, &la->pptpList, pptp.list)
1296 if (lnk->src_addr.s_addr == src_addr.s_addr &&
1297 lnk->dst_addr.s_addr == dst_addr.s_addr &&
1298 lnk->src_port == src_call_id)
1301 return (UseLink(la, lnk));
1309 struct alias_link *lnk;
1312 LIST_FOREACH(lnk, &la->pptpList, pptp.list)
1313 if (lnk->src_addr.s_addr == src_addr.s_addr &&
1314 lnk->dst_addr.s_addr == dst_addr.s_addr &&
1315 lnk->dst_port == dst_call_id)
1318 return (UseLink(la, lnk));
1326 struct alias_link *lnk;
1330 LIST_FOREACH(lnk, &la->pptpList, pptp.list)
1331 if (lnk->dst_port == dst_call_id &&
1332 lnk->dst_addr.s_addr == dst_addr.s_addr &&
1333 lnk->alias_addr.s_addr == alias_addr.s_addr)
1336 return (UseLink(la, lnk));
1344 struct alias_link *lnk;
1347 LIST_FOREACH(lnk, &la->pptpList, pptp.list)
1348 if (lnk->alias_port == alias_call_id &&
1349 lnk->dst_addr.s_addr == dst_addr.s_addr &&
1350 lnk->alias_addr.s_addr == alias_addr.s_addr)
1353 return (lnk);
1364 struct alias_link *lnk;
1379 lnk = FindLinkOut(la, src_addr, dst_addr, src_port, 0, link_type, 1);
1381 if (lnk == NULL) {
1385 lnk = AddLink(la, src_addr, dst_addr, alias_addr,
1389 return (lnk);
1395 struct alias_link *lnk;
1398 lnk = FindLinkIn(la, ANY_ADDR, alias_addr,
1400 if (lnk == NULL) {
1409 if (lnk->server != NULL) { /* LSNAT link */
1412 src_addr = lnk->server->addr;
1413 lnk->server = lnk->server->next;
1415 } else if (lnk->src_addr.s_addr == INADDR_ANY)
1419 return (lnk->src_addr);
1426 struct alias_link *lnk;
1429 lnk = FindLinkOut(la, original_addr, ANY_ADDR,
1431 if (lnk == NULL) {
1435 if (lnk->alias_addr.s_addr == INADDR_ANY)
1439 return (lnk->alias_addr);
1458 SetFragmentAddr(struct alias_link *lnk, struct in_addr src_addr)
1460 lnk->data.frag_addr = src_addr;
1464 GetFragmentAddr(struct alias_link *lnk, struct in_addr *src_addr)
1466 *src_addr = lnk->data.frag_addr;
1470 SetFragmentPtr(struct alias_link *lnk, void *fptr)
1472 lnk->data.frag_ptr = fptr;
1476 GetFragmentPtr(struct alias_link *lnk, void **fptr)
1478 *fptr = lnk->data.frag_ptr;
1482 SetStateIn(struct alias_link *lnk, int state)
1487 if (lnk->data.tcp->state.out != ALIAS_TCP_STATE_CONNECTED)
1488 lnk->expire.time = TCP_EXPIRE_DEAD;
1490 lnk->expire.time = TCP_EXPIRE_SINGLEDEAD;
1493 if (lnk->data.tcp->state.out == ALIAS_TCP_STATE_CONNECTED)
1494 lnk->expire.time = TCP_EXPIRE_CONNECTED;
1503 lnk->data.tcp->state.in = state;
1507 SetStateOut(struct alias_link *lnk, int state)
1512 if (lnk->data.tcp->state.in != ALIAS_TCP_STATE_CONNECTED)
1513 lnk->expire.time = TCP_EXPIRE_DEAD;
1515 lnk->expire.time = TCP_EXPIRE_SINGLEDEAD;
1518 if (lnk->data.tcp->state.in == ALIAS_TCP_STATE_CONNECTED)
1519 lnk->expire.time = TCP_EXPIRE_CONNECTED;
1528 lnk->data.tcp->state.out = state;
1532 GetStateIn(struct alias_link *lnk)
1535 return (lnk->data.tcp->state.in);
1539 GetStateOut(struct alias_link *lnk)
1542 return (lnk->data.tcp->state.out);
1546 GetOriginalAddress(struct alias_link *lnk)
1548 if (lnk->src_addr.s_addr == INADDR_ANY)
1549 return (lnk->la->aliasAddress);
1551 return (lnk->src_addr);
1555 GetDestAddress(struct alias_link *lnk)
1557 return (lnk->dst_addr);
1561 GetAliasAddress(struct alias_link *lnk)
1563 if (lnk->alias_addr.s_addr == INADDR_ANY)
1564 return (lnk->la->aliasAddress);
1566 return (lnk->alias_addr);
1584 GetOriginalPort(struct alias_link *lnk)
1586 return (lnk->src_port);
1590 GetAliasPort(struct alias_link *lnk)
1592 return (lnk->alias_port);
1597 GetDestPort(struct alias_link *lnk)
1599 return (lnk->dst_port);
1606 SetAckModified(struct alias_link *lnk)
1608 lnk->data.tcp->state.ack_modified = 1;
1612 GetProxyAddress(struct alias_link *lnk)
1614 return (lnk->proxy_addr);
1618 SetProxyAddress(struct alias_link *lnk, struct in_addr addr)
1620 lnk->proxy_addr = addr;
1624 GetProxyPort(struct alias_link *lnk)
1626 return (lnk->proxy_port);
1630 SetProxyPort(struct alias_link *lnk, u_short port)
1632 lnk->proxy_port = port;
1637 GetAckModified(struct alias_link *lnk)
1639 return (lnk->data.tcp->state.ack_modified);
1649 GetDeltaAckIn(u_long ack, struct alias_link *lnk)
1656 i = lnk->data.tcp->state.index;
1663 x = lnk->data.tcp->ack[i];
1691 GetDeltaSeqOut(u_long seq, struct alias_link *lnk)
1698 i = lnk->data.tcp->state.index;
1705 x = lnk->data.tcp->ack[i];
1733 AddSeq(struct alias_link *lnk, int delta, u_int ip_hl, u_short ip_len,
1749 i = lnk->data.tcp->state.index;
1750 lnk->data.tcp->ack[i] = x;
1754 lnk->data.tcp->state.index = 0;
1756 lnk->data.tcp->state.index = i;
1760 SetExpire(struct alias_link *lnk, int expire)
1763 lnk->flags &= ~LINK_PERMANENT;
1764 DeleteLink(&lnk, 0);
1766 lnk->flags |= LINK_PERMANENT;
1768 lnk->expire.time = expire;
1778 SetProtocolFlags(struct alias_link *lnk, int pflags)
1780 lnk->pflags = pflags;
1784 GetProtocolFlags(struct alias_link *lnk)
1786 return (lnk->pflags);
1790 SetDestCallId(struct alias_link *lnk, u_int16_t cid)
1792 LIBALIAS_LOCK_ASSERT(lnk->la);
1793 ReLink(lnk, lnk->src_addr, lnk->dst_addr, lnk->alias_addr,
1794 lnk->src_port, cid, lnk->alias_port, lnk->link_type, 1);
1851 struct alias_link * lnk = TAILQ_FIRST(&la->checkExpire);
1853 CleanupLink(la, &lnk, 0);
1921 struct alias_link *lnk;
1939 lnk = NULL;
1943 lnk = AddLink(la, src_addr, dst_addr, alias_addr,
1947 if (lnk != NULL) {
1948 lnk->flags |= LINK_PERMANENT;
1959 return (lnk);
1964 LibAliasAddServer(struct libalias *la, struct alias_link *lnk, struct in_addr addr, u_short port)
1972 switch (lnk->link_type) {
1987 head = lnk->server;
1991 SPLAY_REMOVE(splay_out, &la->linkSplayOut, lnk);
2000 lnk->server = server;
2017 struct alias_link *lnk;
2020 lnk = AddLink(la, src_addr, dst_addr, alias_addr,
2024 if (lnk != NULL) {
2025 lnk->flags |= LINK_PERMANENT;
2035 return (lnk);
2043 struct alias_link *lnk;
2046 lnk = AddLink(la, src_addr, ANY_ADDR, alias_addr,
2050 if (lnk != NULL) {
2051 lnk->flags |= LINK_PERMANENT;
2061 return (lnk);
2066 LibAliasRedirectDynamic(struct libalias *la, struct alias_link *lnk)
2073 if (lnk->flags & LINK_PARTIALLY_SPECIFIED)
2076 lnk->flags &= ~LINK_PERMANENT;
2086 LibAliasRedirectDelete(struct libalias *la, struct alias_link *lnk)
2090 DeleteLink(&lnk, 1);
2380 PunchFWHole(struct alias_link *lnk)
2387 la = lnk->la;
2392 lnk->link_type != LINK_TCP)
2427 if (GetOriginalPort(lnk) != 0 && GetDestPort(lnk) != 0) {
2433 GetOriginalAddress(lnk), ntohs(GetOriginalPort(lnk)),
2434 GetDestAddress(lnk), ntohs(GetDestPort(lnk)));
2441 GetDestAddress(lnk), ntohs(GetDestPort(lnk)),
2442 GetOriginalAddress(lnk), ntohs(GetOriginalPort(lnk)));
2449 lnk->data.tcp->fwhole = fwhole;
2454 lnk. Calling this too often is harmless. */
2456 ClearFWHole(struct alias_link *lnk)
2460 la = lnk->la;
2461 if (lnk->link_type == LINK_TCP) {
2462 int fwhole = lnk->data.tcp->fwhole; /* Where is the firewall hole? */
2472 lnk->data.tcp->fwhole = -1;
2523 struct alias_link *lnk;
2527 lnk = FindLinkIn(la, sm->ip_hdr->ip_src, sm->ip_hdr->ip_dst,
2529 if (lnk != NULL) {
2531 return (lnk->src_addr);
2537 lnk = FindLinkIn(la, sm->ip_hdr->ip_src, sm->ip_hdr->ip_dst,
2539 if (lnk != NULL)
2541 return (lnk->src_addr);