ospfd: Prevent crash if transferring config amongst instances

If we enter:

int eth0
  ip ospf area 0
  ip ospf 10 area 0
!

This will crash ospf.  Prevent this from happening.

OSPF instances:

a) Cannot be mixed with non-instance
b) Are their own process.

Since in multi-instance world ospf instances are their own process,
when an ospf processes receives an instance command we must remove
our config( if present ) and allow the new config to be active
in the new process.  The problem here is that if you have not
done a `router ospf` above the lookup of the ospf pointer will
fail and we will just crash.  Put some code in to prevent a crash
in this case.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
This commit is contained in:
Donald Sharp 2020-10-13 08:16:15 -04:00
parent d2a516dc7a
commit 2b0a32da60

View File

@ -8135,12 +8135,25 @@ DEFUN (ip_ospf_area,
ospf = ospf_lookup_instance(instance);
if (instance && ospf == NULL) {
/*
* At this point we know we have received
* an instance and there is no ospf instance
* associated with it. This means we are
* in a situation where we have an
* ospf command that is setup for a different
* process(instance). We need to safely
* remove the command from ourselves and
* allow the other instance(process) handle
* the configuration command.
*/
params = IF_DEF_PARAMS(ifp);
if (OSPF_IF_PARAM_CONFIGURED(params, if_area)) {
UNSET_IF_PARAM(params, if_area);
ospf = ospf_lookup_by_vrf_id(VRF_DEFAULT);
ospf_interface_area_unset(ospf, ifp);
ospf->if_ospf_cli_count--;
if (ospf) {
ospf_interface_area_unset(ospf, ifp);
ospf->if_ospf_cli_count--;
}
}
return CMD_NOT_MY_INSTANCE;
}