summaryrefslogtreecommitdiff
path: root/proto/rip
diff options
context:
space:
mode:
authorMartin Mares <mj@ucw.cz>2002-03-10 12:32:12 +0000
committerMartin Mares <mj@ucw.cz>2002-03-10 12:32:12 +0000
commit53a50af50427e2fedc4bbfeca7a5934a798a3827 (patch)
tree078d15a5c5a959a7c7c8faebb24ca500c144c4b2 /proto/rip
parente59e310e6435c6c72b585c6f4b5e6c9bbd006553 (diff)
Applied Pavel's fix for broadcast/multicast mode.
Diffstat (limited to 'proto/rip')
-rw-r--r--proto/rip/rip.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/proto/rip/rip.c b/proto/rip/rip.c
index d98f55e5..68f9f1c3 100644
--- a/proto/rip/rip.c
+++ b/proto/rip/rip.c
@@ -770,20 +770,19 @@ rip_if_notify(struct proto *p, unsigned c, struct iface *iface)
if (c & IF_CHANGE_UP) {
struct iface_patt *k = iface_patt_match(&P_CF->iface_list, iface);
struct object_lock *lock;
+ struct rip_patt *PATT = (struct rip_patt *) k;
if (!k) return; /* We are not interested in this interface */
lock = olock_new( p->pool );
+ if (!(PATT->mode & IM_BROADCAST) && (iface->flags & IF_MULTICAST))
#ifndef IPV6
- lock->addr = ipa_from_u32(0xe0000009); /* This is okay: we
- may actually use
- other address, but
- we do not want two
- rips at one time,
- anyway. */
+ lock->addr = ipa_from_u32(0xe0000009);
#else
- ip_pton("FF02::9", &lock->addr);
+ ip_pton("FF02::9", &lock->addr);
#endif
+ else
+ lock->addr = iface->addr->brd;
lock->port = P_CF->port;
lock->iface = iface;
lock->hook = rip_real_if_add;