Browse Source

core: added proto file to use info structure

- can be set via socket global parameter structure
Daniel-Constantin Mierla 1 year ago
parent
commit
2f212ba4de
5 changed files with 78 additions and 62 deletions
  1. 14 8
      src/core/cfg.y
  2. 3 1
      src/core/ip_addr.h
  3. 52 46
      src/core/socket_info.c
  4. 5 4
      src/core/socket_info.h
  5. 4 3
      src/main.c

+ 14 - 8
src/core/cfg.y

@@ -843,6 +843,12 @@ socket_lattr:
 			tmp_sa.useaddr.len = strlen(tmp_sa.useaddr.s);
 			tmp_sa.useaddr.len = strlen(tmp_sa.useaddr.s);
 			tmp_sa.useport = $5;
 			tmp_sa.useport = $5;
 		}
 		}
+	| ADVERTISE EQUAL proto COLON listen_id COLON NUMBER {
+			tmp_sa.useproto = $3;
+			tmp_sa.useaddr.s = $5;
+			tmp_sa.useaddr.len = strlen(tmp_sa.useaddr.s);
+			tmp_sa.useport = $7;
+		}
 	| WORKERS EQUAL NUMBER { tmp_sa.workers=$3; }
 	| WORKERS EQUAL NUMBER { tmp_sa.workers=$3; }
 	| WORKERS EQUAL error { yyerror("number expected"); }
 	| WORKERS EQUAL error { yyerror("number expected"); }
 	| VIRTUAL EQUAL NUMBER { if($3!=0) { tmp_sa.sflags |= SI_IS_VIRTUAL; } }
 	| VIRTUAL EQUAL NUMBER { if($3!=0) { tmp_sa.sflags |= SI_IS_VIRTUAL; } }
