diff options
author | phk <phk@FreeBSD.org> | 2004-08-14 08:36:35 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2004-08-14 08:36:35 +0000 |
commit | 1874b31277fe1c44e4cfde1280746d71db29de19 (patch) | |
tree | 5f42e81a2280f761dfed09577ab515a769f0b9e4 /sbin/routed | |
parent | 9595df2db163188aeab78003c49df90f4f2bed2b (diff) | |
download | FreeBSD-src-1874b31277fe1c44e4cfde1280746d71db29de19.zip FreeBSD-src-1874b31277fe1c44e4cfde1280746d71db29de19.tar.gz |
Don't declare everything we find on a loopback interface for passive:
Only the actual loopback address should be declared passive, other
addresses are very likely to be desirable to announce.
Check for IFF_LOOPBACK instead of IFF_PASSIVE to determine if we have
an unknown interface type.
Diffstat (limited to 'sbin/routed')
-rw-r--r-- | sbin/routed/if.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/sbin/routed/if.c b/sbin/routed/if.c index ef8e4f4..b6e7a53 100644 --- a/sbin/routed/if.c +++ b/sbin/routed/if.c @@ -804,7 +804,14 @@ ifinit(void) } if (ifs.int_if_flags & IFF_LOOPBACK) { - ifs.int_state |= IS_PASSIVE | IS_NO_RIP | IS_NO_RDISC; + ifs.int_state |= IS_NO_RIP | IS_NO_RDISC; + if (ifs.int_addr == htonl(INADDR_LOOPBACK)) { + printf("loop %x\n", ifs.int_addr); + ifs.int_state |= IS_PASSIVE; + } else { + printf("alias %x\n", ifs.int_addr); + } + ifs.int_dstaddr = ifs.int_addr; ifs.int_mask = HOST_MASK; ifs.int_ripv1_mask = HOST_MASK; @@ -1090,8 +1097,7 @@ ifinit(void) continue; } - if (0 == (ifs.int_if_flags & (IFF_POINTOPOINT | IFF_BROADCAST)) - && !(ifs.int_state & IS_PASSIVE)) { + if (0 == (ifs.int_if_flags & (IFF_POINTOPOINT | IFF_BROADCAST | IFF_LOOPBACK))) { trace_act("%s is neither broadcast, point-to-point," " nor loopback", ifs.int_name); |