getpeer
authorSam Leffler <sam@ucbvax.Berkeley.EDU>
Tue, 26 Jul 1983 12:55:51 +0000 (04:55 -0800)
committerSam Leffler <sam@ucbvax.Berkeley.EDU>
Tue, 26 Jul 1983 12:55:51 +0000 (04:55 -0800)
SCCS-vsn: sys/sys/protosw.h 4.18
SCCS-vsn: sys/kern/uipc_syscalls.c 4.48
SCCS-vsn: sys/kern/uipc_usrreq.c 1.16
SCCS-vsn: sys/net/raw_usrreq.c 4.31
SCCS-vsn: sys/netinet/in_pcb.c 4.41
SCCS-vsn: sys/netinet/tcp_usrreq.c 1.81
SCCS-vsn: sys/netinet/udp_usrreq.c 4.51

usr/src/sys/kern/uipc_syscalls.c
usr/src/sys/kern/uipc_usrreq.c
usr/src/sys/net/raw_usrreq.c
usr/src/sys/netinet/in_pcb.c
usr/src/sys/netinet/tcp_usrreq.c
usr/src/sys/netinet/udp_usrreq.c
usr/src/sys/sys/protosw.h

index 2dac5ba..a76b4a1 100644 (file)
@@ -1,4 +1,4 @@
-/*     uipc_syscalls.c 4.47    83/06/14        */
+/*     uipc_syscalls.c 4.48    83/07/25        */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -737,6 +737,50 @@ bad:
        m_freem(m);
 }
 
        m_freem(m);
 }
 
+/*
+ * Get name of peer for connected socket.
+ */
+getpeername()
+{
+       register struct a {
+               int     fdes;
+               caddr_t asa;
+               int     *alen;
+       } *uap = (struct a *)u.u_ap;
+       register struct file *fp;
+       register struct socket *so;
+       struct mbuf *m;
+       int len;
+
+       fp = getsock(uap->fdes);
+       if (fp == 0)
+               return;
+       so = (struct socket *)fp->f_data;
+       if ((so->so_state & SS_ISCONNECTED) == 0) {
+               u.u_error = ENOTCONN;
+               return;
+       }
+       m = m_getclr(M_WAIT, MT_SONAME);
+       if (m == NULL) {
+               u.u_error = ENOBUFS;
+               return;
+       }
+       u.u_error = copyin((caddr_t)uap->alen, (caddr_t)&len, sizeof (len));
+       if (u.u_error)
+               return;
+       u.u_error = (*so->so_proto->pr_usrreq)(so, PRU_PEERADDR, 0, m, 0);
+       if (u.u_error)
+               goto bad;
+       if (len > m->m_len)
+               len = m->m_len;
+       u.u_error = copyout(mtod(m, caddr_t), (caddr_t)uap->asa, (u_int)len);
+       if (u.u_error)
+               goto bad;
+       u.u_error = copyout((caddr_t)&len, (caddr_t)uap->alen, sizeof (len));
+bad:
+       m_freem(m);
+}
+
 sockargs(aname, name, namelen)
        struct mbuf **aname;
        caddr_t name;
 sockargs(aname, name, namelen)
        struct mbuf **aname;
        caddr_t name;
index 966f348..ba6d847 100644 (file)
@@ -1,4 +1,4 @@
-/*     uipc_usrreq.c   1.15    83/07/21        */
+/*     uipc_usrreq.c   1.16    83/07/25        */
 
 #include "../h/param.h"
 #include "../h/dir.h"
 
 #include "../h/param.h"
 #include "../h/dir.h"
@@ -212,6 +212,9 @@ uipc_usrreq(so, req, m, nam, rights)
        case PRU_SOCKADDR:
                break;
 
        case PRU_SOCKADDR:
                break;
 
+       case PRU_PEERADDR:
+               break;
+
        case PRU_SLOWTIMO:
                break;
 
        case PRU_SLOWTIMO:
                break;
 
index 8a27105..22c5462 100644 (file)
@@ -1,4 +1,4 @@
-/*     raw_usrreq.c    4.30    83/06/30        */
+/*     raw_usrreq.c    4.31    83/07/25        */
 
 #include "../h/param.h"
 #include "../h/mbuf.h"
 
 #include "../h/param.h"
 #include "../h/mbuf.h"
@@ -304,6 +304,12 @@ raw_usrreq(so, req, m, nam, rights)
                nam->m_len = sizeof (struct sockaddr);
                break;
 
                nam->m_len = sizeof (struct sockaddr);
                break;
 
+       case PRU_PEERADDR:
+               bcopy((caddr_t)&rp->rcb_faddr, mtod(nam, caddr_t),
+                   sizeof (struct sockaddr));
+               nam->m_len = sizeof (struct sockaddr);
+               break;
+
        default:
                panic("raw_usrreq");
        }
        default:
                panic("raw_usrreq");
        }
index 3bdd1a0..d02a20e 100644 (file)
@@ -1,4 +1,4 @@
-/*     in_pcb.c        4.40    83/01/22        */
+/*     in_pcb.c        4.41    83/07/25        */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -176,6 +176,20 @@ in_setsockaddr(inp, nam)
        sin->sin_addr = inp->inp_laddr;
 }
 
        sin->sin_addr = inp->inp_laddr;
 }
 
