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 ) {