sun merge
[unix-history] / usr / src / sys / vax / if / if_en.c
index 8b0fb8b..c860a0f 100644 (file)
@@ -1,34 +1,37 @@
-/*     if_en.c 4.68    82/10/09        */
+/*     if_en.c 4.75    82/12/17        */
 
 #include "en.h"
 
 /*
  * Xerox prototype (3 Mb) Ethernet interface driver.
  */
 
 #include "en.h"
 
 /*
  * Xerox prototype (3 Mb) Ethernet interface driver.
  */
+#include "../machine/pte.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
 #include "../h/mbuf.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
 #include "../h/mbuf.h"
-#include "../h/pte.h"
 #include "../h/buf.h"
 #include "../h/protosw.h"
 #include "../h/socket.h"
 #include "../h/buf.h"
 #include "../h/protosw.h"
 #include "../h/socket.h"
-#include "../h/ubareg.h"
-#include "../h/ubavar.h"
-#include "../h/enreg.h"
-#include "../h/cpu.h"
-#include "../h/mtpr.h"
 #include "../h/vmmac.h"
 #include "../h/vmmac.h"
+#include <errno.h>
+
+#include "../net/if.h"
+#include "../net/netisr.h"
+#include "../net/route.h"
 #include "../netinet/in.h"
 #include "../netinet/in_systm.h"
 #include "../netinet/in.h"
 #include "../netinet/in_systm.h"
-#include "../net/if.h"
-#include "../vaxif/if_en.h"
-#include "../vaxif/if_uba.h"
 #include "../netinet/ip.h"
 #include "../netinet/ip_var.h"
 #include "../netpup/pup.h"
 #include "../netinet/ip.h"
 #include "../netinet/ip_var.h"
 #include "../netpup/pup.h"
-#include "../net/route.h"
-#include <errno.h>
+
+#include "../vax/cpu.h"
+#include "../vax/mtpr.h"
+#include "../vaxif/if_en.h"
+#include "../vaxif/if_enreg.h"
+#include "../vaxif/if_uba.h"
+#include "../vaxuba/ubareg.h"
+#include "../vaxuba/ubavar.h"
 
 #define        ENMTU   (1024+512)
 #define        ENMRU   (1024+512+16)           /* 16 is enough to receive trailer */
 
 #define        ENMTU   (1024+512)
 #define        ENMRU   (1024+512+16)           /* 16 is enough to receive trailer */
@@ -116,8 +119,13 @@ enattach(ui)
        es->es_if.if_flags = IFF_BROADCAST;
        es->es_if.if_init = eninit;
        es->es_if.if_output = enoutput;
        es->es_if.if_flags = IFF_BROADCAST;
        es->es_if.if_init = eninit;
        es->es_if.if_output = enoutput;
-       es->es_if.if_ubareset = enreset;
+       es->es_if.if_reset = enreset;
        es->es_ifuba.ifu_flags = UBA_NEEDBDP | UBA_NEED16 | UBA_CANTWAIT;
        es->es_ifuba.ifu_flags = UBA_NEEDBDP | UBA_NEED16 | UBA_CANTWAIT;
+#if defined(VAX750)
+       /* don't chew up 750 bdp's */
+       if (cpu == VAX_750 && ui->ui_unit > 0)
+               es->es_ifuba.ifu_flags &= ~UBA_NEEDBDP;
+#endif
        if_attach(&es->es_if);
 }
 
        if_attach(&es->es_if);
 }
 
@@ -332,7 +340,7 @@ enrint(unit)
        struct endevice *addr = (struct endevice *)eninfo[unit]->ui_addr;
        register struct en_header *en;
        struct mbuf *m;
        struct endevice *addr = (struct endevice *)eninfo[unit]->ui_addr;
        register struct en_header *en;
        struct mbuf *m;
-       int len, plen; short resid;
+       int len; short resid;
        register struct ifqueue *inq;
        int off;
 
        register struct ifqueue *inq;
        int off;
 
@@ -452,7 +460,7 @@ enoutput(ifp, m0, dst)
 #ifdef INET
        case AF_INET:
                dest = ((struct sockaddr_in *)dst)->sin_addr.s_addr;
 #ifdef INET
        case AF_INET:
                dest = ((struct sockaddr_in *)dst)->sin_addr.s_addr;
-               if (dest & 0x00ffff00) {
+               if (in_lnaof(*((struct in_addr *)&dest)) >= 0x100) {
                        error = EPERM;          /* ??? */
                        goto bad;
                }
                        error = EPERM;          /* ??? */
                        goto bad;
                }
@@ -505,7 +513,7 @@ gottype:
         */
        if (m->m_off > MMAXOFF ||
            MMINOFF + sizeof (struct en_header) > m->m_off) {
         */
        if (m->m_off > MMAXOFF ||
            MMINOFF + sizeof (struct en_header) > m->m_off) {
-               m = m_get(M_DONTWAIT);
+               m = m_get(M_DONTWAIT, MT_HEADER);
                if (m == 0) {
                        error = ENOBUFS;
                        goto bad;
                if (m == 0) {
                        error = ENOBUFS;
                        goto bad;