- xnnet(n->rip_dst[0]) = ns_netof(sns->sns_addr);
- n->rip_metric = htons(min(rt->rt_metric + 1, HOPCNT_INFINITY));
+ if ((rt->rt_flags & (RTF_HOST|RTF_GATEWAY)) == RTF_HOST)
+ sns = (struct sockaddr_ns *)&rt->rt_router;
+ metric = min(rt->rt_metric + 1, HOPCNT_INFINITY);
+ net = sns->sns_addr.x_net;
+ /*
+ * Make sure that we don't put out a two net entries
+ * for a pt to pt link (one for the G route, one for the if)
+ * This is a kludge, and won't work if there are lots of nets.
+ */
+ for (nn = msg->rip_nets; nn < n; nn++) {
+ if (ns_neteqnn(net, nn->rip_dst)) {
+ if (metric < ntohs(nn->rip_metric))
+ nn->rip_metric = htons(metric);
+ goto next;
+ }
+ }
+ n->rip_dst = net;
+ n->rip_metric = htons(metric);