X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=pimd%2Fpim_instance.c;h=b0d7a7b2db07a50b0a1afcc36237de25f17c2511;hb=392b89f39da4f09097c162bea7f3b0a4e46ed346;hp=7e5bb34e31ee391f97cec7139f8a6c93e09eb509;hpb=29be7d92cc65e685bf3e543b1033729fc7b39235;p=mirror_frr.git diff --git a/pimd/pim_instance.c b/pimd/pim_instance.c index 7e5bb34e3..b0d7a7b2d 100644 --- a/pimd/pim_instance.c +++ b/pimd/pim_instance.c @@ -22,6 +22,7 @@ #include "hash.h" #include "vrf.h" +#include "lib_errors.h" #include "pimd.h" #include "pim_ssm.h" @@ -41,12 +42,12 @@ static void pim_instance_terminate(struct pim_instance *pim) } if (pim->static_routes) - list_delete_and_null(&pim->static_routes); - - pim_rp_free(pim); + list_delete(&pim->static_routes); pim_upstream_terminate(pim); + pim_rp_free(pim); + /* Traverse and cleanup rpf_hash */ if (pim->rpf_hash) { hash_clean(pim->rpf_hash, (void *)pim_rp_list_hash_clean); @@ -54,10 +55,10 @@ static void pim_instance_terminate(struct pim_instance *pim) pim->rpf_hash = NULL; } - pim_oil_terminate(pim); - pim_if_terminate(pim); + pim_oil_terminate(pim); + pim_msdp_exit(pim); XFREE(MTYPE_PIM_PIM_INSTANCE, pim); @@ -69,14 +70,14 @@ static struct pim_instance *pim_instance_init(struct vrf *vrf) char hash_name[64]; pim = XCALLOC(MTYPE_PIM_PIM_INSTANCE, sizeof(struct pim_instance)); - if (!pim) - return NULL; pim_if_init(pim); pim->keep_alive_time = PIM_KEEPALIVE_PERIOD; pim->rp_keep_alive_time = PIM_RP_KEEPALIVE_PERIOD; + pim->ecmp_enable = false; + pim->ecmp_rebalance_enable = false; pim->vrf_id = vrf->vrf_id; pim->vrf = vrf; @@ -94,18 +95,8 @@ static struct pim_instance *pim_instance_init(struct vrf *vrf) zlog_debug("%s: NHT rpf hash init ", __PRETTY_FUNCTION__); pim->ssm_info = pim_ssm_init(); - if (!pim->ssm_info) { - pim_instance_terminate(pim); - return NULL; - } pim->static_routes = list_new(); - if (!pim->static_routes) { - zlog_err("%s %s: failure: static_routes=list_new()", __FILE__, - __PRETTY_FUNCTION__); - pim_instance_terminate(pim); - return NULL; - } pim->static_routes->del = (void (*)(void *))pim_static_route_free; pim->send_v6_secondary = 1; @@ -138,14 +129,6 @@ static int pim_vrf_new(struct vrf *vrf) struct pim_instance *pim = pim_instance_init(vrf); zlog_debug("VRF Created: %s(%u)", vrf->name, vrf->vrf_id); - if (pim == NULL) { - zlog_err("%s %s: pim class init failure ", __FILE__, - __PRETTY_FUNCTION__); - /* - * We will crash and burn otherwise - */ - exit(1); - } vrf->info = (void *)pim; @@ -205,7 +188,7 @@ static int pim_vrf_config_write(struct vty *vty) pim_global_config_write_worker(pim, vty); if (vrf->vrf_id != VRF_DEFAULT) - vty_endframe(vty, "!\n"); + vty_endframe(vty, " exit-vrf\n!\n"); } return 0; @@ -213,7 +196,8 @@ static int pim_vrf_config_write(struct vty *vty) void pim_vrf_init(void) { - vrf_init(pim_vrf_new, pim_vrf_enable, pim_vrf_disable, pim_vrf_delete); + vrf_init(pim_vrf_new, pim_vrf_enable, pim_vrf_disable, + pim_vrf_delete, NULL); vrf_cmd_init(pim_vrf_config_write, &pimd_privs); }