summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--proto/rip/rip.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/proto/rip/rip.c b/proto/rip/rip.c
index d8e00b9..44d8ce0 100644
--- a/proto/rip/rip.c
+++ b/proto/rip/rip.c
@@ -213,9 +213,12 @@ rip_sendto( struct proto *p, ip_addr daddr, int dport, struct rip_interface *rif
#endif
c->done = 0;
- fit_init( &c->iter, &P->rtable );
+ FIB_ITERATE_INIT( &c->iter, &P->rtable );
add_head( &P->connections, NODE c );
- TRACE(D_PACKETS, "Sending my routing table to %I:%d on %s", daddr, dport, rif->iface->name );
+ if (ipa_nonzero(daddr))
+ TRACE(D_PACKETS, "Sending my routing table to %I:%d on %s", daddr, dport, rif->iface->name );
+ else
+ TRACE(D_PACKETS, "Broadcasting routing table to %s", rif->iface->name );
rip_tx(c->rif->sock);
}
@@ -315,6 +318,7 @@ process_block( struct proto *p, struct rip_block *block, ip_addr whotoldme )
CHK_MAGIC;
TRACE(D_ROUTES, "block: %I tells me: %I/??? available, metric %d... ", whotoldme, network, metric );
+ /* FIXME: Why `???'? If prefix is unknown, just don't print it. [mj] */
if ((!metric) || (metric > P_CF->infinity)) {
#ifdef IPV6 /* Someone is sedning us nexthop and we are ignoring it */
if (metric == 0xff)
@@ -406,7 +410,7 @@ rip_rx(sock *s, int size)
int num;
CHK_MAGIC;
- DBG( "RIP: message came: %d bytes\n", size );
+ DBG( "RIP: message came: %d bytes from %I via %s\n", size, s->faddr, i->iface ? i->iface->name : "(dummy)" );
size -= sizeof( struct rip_packet_heading );
if (size < 0) BAD( "Too small packet" );
if (size % sizeof( struct rip_block )) BAD( "Odd sized packet" );
@@ -456,7 +460,7 @@ rip_timer(timer *t)
#endif
if (now - rte->u.rip.lastmodX > P_CF->timeout_time) {
- TRACE(D_EVENTS, "RIP: entry is too old: %I", rte->net->n.prefix );
+ TRACE(D_EVENTS, "entry is too old: %I", rte->net->n.prefix );
if (rte->u.rip.entry) {
rte->u.rip.entry->metric = P_CF->infinity;
rte->u.rip.metric = P_CF->infinity;
@@ -464,7 +468,7 @@ rip_timer(timer *t)
}
if (now - rte->u.rip.lastmodX > P_CF->garbage_time) {
- TRACE(D_EVENTS, "RIP: entry is much too old: %I", rte->net->n.prefix );
+ TRACE(D_EVENTS, "entry is much too old: %I", rte->net->n.prefix );
rte_discard(p->table, rte);
}
}
@@ -616,8 +620,8 @@ new_iface(struct proto *p, struct iface *new, unsigned long flags, struct iface_
if (new)
rif->sock->ttl = 1;
else
- rif->sock->ttl = 30;
- rif->sock->tos = IP_PREC_INTERNET_CONTROL;
+ rif->sock->ttl = 30; /* FIXME: Shouldn't we leave default TTL in this case? [mj] */
+ rif->sock->tos = IP_PREC_INTERNET_CONTROL; /* FIXME: Interface sockets only, I guess [mj] */
if (new) {
if (new->addr->flags & IA_UNNUMBERED)
@@ -627,11 +631,13 @@ new_iface(struct proto *p, struct iface *new, unsigned long flags, struct iface_
rif->sock->daddr = ipa_from_u32(0xe0000009);
rif->sock->saddr = ipa_from_u32(0xe0000009);
#else
- ip_pton("FF02::9", &rif->sock->daddr);
+ ip_pton("FF02::9", &rif->sock->daddr); /* FIXME [mj] */
ip_pton("FF02::9", &rif->sock->saddr);
#endif
- } else
+ } else {
rif->sock->daddr = new->addr->brd;
+ rif->sock->saddr = new->addr->brd;
+ }
}
if (!ipa_nonzero(rif->sock->daddr)) {
@@ -641,9 +647,10 @@ new_iface(struct proto *p, struct iface *new, unsigned long flags, struct iface_
if (sk_open(rif->sock)<0) {
log( L_ERR "%s: could not listen on %s", P_NAME, rif->iface ? rif->iface->name : "(dummy)" );
/* Don't try to transmit into this one? Well, why not? This should not happen, anyway :-) */
+ /* FIXME: This is *wrong*! Try it. */
}
- TRACE(D_EVENTS, "%s: listening on %s, port %d, mode %s (%I)", P_NAME, rif->iface ? rif->iface->name : "(dummy)", P_CF->port, rif->multicast ? "multicast" : "broadcast", rif->sock->daddr );
+ TRACE(D_EVENTS, "Listening on %s, port %d, mode %s (%I)", rif->iface ? rif->iface->name : "(dummy)", P_CF->port, rif->multicast ? "multicast" : "broadcast", rif->sock->daddr );
return rif;
}