socsvn commit: r272123 - soc2014/shonali/head/contrib/bsnmp/snmpd

shonali at FreeBSD.org shonali at FreeBSD.org
Sat Aug 9 13:53:17 UTC 2014


Author: shonali
Date: Sat Aug  9 13:53:15 2014
New Revision: 272123
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=272123

Log:
  Moved the recv_stream function from main.c to trans_lsock.c
  
  

Modified:
  soc2014/shonali/head/contrib/bsnmp/snmpd/main.c
  soc2014/shonali/head/contrib/bsnmp/snmpd/trans_lsock.c

Modified: soc2014/shonali/head/contrib/bsnmp/snmpd/main.c
==============================================================================
--- soc2014/shonali/head/contrib/bsnmp/snmpd/main.c	Sat Aug  9 12:25:06 2014	(r272122)
+++ soc2014/shonali/head/contrib/bsnmp/snmpd/main.c	Sat Aug  9 13:53:15 2014	(r272123)
@@ -1056,54 +1056,6 @@
 }
 
 /*
- * Input from a stream socket.
- */
-static int
-recv_stream(struct port_input *pi)
-{
-	struct msghdr msg;
-	struct iovec iov[1];
-	ssize_t len;
-
-	if (pi->buf == NULL) {
-		/* no buffer yet - allocate one */
-		if ((pi->buf = buf_alloc(0)) == NULL) {
-			/* ups - could not get buffer. Return an error
-			 * the caller must close the transport. */
-			return (-1);
-		}
-		pi->buflen = buf_size(0);
-		pi->consumed = 0;
-		pi->length = 0;
-	}
-
-	/* try to get a message */
-	msg.msg_name = pi->peer;
-	msg.msg_namelen = pi->peerlen;
-	msg.msg_iov = iov;
-	msg.msg_iovlen = 1;
-	msg.msg_control = NULL;
-	msg.msg_controllen = 0;
-	msg.msg_flags = 0;
-
-	iov[0].iov_base = pi->buf + pi->length;
-	iov[0].iov_len = pi->buflen - pi->length;
-
-	len = recvmsg(pi->fd, &msg, 0);
-
-	if (len == -1 || len == 0)
-		/* receive error */
-		return (-1);
-
-	pi->length += len;
-
-	if (pi->cred)
-		check_priv_stream(pi);
-
-	return (0);
-}
-
-/*
  * Input from a socket
  */
 int
@@ -1122,15 +1074,7 @@
 #endif
 	struct iovec iov[1];
 
-	/* get input depending on the transport */
-	if (pi->stream) {
-		msg.msg_control = NULL;
-		msg.msg_controllen = 0;
-
-		ret = recv_stream(pi);
-	} else {
-                ret = tport->transport->vtab->recv(tp, pi);
-	}
+	ret = tport->transport->vtab->recv(tport, pi);
 
 	if (ret == -1)
 		return (-1);

Modified: soc2014/shonali/head/contrib/bsnmp/snmpd/trans_lsock.c
==============================================================================
--- soc2014/shonali/head/contrib/bsnmp/snmpd/trans_lsock.c	Sat Aug  9 12:25:06 2014	(r272122)
+++ soc2014/shonali/head/contrib/bsnmp/snmpd/trans_lsock.c	Sat Aug  9 13:53:15 2014	(r272123)
@@ -59,7 +59,6 @@
 static ssize_t lsock_send(struct tport *, const u_char *, size_t,
     const struct sockaddr *, size_t);
 static ssize_t lsock_recv(struct tport *, struct port_input *);
