remove ip_ctlinput, do all the work in higher level ctlinput's
authorMike Karels <karels@ucbvax.Berkeley.EDU>
Tue, 28 May 1985 13:33:03 +0000 (05:33 -0800)
committerMike Karels <karels@ucbvax.Berkeley.EDU>
Tue, 28 May 1985 13:33:03 +0000 (05:33 -0800)
SCCS-vsn: sys/netinet/tcp_subr.c 6.5
SCCS-vsn: sys/netinet/udp_usrreq.c 6.13

usr/src/sys/netinet/tcp_subr.c
usr/src/sys/netinet/udp_usrreq.c

index 8376a66..b646437 100644 (file)
@@ -1,4 +1,4 @@
-/*     tcp_subr.c      6.4     84/11/14        */
+/*     tcp_subr.c      6.5     85/05/27        */
 
 #include "param.h"
 #include "systm.h"
 
 #include "param.h"
 #include "systm.h"
@@ -235,9 +235,9 @@ tcp_ctlinput(cmd, arg)
        int cmd;
        caddr_t arg;
 {
        int cmd;
        caddr_t arg;
 {
-       struct in_addr *sin;
+       struct in_addr *in;
        extern u_char inetctlerrmap[];
        extern u_char inetctlerrmap[];
-       int tcp_quench();
+       int tcp_quench(), in_rtchange();
 
        if (cmd < 0 || cmd > PRC_NCMDS)
                return;
 
        if (cmd < 0 || cmd > PRC_NCMDS)
                return;
@@ -247,19 +247,31 @@ tcp_ctlinput(cmd, arg)
                break;
 
        case PRC_QUENCH:
                break;
 
        case PRC_QUENCH:
-               sin = &((struct icmp *)arg)->icmp_ip.ip_dst;
-               in_pcbnotify(&tcb, sin, 0, tcp_quench);
+               in = &((struct icmp *)arg)->icmp_ip.ip_dst;
+               in_pcbnotify(&tcb, in, 0, tcp_quench);
+               break;
+
+       case PRC_REDIRECT_NET:
+       case PRC_REDIRECT_HOST:
+               in = &((struct icmp *)arg)->icmp_ip.ip_dst;
+               in_pcbnotify(&tcb, in, 0, in_rtchange);
                break;
 
                break;
 
-       /* these are handled by ip */
        case PRC_IFDOWN:
        case PRC_IFDOWN:
+               in = &((struct sockaddr_in *)arg)->sin_addr;
+               goto notify;
+
        case PRC_HOSTDEAD:
        case PRC_HOSTUNREACH:
        case PRC_HOSTDEAD:
        case PRC_HOSTUNREACH:
-               break;
+               in = (struct in_addr *)arg;
+               goto notify;
 
        default:
 
        default:
-               sin = &((struct icmp *)arg)->icmp_ip.ip_dst;
-               in_pcbnotify(&tcb, sin, (int)inetctlerrmap[cmd], tcp_abort);
+               if (inetctlerrmap[cmd] == 0)
+                       return;         /* XXX */
+               in = &((struct icmp *)arg)->icmp_ip.ip_dst;
+notify:
+               in_pcbnotify(&tcb, in, (int)inetctlerrmap[cmd], tcp_abort);
        }
 }
 
        }
 }
 
index fb7132c..4ad6191 100644 (file)
@@ -1,4 +1,4 @@
-/*     udp_usrreq.c    6.12    85/05/27        */
+/*     udp_usrreq.c    6.13    85/05/27        */
 
 #include "param.h"
 #include "dir.h"
 
 #include "param.h"
 #include "dir.h"