2 * Copyright (c) 1990,1996 Regents of The University of Michigan.
3 * All Rights Reserved. See COPYRIGHT.
8 #include <sys/socket.h>
11 #include <netatalk/at.h>
16 route( message, dst, gate, flags )
18 struct sockaddr *dst, *gate;
23 bzero( &rtent, sizeof( struct rtentry ));
25 rtent.rt_gateway = *gate;
26 rtent.rt_flags = flags;
27 return( ioctl( rtfd, message, &rtent ));
37 } mask = { sizeof( struct sockaddr_m ), 0, 0, 0xffff };
40 struct rt_msghdr rtma_rtm;
41 struct sockaddr_at rtma_dst;
42 struct sockaddr_at rtma_gate;
43 struct sockaddr_m rtma_mask;
46 route( message, dst, gate, flags )
48 struct sockaddr_at *dst, *gate;
53 bzero( &rtma, sizeof( struct rt_msg_at ));
54 rtma.rtma_rtm.rtm_msglen = sizeof( struct rt_msg_at );
55 rtma.rtma_rtm.rtm_version = RTM_VERSION;
56 rtma.rtma_rtm.rtm_type = message;
57 rtma.rtma_rtm.rtm_pid = getpid();
58 rtma.rtma_rtm.rtm_addrs = RTA_DST|RTA_GATEWAY;
59 if ( flags & RTF_HOST ) {
60 rtma.rtma_rtm.rtm_msglen = sizeof( struct rt_msg_at ) -
61 sizeof( struct sockaddr_m );
63 rtma.rtma_rtm.rtm_msglen = sizeof( struct rt_msg_at );
64 rtma.rtma_rtm.rtm_addrs |= RTA_NETMASK;
65 rtma.rtma_mask = mask;
68 rtma.rtma_rtm.rtm_flags = flags;
70 rtma.rtma_gate = *gate;
71 if (( rc = write( rtfd, &rtma, rtma.rtma_rtm.rtm_msglen )) !=
72 rtma.rtma_rtm.rtm_msglen ) {