include fixes
[unix-history] / usr / src / sbin / routed / af.c
... / ...
CommitLineData
1#ifndef lint
2static char sccsid[] = "@(#)af.c 4.11 (Berkeley) %G%";
3#endif
4
5#include "defs.h"
6
7/*
8 * Address family support routines
9 */
10int null_hash(), null_netmatch(), null_output(),
11 null_portmatch(), null_portcheck(),
12 null_checkhost(), null_canon();
13int inet_hash(), inet_netmatch(), inet_output(),
14 inet_portmatch(), inet_portcheck(),
15 inet_checkhost(), inet_canon();
16#define NIL \
17 { null_hash, null_netmatch, null_output, \
18 null_portmatch, null_portcheck, null_checkhost, \
19 null_canon }
20#define INET \
21 { inet_hash, inet_netmatch, inet_output, \
22 inet_portmatch, inet_portcheck, inet_checkhost, \
23 inet_canon }
24
25struct afswitch afswitch[AF_MAX] =
26 { NIL, NIL, INET, INET, NIL, NIL, NIL, NIL, NIL, NIL, NIL };
27
28inet_hash(sin, hp)
29 register struct sockaddr_in *sin;
30 struct afhash *hp;
31{
32
33 hp->afh_nethash = inet_netof(sin->sin_addr);
34 hp->afh_hosthash = ntohl(sin->sin_addr.s_addr);
35 hp->afh_hosthash &= 0x7fffffff;
36}
37
38inet_netmatch(sin1, sin2)
39 struct sockaddr_in *sin1, *sin2;
40{
41
42 return (inet_netof(sin1->sin_addr) == inet_netof(sin2->sin_addr));
43}
44
45/*
46 * Verify the message is from the right port.
47 */
48inet_portmatch(sin)
49 register struct sockaddr_in *sin;
50{
51
52#ifdef COMPAT
53 if (ntohs(sin->sin_port) == ntohs(sp->s_port) + 1)
54 return (1);
55#endif
56 return (sin->sin_port == sp->s_port);
57}
58
59/*
60 * Verify the message is from a "trusted" port.
61 */
62inet_portcheck(sin)
63 struct sockaddr_in *sin;
64{
65
66 return (ntohs(sin->sin_port) <= IPPORT_RESERVED);
67}
68
69/*
70 * Internet output routine.
71 */
72inet_output(s, flags, sin, size)
73 int s, flags;
74 struct sockaddr_in *sin;
75 int size;
76{
77 struct sockaddr_in dst;
78
79 dst = *sin;
80 sin = &dst;
81 if (sin->sin_port == 0)
82 sin->sin_port = sp->s_port;
83 if (sendto(s, packet, size, flags, sin, sizeof (*sin)) < 0)
84 perror("sendto");
85}
86
87/*
88 * Return 1 if the address is believed
89 * for an Internet host -- THIS IS A KLUDGE.
90 */
91inet_checkhost(sin)
92 struct sockaddr_in *sin;
93{
94
95 return (inet_lnaof(sin->sin_addr) != 0);
96}
97
98inet_canon(sin)
99 struct sockaddr_in *sin;
100{
101
102 sin->sin_port = 0;
103}
104
105/*ARGSUSED*/
106null_hash(addr, hp)
107 struct sockaddr *addr;
108 struct afhash *hp;
109{
110
111 hp->afh_nethash = hp->afh_hosthash = 0;
112}
113
114/*ARGSUSED*/
115null_netmatch(a1, a2)
116 struct sockaddr *a1, *a2;
117{
118
119 return (0);
120}
121
122/*ARGSUSED*/
123null_output(s, f, a1, n)
124 int s, f;
125 struct sockaddr *a1;
126 int n;
127{
128
129 ;
130}
131
132/*ARGSUSED*/
133null_portmatch(a1)
134 struct sockaddr *a1;
135{
136
137 return (0);
138}
139
140/*ARGSUSED*/
141null_portcheck(a1)
142 struct sockaddr *a1;
143{
144
145 return (0);
146}
147
148/*ARGSUSED*/
149null_checkhost(a1)
150 struct sockaddr *a1;
151{
152
153 return (0);
154}
155
156/*ARGSUSED*/
157null_canon(a1)
158 struct sockaddr *a1;
159{
160
161 ;
162}