delete OURFINNOTACKED
[unix-history] / usr / src / sys / netinet / udp_usrreq.c
index 318dbb1..3df037f 100644 (file)
@@ -1,16 +1,15 @@
-/*     udp_usrreq.c    4.9     81/11/23        */
+/*     udp_usrreq.c    4.17    81/12/12        */
 
 #include "../h/param.h"
 #include "../h/dir.h"
 #include "../h/user.h"
 #include "../h/mbuf.h"
 
 #include "../h/param.h"
 #include "../h/dir.h"
 #include "../h/user.h"
 #include "../h/mbuf.h"
-#define        PRUREQUESTS
 #include "../h/protosw.h"
 #include "../h/socket.h"
 #include "../h/socketvar.h"
 #include "../h/protosw.h"
 #include "../h/socket.h"
 #include "../h/socketvar.h"
-#include "../net/inet.h"
-#include "../net/inet_pcb.h"
-#include "../net/inet_systm.h"
+#include "../net/in.h"
+#include "../net/in_pcb.h"
+#include "../net/in_systm.h"
 #include "../net/ip.h"
 #include "../net/ip_var.h"
 #include "../net/udp.h"
 #include "../net/ip.h"
 #include "../net/ip_var.h"
 #include "../net/udp.h"
@@ -23,6 +22,7 @@
 udp_init()
 {
 
 udp_init()
 {
 
+COUNT(UDP_INIT);
        udb.inp_next = udb.inp_prev = &udb;
 }
 
        udb.inp_next = udb.inp_prev = &udb;
 }
 
@@ -37,8 +37,9 @@ udp_input(m0)
        register struct mbuf *m;
        int len, ulen;
 
        register struct mbuf *m;
        int len, ulen;
 
+COUNT(UDP_INPUT);
        /*
        /*
-        * Get ip and udp header together in first mbuf.
+        * Get IP and UDP header together in first mbuf.
         */
        m = m0;
        if (m->m_len < sizeof (struct udpiphdr) &&
         */
        m = m0;
        if (m->m_len < sizeof (struct udpiphdr) &&
@@ -47,15 +48,15 @@ udp_input(m0)
                goto bad;
        }
        ui = mtod(m, struct udpiphdr *);
                goto bad;
        }
        ui = mtod(m, struct udpiphdr *);
-       if (ui->ui_len > sizeof (struct ip))
-               ip_stripoptions((struct ip *)ui, (char *)0);
+       if (((struct ip *)ui)->ip_hl > (sizeof (struct ip) >> 2))
+               ip_stripoptions((struct ip *)ui, (struct mbuf *)0);
 
        /*
 
        /*
-        * Make mbuf data length reflect udp length.
-        * If not enough data to reflect udp length, drop.
+        * Make mbuf data length reflect UDP length.
+        * If not enough data to reflect UDP length, drop.
         */
        ulen = ntohs((u_short)ui->ui_ulen);
         */
        ulen = ntohs((u_short)ui->ui_ulen);
