mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 23:53:28 +00:00
ripd: considering a interface with 2 or more IP
This commit fixes these three issues: 1) rinfo is used for rip packet sending not tmp_rinfo 2) With RIP_SPLIT_HORIZON and an interface with more than 1 ip addresses we will not send the routes out an interface that they originate on 3) With RIP_SPLIT_HORIZON_POISONED_REVERSE and an interface with more than 1 ip address we will not send out ipA with a metric of 16 and ipb with a metric of 1. Both will be 16 now. Signed-off-by: lyq140 <34637052+lyq140@users.noreply.github.com>
This commit is contained in:
parent
1af416bc25
commit
9920df072a
36
ripd/ripd.c
36
ripd/ripd.c
@ -2186,6 +2186,7 @@ void rip_output_process(struct connected *ifc, struct sockaddr_in *to,
|
||||
*/
|
||||
int suppress = 0;
|
||||
struct rip_info *tmp_rinfo = NULL;
|
||||
struct connected *tmp_ifc = NULL;
|
||||
|
||||
for (ALL_LIST_ELEMENTS_RO(list, listnode,
|
||||
tmp_rinfo))
|
||||
@ -2197,10 +2198,17 @@ void rip_output_process(struct connected *ifc, struct sockaddr_in *to,
|
||||
}
|
||||
|
||||
if (!suppress
|
||||
&& rinfo->type == ZEBRA_ROUTE_CONNECT
|
||||
&& prefix_match((struct prefix *)p,
|
||||
ifc->address))
|
||||
suppress = 1;
|
||||
&& rinfo->type == ZEBRA_ROUTE_CONNECT) {
|
||||
for (ALL_LIST_ELEMENTS_RO(
|
||||
ifc->ifp->connected,
|
||||
listnode, tmp_ifc))
|
||||
if (prefix_match(
|
||||
(struct prefix *)p,
|
||||
tmp_ifc->address)) {
|
||||
suppress = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (suppress)
|
||||
continue;
|
||||
@ -2311,19 +2319,29 @@ void rip_output_process(struct connected *ifc, struct sockaddr_in *to,
|
||||
* configured on the same interface).
|
||||
*/
|
||||
struct rip_info *tmp_rinfo = NULL;
|
||||
struct connected *tmp_ifc = NULL;
|
||||
|
||||
for (ALL_LIST_ELEMENTS_RO(list, listnode,
|
||||
tmp_rinfo))
|
||||
if (tmp_rinfo->type == ZEBRA_ROUTE_RIP
|
||||
&& tmp_rinfo->nh.ifindex
|
||||
== ifc->ifp->ifindex)
|
||||
tmp_rinfo->metric_out =
|
||||
rinfo->metric_out =
|
||||
RIP_METRIC_INFINITY;
|
||||
|
||||
if (rinfo->type == ZEBRA_ROUTE_CONNECT
|
||||
&& prefix_match((struct prefix *)p,
|
||||
ifc->address))
|
||||
rinfo->metric_out = RIP_METRIC_INFINITY;
|
||||
if (rinfo->metric_out != RIP_METRIC_INFINITY
|
||||
&& rinfo->type == ZEBRA_ROUTE_CONNECT) {
|
||||
for (ALL_LIST_ELEMENTS_RO(
|
||||
ifc->ifp->connected,
|
||||
listnode, tmp_ifc))
|
||||
if (prefix_match(
|
||||
(struct prefix *)p,
|
||||
tmp_ifc->address)) {
|
||||
rinfo->metric_out =
|
||||
RIP_METRIC_INFINITY;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Prepare preamble, auth headers, if needs be */
|
||||
|
Loading…
Reference in New Issue
Block a user