- if (ro->ro_rt == 0 || (ifp = ro->ro_rt->rt_ifp) == 0) {
-printf("no route to %x\n", ip->ip_dst.s_addr);
- goto bad;
-}
- dst = ro->ro_rt->rt_flags&RTF_DIRECT ?
- (struct sockaddr *)&ro->ro_dst : &ro->ro_rt->rt_gateway;
+ if (ro->ro_rt == 0 || (ifp = ro->ro_rt->rt_ifp) == 0)
+ goto unreachable;
+ ro->ro_rt->rt_use++;
+ if (ro->ro_rt->rt_flags & RTF_GATEWAY)
+ dst = &ro->ro_rt->rt_gateway;
+gotif:
+ /*
+ * If source address not specified yet, use address
+ * of outgoing interface.
+ */
+ if (ip->ip_src.s_addr == 0)
+ ip->ip_src.s_addr =
+ ((struct sockaddr_in *)&ifp->if_addr)->sin_addr.s_addr;
+
+ /*
+ * Have interface for packet. Allow
+ * broadcasts only by authorized users.
+ */