troglobit / pimd

PIM-SM/SSM multicast routing for UNIX and Linux
http://troglobit.com/projects/pimd/
BSD 3-Clause "New" or "Revised" License
194 stars 86 forks source link

Fix startup with interface without IP #103

Closed acksys closed 7 years ago

acksys commented 7 years ago

If an interface get the IP information from a DHCP server, and we start pimd before the interface have IP it will be never possible to forward multicast paquet on this interface.

If phyint is set in configuration file, we loop while all interfaces present in phyint have an IP address. In general the IP will be received very soon.

Signed-off-by: Cedric Voncken cedric.voncken@acksys.fr

troglobit commented 7 years ago

Good catch!

I only have a few comments which would be great if you could address before I merge this PR.

acksys commented 7 years ago

Thanks, I will fix my commit

troglobit commented 7 years ago

Some minor stuff remains, but I can fix that up myself later. Thanks! :)

For future reference, it's OK to push another commit instead of editing/rebasing the existing one. This also makes it easier for the maintainer to review fixes to each comment made in the review.

troglobit commented 7 years ago

Hmm ... I just discovered that this change completely breaks the default use-case, running plain pimd without any phyint in pimd.conf (or even no pimd.conf) -- no interfaces are detected and pimd segfaults :-1:

Also, the goto init_vif_list is unbounded and makes it possible for pimd to get stuck in an endless loop :-1:

I'll try to fix these myself, and take it as a lesson to myself to actually test future pull requests, but if I cannot find a satisfactory fix I will revert this change.

troglobit commented 7 years ago

I've made the following changes:

dcdfd65 : Must use -r command line option to retry forever in -N operation
e9d19f0 : Allow empty pimd.conf and regular non-N operation, do not skip !IFF_UP interfaces

If you find any regressions to your particular use-case, please file a separate issue first so we can discuss a fix.