2 * Copyright (c) 1990,1996 Regents of The University of Michigan.
3 * All Rights Reserved. See COPYRIGHT.
10 #include <sys/param.h>
11 #include <sys/types.h>
12 #include <sys/socket.h>
13 #include <net/route.h>
15 #include <netatalk/at.h>
20 route( message, dst, gate, flags )
22 struct sockaddr *dst, *gate;
26 struct ortentry rtent;
31 bzero( &rtent, sizeof( struct rtentry ));
33 rtent.rt_gateway = *gate;
34 rtent.rt_flags = flags;
35 return( ioctl( rtfd, message, &rtent ));
45 } mask = { sizeof( struct sockaddr_m ), 0, 0, 0xffff };
48 struct rt_msghdr rtma_rtm;
49 struct sockaddr_at rtma_dst;
50 struct sockaddr_at rtma_gate;
51 struct sockaddr_m rtma_mask;
54 route( message, dst, gate, flags )
56 struct sockaddr_at *dst, *gate;
61 bzero( &rtma, sizeof( struct rt_msg_at ));
62 rtma.rtma_rtm.rtm_msglen = sizeof( struct rt_msg_at );
63 rtma.rtma_rtm.rtm_version = RTM_VERSION;
64 rtma.rtma_rtm.rtm_type = message;
65 rtma.rtma_rtm.rtm_pid = getpid();
66 rtma.rtma_rtm.rtm_addrs = RTA_DST|RTA_GATEWAY;
67 if ( flags & RTF_HOST ) {
68 rtma.rtma_rtm.rtm_msglen = sizeof( struct rt_msg_at ) -
69 sizeof( struct sockaddr_m );
71 rtma.rtma_rtm.rtm_msglen = sizeof( struct rt_msg_at );
72 rtma.rtma_rtm.rtm_addrs |= RTA_NETMASK;
73 rtma.rtma_mask = mask;
76 rtma.rtma_rtm.rtm_flags = flags;
78 rtma.rtma_gate = *gate;
79 if (( rc = write( rtfd, &rtma, rtma.rtma_rtm.rtm_msglen )) !=
80 rtma.rtma_rtm.rtm_msglen ) {