static char sccsid
[] = "@(#)af.c 4.15 (Berkeley) %G%";
* Address family support routines
int null_hash(), null_netmatch(), null_output(),
null_portmatch(), null_portcheck(),
null_checkhost(), null_ishost(), null_canon();
int inet_hash(), inet_netmatch(), inet_output(),
inet_portmatch(), inet_portcheck(),
inet_checkhost(), inet_ishost(), inet_canon();
{ null_hash, null_netmatch, null_output, \
null_portmatch, null_portcheck, null_checkhost, \
null_ishost, null_canon }
{ inet_hash, inet_netmatch, inet_output, \
inet_portmatch, inet_portcheck, inet_checkhost, \
inet_ishost, inet_canon }
struct afswitch afswitch
[AF_MAX
] =
{ NIL
, NIL
, INET
, INET
, NIL
, NIL
, NIL
, NIL
, NIL
, NIL
, NIL
};
struct sockaddr_in inet_default
= { AF_INET
, INADDR_ANY
};
register struct sockaddr_in
*sin
;
hp
->afh_nethash
= inet_netof(sin
->sin_addr
);
hp
->afh_hosthash
= ntohl(sin
->sin_addr
.s_addr
);
hp
->afh_hosthash
&= 0x7fffffff;
inet_netmatch(sin1
, sin2
)
struct sockaddr_in
*sin1
, *sin2
;
return (inet_netof(sin1
->sin_addr
) == inet_netof(sin2
->sin_addr
));
* Verify the message is from the right port.
register struct sockaddr_in
*sin
;
if (ntohs(sin
->sin_port
) == ntohs(sp
->s_port
) + 1)
return (sin
->sin_port
== sp
->s_port
);
* Verify the message is from a "trusted" port.
return (ntohs(sin
->sin_port
) <= IPPORT_RESERVED
);
* Internet output routine.
inet_output(s
, flags
, sin
, size
)
sin
->sin_port
= sp
->s_port
;
if (sendto(s
, packet
, size
, flags
, sin
, sizeof (*sin
)) < 0)
* Return 1 if the address is believed
* for an Internet host -- THIS IS A KLUDGE.
u_long i
= ntohl(sin
->sin_addr
.s_addr
);
#define IN_BADCLASS(i) (((long) (i) & 0xe0000000) == 0xe0000000)
if (i
!= 0 && (i
& 0xff000000) == 0)
* Return 1 if the address is
* for an Internet host, 0 for a network.
return (inet_lnaof(sin
->sin_addr
) != 0);
hp
->afh_nethash
= hp
->afh_hosthash
= 0;
struct sockaddr
*a1
, *a2
;