@@ -1636,7 +1642,7 @@ assign_stm:
 			if (add_listen_advertise_iface(	lst_tmp->addr_lst->name,
 			if (add_listen_advertise_iface(	lst_tmp->addr_lst->name,
 									lst_tmp->addr_lst->next,
 									lst_tmp->addr_lst->next,
 									lst_tmp->port, lst_tmp->proto,
 									lst_tmp->port, lst_tmp->proto,
-									$5, $7,
+									PROTO_NONE, $5, $7,
 									lst_tmp->flags)!=0) {
 									lst_tmp->flags)!=0) {
 				LM_CRIT("cfg. parser: failed to add listen address\n");
 				LM_CRIT("cfg. parser: failed to add listen address\n");
 				break;
 				break;
@@ -1650,7 +1656,7 @@ assign_stm:
                         if (add_listen_advertise_iface( lst_tmp->addr_lst->name,
                         if (add_listen_advertise_iface( lst_tmp->addr_lst->name,
                                                                         lst_tmp->addr_lst->next,
                                                                         lst_tmp->addr_lst->next,
                                                                         lst_tmp->port, lst_tmp->proto,
                                                                         lst_tmp->port, lst_tmp->proto,
-                                                                        $5, $7,
+                                                                        PROTO_NONE, $5, $7,
                                                                         lst_tmp->flags)!=0) {
                                                                         lst_tmp->flags)!=0) {
                                 LM_CRIT("cfg. parser: failed to add listen address\n");
                                 LM_CRIT("cfg. parser: failed to add listen address\n");
                                 break;
                                 break;
@@ -1663,7 +1669,7 @@ assign_stm:
 			if (add_listen_advertise_iface_name(lst_tmp->addr_lst->name,
 			if (add_listen_advertise_iface_name(lst_tmp->addr_lst->name,
 									lst_tmp->addr_lst->next,
 									lst_tmp->addr_lst->next,
 									lst_tmp->port, lst_tmp->proto,
 									lst_tmp->port, lst_tmp->proto,
-									$5, $7, $9,
+									PROTO_NONE, $5, $7, $9,
 									lst_tmp->flags)!=0) {
 									lst_tmp->flags)!=0) {
 				LM_CRIT("cfg. parser: failed to add listen address\n");
 				LM_CRIT("cfg. parser: failed to add listen address\n");
 				break;
 				break;
@@ -1677,7 +1683,7 @@ assign_stm:
                         if (add_listen_advertise_iface_name(lst_tmp->addr_lst->name,
                         if (add_listen_advertise_iface_name(lst_tmp->addr_lst->name,
                                                                         lst_tmp->addr_lst->next,
                                                                         lst_tmp->addr_lst->next,
                                                                         lst_tmp->port, lst_tmp->proto,
                                                                         lst_tmp->port, lst_tmp->proto,
-                                                                        $5, $7, $9,
+                                                                        PROTO_NONE, $5, $7, $9,
                                                                         lst_tmp->flags)!=0) {
                                                                         lst_tmp->flags)!=0) {
                                 LM_CRIT("cfg. parser: failed to add listen address\n");
                                 LM_CRIT("cfg. parser: failed to add listen address\n");
                                 break;
                                 break;
@@ -1690,7 +1696,7 @@ assign_stm:
 			if (add_listen_advertise_iface(	lst_tmp->addr_lst->name,
 			if (add_listen_advertise_iface(	lst_tmp->addr_lst->name,
 									lst_tmp->addr_lst->next,
 									lst_tmp->addr_lst->next,
 									lst_tmp->port, lst_tmp->proto,
 									lst_tmp->port, lst_tmp->proto,
-									$5, 0,
+									PROTO_NONE, $5, 0,
 									lst_tmp->flags)!=0) {
 									lst_tmp->flags)!=0) {
 				LM_CRIT("cfg. parser: failed to add listen address\n");
 				LM_CRIT("cfg. parser: failed to add listen address\n");
 				break;
 				break;
@@ -1704,7 +1710,7 @@ assign_stm:
                         if (add_listen_advertise_iface( lst_tmp->addr_lst->name,
                         if (add_listen_advertise_iface( lst_tmp->addr_lst->name,
                                                                         lst_tmp->addr_lst->next,
                                                                         lst_tmp->addr_lst->next,
                                                                         lst_tmp->port, lst_tmp->proto,
                                                                         lst_tmp->port, lst_tmp->proto,
-                                                                        $5, 0,
+                                                                        PROTO_NONE, $5, 0,
                                                                         lst_tmp->flags)!=0) {
                                                                         lst_tmp->flags)!=0) {
                                 LM_CRIT("cfg. parser: failed to add listen address\n");
                                 LM_CRIT("cfg. parser: failed to add listen address\n");
                                 break;
                                 break;
@@ -1717,7 +1723,7 @@ assign_stm:
 			if (add_listen_advertise_iface_name(lst_tmp->addr_lst->name,
 			if (add_listen_advertise_iface_name(lst_tmp->addr_lst->name,
 									lst_tmp->addr_lst->next,
 									lst_tmp->addr_lst->next,
 									lst_tmp->port, lst_tmp->proto,
 									lst_tmp->port, lst_tmp->proto,
-									$5, 0, $7,
+									PROTO_NONE, $5, 0, $7,
 									lst_tmp->flags)!=0) {
 									lst_tmp->flags)!=0) {
 				LM_CRIT("cfg. parser: failed to add listen address\n");
 				LM_CRIT("cfg. parser: failed to add listen address\n");
 				break;
 				break;
@@ -1731,7 +1737,7 @@ assign_stm:
                         if (add_listen_advertise_iface_name(lst_tmp->addr_lst->name,
                         if (add_listen_advertise_iface_name(lst_tmp->addr_lst->name,
                                                                         lst_tmp->addr_lst->next,
                                                                         lst_tmp->addr_lst->next,
                                                                         lst_tmp->port, lst_tmp->proto,
                                                                         lst_tmp->port, lst_tmp->proto,
-                                                                        $5, 0, $7,
+                                                                        PROTO_NONE, $5, 0, $7,
                                                                         lst_tmp->flags)!=0) {
                                                                         lst_tmp->flags)!=0) {
                                 LM_CRIT("cfg. parser: failed to add listen address\n");
                                 LM_CRIT("cfg. parser: failed to add listen address\n");
                                 break;
                                 break;

+ 3 - 1
src/core/ip_addr.h

@@ -121,10 +121,11 @@ typedef struct addr_info
 typedef struct advertise_info
 typedef struct advertise_info
 {
 {
 	str name;				/* name - eg.: foo.bar or 10.0.0.1 */
 	str name;				/* name - eg.: foo.bar or 10.0.0.1 */
+	int proto;				/* protocol id */
 	unsigned short port_no; /* port number */
 	unsigned short port_no; /* port number */
 	short port_pad;			/* padding field */
 	short port_pad;			/* padding field */
 	str port_no_str;		/* port number converted to string -- optimization*/
 	str port_no_str;		/* port number converted to string -- optimization*/
-	str address_str;		/*ip address converted to string -- optimization*/
+	str address_str;		/* ip address converted to string -- optimization*/
 	struct ip_addr address; /* ip address */
 	struct ip_addr address; /* ip address */
 	str sock_str;			/* Socket proto, ip, and port as string */
 	str sock_str;			/* Socket proto, ip, and port as string */
 } advertise_info_t;
 } advertise_info_t;
@@ -161,6 +162,7 @@ typedef struct socket_attrs
 	int bindproto;
 	int bindproto;
 	str bindaddr;
 	str bindaddr;
 	int bindport;
 	int bindport;
+	int useproto;
 	str useaddr;
 	str useaddr;
 	int useport;
 	int useport;
 	str sockname;
 	str sockname;

+ 52 - 46
src/core/socket_info.c

@@ -289,8 +289,8 @@ error:
  * allocates a si and a si->name in new pkg memory */
  * allocates a si and a si->name in new pkg memory */
 static inline struct socket_info *new_sock_info(char *name,
 static inline struct socket_info *new_sock_info(char *name,
 		struct name_lst *addr_l, unsigned short port, unsigned short proto,
 		struct name_lst *addr_l, unsigned short port, unsigned short proto,
-		char *usename, unsigned short useport, char *sockname,
-		enum si_flags flags)
+		unsigned short useproto, char *usename, unsigned short useport,
+		char *sockname, enum si_flags flags)
 {
 {
 	struct socket_info *si;
 	struct socket_info *si;
 	struct name_lst *n;
 	struct name_lst *n;
@@ -340,6 +340,7 @@ static inline struct socket_info *new_sock_info(char *name,
 			si->useinfo.address_str.len = si->useinfo.name.len;
 			si->useinfo.address_str.len = si->useinfo.name.len;
 			p = si->useinfo.name.s;
 			p = si->useinfo.name.s;
 		}
 		}
+		si->useinfo.proto = (useproto != PROTO_NONE) ? useproto : proto;
 		si->useinfo.address_str.s =
 		si->useinfo.address_str.s =
 				(char *)pkg_malloc(si->useinfo.address_str.len + 1);
 				(char *)pkg_malloc(si->useinfo.address_str.len + 1);
 		if(si->useinfo.address_str.s == NULL)
 		if(si->useinfo.address_str.s == NULL)
@@ -1066,14 +1067,14 @@ found:
 /* append a new sock_info structure to the corresponding list
 /* append a new sock_info structure to the corresponding list
  * return  new sock info on success, 0 on error */
  * return  new sock info on success, 0 on error */
 static struct socket_info *new_sock2list(char *name, struct name_lst *addr_l,
 static struct socket_info *new_sock2list(char *name, struct name_lst *addr_l,
-		unsigned short port, unsigned short proto, char *usename,
-		unsigned short useport, char *sockname, enum si_flags flags,
-		struct socket_info **list)
+		unsigned short port, unsigned short proto, unsigned short useproto,
+		char *usename, unsigned short useport, char *sockname,
+		enum si_flags flags, struct socket_info **list)
 {
 {
 	struct socket_info *si;
 	struct socket_info *si;
 	/* allocates si and si->name in new pkg memory */
 	/* allocates si and si->name in new pkg memory */
-	si = new_sock_info(
-			name, addr_l, port, proto, usename, useport, sockname, flags);
+	si = new_sock_info(name, addr_l, port, proto, useproto, usename, useport,
+			sockname, flags);
 	if(si == 0) {
 	if(si == 0) {
 		LM_ERR("new_sock_info failed\n");
 		LM_ERR("new_sock_info failed\n");
 		goto error;
 		goto error;
@@ -1107,13 +1108,13 @@ error:
  * return  new sock info on success, 0 on error */
  * return  new sock info on success, 0 on error */
 static struct socket_info *new_sock2list_after(char *name,
 static struct socket_info *new_sock2list_after(char *name,
 		struct name_lst *addr_l, unsigned short port, unsigned short proto,
 		struct name_lst *addr_l, unsigned short port, unsigned short proto,
-		char *usename, unsigned short useport, char *sockname,
-		enum si_flags flags, struct socket_info *after)
+		unsigned short useproto, char *usename, unsigned short useport,
+		char *sockname, enum si_flags flags, struct socket_info *after)
 {
 {
 	struct socket_info *si;
 	struct socket_info *si;
 
 
-	si = new_sock_info(
-			name, addr_l, port, proto, usename, useport, sockname, flags);
+	si = new_sock_info(name, addr_l, port, proto, useproto, usename, useport,
+			sockname, flags);
 	if(si == 0) {
 	if(si == 0) {
 		LM_ERR("new_sock_info failed\n");
 		LM_ERR("new_sock_info failed\n");
 		goto error;
 		goto error;
@@ -1128,8 +1129,9 @@ error:
 /* adds a sock_info structure to the corresponding proto list
 /* adds a sock_info structure to the corresponding proto list
  * return last new socket info structur on success, NULL on error */
  * return last new socket info structur on success, NULL on error */
 socket_info_t *add_listen_socket_info(char *name, struct name_lst *addr_l,
 socket_info_t *add_listen_socket_info(char *name, struct name_lst *addr_l,
-		unsigned short port, unsigned short proto, char *usename,
-		unsigned short useport, char *sockname, enum si_flags flags)
+		unsigned short port, unsigned short proto, unsigned short useproto,
+		char *usename, unsigned short useport, char *sockname,
+		enum si_flags flags)
 {
 {
 	socket_info_t *newsi = NULL;
 	socket_info_t *newsi = NULL;
 	socket_info_t **list = NULL;
 	socket_info_t **list = NULL;
@@ -1160,8 +1162,8 @@ socket_info_t *add_listen_socket_info(char *name, struct name_lst *addr_l,
 			c_port = port;
 			c_port = port;
 		}
 		}
 		if(c_proto != PROTO_SCTP) {
 		if(c_proto != PROTO_SCTP) {
-			newsi = new_sock2list(name, 0, c_port, c_proto, usename, useport,
-					sockname, flags & ~SI_IS_MHOMED, list);
+			newsi = new_sock2list(name, 0, c_port, c_proto, useproto, usename,
+					useport, sockname, flags & ~SI_IS_MHOMED, list);
 			if(newsi == 0) {
 			if(newsi == 0) {
 				LM_ERR("new_sock2list failed\n");
 				LM_ERR("new_sock2list failed\n");
 				goto error;
 				goto error;
@@ -1169,16 +1171,17 @@ socket_info_t *add_listen_socket_info(char *name, struct name_lst *addr_l,
 			/* add the other addresses in the list as separate sockets
 			/* add the other addresses in the list as separate sockets
 			 * since only SCTP can bind to multiple addresses */
 			 * since only SCTP can bind to multiple addresses */
 			for(a_l = addr_l; a_l; a_l = a_l->next) {
 			for(a_l = addr_l; a_l; a_l = a_l->next) {
-				if(new_sock2list(a_l->name, 0, c_port, c_proto, usename,
-						   useport, sockname, flags & ~SI_IS_MHOMED, list)
+				if(new_sock2list(a_l->name, 0, c_port, c_proto, useproto,
+						   usename, useport, sockname, flags & ~SI_IS_MHOMED,
+						   list)
 						== 0) {
 						== 0) {
 					LM_ERR("new_sock2list failed\n");
 					LM_ERR("new_sock2list failed\n");
 					goto error;
 					goto error;
 				}
 				}
 			}
 			}
 		} else {
 		} else {
-			newsi = new_sock2list(name, addr_l, c_port, c_proto, usename,
-					useport, sockname, flags, list);
+			newsi = new_sock2list(name, addr_l, c_port, c_proto, useproto,
+					usename, useport, sockname, flags, list);
 			if(newsi == 0) {
 			if(newsi == 0) {
 				LM_ERR("new_sock2list failed\n");
 				LM_ERR("new_sock2list failed\n");
 				goto error;
 				goto error;
@@ -1194,11 +1197,12 @@ error:
 /* adds a sock_info structure to the corresponding proto list
 /* adds a sock_info structure to the corresponding proto list
  * return  0 on success, -1 on error */
  * return  0 on success, -1 on error */
 int add_listen_advertise_iface_name(char *name, struct name_lst *addr_l,
 int add_listen_advertise_iface_name(char *name, struct name_lst *addr_l,
-		unsigned short port, unsigned short proto, char *usename,
-		unsigned short useport, char *sockname, enum si_flags flags)
+		unsigned short port, unsigned short proto, unsigned short useproto,
+		char *usename, unsigned short useport, char *sockname,
+		enum si_flags flags)
 {
 {
-	if(add_listen_socket_info(
-			   name, addr_l, port, proto, usename, useport, sockname, flags)
+	if(add_listen_socket_info(name, addr_l, port, proto, useproto, usename,
+			   useport, sockname, flags)
 			== NULL) {
 			== NULL) {
 		return -1;
 		return -1;
 	}
 	}
@@ -1208,11 +1212,11 @@ int add_listen_advertise_iface_name(char *name, struct name_lst *addr_l,
 /* adds a sock_info structure to the corresponding proto list
 /* adds a sock_info structure to the corresponding proto list
  * return  0 on success, -1 on error */
  * return  0 on success, -1 on error */
 int add_listen_advertise_iface(char *name, struct name_lst *addr_l,
 int add_listen_advertise_iface(char *name, struct name_lst *addr_l,
-		unsigned short port, unsigned short proto, char *usename,
-		unsigned short useport, enum si_flags flags)
+		unsigned short port, unsigned short proto, unsigned short useproto,
+		char *usename, unsigned short useport, enum si_flags flags)
 {
 {
 	return add_listen_advertise_iface_name(
 	return add_listen_advertise_iface_name(
-			name, addr_l, port, proto, usename, useport, NULL, flags);
+			name, addr_l, port, proto, useproto, usename, useport, NULL, flags);
 }
 }
 
 
 /* adds a sock_info structure to the corresponding proto list
 /* adds a sock_info structure to the corresponding proto list
@@ -1221,7 +1225,7 @@ int add_listen_iface(char *name, struct name_lst *addr_l, unsigned short port,
 		unsigned short proto, enum si_flags flags)
 		unsigned short proto, enum si_flags flags)
 {
 {
 	return add_listen_advertise_iface_name(
 	return add_listen_advertise_iface_name(
-			name, addr_l, port, proto, 0, 0, 0, flags);
+			name, addr_l, port, proto, 0, 0, 0, 0, flags);
 }
 }
 
 
 /* adds a sock_info structure to the corresponding proto list
 /* adds a sock_info structure to the corresponding proto list
@@ -1231,7 +1235,7 @@ int add_listen_iface_name(char *name, struct name_lst *addr_l,
 		enum si_flags flags)
 		enum si_flags flags)
 {
 {
 	return add_listen_advertise_iface_name(
 	return add_listen_advertise_iface_name(
-			name, addr_l, port, proto, 0, 0, sockname, flags);
+			name, addr_l, port, proto, 0, 0, 0, sockname, flags);
 }
 }
 
 
 int add_listen_socket(socket_attrs_t *sa)
 int add_listen_socket(socket_attrs_t *sa)
@@ -1247,8 +1251,8 @@ int add_listen_socket(socket_attrs_t *sa)
 	addr_l.name = sa->bindaddr.s;
 	addr_l.name = sa->bindaddr.s;
 
 
 	newsi = add_listen_socket_info(sa->bindaddr.s, &addr_l, sa->bindport,
 	newsi = add_listen_socket_info(sa->bindaddr.s, &addr_l, sa->bindport,
-			sa->bindproto, sa->useaddr.s, sa->useport, sa->sockname.s,
-			sa->sflags);
+			sa->bindproto, sa->useproto, sa->useaddr.s, sa->useport,
+			sa->sockname.s, sa->sflags);
 
 
 	return (newsi != NULL) ? 0 : -1;
 	return (newsi != NULL) ? 0 : -1;
 }
 }
@@ -1808,14 +1812,14 @@ error:
  * return 0 on success, -1 on error
  * return 0 on success, -1 on error
  */
  */
 static int addr_info_to_si_lst(struct addr_info *ai_lst, unsigned short port,
 static int addr_info_to_si_lst(struct addr_info *ai_lst, unsigned short port,
-		char proto, char *usename, unsigned short useport, char *sockname,
-		enum si_flags flags, struct socket_info **list)
+		char proto, char useproto, char *usename, unsigned short useport,
+		char *sockname, enum si_flags flags, struct socket_info **list)
 {
 {
 	struct addr_info *ail;
 	struct addr_info *ail;
 
 
 	for(ail = ai_lst; ail; ail = ail->next) {
 	for(ail = ai_lst; ail; ail = ail->next) {
-		if(new_sock2list(ail->name.s, 0, port, proto, usename, useport,
-				   sockname, ail->flags | flags, list)
+		if(new_sock2list(ail->name.s, 0, port, proto, useproto, usename,
+				   useport, sockname, ail->flags | flags, list)
 				== 0)
 				== 0)
 			return -1;
 			return -1;
 	}
 	}
@@ -1828,15 +1832,16 @@ static int addr_info_to_si_lst(struct addr_info *ai_lst, unsigned short port,
  * return 0 on success, -1 on error
  * return 0 on success, -1 on error
  */
  */
 static int addr_info_to_si_lst_after(struct addr_info *ai_lst,
 static int addr_info_to_si_lst_after(struct addr_info *ai_lst,
-		unsigned short port, char proto, char *usename, unsigned short useport,
-		char *sockname, enum si_flags flags, struct socket_info *el)
+		unsigned short port, char proto, char useproto, char *usename,
+		unsigned short useport, char *sockname, enum si_flags flags,
+		struct socket_info *el)
 {
 {
 	struct addr_info *ail;
 	struct addr_info *ail;
 	struct socket_info *new_si;
 	struct socket_info *new_si;
 
 
 	for(ail = ai_lst; ail; ail = ail->next) {
 	for(ail = ai_lst; ail; ail = ail->next) {
-		if((new_si = new_sock2list_after(ail->name.s, 0, port, proto, usename,
-					useport, sockname, ail->flags | flags, el))
+		if((new_si = new_sock2list_after(ail->name.s, 0, port, proto, useproto,
+					usename, useport, sockname, ail->flags | flags, el))
 				== 0)
 				== 0)
 			return -1;
 			return -1;
 		el = new_si;
 		el = new_si;
@@ -1877,8 +1882,9 @@ static int fix_socket_list(struct socket_info **list, int *type_flags)
 				!= -1) {
 				!= -1) {
 			if(si->flags & SI_IS_MHOMED) {
 			if(si->flags & SI_IS_MHOMED) {
 				if((new_si = new_sock2list_after(ai_lst->name.s, 0, si->port_no,
 				if((new_si = new_sock2list_after(ai_lst->name.s, 0, si->port_no,
-							si->proto, si->useinfo.name.s, si->useinfo.port_no,
-							si->sockname.s, ai_lst->flags | si->flags, si))
+							si->proto, si->useinfo.proto, si->useinfo.name.s,
+							si->useinfo.port_no, si->sockname.s,
+							ai_lst->flags | si->flags, si))
 						== 0)
 						== 0)
 					break;
 					break;
 				ail = ai_lst;
 				ail = ai_lst;
@@ -1902,8 +1908,8 @@ static int fix_socket_list(struct socket_info **list, int *type_flags)
 			} else {
 			} else {
 				/* add all addr. as separate  interfaces */
 				/* add all addr. as separate  interfaces */
 				if(addr_info_to_si_lst_after(ai_lst, si->port_no, si->proto,
 				if(addr_info_to_si_lst_after(ai_lst, si->port_no, si->proto,
-						   si->useinfo.name.s, si->useinfo.port_no,
-						   si->sockname.s, si->flags, si)
+						   si->useinfo.proto, si->useinfo.name.s,
+						   si->useinfo.port_no, si->sockname.s, si->flags, si)
 						!= 0)
 						!= 0)
 					goto error;
 					goto error;
 				/* ai_lst not needed anymore */
 				/* ai_lst not needed anymore */
@@ -2235,7 +2241,7 @@ int fix_all_socket_lists()
 #endif /* __OS_linux */
 #endif /* __OS_linux */
 						   )
 						   )
 				&& (addr_info_to_si_lst(
 				&& (addr_info_to_si_lst(
-							ai_lst, 0, PROTO_UDP, 0, 0, 0, 0, &udp_listen)
+							ai_lst, 0, PROTO_UDP, 0, 0, 0, 0, 0, &udp_listen)
 						== 0)) {
 						== 0)) {
 			free_addr_info_lst(&ai_lst);
 			free_addr_info_lst(&ai_lst);
 			ai_lst = 0;
 			ai_lst = 0;
@@ -2256,7 +2262,7 @@ int fix_all_socket_lists()
 #endif /* __OS_linux */
 #endif /* __OS_linux */
 								   )
 								   )
 						|| (addr_info_to_si_lst(ai_lst, 0, PROTO_TCP, 0, 0, 0,
 						|| (addr_info_to_si_lst(ai_lst, 0, PROTO_TCP, 0, 0, 0,
-									0, &tcp_listen)
+									0, 0, &tcp_listen)
 								!= 0))
 								!= 0))
 					goto error;
 					goto error;
 				free_addr_info_lst(&ai_lst);
 				free_addr_info_lst(&ai_lst);
@@ -2278,7 +2284,7 @@ int fix_all_socket_lists()
 #endif /* __OS_linux */
 #endif /* __OS_linux */
 									   )
 									   )
 							|| (addr_info_to_si_lst(ai_lst, 0, PROTO_TLS, 0, 0,
 							|| (addr_info_to_si_lst(ai_lst, 0, PROTO_TLS, 0, 0,
-										0, 0, &tls_listen)
+										0, 0, 0, &tls_listen)
 									!= 0))
 									!= 0))
 						goto error;
 						goto error;
 				}
 				}
@@ -2303,7 +2309,7 @@ int fix_all_socket_lists()
 #endif /* __OS_linux */
 #endif /* __OS_linux */
 								   )
 								   )
 						|| (addr_info_to_si_lst(ai_lst, 0, PROTO_SCTP, 0, 0, 0,
 						|| (addr_info_to_si_lst(ai_lst, 0, PROTO_SCTP, 0, 0, 0,
-									0, &sctp_listen)
+									0, 0, &sctp_listen)
 								!= 0))
 								!= 0))
 					goto error;
 					goto error;
 				free_addr_info_lst(&ai_lst);
 				free_addr_info_lst(&ai_lst);

+ 5 - 4
src/core/socket_info.h

@@ -84,11 +84,12 @@ int add_listen_iface_name(char *name, struct name_lst *addr_l,
 		unsigned short port, unsigned short proto, char *sockname,
 		unsigned short port, unsigned short proto, char *sockname,
 		enum si_flags flags);
 		enum si_flags flags);
 int add_listen_advertise_iface(char *name, struct name_lst *nlst,
 int add_listen_advertise_iface(char *name, struct name_lst *nlst,
-		unsigned short port, unsigned short proto, char *useaddr,
-		unsigned short useport, enum si_flags flags);
+		unsigned short port, unsigned short proto, unsigned short useproto,
+		char *useaddr, unsigned short useport, enum si_flags flags);
 int add_listen_advertise_iface_name(char *name, struct name_lst *nlst,
 int add_listen_advertise_iface_name(char *name, struct name_lst *nlst,
-		unsigned short port, unsigned short proto, char *useaddr,
-		unsigned short useport, char *sockname, enum si_flags flags);
+		unsigned short port, unsigned short proto, unsigned short useproto,
+		char *useaddr, unsigned short useport, char *sockname,
+		enum si_flags flags);
 int fix_all_socket_lists(void);
 int fix_all_socket_lists(void);
 void print_all_socket_lists(void);
 void print_all_socket_lists(void);
 void print_aliases(void);
 void print_aliases(void);

+ 4 - 3
src/main.c

@@ -2050,6 +2050,7 @@ int main(int argc, char **argv)
 	int tmp_len;
 	int tmp_len;
 	int port;
 	int port;
 	int proto;
 	int proto;
+	int aproto;
 	char *ahost = NULL;
 	char *ahost = NULL;
 	int aport = 0;
 	int aport = 0;
 	char *options;
 	char *options;
@@ -2699,7 +2700,7 @@ int main(int argc, char **argv)
 					*p = '\0';
 					*p = '\0';
 					p++;
 					p++;
 					tmp_len = 0;
 					tmp_len = 0;
-					if(parse_phostport(p, &ahost, &tmp_len, &aport, &proto)
+					if(parse_phostport(p, &ahost, &tmp_len, &aport, &aproto)
 							< 0) {
 							< 0) {
 						fprintf(stderr,
 						fprintf(stderr,
 								"listen value with invalid advertise: %s\n",
 								"listen value with invalid advertise: %s\n",
@@ -2722,7 +2723,7 @@ int main(int argc, char **argv)
 				}
 				}
 				/* add a new addr. to our address list */
 				/* add a new addr. to our address list */
 				if(add_listen_advertise_iface(n_lst->name, n_lst->next, port,
 				if(add_listen_advertise_iface(n_lst->name, n_lst->next, port,
-						   proto, ahost, aport, n_lst->flags)
+						   proto, aproto, ahost, aport, n_lst->flags)
 						!= 0) {
 						!= 0) {
 					fprintf(stderr, "failed to add new listen address: %s\n",
 					fprintf(stderr, "failed to add new listen address: %s\n",
 							optarg);
 							optarg);
@@ -3240,7 +3241,7 @@ error:
 int SYMBOL_EXPORT pthread_mutex_init(
 int SYMBOL_EXPORT pthread_mutex_init(
 		pthread_mutex_t *__mutex, const pthread_mutexattr_t *__mutexattr)
 		pthread_mutex_t *__mutex, const pthread_mutexattr_t *__mutexattr)
 {
 {
-	static int (*real_pthread_mutex_init)(pthread_mutex_t *__mutex,
+	static int (*real_pthread_mutex_init)(pthread_mutex_t * __mutex,
 			const pthread_mutexattr_t *__mutexattr) = 0;
 			const pthread_mutexattr_t *__mutexattr) = 0;
 	pthread_mutexattr_t attr;
 	pthread_mutexattr_t attr;
 	int ret;
 	int ret;