For P2P links, the destination address should be configured as
the peer. If so, perhaps this works?
Index: packet.c
===================================================================
RCS file: /cvs/src/usr.sbin/ripd/packet.c,v
retrieving revision 1.12
diff -u -p -u -r1.12 packet.c
--- packet.c 25 Oct 2014 03:23:49 -0000 1.12
+++ packet.c 6 Dec 2016 01:34:09 -0000
@@ -233,15 +233,13 @@ find_iface(struct ripd_conf *xconf, unsi
/* returned interface needs to be active */
LIST_FOREACH(iface, &xconf->iface_list, entry) {
if (ifindex != 0 && ifindex == iface->ifindex &&
- !iface->passive && (iface->addr.s_addr &
- iface->mask.s_addr) == (src.s_addr & iface->mask.s_addr))
- /*
- * XXX may fail on P2P links because src and dst don't
- * have to share a common subnet on the otherhand
- * checking something like this will help to support
- * multiple networks configured on one interface.
- */
- return (iface);
+ !iface->passive) {
+ if ((iface->addr.s_addr & iface->mask.s_addr) ==
+ (src.s_addr & iface->mask.s_addr))
+ return (iface);
+ if (iface->dst.s_addr == src.s_addr)
+ return (iface);
+ }
}
return (NULL);