+in_setpeeraddr(inp, nam)
+       register struct inpcb *inp;
+       struct mbuf *nam;
+{
+       register struct sockaddr_in *sin = mtod(nam, struct sockaddr_in *);
+       
+       nam->m_len = sizeof (*sin);
+       sin = mtod(nam, struct sockaddr_in *);
+       bzero((caddr_t)sin, sizeof (*sin));
+       sin->sin_family = AF_INET;
+       sin->sin_port = inp->inp_fport;
+       sin->sin_addr = inp->inp_faddr;
+}
+
 /*
  * Pass an error to all internet connections
  * associated with address sin.  Call the
 /*
  * Pass an error to all internet connections
  * associated with address sin.  Call the
index 9a50528..51a7a44 100644 (file)
@@ -1,4 +1,4 @@
-/*     tcp_usrreq.c    1.80    83/06/20        */
+/*     tcp_usrreq.c    1.81    83/07/25        */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -272,6 +272,10 @@ tcp_usrreq(so, req, m, nam, rights)
                in_setsockaddr(inp, nam);
                break;
 
                in_setsockaddr(inp, nam);
                break;
 
+       case PRU_PEERADDR:
+               in_setpeeraddr(inp, nam);
+               break;
+
        /*
         * TCP slow timer went off; going through this
         * routine for tracing's sake.
        /*
         * TCP slow timer went off; going through this
         * routine for tracing's sake.
index 3995898..11457dc 100644 (file)
@@ -1,4 +1,4 @@
-/*     udp_usrreq.c    4.50    83/06/14        */
+/*     udp_usrreq.c    4.51    83/07/25        */
 
 #include "../h/param.h"
 #include "../h/dir.h"
 
 #include "../h/param.h"
 #include "../h/dir.h"
@@ -320,6 +320,10 @@ udp_usrreq(so, req, m, nam, rights)
                in_setsockaddr(inp, nam);
                break;
 
                in_setsockaddr(inp, nam);
                break;
 
+       case PRU_PEERADDR:
+               in_setpeeraddr(inp, nam);
+               break;
+
        case PRU_CONTROL:
                m = NULL;
                error = EOPNOTSUPP;
        case PRU_CONTROL:
                m = NULL;
                error = EOPNOTSUPP;
index db41f21..77059b5 100644 (file)
@@ -1,4 +1,4 @@
-/*     protosw.h       4.17    83/07/20        */
+/*     protosw.h       4.18    83/07/25        */
 
 /*
  * Protocol switch table.
 
 /*
  * Protocol switch table.
@@ -82,14 +82,15 @@ struct protosw {
 #define        PRU_RCVOOB              13      /* retrieve out of band data */
 #define        PRU_SENDOOB             14      /* send out of band data */
 #define        PRU_SOCKADDR            15      /* fetch socket's address */
 #define        PRU_RCVOOB              13      /* retrieve out of band data */
 #define        PRU_SENDOOB             14      /* send out of band data */
 #define        PRU_SOCKADDR            15      /* fetch socket's address */
-#define        PRU_CONNECT2            16      /* connect two sockets */
+#define        PRU_PEERADDR            16      /* fetch peer's address */
+#define        PRU_CONNECT2            17      /* connect two sockets */
 /* begin for protocols internal use */
 /* begin for protocols internal use */
-#define        PRU_FASTTIMO            17      /* 200ms timeout */
-#define        PRU_SLOWTIMO            18      /* 500ms timeout */
-#define        PRU_PROTORCV            19      /* receive from below */
-#define        PRU_PROTOSEND           20      /* send to below */
+#define        PRU_FASTTIMO            18      /* 200ms timeout */
+#define        PRU_SLOWTIMO            19      /* 500ms timeout */
+#define        PRU_PROTORCV            20      /* receive from below */
+#define        PRU_PROTOSEND           21      /* send to below */
 
 
-#define        PRU_NREQ                20
+#define        PRU_NREQ                21
 
 #ifdef PRUREQUESTS
 char *prurequests[] = {
 
 #ifdef PRUREQUESTS
 char *prurequests[] = {
@@ -97,8 +98,8 @@ char *prurequests[] = {
        "CONNECT",      "ACCEPT",       "DISCONNECT",   "SHUTDOWN",
        "RCVD",         "SEND",         "ABORT",        "CONTROL",
        "SENSE",        "RCVOOB",       "SENDOOB",      "SOCKADDR",
        "CONNECT",      "ACCEPT",       "DISCONNECT",   "SHUTDOWN",
        "RCVD",         "SEND",         "ABORT",        "CONTROL",
        "SENSE",        "RCVOOB",       "SENDOOB",      "SOCKADDR",
-       "CONNECT2",     "FASTTIMO",     "SLOWTIMO",     "PROTORCV",
-       "PROTOSEND",
+       "PEERADDR",     "CONNECT2",     "FASTTIMO",     "SLOWTIMO",
+       "PROTORCV",     "PROTOSEND",
 };
 #endif
 
 };
 #endif