Lines 98-110
SPLAY_GENERATE(splay_in, group_in, in, cmp_in);
Link Here
|
98 |
|
98 |
|
99 |
static struct group_in * |
99 |
static struct group_in * |
100 |
StartPointIn(struct libalias *la, |
100 |
StartPointIn(struct libalias *la, |
101 |
struct in_addr alias_addr, u_short alias_port, int link_type, |
101 |
struct in_addr alias_addr, struct in_addr dst_addr, |
102 |
int create) |
102 |
u_short alias_port, u_short dst_port, |
|
|
103 |
int link_type, int create) |
103 |
{ |
104 |
{ |
104 |
struct group_in *grp; |
105 |
struct group_in *grp; |
105 |
struct group_in needle = { |
106 |
struct group_in needle = { |
106 |
.alias_addr = alias_addr, |
107 |
.alias_addr = alias_addr, |
|
|
108 |
.dst_addr = dst_addr, |
107 |
.alias_port = alias_port, |
109 |
.alias_port = alias_port, |
|
|
110 |
.dst_port = dst_port, |
108 |
.link_type = link_type |
111 |
.link_type = link_type |
109 |
}; |
112 |
}; |
110 |
|
113 |
|
Lines 112-118
StartPointIn(struct libalias *la,
Link Here
|
112 |
if (grp != NULL || !create || (grp = malloc(sizeof(*grp))) == NULL) |
115 |
if (grp != NULL || !create || (grp = malloc(sizeof(*grp))) == NULL) |
113 |
return (grp); |
116 |
return (grp); |
114 |
grp->alias_addr = alias_addr; |
117 |
grp->alias_addr = alias_addr; |
|
|
118 |
grp->dst_addr = dst_addr; |
115 |
grp->alias_port = alias_port; |
119 |
grp->alias_port = alias_port; |
|
|
120 |
grp->dst_port = dst_port; |
116 |
grp->link_type = link_type; |
121 |
grp->link_type = link_type; |
117 |
LIST_INIT(&grp->full); |
122 |
LIST_INIT(&grp->full); |
118 |
LIST_INIT(&grp->partial); |
123 |
LIST_INIT(&grp->partial); |
Lines 252-258
GetNewPort(struct libalias *la, struct alias_link *lnk, int alias_port_param)
Link Here
|
252 |
struct group_in *grp; |
257 |
struct group_in *grp; |
253 |
struct alias_link *search_result; |
258 |
struct alias_link *search_result; |
254 |
|
259 |
|
255 |
grp = StartPointIn(la, lnk->alias_addr, port, lnk->link_type, 0); |
260 |
grp = StartPointIn(la, lnk->alias_addr, lnk->dst_addr, |
|
|
261 |
port, lnk->dst_port, lnk->link_type, 0); |
256 |
if (grp == NULL) |
262 |
if (grp == NULL) |
257 |
break; |
263 |
break; |
258 |
|
264 |
|
Lines 499-505
DeleteLink(struct alias_link **plnk, int deletePermanent)
Link Here
|
499 |
LIST_REMOVE(lnk, all.in); |
505 |
LIST_REMOVE(lnk, all.in); |
500 |
|
506 |
|
501 |
/* Remove intermediate node, if empty */ |
507 |
/* Remove intermediate node, if empty */ |
502 |
grp = StartPointIn(la, lnk->alias_addr, lnk->alias_port, lnk->link_type, 0); |
508 |
grp = StartPointIn(la, lnk->alias_addr, lnk->dst_addr, |
|
|
509 |
lnk->alias_port, lnk->dst_port, |
510 |
lnk->link_type, 0); |
503 |
if (grp != NULL && |
511 |
if (grp != NULL && |
504 |
LIST_EMPTY(&grp->full) && |
512 |
LIST_EMPTY(&grp->full) && |
505 |
LIST_EMPTY(&grp->partial)) { |
513 |
LIST_EMPTY(&grp->partial)) { |
Lines 684-690
AddLink(struct libalias *la, struct in_addr src_addr, struct in_addr dst_addr,
Link Here
|
684 |
default: { |
692 |
default: { |
685 |
struct group_in *grp; |
693 |
struct group_in *grp; |
686 |
|
694 |
|
687 |
grp = StartPointIn(la, alias_addr, lnk->alias_port, link_type, 1); |
695 |
grp = StartPointIn(la, alias_addr, dst_addr, |
|
|
696 |
lnk->alias_port, dst_port, link_type, 1); |
688 |
if (grp == NULL) { |
697 |
if (grp == NULL) { |
689 |
free(lnk); |
698 |
free(lnk); |
690 |
return (NULL); |
699 |
return (NULL); |
Lines 862-868
_FindLinkIn(struct libalias *la, struct in_addr dst_addr,
Link Here
|
862 |
flags_in |= LINK_UNKNOWN_DEST_PORT; |
871 |
flags_in |= LINK_UNKNOWN_DEST_PORT; |
863 |
|
872 |
|
864 |
/* Search loop */ |
873 |
/* Search loop */ |
865 |
grp = StartPointIn(la, alias_addr, alias_port, link_type, 0); |
874 |
grp = StartPointIn(la, alias_addr, dst_addr, |
|
|
875 |
alias_port, dst_port, link_type, 0); |
866 |
if (grp == NULL) |
876 |
if (grp == NULL) |
867 |
return (NULL); |
877 |
return (NULL); |
868 |
|
878 |
|