diff --git a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/l3.c b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/l3.c index e87867d8f93..9bc8dd36a02 100644 --- a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/l3.c +++ b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/l3.c @@ -297,10 +297,22 @@ static int otto_l3_930x_find_slot(struct otto_l3_ctrl *ctrl, struct otto_l3_rout otto_l3_930x_host_route_read(ctrl, idx, &route_entry); dev_dbg(ctrl->dev, "route valid %d, route dest: %pI4, hit %d\n", rt->attr.valid, &rt->dst_ip, rt->attr.hit); - if (!must_exist && rt->attr.valid) - return idx; - if (must_exist && route_entry.dst_ip == rt->dst_ip) + if (!must_exist && !route_entry.attr.valid) return idx; + if (must_exist && + route_entry.attr.valid && + route_entry.attr.type == rt->attr.type) { + switch (rt->attr.type) { + case 0: + if (route_entry.dst_ip == rt->dst_ip) + return idx; + break; + case 2: + if (ipv6_addr_equal(&route_entry.dst_ip6, &rt->dst_ip6)) + return idx; + break; + } + } } }