summaryrefslogtreecommitdiffstats
path: root/proto/rip
diff options
context:
space:
mode:
Diffstat (limited to 'proto/rip')
-rw-r--r--proto/rip/rip.c42
1 files changed, 14 insertions, 28 deletions
diff --git a/proto/rip/rip.c b/proto/rip/rip.c
index 9680ccd..396b3ad 100644
--- a/proto/rip/rip.c
+++ b/proto/rip/rip.c
@@ -5,6 +5,8 @@
*
* Can be freely distributed and used under the terms of the GNU GPL.
*
+ FIXME: lock interface so we are not started twice on same interface.
+
FIXME: IpV6 support: packet size
FIXME: IpV6 support: use right address for broadcasts
FIXME: IpV6 support: receive "route using" blocks
@@ -12,7 +14,7 @@
FIXME (nonurgent): fold rip_connection into rip_interface?
We are not going to honour requests for sending part of
- routing table. That would need to turn split horizont off,
+ routing table. That would need to turn split horizon off,
etc.
Triggered updates. When triggered update was sent, don't send
@@ -50,15 +52,6 @@
static struct rip_interface *new_iface(struct proto *p, struct iface *new, unsigned long flags, struct iface_patt *patt);
-static void
-rip_reply(struct proto *p)
-{
-#if 0
- P->listen->tbuf = "ACK!";
- sk_send_to( P->listen, 5, P->listen->faddr, P->listen->fport );
-#endif
-}
-
#define P_NAME p->name
/*
@@ -106,8 +99,8 @@ rip_tx_prepare(struct proto *p, ip_addr daddr, struct rip_block *b, struct rip_e
b->pxlen = e->n.pxlen;
#endif
b->metric = htonl( e->metric );
- if (ipa_equal(e->whotoldme, daddr)) { /* FIXME: ouch, daddr is some kind of broadcast address. How am I expected to do split horizont?!?!? */
- DBG( "(split horizont)" );
+ if (ipa_equal(e->whotoldme, daddr)) { /* FIXME: ouch, daddr is some kind of broadcast address. How am I expected to do split horizon?!?!? */
+ DBG( "(split horizon)" );
b->metric = htonl( P_CF->infinity );
}
ipa_hton( b->network );
@@ -313,7 +306,7 @@ process_block( struct proto *p, struct rip_block *block, ip_addr whotoldme )
advertise_entry( p, block, whotoldme );
}
-#define BAD( x ) { log( L_WARN "RIP/%s: " x, P_NAME ); return 1; }
+#define BAD( x ) { log( L_REMOTE "%s: " x, P_NAME ); return 1; }
static int
rip_process_packet( struct proto *p, struct rip_packet *packet, int num, ip_addr whotoldme, int port )
@@ -330,11 +323,11 @@ rip_process_packet( struct proto *p, struct rip_packet *packet, int num, ip_addr
switch( packet->heading.command ) {
case RIPCMD_REQUEST: DBG( "Asked to send my routing table\n" );
if (P_CF->honour == HO_NEVER) {
- log( L_WARN "They asked me to send routing table, but I was told not to do it\n" );
+ log( L_REMOTE "They asked me to send routing table, but I was told not to do it" );
return 0;
}
if ((P_CF->honour == HO_NEIGHBOUR) && (!neigh_find( p, &whotoldme, 0 ))) {
- log( L_WARN "They asked me to send routing table, but he is not my neighbour\n" );
+ log( L_REMOTE "They asked me to send routing table, but he is not my neighbour" );
return 0;
}
rip_sendto( p, whotoldme, port, HEAD(P->interfaces) ); /* no broadcast */
@@ -386,7 +379,6 @@ rip_process_packet( struct proto *p, struct rip_packet *packet, int num, ip_addr
default: BAD( "Unknown command" );
}
- rip_reply(p);
return 0;
}
@@ -437,12 +429,12 @@ rip_timer(timer *t)
DBG( "Garbage: " ); rte_dump( rte );
if (now - rte->u.rip.lastmodX > P_CF->timeout_time) {
- TRACE(D_EVENTS, "RIP: entry is too old: " ); rte_dump( rte );
+ TRACE(D_EVENTS, "RIP: entry is too old: %I", rte->net->n.prefix );
e->metric = P_CF->infinity;
}
if (now - rte->u.rip.lastmodX > P_CF->garbage_time) {
- TRACE(D_EVENTS, "RIP: entry is much too old: " ); rte_dump( rte );
+ TRACE(D_EVENTS, "RIP: entry is much too old: %I", rte->net->n.prefix );
rte_discard(p->table, rte);
}
}
@@ -589,22 +581,22 @@ new_iface(struct proto *p, struct iface *new, unsigned long flags, struct iface_
rif->sock->daddr = new->addr->brd;
if (new->addr->flags & IA_UNNUMBERED)
- log( L_WARN "RIP/%s: rip is not defined over unnumbered links\n", P_NAME );
+ log( L_WARN "%s: rip is not defined over unnumbered links", P_NAME );
if (want_multicast) {
rif->sock->daddr = ipa_from_u32(0xe0000009);
rif->sock->saddr = ipa_from_u32(0xe0000009);
}
if (!ipa_nonzero(rif->sock->daddr)) {
- log( L_WARN "RIP/%s: interface %s is too strange for me", P_NAME, rif->iface ? rif->iface->name : "(dummy)" );
+ log( L_WARN "%s: interface %s is too strange for me", P_NAME, rif->iface ? rif->iface->name : "(dummy)" );
} else
if (!(rif->patt->mode & IM_NOLISTEN))
if (sk_open(rif->sock)<0) {
- log( L_ERR "RIP/%s: could not listen on %s", P_NAME, rif->iface ? rif->iface->name : "(dummy)" );
+ 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 :-) */
}
- TRACE(D_EVENTS, "RIP/%s: listening on %s, port %d, mode %s (%I)", P_NAME, rif->iface ? rif->iface->name : "(dummy)", P_CF->port, want_multicast ? "multicast" : "broadcast", rif->sock->daddr );
+ TRACE(D_EVENTS, "%s: listening on %s, port %d, mode %s (%I)", P_NAME, rif->iface ? rif->iface->name : "(dummy)", P_CF->port, want_multicast ? "multicast" : "broadcast", rif->sock->daddr );
return rif;
}
@@ -786,16 +778,10 @@ rip_preconfig(struct protocol *x, struct config *c)
DBG( "RIP: preconfig\n" );
}
-static void
-rip_postconfig(struct proto_config *c)
-{
-}
-
struct protocol proto_rip = {
name: "RIP",
template: "rip%d",
preconfig: rip_preconfig,
- postconfig: rip_postconfig,
get_route_info: rip_get_route_info,
init: rip_init,