-static int recv_dgram(struct port_input *, struct in_addr *);
 
 /* exported */
 const struct transport_def lsock_trans = {
@@ -430,58 +429,20 @@
 static ssize_t
 lsock_recv(struct tport *tp, struct port_input *pi)
 {
-    struct in_addr *laddr;
-    int ret;
-    struct msghdr msg;
-    char cbuf[CMSG_SPACE(sizeof(struct in_addr))];
-    struct cmsghdr *cmsgp;
-
-    memset(cbuf, 0, CMSG_SPACE(sizeof(struct in_addr)));
-    msg.msg_control = cbuf;
-    msg.msg_controllen = CMSG_SPACE(sizeof(struct in_addr));
-    cmsgp = CMSG_FIRSTHDR(&msg);
-    cmsgp->cmsg_len = CMSG_LEN(sizeof(struct in_addr));
-    cmsgp->cmsg_level = IPPROTO_IP;
-    cmsgp->cmsg_type = IP_SENDSRCADDR;
-    laddr = (struct in_addr *)CMSG_DATA(cmsgp);
-
-    ret = recv_dgram(pi, laddr);
-
-    if (laddr->s_addr == 0) {
-        msg.msg_control = NULL;
-        msg.msg_controllen = 0;
-    }
-
-    return (ret);
-}
-
-/*
- * Input from a datagram socket.
- * Each receive should return one datagram.
- */
-static int
-recv_dgram(struct port_input *pi, struct in_addr *laddr)
-{
-        u_char embuf[1000];
-        char cbuf[CMSG_SPACE(SOCKCREDSIZE(CMGROUP_MAX)) +
-        CMSG_SPACE(sizeof(struct in_addr))];
         struct msghdr msg;
         struct iovec iov[1];
         ssize_t len;
-        struct cmsghdr *cmsg;
-        struct sockcred *cred = NULL;
 
         if (pi->buf == NULL) {
                 /* no buffer yet - allocate one */
                 if ((pi->buf = buf_alloc(0)) == NULL) {
-                        /* ups - could not get buffer. Read away input
-                         * and drop it */
-                        (void)recvfrom(pi->fd, embuf, sizeof(embuf),
-                            0, NULL, NULL);
-                        /* return error */
+                        /* ups - could not get buffer. Return an error
+                         * the caller must close the transport. */
                         return (-1);
                 }
                 pi->buflen = buf_size(0);
+                pi->consumed = 0;
+                pi->length = 0;
         }
 
         /* try to get a message */
@@ -489,13 +450,12 @@
         msg.msg_namelen = pi->peerlen;
         msg.msg_iov = iov;
         msg.msg_iovlen = 1;
-        memset(cbuf, 0, sizeof(cbuf));
-        msg.msg_control = cbuf;
-        msg.msg_controllen = sizeof(cbuf);
+        msg.msg_control = NULL;
+        msg.msg_controllen = 0;
         msg.msg_flags = 0;
 
-        iov[0].iov_base = pi->buf;
-        iov[0].iov_len = pi->buflen;
+        iov[0].iov_base = pi->buf + pi->length;
+        iov[0].iov_len = pi->buflen - pi->length;
 
         len = recvmsg(pi->fd, &msg, 0);
 
@@ -503,27 +463,10 @@
                 /* receive error */
                 return (-1);
 
-        if (msg.msg_flags & MSG_TRUNC) {
-                /* truncated - drop */
-                snmpd_stats.silentDrops++;
-                snmpd_stats.inTooLong++;
-                return (-1);
-        }
-
-        pi->length = (size_t)len;
-
-        for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL;
-            cmsg = CMSG_NXTHDR(&msg, cmsg)) {
-                if (cmsg->cmsg_level == IPPROTO_IP &&
-                    cmsg->cmsg_type == IP_RECVDSTADDR)
-                        memcpy(laddr, CMSG_DATA(cmsg), sizeof(struct in_addr));
-                if (cmsg->cmsg_level == SOL_SOCKET &&
-                    cmsg->cmsg_type == SCM_CREDS)
-                        cred = (struct sockcred *)CMSG_DATA(cmsg);
-        }
+        pi->length += len;
 
         if (pi->cred)
-                check_priv_dgram(pi, cred);
+                check_priv_stream(pi);
 
         return (0);
 }


More information about the svn-soc-all mailing list