3
#include <sys/socket.h>
4
#include <sys/cmn_err.h>
7
#include <netatalk/at.h>
13
struct rtab *r_next, *r_prev;
14
struct sockaddr_at r_dst;
15
struct sockaddr_at r_gate;
18
static struct rtab *rt_net = NULL;
19
static struct rtab *rt_host = NULL;
22
rt_add( struct sockaddr_at *dst, struct sockaddr_at *gate, int flags )
27
if ( flags & RTF_HOST ) {
32
for ( r = rtab; r != NULL; r = r->r_next ) {
33
if (( r->r_dst.sat_addr.s_net == dst->sat_addr.s_net ) &&
34
(( flags & RTF_HOST ) ?
35
r->r_dst.sat_addr.s_node == dst->sat_addr.s_node : 1 )) {
40
if (( r = kmem_alloc( sizeof( struct rtab ), KM_NOSLEEP )) == NULL ) {
51
if ( flags & RTF_HOST ) {
60
rt_del( struct sockaddr_at *dst, struct sockaddr_at *gate, int flags )
65
if ( flags & RTF_HOST ) {
70
for ( r = rtab; r != NULL; r = r->r_next ) {
71
if (( r->r_dst.sat_addr.s_net == dst->sat_addr.s_net ) &&
72
(( flags & RTF_HOST ) ?
73
r->r_dst.sat_addr.s_node == dst->sat_addr.s_node : 1 )) {
82
if ( flags & RTF_HOST ) {
88
if ( r->r_next != NULL ) {
89
r->r_next->r_prev = r->r_prev;
91
if ( r->r_prev != NULL ) {
92
r->r_prev->r_next = r->r_next;
94
kmem_free( r, sizeof( struct rtab ));
99
rt_gate( struct sockaddr_at *dst, struct sockaddr_at *gate )
103
for ( r = rt_host; r != NULL; r = r->r_next ) {
104
if ( r->r_dst.sat_addr.s_net == dst->sat_addr.s_net &&
105
r->r_dst.sat_addr.s_node == dst->sat_addr.s_node ) {
114
for ( r = rt_net; r != NULL; r = r->r_next ) {
115
if ( r->r_dst.sat_addr.s_net == dst->sat_addr.s_net ) {