Lines Matching defs:lnk

572 GetNewPort(struct libalias *la, struct alias_link *lnk, int alias_port_param)
604 port_net = lnk->src_port;
613 lnk->alias_port = (u_short) alias_port_param;
629 search_result = FindLinkIn(la, lnk->dst_addr, lnk->alias_addr,
630 lnk->dst_port, port_net,
631 lnk->link_type, 0);
635 else if (!(lnk->flags & LINK_PARTIALLY_SPECIFIED)
644 && (lnk->flags & LINK_PARTIALLY_SPECIFIED)
645 && ((lnk->link_type == LINK_TCP) ||
646 (lnk->link_type == LINK_UDP))) {
647 if (GetSocket(la, port_net, &lnk->sockfd, lnk->link_type)) {
648 lnk->alias_port = port_net;
653 lnk->alias_port = port_net;
816 struct alias_link *lnk;
821 lnk = LIST_FIRST(&la->linkTableOut[i]);
822 while (lnk != NULL) {
823 struct alias_link *link_next = LIST_NEXT(lnk, list_out);
824 DeleteLink(lnk);
825 lnk = link_next;
836 struct alias_link *lnk, *lnk_tmp;
839 LIST_FOREACH_SAFE(lnk, &la->linkTableOut[la->cleanupIndex++],
841 if (la->timeStamp - lnk->timestamp > lnk->expire_time)
842 DeleteLink(lnk);
850 DeleteLink(struct alias_link *lnk)
852 struct libalias *la = lnk->la;
856 if (la->deleteAllLinks == 0 && lnk->flags & LINK_PERMANENT)
861 ClearFWHole(lnk);
865 if (lnk->server != NULL) {
868 head = curr = lnk->server;
875 LIST_REMOVE(lnk, list_out);
878 LIST_REMOVE(lnk, list_in);
881 if (lnk->sockfd != -1) {
883 close(lnk->sockfd);
887 switch (lnk->link_type) {
896 free(lnk->data.tcp);
906 if (lnk->data.frag_ptr != NULL)
907 free(lnk->data.frag_ptr);
917 free(lnk);
932 struct alias_link *lnk;
935 lnk = malloc(sizeof(struct alias_link));
936 if (lnk != NULL) {
938 lnk->la = la;
939 lnk->src_addr = src_addr;
940 lnk->dst_addr = dst_addr;
941 lnk->alias_addr = alias_addr;
942 lnk->proxy_addr.s_addr = INADDR_ANY;
943 lnk->src_port = src_port;
944 lnk->dst_port = dst_port;
945 lnk->proxy_port = 0;
946 lnk->server = NULL;
947 lnk->link_type = link_type;
949 lnk->sockfd = -1;
951 lnk->flags = 0;
952 lnk->pflags = 0;
953 lnk->timestamp = la->timeStamp;
958 lnk->expire_time = ICMP_EXPIRE_TIME;
961 lnk->expire_time = UDP_EXPIRE_TIME;
964 lnk->expire_time = TCP_EXPIRE_INITIAL;
967 lnk->flags |= LINK_PERMANENT; /* no timeout. */
970 lnk->expire_time = FRAGMENT_ID_EXPIRE_TIME;
973 lnk->expire_time = FRAGMENT_PTR_EXPIRE_TIME;
978 lnk->expire_time = PROTO_EXPIRE_TIME;
984 lnk->flags |= LINK_UNKNOWN_DEST_ADDR;
986 lnk->flags |= LINK_UNKNOWN_DEST_PORT;
989 if (GetNewPort(la, lnk, alias_port_param) != 0) {
990 free(lnk);
1016 lnk->data.tcp = aux_tcp;
1022 free(lnk);
1045 LIST_INSERT_HEAD(&la->linkTableOut[start_point], lnk, list_out);
1048 start_point = StartPointIn(alias_addr, lnk->alias_port, link_type);
1049 LIST_INSERT_HEAD(&la->linkTableIn[start_point], lnk, list_in);
1059 return (lnk);
1100 struct alias_link *lnk;
1104 LIST_FOREACH(lnk, &la->linkTableOut[i], list_out) {
1105 if (lnk->dst_addr.s_addr == dst_addr.s_addr &&
1106 lnk->src_addr.s_addr == src_addr.s_addr &&
1107 lnk->src_port == src_port &&
1108 lnk->dst_port == dst_port &&
1109 lnk->link_type == link_type &&
1110 lnk->server == NULL) {
1111 lnk->timestamp = la->timeStamp;
1117 if (lnk == NULL && replace_partial_links) {
1119 lnk = _FindLinkOut(la, src_addr, dst_addr, src_port, 0,
1121 if (lnk == NULL)
1122 lnk = _FindLinkOut(la, src_addr, la->nullAddress, src_port,
1125 if (lnk == NULL &&
1127 lnk = _FindLinkOut(la, src_addr, la->nullAddress, src_port, 0,
1130 if (lnk != NULL) {
1131 lnk = ReLink(lnk,
1132 src_addr, dst_addr, lnk->alias_addr,
1133 src_port, dst_port, lnk->alias_port,
1137 return (lnk);
1148 struct alias_link *lnk;
1151 lnk = _FindLinkOut(la, src_addr, dst_addr, src_port, dst_port,
1154 if (lnk == NULL) {
1163 lnk = _FindLinkOut(la, la->nullAddress, dst_addr, src_port, dst_port,
1167 return (lnk);
1181 struct alias_link *lnk;
1205 LIST_FOREACH(lnk, &la->linkTableIn[start_point], list_in) {
1208 flags = flags_in | lnk->flags;
1210 if (lnk->alias_addr.s_addr == alias_addr.s_addr
1211 && lnk->alias_port == alias_port
1212 && lnk->dst_addr.s_addr == dst_addr.s_addr
1213 && lnk->dst_port == dst_port
1214 && lnk->link_type == link_type) {
1215 lnk_fully_specified = lnk;
1220 if (lnk->alias_addr.s_addr == alias_addr.s_addr
1221 && lnk->alias_port == alias_port
1222 && lnk->link_type == link_type) {
1224 lnk_unknown_all = lnk;
1227 if (lnk->alias_addr.s_addr == alias_addr.s_addr
1228 && lnk->alias_port == alias_port
1229 && lnk->link_type == link_type
1230 && lnk->dst_port == dst_port) {
1232 lnk_unknown_dst_addr = lnk;
1235 if (lnk->alias_addr.s_addr == alias_addr.s_addr
1236 && lnk->alias_port == alias_port
1237 && lnk->link_type == link_type
1238 && lnk->dst_addr.s_addr == dst_addr.s_addr) {
1240 lnk_unknown_dst_port = lnk;
1249 lnk = lnk_fully_specified;
1251 lnk = lnk_unknown_dst_port;
1253 lnk = lnk_unknown_dst_addr;
1255 lnk = lnk_unknown_all;
1260 (lnk->flags & LINK_PARTIALLY_SPECIFIED || lnk->server != NULL)) {
1264 if (lnk->server != NULL) { /* LSNAT link */
1265 src_addr = lnk->server->addr;
1266 src_port = lnk->server->port;
1267 lnk->server = lnk->server->next;
1269 src_addr = lnk->src_addr;
1270 src_port = lnk->src_port;
1274 lnk->src_addr = src_addr;
1275 lnk->src_port = src_port;
1276 return(lnk);
1278 lnk = ReLink(lnk,
1283 return (lnk);
1294 struct alias_link *lnk;
1297 lnk = _FindLinkIn(la, dst_addr, alias_addr, dst_port, alias_port,
1300 if (lnk == NULL) {
1309 lnk = _FindLinkIn(la, dst_addr, la->nullAddress, dst_port, alias_port,
1313 return (lnk);
1342 struct alias_link *lnk;
1345 lnk = FindLinkIn(la, dst_addr, alias_addr,
1348 if (lnk == NULL && create && !(la->packetAliasMode & PKT_ALIAS_DENY_INCOMING)) {
1352 lnk = AddLink(la, target_addr, dst_addr, alias_addr,
1356 return (lnk);
1366 struct alias_link *lnk;
1369 lnk = FindLinkOut(la, src_addr, dst_addr,
1372 if (lnk == NULL && create) {
1376 lnk = AddLink(la, src_addr, dst_addr, alias_addr,
1380 return (lnk);
1389 struct alias_link *lnk;
1392 lnk = FindLinkIn(la, dst_addr, alias_addr,
1396 if (lnk == NULL) {
1397 lnk = AddLink(la, la->nullAddress, dst_addr, alias_addr,
1401 return (lnk);
1448 struct alias_link *lnk;
1451 lnk = FindLinkIn(la, dst_addr, alias_addr,
1455 if (lnk == NULL && !(la->packetAliasMode & PKT_ALIAS_DENY_INCOMING)) {
1459 lnk = AddLink(la, target_addr, dst_addr, alias_addr,
1463 return (lnk);
1472 struct alias_link *lnk;
1475 lnk = FindLinkOut(la, src_addr, dst_addr,
1479 if (lnk == NULL) {
1483 lnk = AddLink(la, src_addr, dst_addr, alias_addr,
1487 return (lnk);
1500 struct alias_link *lnk;
1515 lnk = FindLinkIn(la, dst_addr, alias_addr,
1519 if (lnk == NULL && create && !(la->packetAliasMode & PKT_ALIAS_DENY_INCOMING)) {
1523 lnk = AddLink(la, target_addr, dst_addr, alias_addr,
1527 return (lnk);
1540 struct alias_link *lnk;
1555 lnk = FindLinkOut(la, src_addr, dst_addr, src_port, dst_port, link_type, create);
1557 if (lnk == NULL && create) {
1561 lnk = AddLink(la, src_addr, dst_addr, alias_addr,
1565 return (lnk);
1575 struct alias_link *lnk;
1578 lnk = AddLink(la, src_addr, dst_addr, alias_addr,
1582 return (lnk);
1592 struct alias_link *lnk;
1596 LIST_FOREACH(lnk, &la->linkTableOut[i], list_out)
1597 if (lnk->link_type == LINK_PPTP &&
1598 lnk->src_addr.s_addr == src_addr.s_addr &&
1599 lnk->dst_addr.s_addr == dst_addr.s_addr &&
1600 lnk->src_port == src_call_id)
1603 return (lnk);
1613 struct alias_link *lnk;
1617 LIST_FOREACH(lnk, &la->linkTableOut[i], list_out)
1618 if (lnk->link_type == LINK_PPTP &&
1619 lnk->src_addr.s_addr == src_addr.s_addr &&
1620 lnk->dst_addr.s_addr == dst_addr.s_addr &&
1621 lnk->dst_port == dst_call_id)
1624 return (lnk);
1634 struct alias_link *lnk;
1638 LIST_FOREACH(lnk, &la->linkTableIn[i], list_in)
1639 if (lnk->link_type == LINK_PPTP &&
1640 lnk->dst_addr.s_addr == dst_addr.s_addr &&
1641 lnk->alias_addr.s_addr == alias_addr.s_addr &&
1642 lnk->dst_port == dst_call_id)
1645 return (lnk);
1654 struct alias_link *lnk;
1657 lnk = FindLinkIn(la, dst_addr, alias_addr,
1662 return (lnk);
1674 struct alias_link *lnk;
1689 lnk = FindLinkOut(la, src_addr, dst_addr, src_port, 0, link_type, 1);
1691 if (lnk == NULL) {
1695 lnk = AddLink(la, src_addr, dst_addr, alias_addr,
1699 return (lnk);
1706 struct alias_link *lnk;
1709 lnk = FindLinkIn(la, la->nullAddress, alias_addr,
1711 if (lnk == NULL) {
1721 if (lnk->server != NULL) { /* LSNAT link */
1724 src_addr = lnk->server->addr;
1725 lnk->server = lnk->server->next;
1727 } else if (lnk->src_addr.s_addr == INADDR_ANY)
1731 return (lnk->src_addr);
1739 struct alias_link *lnk;
1742 lnk = FindLinkOut(la, original_addr, la->nullAddress,
1744 if (lnk == NULL) {
1748 if (lnk->alias_addr.s_addr == INADDR_ANY)
1752 return (lnk->alias_addr);
1773 SetFragmentAddr(struct alias_link *lnk, struct in_addr src_addr)
1775 lnk->data.frag_addr = src_addr;
1780 GetFragmentAddr(struct alias_link *lnk, struct in_addr *src_addr)
1782 *src_addr = lnk->data.frag_addr;
1787 SetFragmentPtr(struct alias_link *lnk, char *fptr)
1789 lnk->data.frag_ptr = fptr;
1794 GetFragmentPtr(struct alias_link *lnk, char **fptr)
1796 *fptr = lnk->data.frag_ptr;
1801 SetStateIn(struct alias_link *lnk, int state)
1806 if (lnk->data.tcp->state.out != ALIAS_TCP_STATE_CONNECTED)
1807 lnk->expire_time = TCP_EXPIRE_DEAD;
1809 lnk->expire_time = TCP_EXPIRE_SINGLEDEAD;
1812 if (lnk->data.tcp->state.out == ALIAS_TCP_STATE_CONNECTED)
1813 lnk->expire_time = TCP_EXPIRE_CONNECTED;
1822 lnk->data.tcp->state.in = state;
1827 SetStateOut(struct alias_link *lnk, int state)
1832 if (lnk->data.tcp->state.in != ALIAS_TCP_STATE_CONNECTED)
1833 lnk->expire_time = TCP_EXPIRE_DEAD;
1835 lnk->expire_time = TCP_EXPIRE_SINGLEDEAD;
1838 if (lnk->data.tcp->state.in == ALIAS_TCP_STATE_CONNECTED)
1839 lnk->expire_time = TCP_EXPIRE_CONNECTED;
1848 lnk->data.tcp->state.out = state;
1853 GetStateIn(struct alias_link *lnk)
1856 return (lnk->data.tcp->state.in);
1861 GetStateOut(struct alias_link *lnk)
1864 return (lnk->data.tcp->state.out);
1869 GetOriginalAddress(struct alias_link *lnk)
1871 if (lnk->src_addr.s_addr == INADDR_ANY)
1872 return (lnk->la->aliasAddress);
1874 return (lnk->src_addr);
1879 GetDestAddress(struct alias_link *lnk)
1881 return (lnk->dst_addr);
1886 GetAliasAddress(struct alias_link *lnk)
1888 if (lnk->alias_addr.s_addr == INADDR_ANY)
1889 return (lnk->la->aliasAddress);
1891 return (lnk->alias_addr);
1914 GetOriginalPort(struct alias_link *lnk)
1916 return (lnk->src_port);
1921 GetAliasPort(struct alias_link *lnk)
1923 return (lnk->alias_port);
1928 GetDestPort(struct alias_link *lnk)
1930 return (lnk->dst_port);
1936 SetAckModified(struct alias_link *lnk)
1939 lnk->data.tcp->state.ack_modified = 1;
1944 GetProxyAddress(struct alias_link *lnk)
1946 return (lnk->proxy_addr);
1951 SetProxyAddress(struct alias_link *lnk, struct in_addr addr)
1953 lnk->proxy_addr = addr;
1958 GetProxyPort(struct alias_link *lnk)
1960 return (lnk->proxy_port);
1965 SetProxyPort(struct alias_link *lnk, u_short port)
1967 lnk->proxy_port = port;
1972 GetAckModified(struct alias_link *lnk)
1975 return (lnk->data.tcp->state.ack_modified);
1980 GetDeltaAckIn(u_long ack, struct alias_link *lnk)
1996 x = lnk->data.tcp->ack[i];
2019 GetDeltaSeqOut(u_long seq, struct alias_link *lnk)
2035 x = lnk->data.tcp->ack[i];
2058 AddSeq(struct alias_link *lnk, int delta, u_int ip_hl, u_short ip_len,
2080 i = lnk->data.tcp->state.index;
2081 lnk->data.tcp->ack[i] = x;
2085 lnk->data.tcp->state.index = 0;
2087 lnk->data.tcp->state.index = i;
2091 SetExpire(struct alias_link *lnk, int expire)
2094 lnk->flags &= ~LINK_PERMANENT;
2095 DeleteLink(lnk);
2097 lnk->flags |= LINK_PERMANENT;
2099 lnk->expire_time = expire;
2117 SetProtocolFlags(struct alias_link *lnk, int pflags)
2120 lnk->pflags = pflags;
2124 GetProtocolFlags(struct alias_link *lnk)
2127 return (lnk->pflags);
2131 SetDestCallId(struct alias_link *lnk, u_int16_t cid)
2133 struct libalias *la = lnk->la;
2137 ReLink(lnk, lnk->src_addr, lnk->dst_addr, lnk->alias_addr,
2138 lnk->src_port, cid, lnk->alias_port, lnk->link_type);
2266 struct alias_link *lnk;
2284 lnk = NULL;
2288 lnk = AddLink(la, src_addr, dst_addr, alias_addr,
2292 if (lnk != NULL) {
2293 lnk->flags |= LINK_PERMANENT;
2304 return (lnk);
2309 LibAliasAddServer(struct libalias *la, struct alias_link *lnk, struct in_addr addr, u_short port)
2325 head = lnk->server;
2335 lnk->server = server;
2352 struct alias_link *lnk;
2355 lnk = AddLink(la, src_addr, dst_addr, alias_addr,
2359 if (lnk != NULL) {
2360 lnk->flags |= LINK_PERMANENT;
2370 return (lnk);
2378 struct alias_link *lnk;
2381 lnk = AddLink(la, src_addr, la->nullAddress, alias_addr,
2385 if (lnk != NULL) {
2386 lnk->flags |= LINK_PERMANENT;
2396 return (lnk);
2402 LibAliasRedirectDynamic(struct libalias *la, struct alias_link *lnk)
2409 if (lnk->flags & LINK_PARTIALLY_SPECIFIED)
2412 lnk->flags &= ~LINK_PERMANENT;
2421 LibAliasRedirectDelete(struct libalias *la, struct alias_link *lnk)
2428 DeleteLink(lnk);
2752 PunchFWHole(struct alias_link *lnk)
2759 la = lnk->la;
2764 lnk->link_type != LINK_TCP)
2799 if (GetOriginalPort(lnk) != 0 && GetDestPort(lnk) != 0) {
2805 GetOriginalAddress(lnk), ntohs(GetOriginalPort(lnk)),
2806 GetDestAddress(lnk), ntohs(GetDestPort(lnk)));
2813 GetDestAddress(lnk), ntohs(GetDestPort(lnk)),
2814 GetOriginalAddress(lnk), ntohs(GetOriginalPort(lnk)));
2821 lnk->data.tcp->fwhole = fwhole;
2826 lnk. Calling this too often is harmless. */
2828 ClearFWHole(struct alias_link *lnk)
2832 la = lnk->la;
2833 if (lnk->link_type == LINK_TCP) {
2834 int fwhole = lnk->data.tcp->fwhole; /* Where is the firewall
2845 lnk->data.tcp->fwhole = -1;
2898 struct alias_link *lnk;
2902 lnk = FindLinkIn(la, sm->ip_hdr->ip_src, sm->ip_hdr->ip_dst,
2904 if (lnk != NULL) {
2905 return(lnk->src_addr); /* port redirect */
2910 lnk = FindLinkIn(la, sm->ip_hdr->ip_src, sm->ip_hdr->ip_dst,
2912 if (lnk != NULL)
2913 return(lnk->src_addr); /* redirect proto */