View | Details | Raw Unified | Return to bug 253912 | Differences between
and this patch

Collapse All | Expand All

(-)b/sys/netinet/libalias/alias_db.c (-6 / +16 lines)
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
(-)b/sys/netinet/libalias/alias_db.h (-4 / +8 lines)
Lines 327-333 Lookup table starting points: Link Here
327
327
328
/* Local prototypes */
328
/* Local prototypes */
329
static struct group_in *
329
static struct group_in *
330
StartPointIn(struct libalias *, struct in_addr, u_short, int, int);
330
StartPointIn(struct libalias *, struct in_addr, struct in_addr,
331
             u_short, u_short, int, int);
331
static int	SeqDiff(u_long, u_long);
332
static int	SeqDiff(u_long, u_long);
332
333
333
#ifndef NO_FW_PUNCH
334
#ifndef NO_FW_PUNCH
Lines 366-376 static inline int Link Here
366
cmp_in(struct group_in *a, struct group_in *b) {
367
cmp_in(struct group_in *a, struct group_in *b) {
367
	int i = a->alias_port - b->alias_port;
368
	int i = a->alias_port - b->alias_port;
368
	if (i != 0) return (i);
369
	if (i != 0) return (i);
369
	i = a->link_type - b->link_type;
370
	if (i != 0) return (i);
371
	if (a->alias_addr.s_addr > b->alias_addr.s_addr) return (1);
370
	if (a->alias_addr.s_addr > b->alias_addr.s_addr) return (1);
372
	if (a->alias_addr.s_addr < b->alias_addr.s_addr) return (-1);
371
	if (a->alias_addr.s_addr < b->alias_addr.s_addr) return (-1);
373
	return (0);
372
	if (a->dst_addr.s_addr > b->dst_addr.s_addr) return (1);
373
	if (a->dst_addr.s_addr < b->dst_addr.s_addr) return (-1);
374
	i = a->dst_port - b->dst_port;
375
	if (i != 0) return (i);
376
	i = a->link_type - b->link_type;
377
	return (i);
374
}
378
}
375
SPLAY_PROTOTYPE(splay_in, group_in, in, cmp_in);
379
SPLAY_PROTOTYPE(splay_in, group_in, in, cmp_in);
376
380
(-)b/sys/netinet/libalias/alias_local.h (+2 lines)
Lines 80-86 struct proxy_entry; Link Here
80
80
81
struct group_in {
81
struct group_in {
82
	struct in_addr	alias_addr;
82
	struct in_addr	alias_addr;
83
	struct in_addr	dst_addr;
83
	u_short		alias_port;
84
	u_short		alias_port;
85
	u_short		dst_port;
84
	int		link_type;
86
	int		link_type;
85
	SPLAY_ENTRY(group_in)	in;
87
	SPLAY_ENTRY(group_in)	in;
86
	LIST_HEAD(, alias_link)	full, partial;
88
	LIST_HEAD(, alias_link)	full, partial;

Return to bug 253912