|
|
cf5772 |
From ecdb9294c5dce938ef7c488404be65d23552fb18 Mon Sep 17 00:00:00 2001
|
|
|
cf5772 |
From: Xin Long <lucien.xin@gmail.com>
|
|
|
cf5772 |
Date: Wed, 4 Aug 2021 07:29:15 -0400
|
|
|
cf5772 |
Subject: [PATCH 3/4] sctp_test: replace use of deprecated gethostbyname with
|
|
|
cf5772 |
getaddrinfo
|
|
|
cf5772 |
|
|
|
cf5772 |
This patch is to replace use of deprecated gethostbyname with
|
|
|
cf5772 |
getaddrinfo in the file src/apps/sctp_test.c.
|
|
|
cf5772 |
|
|
|
cf5772 |
Signed-off-by: Xin Long <lucien.xin@gmail.com>
|
|
|
cf5772 |
Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
|
|
|
cf5772 |
---
|
|
|
cf5772 |
src/apps/sctp_test.c | 63 +++++++++++---------------------------------
|
|
|
cf5772 |
1 file changed, 16 insertions(+), 47 deletions(-)
|
|
|
cf5772 |
|
|
|
cf5772 |
diff --git a/src/apps/sctp_test.c b/src/apps/sctp_test.c
|
|
|
cf5772 |
index cd7654b..e382804 100644
|
|
|
cf5772 |
--- a/src/apps/sctp_test.c
|
|
|
cf5772 |
+++ b/src/apps/sctp_test.c
|
|
|
cf5772 |
@@ -487,14 +487,11 @@ struct sockaddr *
|
|
|
cf5772 |
append_addr(const char *parm, struct sockaddr *addrs, int *ret_count)
|
|
|
cf5772 |
{
|
|
|
cf5772 |
struct sockaddr *new_addrs = NULL;
|
|
|
cf5772 |
+ struct addrinfo hints, *res, *rp;
|
|
|
cf5772 |
void *aptr;
|
|
|
cf5772 |
struct sockaddr *sa_addr;
|
|
|
cf5772 |
struct sockaddr_in *b4ap;
|
|
|
cf5772 |
struct sockaddr_in6 *b6ap;
|
|
|
cf5772 |
- struct hostent *hst4 = NULL;
|
|
|
cf5772 |
- struct hostent *hst6 = NULL;
|
|
|
cf5772 |
- int i4 = 0;
|
|
|
cf5772 |
- int i6 = 0;
|
|
|
cf5772 |
int j;
|
|
|
cf5772 |
int orig_count = *ret_count;
|
|
|
cf5772 |
int count = orig_count;
|
|
|
cf5772 |
@@ -514,27 +511,16 @@ append_addr(const char *parm, struct sockaddr *addrs, int *ret_count)
|
|
|
cf5772 |
}
|
|
|
cf5772 |
}
|
|
|
cf5772 |
|
|
|
cf5772 |
- /* Get the entries for this host. */
|
|
|
cf5772 |
- hst4 = gethostbyname(ipaddr);
|
|
|
cf5772 |
- hst6 = gethostbyname2(ipaddr, AF_INET6);
|
|
|
cf5772 |
-
|
|
|
cf5772 |
- if ((NULL == hst4 || hst4->h_length < 1)
|
|
|
cf5772 |
- && (NULL == hst6 || hst6->h_length < 1)) {
|
|
|
cf5772 |
+ memset(&hints, 0, sizeof(struct addrinfo));
|
|
|
cf5772 |
+ hints.ai_family = AF_UNSPEC;
|
|
|
cf5772 |
+ hints.ai_protocol = IPPROTO_SCTP;
|
|
|
cf5772 |
+ if (getaddrinfo(ipaddr, NULL, &hints, &res) != 0) {
|
|
|
cf5772 |
fprintf(stderr, "bad hostname: %s\n", ipaddr);
|
|
|
cf5772 |
goto finally;
|
|
|
cf5772 |
}
|
|
|
cf5772 |
|
|
|
cf5772 |
- /* Figure out the number of addresses. */
|
|
|
cf5772 |
- if (NULL != hst4) {
|
|
|
cf5772 |
- for (i4 = 0; NULL != hst4->h_addr_list[i4]; ++i4) {
|
|
|
cf5772 |
- count++;
|
|
|
cf5772 |
- }
|
|
|
cf5772 |
- }
|
|
|
cf5772 |
- if (NULL != hst6) {
|
|
|
cf5772 |
- for (i6 = 0; NULL != hst6->h_addr_list[i6]; ++i6) {
|
|
|
cf5772 |
- count++;
|
|
|
cf5772 |
- }
|
|
|
cf5772 |
- }
|
|
|
cf5772 |
+ for (rp = res; rp != NULL; rp = rp->ai_next)
|
|
|
cf5772 |
+ count++;
|
|
|
cf5772 |
|
|
|
cf5772 |
/* Expand memory for the new addresses. Assume all the addresses
|
|
|
cf5772 |
* are v6 addresses.
|
|
|
cf5772 |
@@ -565,34 +551,17 @@ append_addr(const char *parm, struct sockaddr *addrs, int *ret_count)
|
|
|
cf5772 |
}
|
|
|
cf5772 |
|
|
|
cf5772 |
/* Put the new addresses away. */
|
|
|
cf5772 |
- if (NULL != hst4) {
|
|
|
cf5772 |
- for (j = 0; j < i4; ++j) {
|
|
|
cf5772 |
- b4ap = (struct sockaddr_in *)aptr;
|
|
|
cf5772 |
- memset(b4ap, 0x00, sizeof(*b4ap));
|
|
|
cf5772 |
- b4ap->sin_family = AF_INET;
|
|
|
cf5772 |
- b4ap->sin_port = htons(local_port);
|
|
|
cf5772 |
- bcopy(hst4->h_addr_list[j], &b4ap->sin_addr,
|
|
|
cf5772 |
- hst4->h_length);
|
|
|
cf5772 |
-
|
|
|
cf5772 |
- aptr += sizeof(struct sockaddr_in);
|
|
|
cf5772 |
- } /* for (loop through the new v4 addresses) */
|
|
|
cf5772 |
- }
|
|
|
cf5772 |
-
|
|
|
cf5772 |
- if (NULL != hst6) {
|
|
|
cf5772 |
- for (j = 0; j < i6; ++j) {
|
|
|
cf5772 |
- b6ap = (struct sockaddr_in6 *)aptr;
|
|
|
cf5772 |
- memset(b6ap, 0x00, sizeof(*b6ap));
|
|
|
cf5772 |
- b6ap->sin6_family = AF_INET6;
|
|
|
cf5772 |
- b6ap->sin6_port = htons(local_port);
|
|
|
cf5772 |
+ for (rp = res; rp != NULL; rp = rp->ai_next) {
|
|
|
cf5772 |
+ b4ap = (struct sockaddr_in *)aptr;
|
|
|
cf5772 |
+ b6ap = (struct sockaddr_in6 *)aptr;
|
|
|
cf5772 |
+ bcopy(rp->ai_addr, aptr, rp->ai_addrlen);
|
|
|
cf5772 |
+ b4ap->sin_port = htons(local_port); /* equal to b6ap.v6.sin6_port */
|
|
|
cf5772 |
+ if (rp->ai_family == AF_INET6) {
|
|
|
cf5772 |
b6ap->sin6_scope_id = if_index;
|
|
|
cf5772 |
- bcopy(hst6->h_addr_list[j], &b6ap->sin6_addr,
|
|
|
cf5772 |
- hst6->h_length);
|
|
|
cf5772 |
- if (!ifindex) {
|
|
|
cf5772 |
+ if (!ifindex)
|
|
|
cf5772 |
b6ap->sin6_scope_id = ifindex;
|
|
|
cf5772 |
- }
|
|
|
cf5772 |
-
|
|
|
cf5772 |
- aptr += sizeof(struct sockaddr_in6);
|
|
|
cf5772 |
- } /* for (loop through the new v6 addresses) */
|
|
|
cf5772 |
+ }
|
|
|
cf5772 |
+ aptr += rp->ai_addrlen;
|
|
|
cf5772 |
}
|
|
|
cf5772 |
|
|
|
cf5772 |
finally:
|
|
|
cf5772 |
--
|
|
|
cf5772 |
2.27.0
|
|
|
cf5772 |
|