Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F148160305
D51360.id159141.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D51360.id159141.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D51360: bsnmpd: merge send and send2 methods for transports
Attached
Detach File
Event Timeline
Log In to Comment