Make this change for all internal transport functions that will need
the network interface information. This patch does not change any
functionality.
---
include/net-snmp/library/snmpDTLSUDPDomain.h | 4 +-
include/net-snmp/library/snmpTCPDomain.h | 4 +-
include/net-snmp/library/snmpTCPIPv6Domain.h | 4 +-
include/net-snmp/library/snmpUDPDomain.h | 8 +-
.../net-snmp/library/snmpUDPIPv4BaseDomain.h | 12 +--
include/net-snmp/library/snmpUDPIPv6Domain.h | 11 +--
.../net-snmp/library/snmpUDPsharedDomain.h | 6 +-
snmplib/transports/snmpDTLSUDPDomain.c | 36 ++++----
snmplib/transports/snmpIPv6BaseDomain.c | 6 +-
snmplib/transports/snmpTCPDomain.c | 17 ++--
snmplib/transports/snmpTCPIPv6Domain.c | 17 ++--
snmplib/transports/snmpUDPDomain.c | 22 ++---
snmplib/transports/snmpUDPIPv4BaseDomain.c | 45 ++++++----
snmplib/transports/snmpUDPIPv6Domain.c | 57 ++++++------
snmplib/transports/snmpUDPsharedDomain.c | 90 +++++++++----------
15 files changed, 177 insertions(+), 162 deletions(-)
diff --git a/include/net-snmp/library/snmpDTLSUDPDomain.h
b/include/net-snmp/library/snmpDTLSUDPDomain.h
index 97c5d58f31a2..5a60eeea0c22 100644
--- a/include/net-snmp/library/snmpDTLSUDPDomain.h
+++ b/include/net-snmp/library/snmpDTLSUDPDomain.h
@@ -19,8 +19,8 @@ extern "C" {
NETSNMP_IMPORT oid netsnmpDTLSUDPDomain[7];
NETSNMP_IMPORT size_t netsnmpDTLSUDPDomain_len;
-netsnmp_transport *netsnmp_dtlsudp_transport(const struct sockaddr_in *addr,
- int local);
+netsnmp_transport *
+netsnmp_dtlsudp_transport(const struct netsnmp_ep *ep, int local);
/*
diff --git a/include/net-snmp/library/snmpTCPDomain.h
b/include/net-snmp/library/snmpTCPDomain.h
index 44c62e6994d4..a7bf42e56463 100644
--- a/include/net-snmp/library/snmpTCPDomain.h
+++ b/include/net-snmp/library/snmpTCPDomain.h
@@ -25,8 +25,8 @@ extern "C" {
#define TRANSPORT_DOMAIN_TCP_IP 1,3,6,1,2,1,100,1,5
NETSNMP_IMPORT oid netsnmp_snmpTCPDomain[];
-netsnmp_transport *netsnmp_tcp_transport(const struct sockaddr_in *addr,
- int local);
+netsnmp_transport *
+netsnmp_tcp_transport(const struct netsnmp_ep *ep, int local);
/*
* "Constructor" for transport domain object.
diff --git a/include/net-snmp/library/snmpTCPIPv6Domain.h
b/include/net-snmp/library/snmpTCPIPv6Domain.h
index 5499900314df..afab8e084029 100644
--- a/include/net-snmp/library/snmpTCPIPv6Domain.h
+++ b/include/net-snmp/library/snmpTCPIPv6Domain.h
@@ -23,8 +23,8 @@ extern "C" {
#define TRANSPORT_DOMAIN_TCP_IPV6 1,3,6,1,2,1,100,1,6
NETSNMP_IMPORT oid netsnmp_TCPIPv6Domain[];
-netsnmp_transport *netsnmp_tcp6_transport(const struct sockaddr_in6 *addr,
- int local);
+netsnmp_transport *
+netsnmp_tcp6_transport(const struct netsnmp_ep *ep, int local);
/*
* "Constructor" for transport domain object.
diff --git a/include/net-snmp/library/snmpUDPDomain.h
b/include/net-snmp/library/snmpUDPDomain.h
index 9cd203aa8f7c..5cc8b68b6f88 100644
--- a/include/net-snmp/library/snmpUDPDomain.h
+++ b/include/net-snmp/library/snmpUDPDomain.h
@@ -24,14 +24,14 @@ extern "C" {
config_require(UDPIPv4Base)
#include <net-snmp/library/snmpUDPIPv4BaseDomain.h>
-netsnmp_transport *netsnmp_udp_transport(const struct sockaddr_in *addr,
- int local);
+netsnmp_transport *
+netsnmp_udp_transport(const struct netsnmp_ep *ep, int local);
netsnmp_transport *netsnmp_udp_create_tspec(netsnmp_tdomain_spec *tspec);
netsnmp_transport *
-netsnmp_udp_transport_with_source(const struct sockaddr_in *addr, int local,
- const struct sockaddr_in *src_addr);
+netsnmp_udp_transport_with_source(const struct netsnmp_ep *ep, int local,
+ const struct netsnmp_ep *src_addr);
#define C2SE_ERR_SUCCESS 0
#define C2SE_ERR_MISSING_ARG -1
diff --git a/include/net-snmp/library/snmpUDPIPv4BaseDomain.h
b/include/net-snmp/library/snmpUDPIPv4BaseDomain.h
index 60bd3218303c..ff6e16362562 100644
--- a/include/net-snmp/library/snmpUDPIPv4BaseDomain.h
+++ b/include/net-snmp/library/snmpUDPIPv4BaseDomain.h
@@ -29,20 +29,20 @@ extern "C" {
* Prototypes
*/
- netsnmp_transport *netsnmp_udpipv4base_transport(const struct sockaddr_in
*addr,
- int local);
+ netsnmp_transport *
+ netsnmp_udpipv4base_transport(const struct netsnmp_ep *ep, int local);
netsnmp_transport *
- netsnmp_udpipv4base_transport_with_source(const struct sockaddr_in *addr,
+ netsnmp_udpipv4base_transport_with_source(const struct netsnmp_ep *ep,
int local,
- const struct sockaddr_in
*src_addr);
+ const struct netsnmp_ep
*src_addr);
netsnmp_transport *
netsnmp_udpipv4base_tspec_transport(netsnmp_tdomain_spec *tspec);
/** internal functions for derivatives of udpipv4base */
netsnmp_transport *
- netsnmp_udpipv4base_transport_init(const struct sockaddr_in *addr,
+ netsnmp_udpipv4base_transport_init(const struct netsnmp_ep *ep,
int local);
int
@@ -50,7 +50,7 @@ extern "C" {
int
netsnmp_udpipv4base_transport_bind(netsnmp_transport *t,
- const struct sockaddr_in *addr,
+ const struct netsnmp_ep *ep,
int flags);
void
diff --git a/include/net-snmp/library/snmpUDPIPv6Domain.h
b/include/net-snmp/library/snmpUDPIPv6Domain.h
index 39ed0df796f7..883bfdbd8f47 100644
--- a/include/net-snmp/library/snmpUDPIPv6Domain.h
+++ b/include/net-snmp/library/snmpUDPIPv6Domain.h
@@ -29,24 +29,25 @@ config_require(UDPBase)
#define TRANSPORT_DOMAIN_UDP_IPV6 1,3,6,1,2,1,100,1,2
NETSNMP_IMPORT oid netsnmp_UDPIPv6Domain[];
-netsnmp_transport *netsnmp_udp6_transport(const struct sockaddr_in6 *addr,
+netsnmp_transport *netsnmp_udp6_transport(const struct netsnmp_ep *ep,
int local);
netsnmp_transport *
-netsnmp_udp6_transport_with_source(const struct sockaddr_in6 *addr, int local,
- const struct sockaddr_in6 *src_addr);
+netsnmp_udp6_transport_with_source(const struct netsnmp_ep *ep, int local,
+ const struct netsnmp_ep *src_addr);
/** internal functions for derivatives of udpipv6 */
netsnmp_transport *
- netsnmp_udp6_transport_init(const struct sockaddr_in6 *addr, int local);
+ netsnmp_udp6_transport_init(const struct netsnmp_ep *ep, int local);
int
netsnmp_udp6_transport_socket(int flags);
int
netsnmp_udp6_transport_bind(netsnmp_transport *t,
- const struct sockaddr_in6 *addr, int flags);
+ const struct netsnmp_ep *ep,
+ int flags);
void
netsnmp_udp6_transport_get_bound_addr(netsnmp_transport *t);
diff --git a/include/net-snmp/library/snmpUDPsharedDomain.h
b/include/net-snmp/library/snmpUDPsharedDomain.h
index 3a57ca5e0be7..3df9c9a24925 100644
--- a/include/net-snmp/library/snmpUDPsharedDomain.h
+++ b/include/net-snmp/library/snmpUDPsharedDomain.h
@@ -33,13 +33,13 @@ extern "C" {
*/
void netsnmp_udpshared_ctor(void);
- netsnmp_transport *netsnmp_udpshared_transport(const struct sockaddr_in
*addr,
+ netsnmp_transport *netsnmp_udpshared_transport(const struct netsnmp_ep *ep,
int local);
netsnmp_transport *
- netsnmp_udpshared_transport_with_source(const struct sockaddr_in *addr,
+ netsnmp_udpshared_transport_with_source(const struct netsnmp_ep *ep,
int local,
- const struct sockaddr_in
*src_addr);
+ const struct netsnmp_ep *src_addr);
#ifdef __cplusplus
}
diff --git a/snmplib/transports/snmpDTLSUDPDomain.c
b/snmplib/transports/snmpDTLSUDPDomain.c
index 7a8663def58d..ca311276ac6d 100644
--- a/snmplib/transports/snmpDTLSUDPDomain.c
+++ b/snmplib/transports/snmpDTLSUDPDomain.c
@@ -23,6 +23,7 @@
netsnmp_feature_require(cert_util)
netsnmp_feature_require(sockaddr_size)
+#include <net-snmp/library/snmpIPBaseDomain.h>
#include <net-snmp/library/snmpDTLSUDPDomain.h>
#include <net-snmp/library/snmpUDPIPv6Domain.h>
#include <net-snmp/library/snmp_assert.h>
@@ -1494,13 +1495,14 @@ _transport_common(netsnmp_transport *t, int local)
}
netsnmp_transport *
-netsnmp_dtlsudp_transport(const struct sockaddr_in *addr, int local)
+netsnmp_dtlsudp_transport(const struct netsnmp_ep *ep, int local)
{
+ const struct sockaddr_in *addr = &ep->a.sin;
netsnmp_transport *t = NULL;
DEBUGTRACETOK("dtlsudp");
- t = netsnmp_udp_transport(addr, local);
+ t = netsnmp_udp_transport(ep, local);
if (NULL == t)
return NULL;
@@ -1532,13 +1534,14 @@ netsnmp_dtlsudp6_fmtaddr(netsnmp_transport *t, const
void *data, int len)
*/
netsnmp_transport *
-netsnmp_dtlsudp6_transport(const struct sockaddr_in6 *addr, int local)
+netsnmp_dtlsudp6_transport(const struct netsnmp_ep *ep, int local)
{
+ const struct sockaddr_in6 *addr = &ep->a.sin6;
netsnmp_transport *t = NULL;
DEBUGTRACETOK("dtlsudp");
- t = netsnmp_udp6_transport(addr, local);
+ t = netsnmp_udp6_transport(ep, local);
if (NULL == t)
return NULL;
@@ -1565,19 +1568,16 @@ netsnmp_transport *
netsnmp_dtlsudp_create_tstring(const char *str, int isserver,
const char *default_target)
{
-#ifdef NETSNMP_TRANSPORT_UDPIPV6_DOMAIN
- struct sockaddr_in6 addr6;
-#endif
- struct sockaddr_in addr;
+ struct netsnmp_ep ep;
netsnmp_transport *t;
_netsnmpTLSBaseData *tlsdata;
char buf[SPRINT_MAX_LEN], *cp;
- if (netsnmp_sockaddr_in2(&addr, str, default_target))
- t = netsnmp_dtlsudp_transport(&addr, isserver);
+ if (netsnmp_sockaddr_in3(&ep, str, default_target))
+ t = netsnmp_dtlsudp_transport(&ep, isserver);
#ifdef NETSNMP_TRANSPORT_UDPIPV6_DOMAIN
- else if (netsnmp_sockaddr_in6_2(&addr6, str, default_target))
- t = netsnmp_dtlsudp6_transport(&addr6, isserver);
+ else if (netsnmp_sockaddr_in6_3(&ep, str, default_target))
+ t = netsnmp_dtlsudp6_transport(&ep, isserver);
#endif
else
return NULL;
@@ -1603,14 +1603,14 @@ netsnmp_dtlsudp_create_tstring(const char *str, int
isserver,
netsnmp_transport *
netsnmp_dtlsudp_create_ostring(const void *o, size_t o_len, int local)
{
- struct sockaddr_in sin;
- struct sockaddr_in6 sin6;
+ struct netsnmp_ep ep;
- if (netsnmp_ipv4_ostring_to_sockaddr(&sin, o, o_len))
- return netsnmp_dtlsudp_transport(&sin, local);
+ memset(&ep, 0, sizeof(ep));
+ if (netsnmp_ipv4_ostring_to_sockaddr(&ep.a.sin, o, o_len))
+ return netsnmp_dtlsudp_transport(&ep, local);
#ifdef NETSNMP_TRANSPORT_UDPIPV6_DOMAIN
- else if (netsnmp_ipv6_ostring_to_sockaddr(&sin6, o, o_len))
- return netsnmp_dtlsudp6_transport(&sin6, local);
+ else if (netsnmp_ipv6_ostring_to_sockaddr(&ep.a.sin6, o, o_len))
+ return netsnmp_dtlsudp6_transport(&ep, local);
#endif
else
return NULL;
diff --git a/snmplib/transports/snmpIPv6BaseDomain.c
b/snmplib/transports/snmpIPv6BaseDomain.c
index 8e2fb8c86dd3..c2baacc5d42c 100644
--- a/snmplib/transports/snmpIPv6BaseDomain.c
+++ b/snmplib/transports/snmpIPv6BaseDomain.c
@@ -248,13 +248,13 @@ int
netsnmp_sockaddr_in6_2(struct sockaddr_in6 *addr,
const char *inpeername, const char *default_target)
{
- struct netsnmp_ep ai;
+ struct netsnmp_ep ep;
int ret;
- ret = netsnmp_sockaddr_in6_3(&ai, inpeername, default_target);
+ ret = netsnmp_sockaddr_in6_3(&ep, inpeername, default_target);
if (ret == 0)
return 0;
- *addr = ai.a.sin6;
+ *addr = ep.a.sin6;
return ret;
}
diff --git a/snmplib/transports/snmpTCPDomain.c
b/snmplib/transports/snmpTCPDomain.c
index a753b93b6803..ac9b66a16fd5 100644
--- a/snmplib/transports/snmpTCPDomain.c
+++ b/snmplib/transports/snmpTCPDomain.c
@@ -1,6 +1,7 @@
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/types.h>
+#include <net-snmp/library/snmpIPBaseDomain.h>
#include <net-snmp/library/snmpTCPDomain.h>
#include <stdio.h>
@@ -149,8 +150,9 @@ netsnmp_tcp_accept(netsnmp_transport *t)
*/
netsnmp_transport *
-netsnmp_tcp_transport(const struct sockaddr_in *addr, int local)
+netsnmp_tcp_transport(const struct netsnmp_ep *ep, int local)
{
+ const struct sockaddr_in *addr = &ep->a.sin;
netsnmp_transport *t = NULL;
netsnmp_udp_addr_pair *addr_pair = NULL;
int rc = 0;
@@ -308,10 +310,10 @@ netsnmp_transport *
netsnmp_tcp_create_tstring(const char *str, int local,
const char *default_target)
{
- struct sockaddr_in addr;
+ struct netsnmp_ep ep;
- if (netsnmp_sockaddr_in2(&addr, str, default_target)) {
- return netsnmp_tcp_transport(&addr, local);
+ if (netsnmp_sockaddr_in3(&ep, str, default_target)) {
+ return netsnmp_tcp_transport(&ep, local);
} else {
return NULL;
}
@@ -322,10 +324,11 @@ netsnmp_tcp_create_tstring(const char *str, int local,
netsnmp_transport *
netsnmp_tcp_create_ostring(const void *o, size_t o_len, int local)
{
- struct sockaddr_in sin;
+ struct netsnmp_ep ep;
- if (netsnmp_ipv4_ostring_to_sockaddr(&sin, o, o_len))
- return netsnmp_tcp_transport(&sin, local);
+ memset(&ep, 0, sizeof(ep));
+ if (netsnmp_ipv4_ostring_to_sockaddr(&ep.a.sin, o, o_len))
+ return netsnmp_tcp_transport(&ep, local);
return NULL;
}
diff --git a/snmplib/transports/snmpTCPIPv6Domain.c
b/snmplib/transports/snmpTCPIPv6Domain.c
index 8ff782f5270e..cdff5fab6843 100644
--- a/snmplib/transports/snmpTCPIPv6Domain.c
+++ b/snmplib/transports/snmpTCPIPv6Domain.c
@@ -3,6 +3,7 @@
#ifdef NETSNMP_TRANSPORT_TCPIPV6_DOMAIN
#include <net-snmp/types.h>
+#include <net-snmp/library/snmpIPBaseDomain.h>
#include <net-snmp/library/snmpTCPIPv6Domain.h>
#include <stdio.h>
@@ -140,8 +141,9 @@ netsnmp_tcp6_accept(netsnmp_transport *t)
*/
netsnmp_transport *
-netsnmp_tcp6_transport(const struct sockaddr_in6 *addr, int local)
+netsnmp_tcp6_transport(const struct netsnmp_ep *ep, int local)
{
+ const struct sockaddr_in6 *addr = &ep->a.sin6;
netsnmp_transport *t = NULL;
int rc = 0;
int socket_initialized = 0;
@@ -312,10 +314,10 @@ netsnmp_transport *
netsnmp_tcp6_create_tstring(const char *str, int local,
const char *default_target)
{
- struct sockaddr_in6 addr;
+ struct netsnmp_ep ep;
- if (netsnmp_sockaddr_in6_2(&addr, str, default_target)) {
- return netsnmp_tcp6_transport(&addr, local);
+ if (netsnmp_sockaddr_in6_3(&ep, str, default_target)) {
+ return netsnmp_tcp6_transport(&ep, local);
} else {
return NULL;
}
@@ -334,10 +336,11 @@ netsnmp_tcp6_create_tstring(const char *str, int local,
netsnmp_transport *
netsnmp_tcp6_create_ostring(const void *o, size_t o_len, int local)
{
- struct sockaddr_in6 sin6;
+ struct netsnmp_ep ep;
- if (netsnmp_ipv6_ostring_to_sockaddr(&sin6, o, o_len))
- return netsnmp_tcp6_transport(&sin6, local);
+ memset(&ep, 0, sizeof(ep));
+ if (netsnmp_ipv6_ostring_to_sockaddr(&ep.a.sin6, o, o_len))
+ return netsnmp_tcp6_transport(&ep, local);
return NULL;
}
diff --git a/snmplib/transports/snmpUDPDomain.c
b/snmplib/transports/snmpUDPDomain.c
index 779105b0f6ec..4ea942097aff 100644
--- a/snmplib/transports/snmpUDPDomain.c
+++ b/snmplib/transports/snmpUDPDomain.c
@@ -17,6 +17,7 @@
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/types.h>
+#include <net-snmp/library/snmpIPBaseDomain.h>
#include <net-snmp/library/snmpUDPDomain.h>
#include <net-snmp/library/snmpUDPIPv4BaseDomain.h>
@@ -157,11 +158,11 @@ netsnmp_udp_transport_base(netsnmp_transport *t)
* the remote address to send things to.
*/
netsnmp_transport *
-netsnmp_udp_transport(const struct sockaddr_in *addr, int local)
+netsnmp_udp_transport(const struct netsnmp_ep *ep, int local)
{
netsnmp_transport *t = NULL;
- t = netsnmp_udpipv4base_transport(addr, local);
+ t = netsnmp_udpipv4base_transport(ep, local);
if (NULL != t) {
netsnmp_udp_transport_base(t);
}
@@ -175,13 +176,13 @@ netsnmp_udp_transport(const struct sockaddr_in *addr, int
local)
* to send from.
*/
netsnmp_transport *
-netsnmp_udp_transport_with_source(const struct sockaddr_in *addr, int local,
- const struct sockaddr_in *src_addr)
+netsnmp_udp_transport_with_source(const struct netsnmp_ep *ep, int local,
+ const struct netsnmp_ep *src_addr)
{
netsnmp_transport *t = NULL;
- t = netsnmp_udpipv4base_transport_with_source(addr, local, src_addr);
+ t = netsnmp_udpipv4base_transport_with_source(ep, local, src_addr);
if (NULL != t) {
netsnmp_udp_transport_base(t);
}
@@ -606,9 +607,9 @@ netsnmp_transport *
netsnmp_udp_create_tstring(const char *str, int local,
const char *default_target)
{
- struct sockaddr_in addr;
+ struct netsnmp_ep addr;
- if (netsnmp_sockaddr_in2(&addr, str, default_target)) {
+ if (netsnmp_sockaddr_in3(&addr, str, default_target)) {
return netsnmp_udp_transport(&addr, local);
} else {
return NULL;
@@ -629,10 +630,11 @@ netsnmp_udp_create_tspec(netsnmp_tdomain_spec *tspec)
netsnmp_transport *
netsnmp_udp_create_ostring(const void *o, size_t o_len, int local)
{
- struct sockaddr_in sin;
+ struct netsnmp_ep ep;
- if (netsnmp_ipv4_ostring_to_sockaddr(&sin, o, o_len))
- return netsnmp_udp_transport(&sin, local);
+ memset(&ep, 0, sizeof(ep));
+ if (netsnmp_ipv4_ostring_to_sockaddr(&ep.a.sin, o, o_len))
+ return netsnmp_udp_transport(&ep, local);
return NULL;
}
diff --git a/snmplib/transports/snmpUDPIPv4BaseDomain.c
b/snmplib/transports/snmpUDPIPv4BaseDomain.c
index 433eb809bb91..7f8b68108d6d 100644
--- a/snmplib/transports/snmpUDPIPv4BaseDomain.c
+++ b/snmplib/transports/snmpUDPIPv4BaseDomain.c
@@ -13,6 +13,7 @@
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/types.h>
+#include <net-snmp/library/snmpIPBaseDomain.h>
#include <net-snmp/library/snmpUDPIPv4BaseDomain.h>
#include <stddef.h>
@@ -72,9 +73,10 @@ int netsnmp_udpipv4_sendto(int fd, const struct in_addr
*srcip, int if_index,
#endif /* HAVE_IP_PKTINFO || HAVE_IP_RECVDSTADDR */
netsnmp_transport *
-netsnmp_udpipv4base_transport_init(const struct sockaddr_in *addr, int local)
+netsnmp_udpipv4base_transport_init(const struct netsnmp_ep *ep, int local)
{
netsnmp_transport *t;
+ const struct sockaddr_in *addr = &ep->a.sin;
u_char *addr_ptr;
if (addr == NULL || addr->sin_family != AF_INET) {
@@ -152,8 +154,10 @@ netsnmp_udpipv4base_transport_socket(int flags)
int
netsnmp_udpipv4base_transport_bind(netsnmp_transport *t,
- const struct sockaddr_in *addr, int flags)
+ const struct netsnmp_ep *ep,
+ int flags)
{
+ const struct sockaddr_in *addr = &ep->a.sin;
#if defined(HAVE_IP_PKTINFO) || defined(HAVE_IP_RECVDSTADDR)
int sockopt = 1;
#endif
@@ -247,20 +251,20 @@
netsnmp_udpipv4base_transport_get_bound_addr(netsnmp_transport *t)
}
netsnmp_transport *
-netsnmp_udpipv4base_transport_with_source(const struct sockaddr_in *addr,
+netsnmp_udpipv4base_transport_with_source(const struct netsnmp_ep *ep,
int local,
- const struct sockaddr_in *src_addr)
+ const struct netsnmp_ep *src_addr)
{
netsnmp_transport *t = NULL;
- const struct sockaddr_in *bind_addr;
+ const struct netsnmp_ep *bind_addr;
int rc, flags = 0;
- t = netsnmp_udpipv4base_transport_init(addr, local);
+ t = netsnmp_udpipv4base_transport_init(ep, local);
if (NULL == t)
return NULL;
if (local) {
- bind_addr = addr;
+ bind_addr = ep;
flags |= NETSNMP_TSPEC_LOCAL;
#ifndef NETSNMP_NO_SYSTEMD
@@ -288,7 +292,7 @@ netsnmp_udpipv4base_transport_with_source(const struct
sockaddr_in *addr,
if (NULL == bind_addr)
return t;
- rc = netsnmp_udpipv4base_transport_bind(t, bind_addr, flags);
+ rc = netsnmp_udpipv4base_transport_bind(t, ep, flags);
if (rc) {
netsnmp_transport_free(t);
t = NULL;
@@ -302,7 +306,7 @@ netsnmp_udpipv4base_transport_with_source(const struct
sockaddr_in *addr,
netsnmp_transport *
netsnmp_udpipv4base_tspec_transport(netsnmp_tdomain_spec *tspec)
{
- struct sockaddr_in addr;
+ struct netsnmp_ep addr;
int local;
if (NULL == tspec)
@@ -311,15 +315,17 @@ netsnmp_udpipv4base_tspec_transport(netsnmp_tdomain_spec
*tspec)
local = tspec->flags & NETSNMP_TSPEC_LOCAL;
/** get address from target */
- if (!netsnmp_sockaddr_in2(&addr, tspec->target, tspec->default_target))
+ if (!netsnmp_sockaddr_in3(&addr, tspec->target, tspec->default_target))
return NULL;
if (NULL != tspec->source) {
- struct sockaddr_in src_addr, *srcp = &src_addr;
+ struct netsnmp_ep src_addr;
+
/** get sockaddr from source */
- if (!netsnmp_sockaddr_in2(&src_addr, tspec->source, NULL))
+ if (!netsnmp_sockaddr_in3(&src_addr, tspec->source, NULL))
return NULL;
- return netsnmp_udpipv4base_transport_with_source(&addr, local, srcp);
+ return netsnmp_udpipv4base_transport_with_source(&addr, local,
+ &src_addr);
} else {
/** if no source and we do not want any default client address */
if (tspec->flags & NETSNMP_TSPEC_NO_DFTL_CLIENT_ADDR)
@@ -332,7 +338,8 @@ netsnmp_udpipv4base_tspec_transport(netsnmp_tdomain_spec
*tspec)
}
netsnmp_transport *
-netsnmp_udpipv4base_transport(const struct sockaddr_in *addr, int local)
+netsnmp_udpipv4base_transport(const struct netsnmp_ep *ep,
+ int local)
{
if (!local) {
/*
@@ -344,7 +351,7 @@ netsnmp_udpipv4base_transport(const struct sockaddr_in
*addr, int local)
client_socket = netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID,
NETSNMP_DS_LIB_CLIENT_ADDR);
if (client_socket) {
- struct sockaddr_in client_addr;
+ struct netsnmp_ep client_addr;
char *client_address = NETSNMP_REMOVE_CONST(char *,client_socket);
int have_port, rc;
int uses_port =
@@ -364,16 +371,16 @@ netsnmp_udpipv4base_transport(const struct sockaddr_in
*addr, int local)
strcat(client_address, ":0");
have_port = 1;
}
- rc = netsnmp_sockaddr_in2(&client_addr, client_socket, NULL);
+ rc = netsnmp_sockaddr_in3(&client_addr, client_socket, NULL);
if (client_address != client_socket)
free(client_address);
if(rc) {
if (!uses_port || !have_port) /* if port isn't from string, */
- client_addr.sin_port = 0; /* ... clear it */
- return netsnmp_udpipv4base_transport_with_source(addr, local,
+ client_addr.a.sin.sin_port = 0; /* ... clear it */
+ return netsnmp_udpipv4base_transport_with_source(ep, local,
&client_addr);
}
}
}
- return netsnmp_udpipv4base_transport_with_source(addr, local, NULL);
+ return netsnmp_udpipv4base_transport_with_source(ep, local, NULL);
}
diff --git a/snmplib/transports/snmpUDPIPv6Domain.c
b/snmplib/transports/snmpUDPIPv6Domain.c
index 7a3b1db15c67..1f8c3765f21d 100644
--- a/snmplib/transports/snmpUDPIPv6Domain.c
+++ b/snmplib/transports/snmpUDPIPv6Domain.c
@@ -6,6 +6,7 @@
*/
#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/library/snmpIPBaseDomain.h>
#include <net-snmp/library/snmpUDPIPv6Domain.h>
#include <net-snmp/library/system.h>
@@ -191,8 +192,9 @@ netsnmp_udp6_send(netsnmp_transport *t, const void *buf,
int size,
*/
netsnmp_transport *
-netsnmp_udp6_transport_init(const struct sockaddr_in6 *addr, int flags)
+netsnmp_udp6_transport_init(const struct netsnmp_ep *ep, int flags)
{
+ const struct sockaddr_in6 *addr = &ep->a.sin6;
netsnmp_transport *t = NULL;
int local = flags & NETSNMP_TSPEC_LOCAL;
u_char *addr_ptr;
@@ -274,9 +276,10 @@ netsnmp_udp6_transport_init(const struct sockaddr_in6
*addr, int flags)
int
netsnmp_udp6_transport_bind(netsnmp_transport *t,
- const struct sockaddr_in6 *addr,
+ const struct netsnmp_ep *ep,
int flags)
{
+ const struct sockaddr_in6 *addr = &ep->a.sin6;
int local = flags & NETSNMP_TSPEC_LOCAL;
int rc = 0;
@@ -368,7 +371,7 @@ netsnmp_udp6_transport_get_bound_addr(netsnmp_transport *t)
netsnmp_transport *
netsnmp_udpipv6base_tspec_transport(netsnmp_tdomain_spec *tspec)
{
- struct sockaddr_in6 addr;
+ struct netsnmp_ep ep;
int local;
if (NULL == tspec)
@@ -377,40 +380,40 @@ netsnmp_udpipv6base_tspec_transport(netsnmp_tdomain_spec
*tspec)
local = tspec->flags & NETSNMP_TSPEC_LOCAL;
/** get address from target */
- if (!netsnmp_sockaddr_in6_2(&addr, tspec->target, tspec->default_target))
+ if (!netsnmp_sockaddr_in6_3(&ep, tspec->target, tspec->default_target))
return NULL;
if (NULL != tspec->source) {
- struct sockaddr_in6 src_addr, *srcp = &src_addr;
+ struct netsnmp_ep src_addr;
+
/** get sockaddr from source */
- if (!netsnmp_sockaddr_in6_2(&src_addr, tspec->source, NULL))
+ if (!netsnmp_sockaddr_in6_3(&src_addr, tspec->source, NULL))
return NULL;
- return netsnmp_udp6_transport_with_source(&addr, local, srcp);
+ return netsnmp_udp6_transport_with_source(&ep, local, &src_addr);
} else {
/** if no source and we do not want any default client address */
if (tspec->flags & NETSNMP_TSPEC_NO_DFTL_CLIENT_ADDR)
- return netsnmp_udp6_transport_with_source(&addr, local,
- NULL);
+ return netsnmp_udp6_transport_with_source(&ep, local, NULL);
}
/** no source and default client address ok */
- return netsnmp_udp6_transport(&addr, local);
+ return netsnmp_udp6_transport(&ep, local);
}
netsnmp_transport *
-netsnmp_udp6_transport_with_source(const struct sockaddr_in6 *addr, int local,
- const struct sockaddr_in6 *src_addr)
+netsnmp_udp6_transport_with_source(const struct netsnmp_ep *ep,
+ int local, const struct netsnmp_ep *src_addr)
{
netsnmp_transport *t = NULL;
- const struct sockaddr_in6 *bind_addr;
+ const struct netsnmp_ep *bind_addr;
int rc, flags = 0;
- t = netsnmp_udp6_transport_init(addr, local);
+ t = netsnmp_udp6_transport_init(ep, local);
if (NULL == t)
return NULL;
if (local) {
- bind_addr = addr;
+ bind_addr = ep;
flags |= NETSNMP_TSPEC_LOCAL;
#ifndef NETSNMP_NO_SYSTEMD
@@ -456,7 +459,7 @@ netsnmp_udp6_transport_with_source(const struct
sockaddr_in6 *addr, int local,
*/
netsnmp_transport *
-netsnmp_udp6_transport(const struct sockaddr_in6 *addr, int local)
+netsnmp_udp6_transport(const struct netsnmp_ep *ep, int local)
{
if (!local) {
const char *client_socket;
@@ -464,15 +467,14 @@ netsnmp_udp6_transport(const struct sockaddr_in6 *addr,
int local)
client_socket = netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID,
NETSNMP_DS_LIB_CLIENT_ADDR);
if (client_socket) {
- struct sockaddr_in6 client_addr;
+ struct netsnmp_ep client_addr;
- if (!netsnmp_sockaddr_in6_2(&client_addr, client_socket, NULL))
+ if (!netsnmp_sockaddr_in6_3(&client_addr, client_socket, NULL))
return NULL;
- return netsnmp_udp6_transport_with_source(addr, local,
- &client_addr);
+ return netsnmp_udp6_transport_with_source(ep, local, &client_addr);
}
}
- return netsnmp_udp6_transport_with_source(addr, local, NULL);
+ return netsnmp_udp6_transport_with_source(ep, local, NULL);
}
@@ -924,10 +926,10 @@ netsnmp_transport *
netsnmp_udp6_create_tstring(const char *str, int local,
const char *default_target)
{
- struct sockaddr_in6 addr;
+ struct netsnmp_ep ep;
- if (netsnmp_sockaddr_in6_2(&addr, str, default_target)) {
- return netsnmp_udp6_transport(&addr, local);
+ if (netsnmp_sockaddr_in6_3(&ep, str, default_target)) {
+ return netsnmp_udp6_transport(&ep, local);
} else {
return NULL;
}
@@ -954,10 +956,11 @@ netsnmp_udp6_create_tspec(netsnmp_tdomain_spec *tspec)
netsnmp_transport *
netsnmp_udp6_create_ostring(const void *o, size_t o_len, int local)
{
- struct sockaddr_in6 sin6;
+ struct netsnmp_ep ep;
- if (netsnmp_ipv6_ostring_to_sockaddr(&sin6, o, o_len))
- return netsnmp_udp6_transport(&sin6, local);
+ memset(&ep, 0, sizeof(ep));
+ if (netsnmp_ipv6_ostring_to_sockaddr(&ep.a.sin6, o, o_len))
+ return netsnmp_udp6_transport(&ep, local);
return NULL;
}
diff --git a/snmplib/transports/snmpUDPsharedDomain.c
b/snmplib/transports/snmpUDPsharedDomain.c
index dfc1c07018de..8169954211c0 100644
--- a/snmplib/transports/snmpUDPsharedDomain.c
+++ b/snmplib/transports/snmpUDPsharedDomain.c
@@ -9,6 +9,7 @@
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/types.h>
+#include <net-snmp/library/snmpIPBaseDomain.h>
#include <net-snmp/library/snmpUDPsharedDomain.h>
#include <stddef.h>
@@ -189,11 +190,11 @@ _transport_common(netsnmp_transport *t)
}
netsnmp_transport *
-netsnmp_udpshared_transport(const struct sockaddr_in *addr, int local)
+netsnmp_udpshared_transport(const struct netsnmp_ep *ep, int local)
{
netsnmp_transport *t = NULL;
- t = netsnmp_udp_transport(addr, local);
+ t = netsnmp_udp_transport(ep, local);
if (NULL == t)
return NULL;
@@ -203,9 +204,9 @@ netsnmp_udpshared_transport(const struct sockaddr_in *addr,
int local)
}
netsnmp_transport *
-netsnmp_udpshared_transport_with_source(const struct sockaddr_in *addr,
+netsnmp_udpshared_transport_with_source(const struct netsnmp_ep *ep,
int flags,
- const struct sockaddr_in *src_addr)
+ const struct netsnmp_ep *src_addr)
{
netsnmp_transport *t = NULL, *b = NULL;
int local = flags & NETSNMP_TSPEC_LOCAL;
@@ -213,7 +214,7 @@ netsnmp_udpshared_transport_with_source(const struct
sockaddr_in *addr,
DEBUGMSGTL(("udpshared:create", "from addr with source\n"));
/** init common parts of parent transport */
- t = netsnmp_udpipv4base_transport_init(addr, local);
+ t = netsnmp_udpipv4base_transport_init(ep, local);
if (NULL == t)
return NULL;
@@ -237,7 +238,7 @@ netsnmp_udpshared_transport_with_source(const struct
sockaddr_in *addr,
/** if no base transport found, create one */
if (NULL == b) {
- b = netsnmp_udp_transport_with_source(addr, local, src_addr);
+ b = netsnmp_udp_transport_with_source(ep, local, src_addr);
if (NULL == b) {
netsnmp_transport_free(t);
return NULL;
@@ -271,11 +272,11 @@ netsnmp_udpshared_transport_with_source(const struct
sockaddr_in *addr,
* the remote address to send things to.
*/
netsnmp_transport *
-netsnmp_udpshared6_transport(const struct sockaddr_in6 *addr, int local)
+netsnmp_udpshared6_transport(const struct netsnmp_ep *ep, int local)
{
netsnmp_transport *t = NULL;
- t = netsnmp_udp6_transport(addr, local);
+ t = netsnmp_udp6_transport(ep, local);
if (NULL != t)
t = _transport_common(t);
@@ -283,9 +284,9 @@ netsnmp_udpshared6_transport(const struct sockaddr_in6
*addr, int local)
}
netsnmp_transport *
-netsnmp_udpshared6_transport_with_source(const struct sockaddr_in6 *addr6,
+netsnmp_udpshared6_transport_with_source(const struct netsnmp_ep *ep,
int flags,
- const struct sockaddr_in6 *src_addr6)
+ const struct netsnmp_ep *src_addr6)
{
netsnmp_transport *t = NULL, *b = NULL;
int local = flags & NETSNMP_TSPEC_LOCAL;
@@ -293,7 +294,7 @@ netsnmp_udpshared6_transport_with_source(const struct
sockaddr_in6 *addr6,
DEBUGMSGTL(("udpshared:create", "from addr6 with source\n"));
/** init common parts of parent transport */
- t = netsnmp_udp6_transport_init(addr6, local);
+ t = netsnmp_udp6_transport_init(ep, local);
if (NULL == t)
return NULL;
@@ -317,7 +318,7 @@ netsnmp_udpshared6_transport_with_source(const struct
sockaddr_in6 *addr6,
/** if no base transport found, create one */
if (NULL == b) {
- b = netsnmp_udp6_transport_with_source(addr6, local, src_addr6);
+ b = netsnmp_udp6_transport_with_source(ep, local, src_addr6);
if (NULL == b) {
netsnmp_transport_free(t);
return NULL;
@@ -346,16 +347,16 @@ netsnmp_udpshared6_transport_with_source(const struct
sockaddr_in6 *addr6,
netsnmp_transport *
netsnmp_udpshared_create_ostring(const void *o, size_t o_len, int local)
{
- struct sockaddr_in sin;
- struct sockaddr_in6 sin6;
+ struct netsnmp_ep ep;
DEBUGMSGTL(("udpshared:create", "from ostring\n"));
- if (netsnmp_ipv4_ostring_to_sockaddr(&sin, o, o_len))
- return netsnmp_udpshared_transport(&sin, local);
+ memset(&ep, 0, sizeof(ep));
+ if (netsnmp_ipv4_ostring_to_sockaddr(&ep.a.sin, o, o_len))
+ return netsnmp_udpshared_transport(&ep, local);
#ifdef NETSNMP_TRANSPORT_UDPIPV6_DOMAIN
- else if (netsnmp_ipv6_ostring_to_sockaddr(&sin6, o, o_len))
- return netsnmp_udpshared6_transport(&sin6, local);
+ else if (netsnmp_ipv6_ostring_to_sockaddr(&ep.a.sin6, o, o_len))
+ return netsnmp_udpshared6_transport(&ep, local);
#endif
return NULL;
}
@@ -364,19 +365,16 @@ netsnmp_transport *
netsnmp_udpshared_create_tstring(const char *str, int isserver,
const char *default_target)
{
-#ifdef NETSNMP_TRANSPORT_UDPIPV6_DOMAIN
- struct sockaddr_in6 addr6;
-#endif
- struct sockaddr_in addr;
+ struct netsnmp_ep ep;
netsnmp_transport *t;
DEBUGMSGTL(("udpshared:create", "from tstring %s\n", str));
- if (netsnmp_sockaddr_in2(&addr, str, default_target))
- t = netsnmp_udpshared_transport(&addr, isserver);
+ if (netsnmp_sockaddr_in3(&ep, str, default_target))
+ t = netsnmp_udpshared_transport(&ep, isserver);
#ifdef NETSNMP_TRANSPORT_UDPIPV6_DOMAIN
- else if (netsnmp_sockaddr_in6_2(&addr6, str, default_target))
- t = netsnmp_udpshared6_transport(&addr6, isserver);
+ else if (netsnmp_sockaddr_in6_3(&ep, str, default_target))
+ t = netsnmp_udpshared6_transport(&ep, isserver);
#endif
else
return NULL;
@@ -385,68 +383,66 @@ netsnmp_udpshared_create_tstring(const char *str, int
isserver,
}
static netsnmp_transport *
-_tspec_v4(struct sockaddr_in *addr, netsnmp_tdomain_spec *tspec)
+_tspec_v4(const struct netsnmp_ep *ep, netsnmp_tdomain_spec *tspec)
{
int local = tspec->flags & NETSNMP_TSPEC_LOCAL;
if (NULL != tspec->source) {
- struct sockaddr_in src_addr, *srcp = &src_addr;
+ struct netsnmp_ep src_addr;
+
/** get sockaddr from source */
- if (!netsnmp_sockaddr_in2(&src_addr, tspec->source, NULL))
+ if (!netsnmp_sockaddr_in3(&src_addr, tspec->source, NULL))
return NULL;
- return netsnmp_udpshared_transport_with_source(addr, local, srcp);
+ return netsnmp_udpshared_transport_with_source(ep, local, &src_addr);
} else {
/** if no source and we do not want any default client address */
if (tspec->flags & NETSNMP_TSPEC_NO_DFTL_CLIENT_ADDR)
- return netsnmp_udpshared_transport_with_source(addr, local, NULL);
+ return netsnmp_udpshared_transport_with_source(ep, local, NULL);
}
/** no source and default client address ok */
- return netsnmp_udpshared_transport(addr, local);
+ return netsnmp_udpshared_transport(ep, local);
}
#ifdef NETSNMP_TRANSPORT_UDPIPV6_DOMAIN
static netsnmp_transport *
-_tspec_v6(struct sockaddr_in6 *addr, netsnmp_tdomain_spec *tspec)
+_tspec_v6(const struct netsnmp_ep *ep, netsnmp_tdomain_spec *tspec)
{
int local = tspec->flags & NETSNMP_TSPEC_LOCAL;
if (NULL != tspec->source) {
- struct sockaddr_in6 src_addr, *srcp = &src_addr;
+ struct netsnmp_ep src_addr;
+
/** get sockaddr from source */
- if (!netsnmp_sockaddr_in6_2(&src_addr, tspec->source, NULL))
+ if (!netsnmp_sockaddr_in6_3(&src_addr, tspec->source, NULL))
return NULL;
- return netsnmp_udpshared6_transport_with_source(addr, local, srcp);
+ return netsnmp_udpshared6_transport_with_source(ep, local, &src_addr);
} else {
/** if no source and we do not want any default client address */
if (tspec->flags & NETSNMP_TSPEC_NO_DFTL_CLIENT_ADDR)
- return netsnmp_udpshared6_transport_with_source(addr, local, NULL);
+ return netsnmp_udpshared6_transport_with_source(ep, local, NULL);
}
/** no source and default client address ok */
- return netsnmp_udpshared6_transport(addr, local);
+ return netsnmp_udpshared6_transport(ep, local);
}
#endif /* NETSNMP_TRANSPORT_UDPIPV6_DOMAIN */
netsnmp_transport *
netsnmp_udpshared_create_tspec(netsnmp_tdomain_spec *tspec)
{
-#ifdef NETSNMP_TRANSPORT_UDPIPV6_DOMAIN
- struct sockaddr_in6 addr6;
-#endif
- struct sockaddr_in addr;
+ struct netsnmp_ep ep;
DEBUGMSGTL(("udpshared:create", "from tspec\n"));
if (NULL == tspec)
return NULL;
- if (netsnmp_sockaddr_in2(&addr, tspec->target, tspec->default_target))
- return _tspec_v4(&addr, tspec);
+ if (netsnmp_sockaddr_in3(&ep, tspec->target, tspec->default_target))
+ return _tspec_v4(&ep, tspec);
#ifdef NETSNMP_TRANSPORT_UDPIPV6_DOMAIN
- else if (netsnmp_sockaddr_in6_2(&addr6, tspec->target,
- tspec->default_target))
- return _tspec_v6(&addr6, tspec);
+ else if (netsnmp_sockaddr_in6_3(&ep, tspec->target, tspec->default_target))
+ return _tspec_v6(&ep, tspec);
#endif
return NULL;
--
2.19.1
_______________________________________________
Net-snmp-coders mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders