Page MenuHomeFreeBSD

D51360.id159141.diff
No OneTemporary

D51360.id159141.diff

diff --git a/contrib/bsnmp/snmpd/main.c b/contrib/bsnmp/snmpd/main.c
--- a/contrib/bsnmp/snmpd/main.c
+++ b/contrib/bsnmp/snmpd/main.c
@@ -1186,12 +1186,7 @@
sndbuf, &sndlen, "SNMP", ierr, vi, NULL);
if (ferr == SNMPD_INPUT_OK) {
- if (tport->transport->vtab->send != NULL)
- slen = tport->transport->vtab->send(tport, sndbuf,
- sndlen, pi->peer, pi->peerlen);
- else
- slen = tport->transport->vtab->send2(tport, sndbuf,
- sndlen, pi);
+ slen = tport->transport->vtab->send(tport, sndbuf, sndlen, pi);
if (slen == -1)
syslog(LOG_ERR, "send*: %m");
else if ((size_t)slen != sndlen)
@@ -1214,6 +1209,11 @@
snmp_send_port(void *targ, const struct asn_oid *port, struct snmp_pdu *pdu,
const struct sockaddr *addr, socklen_t addrlen)
{
+ struct port_input pi = {
+ .fd = -1,
+ .peer = __DECONST(struct sockaddr *, addr),
+ .peerlen = addrlen,
+ };
struct transport *trans = targ;
struct tport *tp;
u_char *sndbuf;
@@ -1231,10 +1231,7 @@
snmp_output(pdu, sndbuf, &sndlen, "SNMP PROXY");
- if (trans->vtab->send != NULL)
- len = trans->vtab->send(tp, sndbuf, sndlen, addr, addrlen);
- else
- len = trans->vtab->send2(tp, sndbuf, sndlen, NULL);
+ len = trans->vtab->send(tp, sndbuf, sndlen, &pi);
if (len == -1)
syslog(LOG_ERR, "sendto: %m");
diff --git a/contrib/bsnmp/snmpd/snmpd.h b/contrib/bsnmp/snmpd/snmpd.h
--- a/contrib/bsnmp/snmpd/snmpd.h
+++ b/contrib/bsnmp/snmpd/snmpd.h
@@ -192,12 +192,8 @@
int (*init_port)(struct tport *);
ssize_t (*send)(struct tport *, const u_char *, size_t,
- const struct sockaddr *, size_t);
- ssize_t (*recv)(struct tport *, struct port_input *);
-
- /** send via a multi-socket port */
- ssize_t (*send2)(struct tport *, const u_char *, size_t,
struct port_input *);
+ ssize_t (*recv)(struct tport *, struct port_input *);
};
struct transport {
struct asn_oid index; /* transport table index */
diff --git a/contrib/bsnmp/snmpd/trans_inet.c b/contrib/bsnmp/snmpd/trans_inet.c
--- a/contrib/bsnmp/snmpd/trans_inet.c
+++ b/contrib/bsnmp/snmpd/trans_inet.c
@@ -375,17 +375,16 @@
* \param tp port
* \param buf data to send
* \param len number of bytes to send
- * \param addr destination address
- * \param addlen destination address length
+ * \param pi destination
*
* \return number of bytes sent
*/
static ssize_t
-inet_send2(struct tport *tp, const u_char *buf, size_t len,
+inet_send(struct tport *tp, const u_char *buf, size_t len,
struct port_input *pi)
{
struct inet_port *p = __containerof(tp, struct inet_port, tport);
- struct port_sock *s = (pi == NULL) ? TAILQ_FIRST(&p->socks) :
+ struct port_sock *s = (pi->fd == -1) ? TAILQ_FIRST(&p->socks) :
__containerof(pi, struct port_sock, input);
struct iovec iov;
@@ -421,7 +420,7 @@
.close_port = inet_destroy_port,
.init_port = inet_activate,
.recv = inet_recv,
- .send2 = inet_send2,
+ .send = inet_send,
};
struct inet_port_params {
diff --git a/contrib/bsnmp/snmpd/trans_lsock.c b/contrib/bsnmp/snmpd/trans_lsock.c
--- a/contrib/bsnmp/snmpd/trans_lsock.c
+++ b/contrib/bsnmp/snmpd/trans_lsock.c
@@ -58,7 +58,7 @@
static void lsock_close_port(struct tport *);
static int lsock_init_port(struct tport *);
static ssize_t lsock_send(struct tport *, const u_char *, size_t,
- const struct sockaddr *, size_t);
+ struct port_input *);
static ssize_t lsock_recv(struct tport *, struct port_input *);
/* exported */
@@ -396,9 +396,9 @@
*/
static ssize_t
lsock_send(struct tport *tp, const u_char *buf, size_t len,
- const struct sockaddr *addr, size_t addrlen)
+ struct port_input *pi)
{
- struct lsock_port *p = (struct lsock_port *)tp;
+ struct lsock_port *p = __containerof(tp, struct lsock_port, tport);
struct lsock_peer *peer;
if (p->type == LOCP_DGRAM_PRIV || p->type == LOCP_DGRAM_UNPRIV) {
@@ -407,8 +407,8 @@
} else {
/* search for the peer */
LIST_FOREACH(peer, &p->peers, link)
- if (peer->input.peerlen == addrlen &&
- memcmp(peer->input.peer, addr, addrlen) == 0)
+ if (peer->input.peerlen == pi->peerlen &&
+ memcmp(peer->input.peer, pi->peer, pi->peerlen) == 0)
break;
if (peer == NULL) {
errno = ENOTCONN;
@@ -416,7 +416,8 @@
}
}
- return (sendto(peer->input.fd, buf, len, MSG_NOSIGNAL, addr, addrlen));
+ return (sendto(peer->input.fd, buf, len, MSG_NOSIGNAL, pi->peer,
+ pi->peerlen));
}
static void

File Metadata

Mime Type
text/plain
Expires
Tue, Mar 17, 4:24 AM (18 h, 55 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29807525
Default Alt Text
D51360.id159141.diff (4 KB)

Event Timeline