projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
wnj changes
[unix-history]
/
usr
/
src
/
sbin
/
routed
/
af.c
diff --git
a/usr/src/sbin/routed/af.c
b/usr/src/sbin/routed/af.c
index
e409215
..
b82e642
100644
(file)
--- a/
usr/src/sbin/routed/af.c
+++ b/
usr/src/sbin/routed/af.c
@@
-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;
{
+
;
}
;
}