-       len = sizeof (struct udpiphdr) + ulen;
+       len = sizeof (struct udphdr) + ulen;
        if (((struct ip *)ui)->ip_len != len) {
                if (len > ((struct ip *)ui)->ip_len) {
                        udpstat.udps_badlen++;
        if (((struct ip *)ui)->ip_len != len) {
                if (len > ((struct ip *)ui)->ip_len) {
                        udpstat.udps_badlen++;
@@ -66,13 +67,13 @@ udp_input(m0)
        }
 
        /*
        }
 
        /*
-        * Checksum extended udp header and data.
+        * Checksum extended UDP header and data.
         */
        if (udpcksum) {
                ui->ui_next = ui->ui_prev = 0;
                ui->ui_x1 = 0;
         */
        if (udpcksum) {
                ui->ui_next = ui->ui_prev = 0;
                ui->ui_x1 = 0;
-               ui->ui_len = htons((u_short)(sizeof (struct udpiphdr) + ulen));
-               if ((ui->ui_sum = inet_cksum(m, len)) != 0xffff) {
+               ui->ui_len = htons((u_short)(sizeof (struct udphdr) + ulen));
+               if (ui->ui_sum = in_cksum(m, len)) {
                        udpstat.udps_badsum++;
                        printf("udp cksum %x\n", ui->ui_sum);
                        m_freem(m);
                        udpstat.udps_badsum++;
                        printf("udp cksum %x\n", ui->ui_sum);
                        m_freem(m);
@@ -81,7 +82,6 @@ udp_input(m0)
        }
 
        /*
        }
 
        /*
-        * Convert addresses and ports to host format.
         * Locate pcb for datagram.
         */
        inp = in_pcblookup(&udb,
         * Locate pcb for datagram.
         */
        inp = in_pcblookup(&udb,
@@ -109,11 +109,10 @@ udp_ctlinput(m)
        struct mbuf *m;
 {
 
        struct mbuf *m;
 {
 
-       printf("udp_ctlinput\n");
+COUNT(UDP_CTLINPUT);
        m_freem(m);
 }
 
        m_freem(m);
 }
 
-/*ARGSUSED*/
 udp_output(inp, m0)
        struct inpcb *inp;
        struct mbuf *m0;
 udp_output(inp, m0)
        struct inpcb *inp;
        struct mbuf *m0;
@@ -122,9 +121,10 @@ udp_output(inp, m0)
        register struct udpiphdr *ui;
        register int len = 0;
 
        register struct udpiphdr *ui;
        register int len = 0;
 
+COUNT(UDP_OUTPUT);
        /*
         * Calculate data length and get a mbuf
        /*
         * Calculate data length and get a mbuf
-        * for udp and ip headers.
+        * for UDP and IP headers.
         */
        for (m = m0; m; m = m->m_next)
                len += m->m_len;
         */
        for (m = m0; m; m = m->m_next)
                len += m->m_len;
@@ -133,7 +133,7 @@ udp_output(inp, m0)
                goto bad;
 
        /*
                goto bad;
 
        /*
-        * Fill in mbuf with extended udp header
+        * Fill in mbuf with extended UDP header
         * and addresses and length put into network format.
         */
        m->m_off = MMAXOFF - sizeof (struct udpiphdr);
         * and addresses and length put into network format.
         */
        m->m_off = MMAXOFF - sizeof (struct udpiphdr);
@@ -154,16 +154,15 @@ udp_output(inp, m0)
         * Stuff checksum and output datagram.
         */
        ui->ui_sum = 0;
         * Stuff checksum and output datagram.
         */
        ui->ui_sum = 0;
-       ui->ui_sum = inet_cksum(m, sizeof (struct udpiphdr) + len);
+       ui->ui_sum = in_cksum(m, sizeof (struct udpiphdr) + len);
        ((struct ip *)ui)->ip_len = sizeof (struct udpiphdr) + len;
        ((struct ip *)ui)->ip_ttl = MAXTTL;
        ((struct ip *)ui)->ip_len = sizeof (struct udpiphdr) + len;
        ((struct ip *)ui)->ip_ttl = MAXTTL;
-       ip_output(m);
+       (void) ip_output(m, (struct mbuf *)0);
        return;
 bad:
        m_freem(m);
 }
 
        return;
 bad:
        m_freem(m);
 }
 
-/*ARGSUSED*/
 udp_usrreq(so, req, m, addr)
        struct socket *so;
        int req;
 udp_usrreq(so, req, m, addr)
        struct socket *so;
        int req;
@@ -173,6 +172,7 @@ udp_usrreq(so, req, m, addr)
        struct inpcb *inp = sotoinpcb(so);
        int error;
 
        struct inpcb *inp = sotoinpcb(so);
        int error;
 
+COUNT(UDP_USRREQ);
        if (inp == 0 && req != PRU_ATTACH)
                return (EINVAL);
        switch (req) {
        if (inp == 0 && req != PRU_ATTACH)
                return (EINVAL);
        switch (req) {
@@ -180,7 +180,7 @@ udp_usrreq(so, req, m, addr)
        case PRU_ATTACH:
                if (inp != 0)
                        return (EINVAL);
        case PRU_ATTACH:
                if (inp != 0)
                        return (EINVAL);
-               error = in_pcballoc(so, &udb, 2048, 2048, (struct sockaddr_in *)addr);
+               error = in_pcbattach(so, &udb, 2048, 2048, (struct sockaddr_in *)addr);
                if (error)
                        return (error);
                break;
                if (error)
                        return (error);
                break;
@@ -188,13 +188,13 @@ udp_usrreq(so, req, m, addr)
        case PRU_DETACH:
                if (inp == 0)
                        return (ENOTCONN);
        case PRU_DETACH:
                if (inp == 0)
                        return (ENOTCONN);
-               in_pcbfree(inp);
+               in_pcbdetach(inp);
                break;
 
        case PRU_CONNECT:
                if (inp->inp_faddr.s_addr)
                        return (EISCONN);
                break;
 
        case PRU_CONNECT:
                if (inp->inp_faddr.s_addr)
                        return (EISCONN);
-               error = in_pcbsetpeer(inp, (struct sockaddr_in *)addr);
+               error = in_pcbconnect(inp, (struct sockaddr_in *)addr);
                if (error)
                        return (error);
                soisconnected(so);
                if (error)
                        return (error);
                soisconnected(so);
@@ -206,7 +206,7 @@ udp_usrreq(so, req, m, addr)
        case PRU_DISCONNECT:
                if (inp->inp_faddr.s_addr == 0)
                        return (ENOTCONN);
        case PRU_DISCONNECT:
                if (inp->inp_faddr.s_addr == 0)
                        return (ENOTCONN);
-               inp->inp_faddr.s_addr = 0;
+               in_pcbdisconnect(inp);
                soisdisconnected(so);
                break;
 
                soisdisconnected(so);
                break;
 
@@ -218,7 +218,7 @@ udp_usrreq(so, req, m, addr)
                if (addr) {
                        if (inp->inp_faddr.s_addr)
                                return (EISCONN);
                if (addr) {
                        if (inp->inp_faddr.s_addr)
                                return (EISCONN);
-                       error = in_pcbsetpeer(inp, (struct sockaddr_in *)addr);
+                       error = in_pcbconnect(inp, (struct sockaddr_in *)addr);
                        if (error)
                                return (error);
                } else {
                        if (error)
                                return (error);
                } else {
@@ -227,11 +227,11 @@ udp_usrreq(so, req, m, addr)
                }
                udp_output(inp, m);
                if (addr)
                }
                udp_output(inp, m);
                if (addr)
-                       inp->inp_faddr.s_addr = 0;
+                       in_pcbdisconnect(inp);
                break;
 
        case PRU_ABORT:
                break;
 
        case PRU_ABORT:
-               in_pcbfree(inp);
+               in_pcbdetach(inp);
                sofree(so);
                soisdisconnected(so);
                break;
                sofree(so);
                soisdisconnected(so);
                break;
@@ -244,12 +244,3 @@ udp_usrreq(so, req, m, addr)
        }
        return (0);
 }
        }
        return (0);
 }
-
-/*ARGSUSED*/
-udp_sense(m)
-       struct mbuf *m;
-{
-
-       printf("udp_sense\n");
-       return (EOPNOTSUPP);
-}