- ((struct ip *)ui)->ip_ttl = MAXTTL;
- so = inp->inp_socket;
- if (so->so_options & SO_DONTROUTE)
- return (ip_output(m, inp->inp_options, (struct route *)0,
- (so->so_options & SO_BROADCAST) | IP_ROUTETOIF));
- /*
- * Use cached route for previous datagram if
- * this is also to the same destination.
- *
- * NB: We don't handle broadcasts because that
- * would require 3 subroutine calls.
- */
- ro = &inp->inp_route;
-#define satosin(sa) ((struct sockaddr_in *)(sa))
- if (ro->ro_rt &&
- satosin(&ro->ro_dst)->sin_addr.s_addr != ui->ui_dst.s_addr) {
- RTFREE(ro->ro_rt);
- ro->ro_rt = (struct rtentry *)0;
- }
- return (ip_output(m, inp->inp_options, ro,
- so->so_options & SO_BROADCAST));
+ ((struct ip *)ui)->ip_ttl = udp_ttl;
+ return (ip_output(m, inp->inp_options, &inp->inp_route,
+ inp->inp_socket->so_options & (SO_DONTROUTE | SO_BROADCAST)));