diff options
| author | kanaya516 <abcs516tk1@gmail.com> | 2023-01-04 15:47:43 +0000 | 
|---|---|---|
| committer | kanaya516 <abcs516tk1@gmail.com> | 2023-01-04 15:47:43 +0000 | 
| commit | 4747dddbea2311b6d31c630cd86d0288f4c1da23 (patch) | |
| tree | 729e3279839443a62a600eeb2e61c423d86fa25d /isisd/isis_nb_state.c | |
| parent | 098737293cf918a22e3c566df26dc9316eae568d (diff) | |
isisd: changed to output the LAN-adjacency-sid in yang format
Signed-off-by: kanaya516 <abcs516tk1@gmail.com>
Diffstat (limited to 'isisd/isis_nb_state.c')
| -rw-r--r-- | isisd/isis_nb_state.c | 131 | 
1 files changed, 125 insertions, 6 deletions
diff --git a/isisd/isis_nb_state.c b/isisd/isis_nb_state.c index 8bd2ed5438..5b1fc6e1d2 100644 --- a/isisd/isis_nb_state.c +++ b/isisd/isis_nb_state.c @@ -218,7 +218,8 @@ struct yang_data *lib_interface_state_isis_adjacencies_adjacency_state_get_elem(   * XPath:   * /frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/adjacency-sids/adjacency-sid   */ -const void *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_get_next( +const void * +lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_get_next(  	struct nb_cb_get_next_args *args)  {  	const struct isis_adjacency *adj = args->parent_list_entry; @@ -241,7 +242,8 @@ const void *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjace   * XPath:   * /frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/adjacency-sids/adjacency-sid/af   */ -struct yang_data *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_af_get_elem( +struct yang_data * +lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_af_get_elem(  	struct nb_cb_get_elem_args *args)  {  	const struct sr_adjacency *sra = args->list_entry; @@ -261,7 +263,8 @@ struct yang_data *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_   * XPath:   * /frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/adjacency-sids/adjacency-sid/value   */ -struct yang_data *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_value_get_elem( +struct yang_data * +lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_value_get_elem(  	struct nb_cb_get_elem_args *args)  {  	const struct sr_adjacency *sra = args->list_entry; @@ -281,7 +284,8 @@ struct yang_data *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_   * XPath:   * /frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/adjacency-sids/adjacency-sid/weight   */ -struct yang_data *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_weight_get_elem( +struct yang_data * +lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_weight_get_elem(  	struct nb_cb_get_elem_args *args)  {  	const struct sr_adjacency *sra = args->list_entry; @@ -301,7 +305,8 @@ struct yang_data *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_   * XPath:   * /frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/adjacency-sids/adjacency-sid/protection-requested   */ -struct yang_data *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_protection_requested_get_elem( +struct yang_data * +lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_adjacency_sid_protection_requested_get_elem(  	struct nb_cb_get_elem_args *args)  {  	const struct sr_adjacency *sra = args->list_entry; @@ -311,7 +316,121 @@ struct yang_data *lib_interface_state_isis_adjacencies_adjacency_adjacency_sids_  		/* Adjacency SID is not published with circuit type Broadcast */  		return NULL;  	case CIRCUIT_T_P2P: -		return yang_data_new_bool(args->xpath, sra->u.adj_sid->flags & EXT_SUBTLV_LINK_ADJ_SID_BFLG); +		return yang_data_new_bool(args->xpath, +					  sra->u.adj_sid->flags & +						  EXT_SUBTLV_LINK_ADJ_SID_BFLG); +	} + +	return NULL; +} + +/* + * XPath: + * /frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/lan-adjacency-sids/lan-adjacency-sid + */ +const void * +lib_interface_state_isis_adjacencies_adjacency_lan_adjacency_sids_lan_adjacency_sid_get_next( +	struct nb_cb_get_next_args *args) +{ +	const struct isis_adjacency *adj = args->parent_list_entry; +	const struct sr_adjacency *sra = args->list_entry, *sra_next = NULL; +	struct listnode *node, *node_next; + +	if (args->list_entry == NULL) +		sra_next = listnode_head(adj->adj_sids); +	else { +		node = listnode_lookup(adj->adj_sids, sra); +		node_next = listnextnode(node); +		if (node_next) +			sra_next = listgetdata(node_next); +	} + +	return sra_next; +} + +/* + * XPath: + * /frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/lan-adjacency-sids/lan-adjacency-sid/af + */ +struct yang_data * +lib_interface_state_isis_adjacencies_adjacency_lan_adjacency_sids_lan_adjacency_sid_af_get_elem( +	struct nb_cb_get_elem_args *args) +{ +	const struct sr_adjacency *sra = args->list_entry; + +	switch (sra->adj->circuit->circ_type) { +	case CIRCUIT_T_BROADCAST: +		return yang_data_new_uint8(args->xpath, +					   sra->u.ladj_sid->family); +	case CIRCUIT_T_P2P: +		/* LAN adjacency SID is not published with circuit type P2P */ +		return NULL; +	} + +	return NULL; +} + +/* + * XPath: + * /frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/lan-adjacency-sids/lan-adjacency-sid/value + */ +struct yang_data * +lib_interface_state_isis_adjacencies_adjacency_lan_adjacency_sids_lan_adjacency_sid_value_get_elem( +	struct nb_cb_get_elem_args *args) +{ +	const struct sr_adjacency *sra = args->list_entry; + +	switch (sra->adj->circuit->circ_type) { +	case CIRCUIT_T_BROADCAST: +		return yang_data_new_uint32(args->xpath, sra->u.ladj_sid->sid); +	case CIRCUIT_T_P2P: +		/* LAN adjacency SID is not published with circuit type P2P */ +		return NULL; +	} + +	return NULL; +} + +/* + * XPath: + * /frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/lan-adjacency-sids/lan-adjacency-sid/weight + */ +struct yang_data * +lib_interface_state_isis_adjacencies_adjacency_lan_adjacency_sids_lan_adjacency_sid_weight_get_elem( +	struct nb_cb_get_elem_args *args) +{ +	const struct sr_adjacency *sra = args->list_entry; + +	switch (sra->adj->circuit->circ_type) { +	case CIRCUIT_T_BROADCAST: +		return yang_data_new_uint8(args->xpath, +					   sra->u.ladj_sid->weight); +	case CIRCUIT_T_P2P: +		/* LAN adjacency SID is not published with circuit type P2P */ +		return NULL; +	} + +	return NULL; +} + +/* + * XPath: + * /frr-interface:lib/interface/state/frr-isisd:isis/adjacencies/adjacency/lan-adjacency-sids/lan-adjacency-sid/protection-requested + */ +struct yang_data * +lib_interface_state_isis_adjacencies_adjacency_lan_adjacency_sids_lan_adjacency_sid_protection_requested_get_elem( +	struct nb_cb_get_elem_args *args) +{ +	const struct sr_adjacency *sra = args->list_entry; + +	switch (sra->adj->circuit->circ_type) { +	case CIRCUIT_T_BROADCAST: +		return yang_data_new_bool(args->xpath, +					  sra->u.ladj_sid->flags & +						  EXT_SUBTLV_LINK_ADJ_SID_BFLG); +	case CIRCUIT_T_P2P: +		/* LAN adjacency SID is not published with circuit type P2P */ +		return NULL;  	}  	return NULL;  | 
