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