Changeset View
Changeset View
Standalone View
Standalone View
sys/netinet/libalias/alias_db.c
Show First 20 Lines • Show All 1,204 Lines • ▼ Show 20 Lines | |||||
#define INGUARD \ | #define INGUARD \ | ||||
if (lnk->alias_port != alias_port || \ | if (lnk->alias_port != alias_port || \ | ||||
lnk->link_type != link_type || \ | lnk->link_type != link_type || \ | ||||
lnk->alias_addr.s_addr != alias_addr.s_addr) \ | lnk->alias_addr.s_addr != alias_addr.s_addr) \ | ||||
continue; | continue; | ||||
/* Search loop */ | /* Search loop */ | ||||
start_point = StartPointIn(alias_addr, alias_port, link_type); | start_point = StartPointIn(alias_addr, alias_port, link_type); | ||||
if (!(flags_in & LINK_PARTIALLY_SPECIFIED)) { | |||||
LIST_FOREACH(lnk, &la->linkTableIn[start_point], list_in) { | LIST_FOREACH(lnk, &la->linkTableIn[start_point], list_in) { | ||||
int flags; | |||||
INGUARD; | INGUARD; | ||||
flags = flags_in | lnk->flags; | if (lnk->flags & LINK_PARTIALLY_SPECIFIED) | ||||
if (!(flags & LINK_PARTIALLY_SPECIFIED)) { | continue; | ||||
if (lnk->dst_addr.s_addr == dst_addr.s_addr | if (lnk->dst_addr.s_addr == dst_addr.s_addr | ||||
&& lnk->dst_port == dst_port) { | && lnk->dst_port == dst_port) { | ||||
lnk_fully_specified = lnk; | CleanupLink(la, &lnk); | ||||
break; | if (lnk != NULL) { | ||||
lnk->timestamp = LibAliasTime; | |||||
return (lnk); | |||||
} | } | ||||
} else if ((flags & LINK_UNKNOWN_DEST_ADDR) | } | ||||
} | |||||
} | |||||
LIST_FOREACH(lnk, &la->linkTableIn[start_point], list_in) { | |||||
int flags; | |||||
INGUARD; | |||||
flags = flags_in | lnk->flags; | |||||
if ((flags & LINK_UNKNOWN_DEST_ADDR) | |||||
&& (flags & LINK_UNKNOWN_DEST_PORT)) { | && (flags & LINK_UNKNOWN_DEST_PORT)) { | ||||
if (lnk_unknown_all == NULL) | if (lnk_unknown_all == NULL) | ||||
lnk_unknown_all = lnk; | lnk_unknown_all = lnk; | ||||
} else if (flags & LINK_UNKNOWN_DEST_ADDR) { | } else if (flags & LINK_UNKNOWN_DEST_ADDR) { | ||||
if (lnk->dst_port == dst_port) { | if (lnk->dst_port == dst_port) { | ||||
if (lnk_unknown_dst_addr == NULL) | if (lnk_unknown_dst_addr == NULL) | ||||
lnk_unknown_dst_addr = lnk; | lnk_unknown_dst_addr = lnk; | ||||
} | } | ||||
} else if (flags & LINK_UNKNOWN_DEST_PORT) { | } else if (flags & LINK_UNKNOWN_DEST_PORT) { | ||||
if (lnk->dst_addr.s_addr == dst_addr.s_addr) { | if (lnk->dst_addr.s_addr == dst_addr.s_addr) { | ||||
if (lnk_unknown_dst_port == NULL) | if (lnk_unknown_dst_port == NULL) | ||||
lnk_unknown_dst_port = lnk; | lnk_unknown_dst_port = lnk; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
#undef INGUARD | #undef INGUARD | ||||
CleanupLink(la, &lnk_fully_specified); | if (lnk_unknown_dst_port != NULL) | ||||
if (lnk_fully_specified != NULL) { | |||||
lnk_fully_specified->timestamp = LibAliasTime; | |||||
lnk = lnk_fully_specified; | |||||
} else if (lnk_unknown_dst_port != NULL) | |||||
lnk = lnk_unknown_dst_port; | lnk = lnk_unknown_dst_port; | ||||
else if (lnk_unknown_dst_addr != NULL) | else if (lnk_unknown_dst_addr != NULL) | ||||
lnk = lnk_unknown_dst_addr; | lnk = lnk_unknown_dst_addr; | ||||
else if (lnk_unknown_all != NULL) | else if (lnk_unknown_all != NULL) | ||||
lnk = lnk_unknown_all; | lnk = lnk_unknown_all; | ||||
else | else | ||||
return (NULL); | return (NULL); | ||||
▲ Show 20 Lines • Show All 1,584 Lines • Show Last 20 Lines |