diff options
Diffstat (limited to 'ospf6d/ospf6_zebra.c')
| -rw-r--r-- | ospf6d/ospf6_zebra.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/ospf6d/ospf6_zebra.c b/ospf6d/ospf6_zebra.c index 76e7172870..170d545c49 100644 --- a/ospf6d/ospf6_zebra.c +++ b/ospf6d/ospf6_zebra.c @@ -130,17 +130,38 @@ void ospf6_zebra_no_redistribute(int type, vrf_id_t vrf_id) static int ospf6_zebra_if_address_update_add(ZAPI_CALLBACK_ARGS) { struct connected *c; + struct ospf6_interface *oi; + int ipv6_count = 0; c = zebra_interface_address_read(ZEBRA_INTERFACE_ADDRESS_ADD, zclient->ibuf, vrf_id); if (c == NULL) return 0; + oi = (struct ospf6_interface *)c->ifp->info; + if (oi == NULL) + oi = ospf6_interface_create(c->ifp); + assert(oi); + if (IS_OSPF6_DEBUG_ZEBRA(RECV)) zlog_debug("Zebra Interface address add: %s %5s %pFX", c->ifp->name, prefix_family_str(c->address), c->address); + ipv6_count = connected_count_by_family(c->ifp, AF_INET6); + if (oi->ifmtu == OSPF6_DEFAULT_MTU && ipv6_count > OSPF6_MAX_IF_ADDRS) { + zlog_warn( + "Zebra Interface : %s has too many interface addresses %d only support %d, increase MTU", + c->ifp->name, ipv6_count, OSPF6_MAX_IF_ADDRS); + return 0; + } else if (oi->ifmtu >= OSPF6_JUMBO_MTU + && ipv6_count > OSPF6_MAX_IF_ADDRS_JUMBO) { + zlog_warn( + "Zebra Interface : %s has too many interface addresses %d only support %d", + c->ifp->name, ipv6_count, OSPF6_MAX_IF_ADDRS_JUMBO); + return 0; + } + if (c->address->family == AF_INET6) { ospf6_interface_state_update(c->ifp); ospf6_interface_connected_route_update(c->ifp); @@ -303,7 +324,7 @@ static void ospf6_zebra_route_update(int type, struct ospf6_route *request, struct prefix *dest; if (IS_OSPF6_DEBUG_ZEBRA(SEND)) - zlog_debug("Send %s route: %pFX", + zlog_debug("Zebra Send %s route: %pFX", (type == REM ? "remove" : "add"), &request->prefix); if (zclient->sock < 0) { |
