new stats; change keepalives to use rcv_nxt instead of rcv_nxt-1
[unix-history] / usr / src / sys / netinet / ip_output.c
index a68b2ca..a40cf06 100644 (file)
@@ -1,9 +1,9 @@
 /*
 /*
- * Copyright (c) 1982 Regents of the University of California.
+ * Copyright (c) 1982, 1986 Regents of the University of California.
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
- *     @(#)ip_output.c 6.13 (Berkeley) %G%
+ *     @(#)ip_output.c 7.2 (Berkeley) %G%
  */
 
 #include "param.h"
  */
 
 #include "param.h"
@@ -24,7 +24,7 @@
 #include "ip_var.h"
 
 #ifdef vax
 #include "ip_var.h"
 
 #ifdef vax
-#include "../vax/mtpr.h"
+#include "../machine/mtpr.h"
 #endif
 
 struct mbuf *ip_insertoptions();
 #endif
 
 struct mbuf *ip_insertoptions();
@@ -88,7 +88,10 @@ ip_output(m, opt, ro, flags)
         */
        if (flags & IP_ROUTETOIF) {
                struct in_ifaddr *ia;
         */
        if (flags & IP_ROUTETOIF) {
                struct in_ifaddr *ia;
-               ia = in_iaonnetof(in_netof(ip->ip_dst));
+
+               ia = (struct in_ifaddr *)ifa_ifwithdstaddr(dst);
+               if (ia == 0)
+                       ia = in_iaonnetof(in_netof(ip->ip_dst));
                if (ia == 0) {
                        error = ENETUNREACH;
                        goto bad;
                if (ia == 0) {
                        error = ENETUNREACH;
                        goto bad;
@@ -190,7 +193,7 @@ ip_output(m, opt, ro, flags)
                        mh->m_len = sizeof (struct ip) + olen;
                } else
                        mh->m_len = sizeof (struct ip);
                        mh->m_len = sizeof (struct ip) + olen;
                } else
                        mh->m_len = sizeof (struct ip);
-               mhip->ip_off = off >> 3;
+               mhip->ip_off = (off >> 3) + (ip->ip_off & ~IP_MF);
                if (ip->ip_off & IP_MF)
                        mhip->ip_off |= IP_MF;
                if (off + len >= ip->ip_len-hlen)
                if (ip->ip_off & IP_MF)
                        mhip->ip_off |= IP_MF;
                if (off + len >= ip->ip_len-hlen)