diff options
| -rw-r--r-- | isisd/isis_srv6.c | 21 | ||||
| -rw-r--r-- | isisd/isis_srv6.h | 2 | ||||
| -rw-r--r-- | isisd/isis_zebra.c | 1 | 
3 files changed, 24 insertions, 0 deletions
diff --git a/isisd/isis_srv6.c b/isisd/isis_srv6.c index 2348bd043a..8e9c21aa23 100644 --- a/isisd/isis_srv6.c +++ b/isisd/isis_srv6.c @@ -658,6 +658,27 @@ int isis_srv6_ifp_up_notify(struct interface *ifp)  }  /** + * Request SRv6 locator info from the SID Manager for all IS-IS areas where SRv6 + * is enabled and a locator has been configured. + * This function is called as soon as the connection with Zebra is established + * to get information about all configured locators. + */ +void isis_srv6_locators_request(void) +{ +	struct isis *isis = isis_lookup_by_vrfid(VRF_DEFAULT); +	struct listnode *node; +	struct isis_area *area; + +	if (!isis) +		return; + +	for (ALL_LIST_ELEMENTS_RO(isis->area_list, node, area)) +		if (area->srv6db.config.enabled && +		    area->srv6db.config.srv6_locator_name[0] != '\0' && !area->srv6db.srv6_locator) +			isis_zebra_srv6_manager_get_locator(area->srv6db.config.srv6_locator_name); +} + +/**   * IS-IS SRv6 initialization for given area.   *   * @param area	IS-IS area diff --git a/isisd/isis_srv6.h b/isisd/isis_srv6.h index bde14965f6..bb221b760a 100644 --- a/isisd/isis_srv6.h +++ b/isisd/isis_srv6.h @@ -156,6 +156,8 @@ isis_srv6_sid_alloc(struct isis_area *area, struct srv6_locator *locator,  		    struct in6_addr *sid_value);  extern void isis_srv6_sid_free(struct isis_srv6_sid *sid); +void isis_srv6_locators_request(void); +  extern void isis_srv6_area_init(struct isis_area *area);  extern void isis_srv6_area_term(struct isis_area *area); diff --git a/isisd/isis_zebra.c b/isisd/isis_zebra.c index caf7d3ddfb..b985ad1f7d 100644 --- a/isisd/isis_zebra.c +++ b/isisd/isis_zebra.c @@ -805,6 +805,7 @@ static void isis_zebra_connected(struct zclient *zclient)  	zclient_register_opaque(zclient, LDP_IGP_SYNC_IF_STATE_UPDATE);  	zclient_register_opaque(zclient, LDP_IGP_SYNC_ANNOUNCE_UPDATE);  	bfd_client_sendmsg(zclient, ZEBRA_BFD_CLIENT_REGISTER, VRF_DEFAULT); +	isis_srv6_locators_request();  }  /**  | 
