wnj changes
[unix-history] / usr / src / sbin / routed / af.c
index e409215..b82e642 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char sccsid[] = "@(#)af.c       4.1 %G%";
+static char sccsid[] = "@(#)af.c       4.3 %G%";
 #endif
 
 #include <sys/types.h>
 #endif
 
 #include <sys/types.h>
@@ -13,15 +13,19 @@ static char sccsid[] = "@(#)af.c    4.1 %G%";
  * Address family support routines
  */
 int    null_hash(), null_netmatch(), null_output(),
  * Address family support routines
  */
 int    null_hash(), null_netmatch(), null_output(),
-       null_portmatch(), null_checkhost(), null_canon();
+       null_portmatch(), null_portcheck(),
+       null_checkhost(), null_canon();
 int    inet_hash(), inet_netmatch(), inet_output(),
 int    inet_hash(), inet_netmatch(), inet_output(),
-       inet_portmatch(), inet_checkhost(), inet_canon();
+       inet_portmatch(), inet_portcheck(),
+       inet_checkhost(), inet_canon();
 #define NIL \
        { null_hash,            null_netmatch,          null_output, \
 #define NIL \
        { null_hash,            null_netmatch,          null_output, \
-         null_portmatch,       null_checkhost,         null_canon }
+         null_portmatch,       null_portcheck,         null_checkhost, \
+         null_canon }
 #define        INET \
        { inet_hash,            inet_netmatch,          inet_output, \
 #define        INET \
        { inet_hash,            inet_netmatch,          inet_output, \
-         inet_portmatch,       inet_checkhost,         inet_canon }
+         inet_portmatch,       inet_portcheck,         inet_checkhost, \
+         inet_canon }
 
 struct afswitch afswitch[AF_MAX] =
        { NIL, NIL, INET, INET, NIL, NIL, NIL, NIL, NIL, NIL, NIL };
 
 struct afswitch afswitch[AF_MAX] =
        { NIL, NIL, INET, INET, NIL, NIL, NIL, NIL, NIL, NIL, NIL };
@@ -32,7 +36,11 @@ inet_hash(sin, hp)
 {
 
        hp->afh_nethash = sin->sin_addr.s_net;
 {
 
        hp->afh_nethash = sin->sin_addr.s_net;
-       hp->afh_hosthash = ntohl(sin->sin_addr.s_addr);
+       hp->afh_hosthash = sin->sin_addr.s_addr;
+#if vax || pdp11
+       hp->afh_hosthash = ntohl(hp->afh_hosthash);
+#endif
+       hp->afh_hosthash &= 0x7fffffff;
 }
 
 inet_netmatch(sin1, sin2)
 }
 
 inet_netmatch(sin1, sin2)
@@ -48,26 +56,47 @@ inet_netmatch(sin1, sin2)
 inet_portmatch(sin)
        struct sockaddr_in *sin;
 {
 inet_portmatch(sin)
        struct sockaddr_in *sin;
 {
-       int port = ntohs(sin->sin_port);
-
+       int port = sin->sin_port;
+       
+#if vax || pdp11
+       port = ntohs(port);
+#endif
        return (port == IPPORT_ROUTESERVER);
 }
 
        return (port == IPPORT_ROUTESERVER);
 }
 
+/*
+ * Verify the message is from a "trusted" port.
+ */
+inet_portcheck(sin)
+       struct sockaddr_in *sin;
+{
+       int port = sin->sin_port;
+
+#if vax || pdp11
+       port = ntohs(port);
+#endif
+       return (port <= IPPORT_RESERVED);
+}
+
 /*
  * Internet output routine.
  */
 /*
  * Internet output routine.
  */
-inet_output(sin, size)
+inet_output(s, sin, size)
+       int s;
        struct sockaddr_in *sin;
        int size;
 {
        struct sockaddr_in *sin;
        int size;
 {
-       extern int s;
        extern char packet[MAXPACKETSIZE];
        struct sockaddr_in dst;
 
        dst = *sin;
        sin = &dst;
        extern char packet[MAXPACKETSIZE];
        struct sockaddr_in dst;
 
        dst = *sin;
        sin = &dst;
-       if (sin->sin_port == 0)
-               sin->sin_port = htons(IPPORT_ROUTESERVER);
+       if (sin->sin_port == 0) {
+               sin->sin_port = IPPORT_ROUTESERVER;
+#if vax || pdp11
+               sin->sin_port = htons(sin->sin_port);
+#endif
+       }
        if (send(s, sin, packet, size) < 0)
                perror("send");
 }
        if (send(s, sin, packet, size) < 0)
                perror("send");
 }
@@ -110,10 +139,12 @@ null_netmatch(a1, a2)
 }
 
 /*ARGSUSED*/
 }
 
 /*ARGSUSED*/
-null_output(a1, n)
+null_output(s, a1, n)
+       int s;
        struct sockaddr *a1;
        int n;
 {
        struct sockaddr *a1;
        int n;
 {
+
        ;
 }
 
        ;
 }
 
@@ -121,6 +152,15 @@ null_output(a1, n)
 null_portmatch(a1)
        struct sockaddr *a1;
 {
 null_portmatch(a1)
        struct sockaddr *a1;
 {
+
+       return (0);
+}
+
+/*ARGSUSED*/
+null_portcheck(a1)
+       struct sockaddr *a1;
+{
+
        return (0);
 }
 
        return (0);
 }
 
@@ -128,6 +168,7 @@ null_portmatch(a1)
 null_checkhost(a1)
        struct sockaddr *a1;
 {
 null_checkhost(a1)
        struct sockaddr *a1;
 {
+
        return (0);
 }
 
        return (0);
 }
 
@@ -135,5 +176,6 @@ null_checkhost(a1)
 null_canon(a1)
        struct sockaddr *a1;
 {
 null_canon(a1)
        struct sockaddr *a1;
 {
+
        ;
 }
        ;
 }