Make RIP nolisten mode actually work. The socket is required for
sending, the received data has to be discarded instead. (patch by Andreas Steinmetz modified by me)
This commit is contained in:
parent
1bd897dd33
commit
4a02013767
1 changed files with 13 additions and 11 deletions
|
@ -457,6 +457,10 @@ rip_rx(sock *s, int size)
|
||||||
struct proto *p = i->proto;
|
struct proto *p = i->proto;
|
||||||
int num;
|
int num;
|
||||||
|
|
||||||
|
/* In non-listening mode, just ignore packet */
|
||||||
|
if (i->mode & IM_NOLISTEN)
|
||||||
|
return 1;
|
||||||
|
|
||||||
CHK_MAGIC;
|
CHK_MAGIC;
|
||||||
DBG( "RIP: message came: %d bytes from %I via %s\n", size, s->faddr, i->iface ? i->iface->name : "(dummy)" );
|
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 );
|
size -= sizeof( struct rip_packet_heading );
|
||||||
|
@ -716,17 +720,15 @@ new_iface(struct proto *p, struct iface *new, unsigned long flags, struct iface_
|
||||||
if (!ipa_nonzero(rif->sock->daddr)) {
|
if (!ipa_nonzero(rif->sock->daddr)) {
|
||||||
if (rif->iface)
|
if (rif->iface)
|
||||||
log( L_WARN "%s: interface %s is too strange for me", P_NAME, rif->iface->name );
|
log( L_WARN "%s: interface %s is too strange for me", P_NAME, rif->iface->name );
|
||||||
} else
|
} else if (sk_open(rif->sock)<0) {
|
||||||
if (!(rif->mode & IM_NOLISTEN))
|
log( L_ERR "%s: could not create socket for %s", P_NAME, rif->iface ? rif->iface->name : "(dummy)" );
|
||||||
if (sk_open(rif->sock)<0) {
|
if (rif->iface) {
|
||||||
log( L_ERR "%s: could not listen on %s", P_NAME, rif->iface ? rif->iface->name : "(dummy)" );
|
rfree(rif->sock);
|
||||||
if (rif->iface) {
|
mb_free(rif);
|
||||||
rfree(rif->sock);
|
return NULL;
|
||||||
mb_free(rif);
|
}
|
||||||
return NULL;
|
/* On dummy, we just return non-working socket, so that user gets error every time anyone requests table */
|
||||||
}
|
}
|
||||||
/* On dummy, we just return non-working socket, so that user gets error every time anyone requests table */
|
|
||||||
}
|
|
||||||
|
|
||||||
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 );
|
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 );
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue