diff options
| author | Russ White <russ@riw.us> | 2023-04-11 09:49:01 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-11 09:49:01 -0400 | 
| commit | f26a87cd247c6ece48ef843476afc3b44e6ce5d1 (patch) | |
| tree | 20a46d79a9b32b8447fc481d3747c637036a3934 | |
| parent | e80c797a1f8f98c129a9605a174d451356dde008 (diff) | |
| parent | 5d39a8190740b2b54de3b4d7e1527901bcbc2a33 (diff) | |
Merge pull request #12698 from Orange-OpenSource/isisd
Isisd/Lib: Add new printfrr format facility for Intermediate System ID
| -rw-r--r-- | doc/developer/logging.rst | 45 | ||||
| -rw-r--r-- | isisd/fabricd.c | 13 | ||||
| -rw-r--r-- | isisd/isis_adjacency.c | 48 | ||||
| -rw-r--r-- | isisd/isis_adjacency.h | 2 | ||||
| -rw-r--r-- | isisd/isis_circuit.c | 14 | ||||
| -rw-r--r-- | isisd/isis_common.h | 8 | ||||
| -rw-r--r-- | isisd/isis_dynhn.c | 6 | ||||
| -rw-r--r-- | isisd/isis_events.c | 4 | ||||
| -rw-r--r-- | isisd/isis_lfa.c | 4 | ||||
| -rw-r--r-- | isisd/isis_lsp.c | 127 | ||||
| -rw-r--r-- | isisd/isis_misc.c | 102 | ||||
| -rw-r--r-- | isisd/isis_misc.h | 5 | ||||
| -rw-r--r-- | isisd/isis_mt.c | 15 | ||||
| -rw-r--r-- | isisd/isis_nb_config.c | 11 | ||||
| -rw-r--r-- | isisd/isis_nb_notifications.c | 36 | ||||
| -rw-r--r-- | isisd/isis_nb_state.c | 10 | ||||
| -rw-r--r-- | isisd/isis_pdu.c | 121 | ||||
| -rw-r--r-- | isisd/isis_snmp.c | 24 | ||||
| -rw-r--r-- | isisd/isis_spf.c | 18 | ||||
| -rw-r--r-- | isisd/isis_sr.c | 16 | ||||
| -rw-r--r-- | isisd/isis_te.c | 14 | ||||
| -rw-r--r-- | isisd/isis_tlvs.c | 102 | ||||
| -rw-r--r-- | isisd/isis_tx_queue.c | 17 | ||||
| -rw-r--r-- | isisd/isisd.c | 58 | ||||
| -rw-r--r-- | isisd/isisd.h | 3 | ||||
| -rw-r--r-- | lib/iso.c | 144 | ||||
| -rw-r--r-- | lib/iso.h | 49 | ||||
| -rw-r--r-- | lib/link_state.c | 11 | ||||
| -rw-r--r-- | lib/subdir.am | 2 | 
29 files changed, 573 insertions, 456 deletions
diff --git a/doc/developer/logging.rst b/doc/developer/logging.rst index b7021b69a1..2fe0a5989b 100644 --- a/doc/developer/logging.rst +++ b/doc/developer/logging.rst @@ -502,6 +502,51 @@ General utility formats     representation for a hexdump.  Non-printable characters are replaced with     a dot. +.. frrfmt:: %pIS (struct iso_address *) + +   ([IS]o Network address) - Format ISO Network Address + +   ``%pIS``: :frrfmtout:`01.0203.04O5` +   ISO Network address is printed as separated byte. The number of byte of the +   address is embeded in the `iso_net` structure. + +   ``%pISl``: :frrfmtout:`01.0203.04O5.0607.0809.1011.1213.14` - long format to +   print the long version of the ISO Network address which include the System +   ID and the PSEUDO-ID of the IS-IS system + +   Note that the `ISO_ADDR_STRLEN` define gives the total size of the string +   that could be used in conjunction to snprintfrr. Use like:: + +     char buf[ISO_ADDR_STRLEN]; +     struct iso_net addr = {.len = 4, .addr = {1, 2, 3, 4}}; +     snprintfrr(buf, ISO_ADDR_STRLEN, "%pIS", &addr); + +.. frrfmt:: %pSY (uint8_t *) + +   (IS-IS [SY]stem ID) - Format IS-IS System ID + +   ``%pSY``: :frrfmtout:`0102.0304.0506` + +.. frrfmt:: %pPN (uint8_t *) + +   (IS-IS [P]seudo [N]ode System ID) - Format IS-IS Pseudo Node System ID + +   ``%pPN``: :frrfmtout:`0102.0304.0506.07` + +.. frrfmt:: %pLS (uint8_t *) + +   (IS-IS [L]sp fragment [S]ystem ID) - Format IS-IS Pseudo System ID + +   ``%pLS``: :frrfmtout:`0102.0304.0506.07-08` + +   Note that the `ISO_SYSID_STRLEN` define gives the total size of the string +   that could be used in conjunction to snprintfrr. Use like:: + +     char buf[ISO_SYSID_STRLEN]; +     uint8_t id[8] = {1, 2, 3, 4 , 5 , 6 , 7, 8}; +     snprintfrr(buf, SYS_ID_SIZE, "%pSY", id); + +  Integer formats  ^^^^^^^^^^^^^^^ diff --git a/isisd/fabricd.c b/isisd/fabricd.c index 4fd39498a0..0be36e175a 100644 --- a/isisd/fabricd.c +++ b/isisd/fabricd.c @@ -273,8 +273,8 @@ void fabricd_initial_sync_hello(struct isis_circuit *circuit)  	if (IS_DEBUG_ADJ_PACKETS)  		zlog_debug( -			"OpenFabric: Started initial synchronization with %s on %s", -			sysid_print(circuit->u.p2p.neighbor->sysid), +			"OpenFabric: Started initial synchronization with %pSY on %s", +			circuit->u.p2p.neighbor->sysid,  			circuit->interface->name);  } @@ -359,7 +359,9 @@ static uint8_t fabricd_calculate_fabric_tier(struct isis_area *area)  		return ISIS_TIER_UNDEFINED;  	} -	zlog_info("OpenFabric: Found %s as furthest t0 from local system, dist == %u", rawlspid_print(furthest_t0->N.id), furthest_t0->d_N); +	zlog_info( +		"OpenFabric: Found %pLS as furthest t0 from local system, dist == %u", +		furthest_t0->N.id, furthest_t0->d_N);  	struct isis_spftree *remote_tree =  		isis_run_hopcount_spf(area, furthest_t0->N.id, NULL); @@ -372,8 +374,9 @@ static uint8_t fabricd_calculate_fabric_tier(struct isis_area *area)  		isis_spftree_del(remote_tree);  		return ISIS_TIER_UNDEFINED;  	} else { -		zlog_info("OpenFabric: Found %s as furthest from remote dist == %u", rawlspid_print(furthest_from_remote->N.id), -			  furthest_from_remote->d_N); +		zlog_info( +			"OpenFabric: Found %pLS as furthest from remote dist == %u", +			furthest_from_remote->N.id, furthest_from_remote->d_N);  	}  	int64_t tier = furthest_from_remote->d_N - furthest_t0->d_N; diff --git a/isisd/isis_adjacency.c b/isisd/isis_adjacency.c index 1871078cc1..30b71537e0 100644 --- a/isisd/isis_adjacency.c +++ b/isisd/isis_adjacency.c @@ -283,6 +283,8 @@ void isis_adj_process_threeway(struct isis_adjacency *adj,  }  const char *isis_adj_name(const struct isis_adjacency *adj)  { +	static char buf[ISO_SYSID_STRLEN]; +  	if (!adj)  		return "NONE"; @@ -291,8 +293,9 @@ const char *isis_adj_name(const struct isis_adjacency *adj)  	dyn = dynhn_find_by_id(adj->circuit->isis, adj->sysid);  	if (dyn)  		return dyn->hostname; -	else -		return sysid_print(adj->sysid); + +	snprintfrr(buf, sizeof(buf), "%pSY", adj->sysid); +	return buf;  }  void isis_log_adj_change(struct isis_adjacency *adj,  			 enum isis_adj_state old_state, @@ -439,9 +442,8 @@ void isis_adj_print(struct isis_adjacency *adj)  	if (dyn)  		zlog_debug("%s", dyn->hostname); -	zlog_debug("SystemId %20s SNPA %s, level %d; Holding Time %d", -		   sysid_print(adj->sysid), snpa_print(adj->snpa), adj->level, -		   adj->hold_time); +	zlog_debug("SystemId %20pSY SNPA %pSY, level %d; Holding Time %d", +		   adj->sysid, adj->snpa, adj->level, adj->hold_time);  	if (adj->ipv4_address_count) {  		zlog_debug("IPv4 Address(es):");  		for (unsigned int i = 0; i < adj->ipv4_address_count; i++) @@ -530,7 +532,7 @@ void isis_adj_print_json(struct isis_adjacency *adj, struct json_object *json,  					time2string(adj->last_upd +  						    adj->hold_time - now));  		} -		json_object_string_add(json, "snpa", snpa_print(adj->snpa)); +		json_object_string_addf(json, "snpa", "%pSY", adj->snpa);  	}  	if (detail == ISIS_UI_LEVEL_DETAIL) { @@ -581,8 +583,7 @@ void isis_adj_print_json(struct isis_adjacency *adj, struct json_object *json,  					isis_mtid2str(adj->mt_set[i]));  			}  		} -		json_object_string_add(iface_json, "snpa", -				       snpa_print(adj->snpa)); +		json_object_string_addf(iface_json, "snpa", "%pSY", adj->snpa);  		if (adj->circuit &&  		    (adj->circuit->circ_type == CIRCUIT_T_BROADCAST)) {  			dyn = dynhn_find_by_id(adj->circuit->isis, adj->lanid); @@ -593,11 +594,8 @@ void isis_adj_print_json(struct isis_adjacency *adj, struct json_object *json,  				json_object_string_add(iface_json, "lan-id",  						       buf);  			} else { -				snprintfrr(buf, sizeof(buf), "%s-%02x", -					   sysid_print(adj->lanid), -					   adj->lanid[ISIS_SYS_ID_LEN]); -				json_object_string_add(iface_json, "lan-id", -						       buf); +				json_object_string_addf(iface_json, "lan-id", +							"%pSY", adj->lanid);  			}  			json_object_int_add(iface_json, "lan-prio", @@ -626,12 +624,9 @@ void isis_adj_print_json(struct isis_adjacency *adj, struct json_object *json,  					       area_addr_json);  			for (unsigned int i = 0; i < adj->area_address_count;  			     i++) { -				json_object_string_add( -					area_addr_json, "isonet", -					isonet_print(adj->area_addresses[i] -							     .area_addr, -						     adj->area_addresses[i] -							     .addr_len)); +				json_object_string_addf( +					area_addr_json, "isonet", "%pIS", +					&adj->area_addresses[i]);  			}  		}  		if (adj->ipv4_address_count) { @@ -736,7 +731,7 @@ void isis_adj_print_vty(struct isis_adjacency *adj, struct vty *vty,  						+ adj->hold_time - now);  		} else  			vty_out(vty, "-        "); -		vty_out(vty, "%-10s", snpa_print(adj->snpa)); +		vty_out(vty, "%-10pSY", adj->snpa);  		vty_out(vty, "\n");  	} @@ -780,7 +775,7 @@ void isis_adj_print_vty(struct isis_adjacency *adj, struct vty *vty,  				vty_out(vty, "      %s\n",  					isis_mtid2str(adj->mt_set[i]));  		} -		vty_out(vty, "    SNPA: %s", snpa_print(adj->snpa)); +		vty_out(vty, "    SNPA: %pSY", adj->snpa);  		if (adj->circuit  		    && (adj->circuit->circ_type == CIRCUIT_T_BROADCAST)) {  			dyn = dynhn_find_by_id(adj->circuit->isis, adj->lanid); @@ -788,9 +783,7 @@ void isis_adj_print_vty(struct isis_adjacency *adj, struct vty *vty,  				vty_out(vty, ", LAN id: %s.%02x", dyn->hostname,  					adj->lanid[ISIS_SYS_ID_LEN]);  			else -				vty_out(vty, ", LAN id: %s.%02x", -					sysid_print(adj->lanid), -					adj->lanid[ISIS_SYS_ID_LEN]); +				vty_out(vty, ", LAN id: %pPN", adj->lanid);  			vty_out(vty, "\n");  			vty_out(vty, "    LAN Priority: %u", @@ -811,11 +804,8 @@ void isis_adj_print_vty(struct isis_adjacency *adj, struct vty *vty,  			vty_out(vty, "    Area Address(es):\n");  			for (unsigned int i = 0; i < adj->area_address_count;  			     i++) { -				vty_out(vty, "      %s\n", -					isonet_print(adj->area_addresses[i] -							     .area_addr, -						     adj->area_addresses[i] -							     .addr_len)); +				vty_out(vty, "      %pIS\n", +					&adj->area_addresses[i]);  			}  		}  		if (adj->ipv4_address_count) { diff --git a/isisd/isis_adjacency.h b/isisd/isis_adjacency.h index f02f7a68ea..c0c8e68145 100644 --- a/isisd/isis_adjacency.h +++ b/isisd/isis_adjacency.h @@ -69,7 +69,7 @@ struct isis_adjacency {  	struct isis_dis_record dis_record[DIS_RECORDS * ISIS_LEVELS];  	enum isis_adj_state adj_state;    /* adjacencyState */  	enum isis_adj_usage adj_usage;    /* adjacencyUsage */ -	struct area_addr *area_addresses; /* areaAdressesOfNeighbour */ +	struct iso_address *area_addresses; /* areaAdressesOfNeighbour */  	unsigned int area_address_count;  	struct nlpids nlpids; /* protocols spoken ... */  	struct in_addr *ipv4_addresses; diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c index 64b405737f..feab451233 100644 --- a/isisd/isis_circuit.c +++ b/isisd/isis_circuit.c @@ -695,10 +695,9 @@ int isis_circuit_up(struct isis_circuit *circuit)  		}  #ifdef EXTREME_DEGUG  		if (IS_DEBUG_EVENTS) -			zlog_debug("%s: if_id %d, isomtu %d snpa %s", __func__, -				   circuit->interface->ifindex, -				   ISO_MTU(circuit), -				   snpa_print(circuit->u.bc.snpa)); +			zlog_debug("%s: if_id %d, isomtu %d snpa %pSY", +				   __func__, circuit->interface->ifindex, +				   ISO_MTU(circuit), circuit->u.bc.snpa);  #endif /* EXTREME_DEBUG */  		circuit->u.bc.adjdb[0] = list_new(); @@ -995,8 +994,8 @@ void isis_circuit_print_json(struct isis_circuit *circuit,  		json_object_string_add(iface_json, "level",  				       circuit_t2string(circuit->is_type));  		if (circuit->circ_type == CIRCUIT_T_BROADCAST) -			json_object_string_add(iface_json, "snpa", -					       snpa_print(circuit->u.bc.snpa)); +			json_object_string_addf(iface_json, "snpa", "%pSY", +						circuit->u.bc.snpa);  		levels_json = json_object_new_array(); @@ -1122,8 +1121,7 @@ void isis_circuit_print_vty(struct isis_circuit *circuit, struct vty *vty,  			circuit_type2string(circuit->circ_type));  		vty_out(vty, ", Level: %s", circuit_t2string(circuit->is_type));  		if (circuit->circ_type == CIRCUIT_T_BROADCAST) -			vty_out(vty, ", SNPA: %-10s", -				snpa_print(circuit->u.bc.snpa)); +			vty_out(vty, ", SNPA: %-10pSY", circuit->u.bc.snpa);  		vty_out(vty, "\n");  		if (circuit->is_type & IS_LEVEL_1) {  			vty_out(vty, "    Level-1 Information:\n"); diff --git a/isisd/isis_common.h b/isisd/isis_common.h index c908dc2e24..2ded68f84d 100644 --- a/isisd/isis_common.h +++ b/isisd/isis_common.h @@ -11,14 +11,6 @@  #ifndef ISIS_COMMON_H  #define ISIS_COMMON_H -/* - * Area Address - */ -struct area_addr { -	uint8_t addr_len; -	uint8_t area_addr[20]; -}; -  struct isis_passwd {  	uint8_t len;  #define ISIS_PASSWD_TYPE_UNUSED   0 diff --git a/isisd/isis_dynhn.c b/isisd/isis_dynhn.c index 446e522019..61c49d08a7 100644 --- a/isisd/isis_dynhn.c +++ b/isisd/isis_dynhn.c @@ -145,12 +145,10 @@ void dynhn_print_all(struct vty *vty, struct isis *isis)  	vty_out(vty, "Level  System ID      Dynamic Hostname\n");  	for (ALL_LIST_ELEMENTS_RO(isis->dyn_cache, node, dyn)) {  		vty_out(vty, "%-7d", dyn->level); -		vty_out(vty, "%-15s%-15s\n", sysid_print(dyn->id), -			dyn->hostname); +		vty_out(vty, "%pSY %-15s\n", dyn->id, dyn->hostname);  	} -	vty_out(vty, "     * %s %s\n", sysid_print(isis->sysid), -		cmd_hostname_get()); +	vty_out(vty, "     * %pSY %s\n", isis->sysid, cmd_hostname_get());  	return;  } diff --git a/isisd/isis_events.c b/isisd/isis_events.c index 8a2a2ab971..32231a079f 100644 --- a/isisd/isis_events.c +++ b/isisd/isis_events.c @@ -217,8 +217,8 @@ void isis_event_auth_failure(char *area_tag, const char *error_string,  			     uint8_t *sysid)  {  	if (IS_DEBUG_EVENTS) -		zlog_debug("ISIS-Evt (%s) Authentication failure %s from %s", -			   area_tag, error_string, sysid_print(sysid)); +		zlog_debug("ISIS-Evt (%s) Authentication failure %s from %pSY", +			   area_tag, error_string, sysid);  	return;  } diff --git a/isisd/isis_lfa.c b/isisd/isis_lfa.c index 7a25a92535..abb6168393 100644 --- a/isisd/isis_lfa.c +++ b/isisd/isis_lfa.c @@ -1466,8 +1466,8 @@ int isis_rlfa_activate(struct isis_spftree *spftree, struct rlfa *rlfa,  		if (ldp_label == MPLS_INVALID_LABEL) {  			if (IS_DEBUG_LFA)  				zlog_debug( -					"ISIS-LFA: failed to activate RLFA: missing LDP label to reach PQ node through %s", -					sysid_print(vadj->sadj->id)); +					"ISIS-LFA: failed to activate RLFA: missing LDP label to reach PQ node through %pSY", +					vadj->sadj->id);  			return -1;  		} diff --git a/isisd/isis_lsp.c b/isisd/isis_lsp.c index d569f6bd5b..fb69448d04 100644 --- a/isisd/isis_lsp.c +++ b/isisd/isis_lsp.c @@ -193,10 +193,9 @@ int lsp_compare(char *areatag, struct isis_lsp *lsp, uint32_t seqno,  		|| (lsp->hdr.rem_lifetime != 0 && rem_lifetime != 0))) {  		if (IS_DEBUG_SNP_PACKETS) {  			zlog_debug( -				"ISIS-Snp (%s): Compare LSP %s seq 0x%08x, cksum 0x%04hx, lifetime %hus", -				areatag, rawlspid_print(lsp->hdr.lsp_id), -				lsp->hdr.seqno, lsp->hdr.checksum, -				lsp->hdr.rem_lifetime); +				"ISIS-Snp (%s): Compare LSP %pLS seq 0x%08x, cksum 0x%04hx, lifetime %hus", +				areatag, lsp->hdr.lsp_id, lsp->hdr.seqno, +				lsp->hdr.checksum, lsp->hdr.rem_lifetime);  			zlog_debug(  				"ISIS-Snp (%s):         is equal to ours seq 0x%08x, cksum 0x%04hx, lifetime %hus",  				areatag, seqno, checksum, rem_lifetime); @@ -223,9 +222,9 @@ int lsp_compare(char *areatag, struct isis_lsp *lsp, uint32_t seqno,  			&& lsp->hdr.rem_lifetime)))) {  		if (IS_DEBUG_SNP_PACKETS) {  			zlog_debug( -				"ISIS-Snp (%s): Compare LSP %s seq 0x%08x, cksum 0x%04hx, lifetime %hus", -				areatag, rawlspid_print(lsp->hdr.lsp_id), seqno, -				checksum, rem_lifetime); +				"ISIS-Snp (%s): Compare LSP %pLS seq 0x%08x, cksum 0x%04hx, lifetime %hus", +				areatag, lsp->hdr.lsp_id, seqno, checksum, +				rem_lifetime);  			zlog_debug(  				"ISIS-Snp (%s):       is newer than ours seq 0x%08x, cksum 0x%04hx, lifetime %hus",  				areatag, lsp->hdr.seqno, lsp->hdr.checksum, @@ -234,9 +233,10 @@ int lsp_compare(char *areatag, struct isis_lsp *lsp, uint32_t seqno,  		return LSP_NEWER;  	}  	if (IS_DEBUG_SNP_PACKETS) { -		zlog_debug("ISIS-Snp (%s): Compare LSP %s seq 0x%08x, cksum 0x%04hx, lifetime %hus", -			   areatag, rawlspid_print(lsp->hdr.lsp_id), seqno, -			   checksum, rem_lifetime); +		zlog_debug( +			"ISIS-Snp (%s): Compare LSP %pLS seq 0x%08x, cksum 0x%04hx, lifetime %hus", +			areatag, lsp->hdr.lsp_id, seqno, checksum, +			rem_lifetime);  		zlog_debug(  			"ISIS-Snp (%s):       is older than ours seq 0x%08x, cksum 0x%04hx, lifetime %hus",  			areatag, lsp->hdr.seqno, lsp->hdr.checksum, @@ -554,8 +554,8 @@ void lsp_update(struct isis_lsp *lsp, struct isis_lsp_hdr *hdr,  	if (lsp->own_lsp) {  		flog_err(  			EC_LIB_DEVELOPMENT, -			"ISIS-Upd (%s): BUG updating LSP %s still marked as own LSP", -			area->area_tag, rawlspid_print(lsp->hdr.lsp_id)); +			"ISIS-Upd (%s): BUG updating LSP %pLS still marked as own LSP", +			area->area_tag, lsp->hdr.lsp_id);  		lsp_clear_data(lsp);  		lsp->own_lsp = 0;  	} @@ -634,10 +634,8 @@ struct isis_lsp *lsp_new(struct isis_area *area, uint8_t *lsp_id,  	put_lsp_hdr(lsp, NULL, false);  	if (IS_DEBUG_EVENTS) -		zlog_debug("New LSP with ID %s-%02x-%02x len %d seqnum %08x", -			   sysid_print(lsp_id), LSP_PSEUDO_ID(lsp->hdr.lsp_id), -			   LSP_FRAGMENT(lsp->hdr.lsp_id), lsp->hdr.pdu_len, -			   lsp->hdr.seqno); +		zlog_debug("New LSP with ID %pLS len %d seqnum %08x", lsp_id, +			   lsp->hdr.pdu_len, lsp->hdr.seqno);  	return lsp;  } @@ -704,7 +702,7 @@ void lspid_print(uint8_t *lsp_id, char *dest, size_t dest_len, char dynhost,  	else if (!memcmp(isis->sysid, lsp_id, ISIS_SYS_ID_LEN) && dynhost)  		snprintf(id, sizeof(id), "%.14s", cmd_hostname_get());  	else -		memcpy(id, sysid_print(lsp_id), 15); +		snprintf(id, sizeof(id), "%pSY", lsp_id);  	if (frag)  		snprintf(dest, dest_len, "%s.%02x-%02x", id, @@ -1250,10 +1248,8 @@ static void lsp_build(struct isis_lsp *lsp, struct isis_area *area)  				if (LSP_PSEUDO_ID(ne_id)) {  					if (area->oldmetric) {  						lsp_debug( -							"ISIS (%s): Adding DIS %s.%02x as old-style neighbor", -							area->area_tag, -							sysid_print(ne_id), -							LSP_PSEUDO_ID(ne_id)); +							"ISIS (%s): Adding DIS %pPN as old-style neighbor", +							area->area_tag, ne_id);  						isis_tlvs_add_oldstyle_reach(  							lsp->tlvs, ne_id,  							metric); @@ -1279,9 +1275,8 @@ static void lsp_build(struct isis_lsp *lsp, struct isis_area *area)  				if (area->oldmetric) {  					lsp_debug( -						"ISIS (%s): Adding old-style is reach for %s", -						area->area_tag, -						sysid_print(ne_id)); +						"ISIS (%s): Adding old-style is reach for %pSY", +						area->area_tag, ne_id);  					isis_tlvs_add_oldstyle_reach(  						lsp->tlvs, ne_id, metric);  				} @@ -1424,12 +1419,12 @@ int lsp_generate(struct isis_area *area, int level)  			refresh_time, &area->t_lsp_refresh[level - 1]);  	if (IS_DEBUG_UPDATE_PACKETS) { -		zlog_debug("ISIS-Upd (%s): Building L%d LSP %s, len %hu, seq 0x%08x, cksum 0x%04hx, lifetime %hus refresh %hus", -			   area->area_tag, level, -			   rawlspid_print(newlsp->hdr.lsp_id), -			   newlsp->hdr.pdu_len, newlsp->hdr.seqno, -			   newlsp->hdr.checksum, newlsp->hdr.rem_lifetime, -			   refresh_time); +		zlog_debug( +			"ISIS-Upd (%s): Building L%d LSP %pLS, len %hu, seq 0x%08x, cksum 0x%04hx, lifetime %hus refresh %hus", +			area->area_tag, level, newlsp->hdr.lsp_id, +			newlsp->hdr.pdu_len, newlsp->hdr.seqno, +			newlsp->hdr.checksum, newlsp->hdr.rem_lifetime, +			refresh_time);  	}  	sched_debug(  		"ISIS (%s): Built L%d LSP. Set triggered regenerate to non-pending.", @@ -1506,8 +1501,8 @@ static int lsp_regenerate(struct isis_area *area, int level)  	if (IS_DEBUG_UPDATE_PACKETS) {  		zlog_debug( -			"ISIS-Upd (%s): Refreshed our L%d LSP %s, len %hu, seq 0x%08x, cksum 0x%04hx, lifetime %hus refresh %hus", -			area->area_tag, level, rawlspid_print(lsp->hdr.lsp_id), +			"ISIS-Upd (%s): Refreshed our L%d LSP %pLS, len %hu, seq 0x%08x, cksum 0x%04hx, lifetime %hus refresh %hus", +			area->area_tag, level, lsp->hdr.lsp_id,  			lsp->hdr.pdu_len, lsp->hdr.seqno, lsp->hdr.checksum,  			lsp->hdr.rem_lifetime, refresh_time);  	} @@ -1698,9 +1693,9 @@ static void lsp_build_pseudo(struct isis_lsp *lsp, struct isis_circuit *circuit,  	lsp_clear_data(lsp);  	lsp->tlvs = isis_alloc_tlvs();  	lsp_debug( -		"ISIS (%s): Constructing pseudo LSP %s for interface %s level %d", -		area->area_tag, rawlspid_print(lsp->hdr.lsp_id), -		circuit->interface->name, level); +		"ISIS (%s): Constructing pseudo LSP %pLS for interface %s level %d", +		area->area_tag, lsp->hdr.lsp_id, circuit->interface->name, +		level);  	lsp->level = level;  	/* RFC3787  section 4 SHOULD not set overload bit in pseudo LSPs */ @@ -1717,10 +1712,8 @@ static void lsp_build_pseudo(struct isis_lsp *lsp, struct isis_circuit *circuit,  	if (circuit->area->oldmetric) {  		isis_tlvs_add_oldstyle_reach(lsp->tlvs, ne_id, 0); -		lsp_debug( -			"ISIS (%s): Adding %s.%02x as old-style neighbor (self)", -			area->area_tag, sysid_print(ne_id), -			LSP_PSEUDO_ID(ne_id)); +		lsp_debug("ISIS (%s): Adding %pPN as old-style neighbor (self)", +			  area->area_tag, ne_id);  	}  	if (circuit->area->newmetric) {  		if (area_is_mt(circuit->area)) @@ -1728,10 +1721,8 @@ static void lsp_build_pseudo(struct isis_lsp *lsp, struct isis_circuit *circuit,  		else  			mtid = ISIS_MT_DISABLE;  		isis_tlvs_add_extended_reach(lsp->tlvs, mtid, ne_id, 0, NULL); -		lsp_debug( -			"ISIS (%s): Adding %s.%02x as te-style neighbor (self)", -			area->area_tag, sysid_print(ne_id), -			LSP_PSEUDO_ID(ne_id)); +		lsp_debug("ISIS (%s): Adding %pPN as te-style neighbor (self)", +			  area->area_tag, ne_id);  	}  	adj_list = list_new(); @@ -1740,8 +1731,8 @@ static void lsp_build_pseudo(struct isis_lsp *lsp, struct isis_circuit *circuit,  	for (ALL_LIST_ELEMENTS_RO(adj_list, node, adj)) {  		if (!(adj->level & level)) {  			lsp_debug( -				"ISIS (%s): Ignoring neighbor %s, level does not intersect", -				area->area_tag, sysid_print(adj->sysid)); +				"ISIS (%s): Ignoring neighbor %pSY, level does not intersect", +				area->area_tag, adj->sysid);  			continue;  		} @@ -1753,8 +1744,8 @@ static void lsp_build_pseudo(struct isis_lsp *lsp, struct isis_circuit *circuit,  		    && !(level == IS_LEVEL_2  			 && adj->sys_type == ISIS_SYSTYPE_L2_IS)) {  			lsp_debug( -				"ISIS (%s): Ignoring neighbor %s, level does not match", -				area->area_tag, sysid_print(adj->sysid)); +				"ISIS (%s): Ignoring neighbor %pSY, level does not match", +				area->area_tag, adj->sysid);  			continue;  		} @@ -1762,18 +1753,16 @@ static void lsp_build_pseudo(struct isis_lsp *lsp, struct isis_circuit *circuit,  		if (circuit->area->oldmetric) {  			isis_tlvs_add_oldstyle_reach(lsp->tlvs, ne_id, 0);  			lsp_debug( -				"ISIS (%s): Adding %s.%02x as old-style neighbor (peer)", -				area->area_tag, sysid_print(ne_id), -				LSP_PSEUDO_ID(ne_id)); +				"ISIS (%s): Adding %pPN as old-style neighbor (peer)", +				area->area_tag, ne_id);  		}  		if (circuit->area->newmetric) {  			isis_tlvs_add_extended_reach(lsp->tlvs,  						     ISIS_MT_IPV4_UNICAST,  						     ne_id, 0, NULL);  			lsp_debug( -				"ISIS (%s): Adding %s.%02x as te-style neighbor (peer)", -				area->area_tag, sysid_print(ne_id), -				LSP_PSEUDO_ID(ne_id)); +				"ISIS (%s): Adding %pPN as te-style neighbor (peer)", +				area->area_tag, ne_id);  		}  	}  	list_delete(&adj_list); @@ -1832,10 +1821,9 @@ int lsp_generate_pseudo(struct isis_circuit *circuit, int level)  	if (IS_DEBUG_UPDATE_PACKETS) {  		zlog_debug( -			"ISIS-Upd (%s): Built L%d Pseudo LSP %s, len %hu, seq 0x%08x, cksum 0x%04hx, lifetime %hus, refresh %hus", -			circuit->area->area_tag, level, -			rawlspid_print(lsp->hdr.lsp_id), lsp->hdr.pdu_len, -			lsp->hdr.seqno, lsp->hdr.checksum, +			"ISIS-Upd (%s): Built L%d Pseudo LSP %pLS, len %hu, seq 0x%08x, cksum 0x%04hx, lifetime %hus, refresh %hus", +			circuit->area->area_tag, level, lsp->hdr.lsp_id, +			lsp->hdr.pdu_len, lsp->hdr.seqno, lsp->hdr.checksum,  			lsp->hdr.rem_lifetime, refresh_time);  	} @@ -1863,8 +1851,8 @@ static int lsp_regenerate_pseudo(struct isis_circuit *circuit, int level)  	if (!lsp) {  		flog_err(EC_LIB_DEVELOPMENT, -			 "lsp_regenerate_pseudo: no l%d LSP %s found!", level, -			 rawlspid_print(lsp_id)); +			 "lsp_regenerate_pseudo: no l%d LSP %pLS found!", level, +			 lsp_id);  		return ISIS_ERROR;  	} @@ -1887,10 +1875,9 @@ static int lsp_regenerate_pseudo(struct isis_circuit *circuit, int level)  	if (IS_DEBUG_UPDATE_PACKETS) {  		zlog_debug( -			"ISIS-Upd (%s): Refreshed L%d Pseudo LSP %s, len %hu, seq 0x%08x, cksum 0x%04hx, lifetime %hus, refresh %hus", -			circuit->area->area_tag, level, -			rawlspid_print(lsp->hdr.lsp_id), lsp->hdr.pdu_len, -			lsp->hdr.seqno, lsp->hdr.checksum, +			"ISIS-Upd (%s): Refreshed L%d Pseudo LSP %pLS, len %hu, seq 0x%08x, cksum 0x%04hx, lifetime %hus, refresh %hus", +			circuit->area->area_tag, level, lsp->hdr.lsp_id, +			lsp->hdr.pdu_len, lsp->hdr.seqno, lsp->hdr.checksum,  			lsp->hdr.rem_lifetime, refresh_time);  	} @@ -2101,10 +2088,9 @@ void lsp_tick(struct event *thread)  			if (lsp->age_out == 0) {  				zlog_debug( -					"ISIS-Upd (%s): L%u LSP %s seq 0x%08x aged out", +					"ISIS-Upd (%s): L%u LSP %pLS seq 0x%08x aged out",  					area->area_tag, lsp->level, -					rawlspid_print(lsp->hdr.lsp_id), -					lsp->hdr.seqno); +					lsp->hdr.lsp_id, lsp->hdr.seqno);  				/* if we're aging out fragment 0, lsp_destroy()  				 * below will delete all other fragments too, @@ -2207,11 +2193,10 @@ void _lsp_flood(struct isis_lsp *lsp, struct isis_circuit *circuit,  		const char *func, const char *file, int line)  {  	if (IS_DEBUG_FLOODING) { -		zlog_debug("Flooding LSP %s%s%s (From %s %s:%d)", -			   rawlspid_print(lsp->hdr.lsp_id), -			   circuit ? " except on " : "", -			   circuit ? circuit->interface->name : "", -			   func, file, line); +		zlog_debug("Flooding LSP %pLS%s%s (From %s %s:%d)", +			   lsp->hdr.lsp_id, circuit ? " except on " : "", +			   circuit ? circuit->interface->name : "", func, file, +			   line);  	}  	if (!fabricd) diff --git a/isisd/isis_misc.c b/isisd/isis_misc.c index 95d24036ec..09ffa3479a 100644 --- a/isisd/isis_misc.c +++ b/isisd/isis_misc.c @@ -32,48 +32,13 @@  #include "isisd/isis_dynhn.h"  /* staticly assigned vars for printing purposes */ +static char sys_hostname[ISO_SYSID_STRLEN];  struct in_addr new_prefix; -/* len of xx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xx */ -/* + place for #0 termination */ -char isonet[51];  /* len of xxYxxMxWxdxxhxxmxxs + place for #0 termination */  char datestring[20];  char nlpidstring[30];  /* - * This converts the isonet to its printable format - */ -const char *isonet_print(const uint8_t *from, int len) -{ -	int i = 0; -	char tbuf[4]; -	isonet[0] = '\0'; - -	if (!from) -		return "unknown"; - -	while (i < len) { -		if (i & 1) { -			snprintf(tbuf, sizeof(tbuf), "%02x", *(from + i)); -			strlcat(isonet, tbuf, sizeof(isonet)); -		} else { -			if (i == (len - 1)) { /* No dot at the end of address */ -				snprintf(tbuf, sizeof(tbuf), "%02x", -					 *(from + i)); -				strlcat(isonet, tbuf, sizeof(isonet)); -			} else { -				snprintf(tbuf, sizeof(tbuf), "%02x.", -					 *(from + i)); -				strlcat(isonet, tbuf, sizeof(isonet)); -			} -		} -		i++; -	} - -	return isonet; -} - -/*   * Returns 0 on error, length of buff on ok   * extract dot from the dotted str, and insert all the number in a buff   */ @@ -307,60 +272,6 @@ const char *isis_hello_padding2string(int hello_padding_type)  	return NULL; /* not reached */  } -/* - * Print functions - we print to static vars - */ -const char *snpa_print(const uint8_t *from) -{ -	return isis_format_id(from, ISIS_SYS_ID_LEN); -} - -const char *sysid_print(const uint8_t *from) -{ -	return isis_format_id(from, ISIS_SYS_ID_LEN); -} - -const char *rawlspid_print(const uint8_t *from) -{ -	return isis_format_id(from, 8); -} - -#define FORMAT_ID_SIZE sizeof("0000.0000.0000.00-00") -const char *isis_format_id(const uint8_t *id, size_t len) -{ -#define FORMAT_BUF_COUNT 4 -	static char buf_ring[FORMAT_BUF_COUNT][FORMAT_ID_SIZE]; -	static size_t cur_buf = 0; - -	char *rv; - -	cur_buf++; -	if (cur_buf >= FORMAT_BUF_COUNT) -		cur_buf = 0; - -	rv = buf_ring[cur_buf]; - -	if (!id) { -		snprintf(rv, FORMAT_ID_SIZE, "unknown"); -		return rv; -	} - -	if (len < 6) { -		snprintf(rv, FORMAT_ID_SIZE, "Short ID"); -		return rv; -	} - -	snprintf(rv, FORMAT_ID_SIZE, "%02x%02x.%02x%02x.%02x%02x", id[0], id[1], -		 id[2], id[3], id[4], id[5]); - -	if (len > 6) -		snprintf(rv + 14, FORMAT_ID_SIZE - 14, ".%02x", id[6]); -	if (len > 7) -		snprintf(rv + 17, FORMAT_ID_SIZE - 17, "-%02x", id[7]); - -	return rv; -} -  const char *time2string(uint32_t time)  {  	uint32_t rest; @@ -474,7 +385,8 @@ const char *print_sys_hostname(const uint8_t *sysid)  			return dyn->hostname;  	} -	return sysid_print(sysid); +	snprintfrr(sys_hostname, ISO_SYSID_STRLEN, "%pSY", sysid); +	return sys_hostname;  }  /* @@ -508,11 +420,11 @@ void zlog_dump_data(void *data, int len)  		/* store hex str (for left side) */  		snprintf(bytestr, sizeof(bytestr), "%02X ", *p); -		strncat(hexstr, bytestr, sizeof(hexstr) - strlen(hexstr) - 1); +		strlcat(hexstr, bytestr, sizeof(hexstr) - strlen(hexstr) - 1);  		/* store char str (for right side) */  		snprintf(bytestr, sizeof(bytestr), "%c", c); -		strncat(charstr, bytestr, +		strlcat(charstr, bytestr,  			sizeof(charstr) - strlen(charstr) - 1);  		if ((i % 16) == 0) { @@ -523,9 +435,9 @@ void zlog_dump_data(void *data, int len)  			charstr[0] = 0;  		} else if ((i % 8) == 0) {  			/* half line: add whitespaces */ -			strncat(hexstr, "  ", +			strlcat(hexstr, "  ",  				sizeof(hexstr) - strlen(hexstr) - 1); -			strncat(charstr, " ", +			strlcat(charstr, " ",  				sizeof(charstr) - strlen(charstr) - 1);  		}  		p++; /* next byte */ diff --git a/isisd/isis_misc.h b/isisd/isis_misc.h index 01d9abe869..3a1d136b1d 100644 --- a/isisd/isis_misc.h +++ b/isisd/isis_misc.h @@ -28,11 +28,6 @@ int sysid2buff(uint8_t *, const char *);  /*   * Printing functions   */ -const char *isonet_print(const uint8_t *, int len); -const char *sysid_print(const uint8_t *); -const char *snpa_print(const uint8_t *); -const char *rawlspid_print(const uint8_t *); -const char *isis_format_id(const uint8_t *id, size_t len);  const char *time2string(uint32_t);  const char *nlpid2str(uint8_t nlpid);  /* typedef struct nlpids nlpids; */ diff --git a/isisd/isis_mt.c b/isisd/isis_mt.c index fcc0f53815..d04a24dc46 100644 --- a/isisd/isis_mt.c +++ b/isisd/isis_mt.c @@ -507,8 +507,8 @@ static void tlvs_add_mt_set(struct isis_area *area, struct isis_tlvs *tlvs,  	/* Check if MT is enable for this area */  	if (!area_is_mt(area)) {  		lsp_debug( -			"ISIS (%s): Adding %s.%02x as te-style neighbor (MT disable)", -			area->area_tag, sysid_print(id), LSP_PSEUDO_ID(id)); +			"ISIS (%s): Adding %pPN as te-style neighbor (MT disable)", +			area->area_tag, id);  		isis_tlvs_add_extended_reach(tlvs, ISIS_MT_DISABLE, id, metric,  					     ext);  		return; @@ -518,15 +518,12 @@ static void tlvs_add_mt_set(struct isis_area *area, struct isis_tlvs *tlvs,  	for (unsigned int i = 0; i < mt_count; i++) {  		uint16_t mtid = mt_set[i];  		if (mt_set[i] == ISIS_MT_IPV4_UNICAST) { -			lsp_debug( -				"ISIS (%s): Adding %s.%02x as te-style neighbor", -				area->area_tag, sysid_print(id), -				LSP_PSEUDO_ID(id)); +			lsp_debug("ISIS (%s): Adding %pPN as te-style neighbor", +				  area->area_tag, id);  		} else {  			lsp_debug( -				"ISIS (%s): Adding %s.%02x as mt-style neighbor for %s", -				area->area_tag, sysid_print(id), -				LSP_PSEUDO_ID(id), isis_mtid2str(mtid)); +				"ISIS (%s): Adding %pPN as mt-style neighbor for %s", +				area->area_tag, id, isis_mtid2str(mtid));  		}  		isis_tlvs_add_extended_reach(tlvs, mtid, id, metric, ext);  	} diff --git a/isisd/isis_nb_config.c b/isisd/isis_nb_config.c index 3817465a64..51e074e803 100644 --- a/isisd/isis_nb_config.c +++ b/isisd/isis_nb_config.c @@ -103,14 +103,14 @@ int isis_instance_is_type_modify(struct nb_cb_modify_args *args)  }  struct sysid_iter { -	struct area_addr *addr; +	struct iso_address *addr;  	bool same;  };  static int sysid_iter_cb(const struct lyd_node *dnode, void *arg)  {  	struct sysid_iter *iter = arg; -	struct area_addr addr; +	struct iso_address addr;  	const char *net;  	net = yang_dnode_get_string(dnode, NULL); @@ -130,7 +130,7 @@ static int sysid_iter_cb(const struct lyd_node *dnode, void *arg)  int isis_instance_area_address_create(struct nb_cb_create_args *args)  {  	struct isis_area *area; -	struct area_addr addr, *addrr = NULL, *addrp = NULL; +	struct iso_address addr, *addrr = NULL, *addrp = NULL;  	struct listnode *node;  	struct sysid_iter iter;  	uint8_t buff[255]; @@ -161,7 +161,8 @@ int isis_instance_area_address_create(struct nb_cb_create_args *args)  		}  		break;  	case NB_EV_PREPARE: -		addrr = XMALLOC(MTYPE_ISIS_AREA_ADDR, sizeof(struct area_addr)); +		addrr = XMALLOC(MTYPE_ISIS_AREA_ADDR, +				sizeof(struct iso_address));  		addrr->addr_len = dotformat2buff(buff, net_title);  		memcpy(addrr->area_addr, buff, addrr->addr_len);  		args->resource->ptr = addrr; @@ -217,7 +218,7 @@ int isis_instance_area_address_create(struct nb_cb_create_args *args)  int isis_instance_area_address_destroy(struct nb_cb_destroy_args *args)  { -	struct area_addr addr, *addrp = NULL; +	struct iso_address addr, *addrp = NULL;  	struct listnode *node;  	uint8_t buff[255];  	struct isis_area *area; diff --git a/isisd/isis_nb_notifications.c b/isisd/isis_nb_notifications.c index 94b1c47d3e..5a1e312b4d 100644 --- a/isisd/isis_nb_notifications.c +++ b/isisd/isis_nb_notifications.c @@ -134,6 +134,7 @@ void isis_notif_lsp_too_large(const struct isis_circuit *circuit,  	const char *xpath = "/frr-isisd:lsp-too-large";  	struct list *arguments = yang_data_list_new();  	char xpath_arg[XPATH_MAXLEN]; +	char xpath_value[ISO_SYSID_STRLEN];  	struct yang_data *data;  	struct isis_area *area = circuit->area; @@ -143,7 +144,8 @@ void isis_notif_lsp_too_large(const struct isis_circuit *circuit,  	data = yang_data_new_uint32(xpath_arg, pdu_size);  	listnode_add(arguments, data);  	snprintf(xpath_arg, sizeof(xpath_arg), "%s/lsp-id", xpath); -	data = yang_data_new_string(xpath_arg, rawlspid_print(lsp_id)); +	snprintfrr(xpath_value, ISO_SYSID_STRLEN, "%pLS", lsp_id); +	data = yang_data_new_string(xpath_arg, xpath_value);  	listnode_add(arguments, data);  	hook_call(isis_hook_lsp_too_large, circuit, pdu_size, lsp_id); @@ -180,11 +182,13 @@ void isis_notif_corrupted_lsp(const struct isis_area *area,  	const char *xpath = "/frr-isisd:corrupted-lsp-detected";  	struct list *arguments = yang_data_list_new();  	char xpath_arg[XPATH_MAXLEN]; +	char xpath_value[ISO_SYSID_STRLEN];  	struct yang_data *data;  	notif_prep_instance_hdr(xpath, area, "default", arguments);  	snprintf(xpath_arg, sizeof(xpath_arg), "%s/lsp-id", xpath); -	data = yang_data_new_string(xpath_arg, rawlspid_print(lsp_id)); +	snprintfrr(xpath_value, ISO_SYSID_STRLEN, "%pLS", lsp_id); +	data = yang_data_new_string(xpath_arg, xpath_value);  	listnode_add(arguments, data);  	hook_call(isis_hook_corrupted_lsp, area); @@ -201,11 +205,13 @@ void isis_notif_lsp_exceed_max(const struct isis_area *area,  	const char *xpath = "/frr-isisd:attempt-to-exceed-max-sequence";  	struct list *arguments = yang_data_list_new();  	char xpath_arg[XPATH_MAXLEN]; +	char xpath_value[ISO_SYSID_STRLEN];  	struct yang_data *data;  	notif_prep_instance_hdr(xpath, area, "default", arguments);  	snprintf(xpath_arg, sizeof(xpath_arg), "%s/lsp-id", xpath); -	data = yang_data_new_string(xpath_arg, rawlspid_print(lsp_id)); +	snprintfrr(xpath_value, ISO_SYSID_STRLEN, "%pLS", lsp_id); +	data = yang_data_new_string(xpath_arg, xpath_value);  	listnode_add(arguments, data);  	hook_call(isis_hook_lsp_exceed_max, area, lsp_id); @@ -299,6 +305,7 @@ void isis_notif_adj_state_change(const struct isis_adjacency *adj,  	const char *xpath = "/frr-isisd:adjacency-state-change";  	struct list *arguments = yang_data_list_new();  	char xpath_arg[XPATH_MAXLEN]; +	char xpath_value[ISO_SYSID_STRLEN];  	struct yang_data *data;  	struct isis_circuit *circuit = adj->circuit;  	struct isis_area *area = circuit->area; @@ -312,7 +319,8 @@ void isis_notif_adj_state_change(const struct isis_adjacency *adj,  		listnode_add(arguments, data);  	}  	snprintf(xpath_arg, sizeof(xpath_arg), "%s/neighbor-system-id", xpath); -	data = yang_data_new_string(xpath_arg, sysid_print(adj->sysid)); +	snprintfrr(xpath_value, ISO_SYSID_STRLEN, "%pSY", adj->sysid); +	data = yang_data_new_string(xpath_arg, xpath_value);  	listnode_add(arguments, data);  	snprintf(xpath_arg, sizeof(xpath_arg), "%s/state", xpath); @@ -389,13 +397,15 @@ void isis_notif_lsp_received(const struct isis_circuit *circuit,  	const char *xpath = "/frr-isisd:lsp-received";  	struct list *arguments = yang_data_list_new();  	char xpath_arg[XPATH_MAXLEN]; +	char xpath_value[ISO_SYSID_STRLEN];  	struct yang_data *data;  	struct isis_area *area = circuit->area;  	notif_prep_instance_hdr(xpath, area, "default", arguments);  	notif_prepr_iface_hdr(xpath, circuit, arguments);  	snprintf(xpath_arg, sizeof(xpath_arg), "%s/lsp-id", xpath); -	data = yang_data_new_string(xpath_arg, rawlspid_print(lsp_id)); +	snprintfrr(xpath_value, ISO_SYSID_STRLEN, "%pLS", lsp_id); +	data = yang_data_new_string(xpath_arg, xpath_value);  	listnode_add(arguments, data);  	snprintf(xpath_arg, sizeof(xpath_arg), "%s/sequence", xpath);  	data = yang_data_new_uint32(xpath_arg, seqno); @@ -419,11 +429,13 @@ void isis_notif_lsp_gen(const struct isis_area *area, const uint8_t *lsp_id,  	const char *xpath = "/frr-isisd:lsp-generation";  	struct list *arguments = yang_data_list_new();  	char xpath_arg[XPATH_MAXLEN]; +	char xpath_value[ISO_SYSID_STRLEN];  	struct yang_data *data;  	notif_prep_instance_hdr(xpath, area, "default", arguments);  	snprintf(xpath_arg, sizeof(xpath_arg), "%s/lsp-id", xpath); -	data = yang_data_new_string(xpath_arg, rawlspid_print(lsp_id)); +	snprintfrr(xpath_value, ISO_SYSID_STRLEN, "%pLS", lsp_id); +	data = yang_data_new_string(xpath_arg, xpath_value);  	listnode_add(arguments, data);  	snprintf(xpath_arg, sizeof(xpath_arg), "%s/sequence", xpath);  	data = yang_data_new_uint32(xpath_arg, seqno); @@ -503,13 +515,15 @@ void isis_notif_lsp_error(const struct isis_circuit *circuit,  	const char *xpath = "/frr-isisd:lsp-error-detected";  	struct list *arguments = yang_data_list_new();  	char xpath_arg[XPATH_MAXLEN]; +	char xpath_value[ISO_SYSID_STRLEN];  	struct yang_data *data;  	struct isis_area *area = circuit->area;  	notif_prep_instance_hdr(xpath, area, "default", arguments);  	notif_prepr_iface_hdr(xpath, circuit, arguments);  	snprintf(xpath_arg, sizeof(xpath_arg), "%s/lsp-id", xpath); -	data = yang_data_new_string(xpath_arg, rawlspid_print(lsp_id)); +	snprintfrr(xpath_value, ISO_SYSID_STRLEN, "%pLS", lsp_id); +	data = yang_data_new_string(xpath_arg, xpath_value);  	listnode_add(arguments, data);  	snprintf(xpath_arg, sizeof(xpath_arg), "%s/raw-pdu", xpath);  	data = yang_data_new_binary(xpath_arg, raw_pdu, raw_pdu_len); @@ -530,13 +544,15 @@ void isis_notif_seqno_skipped(const struct isis_circuit *circuit,  	const char *xpath = "/frr-isisd:sequence-number-skipped";  	struct list *arguments = yang_data_list_new();  	char xpath_arg[XPATH_MAXLEN]; +	char xpath_value[ISO_SYSID_STRLEN];  	struct yang_data *data;  	struct isis_area *area = circuit->area;  	notif_prep_instance_hdr(xpath, area, "default", arguments);  	notif_prepr_iface_hdr(xpath, circuit, arguments);  	snprintf(xpath_arg, sizeof(xpath_arg), "%s/lsp-id", xpath); -	data = yang_data_new_string(xpath_arg, rawlspid_print(lsp_id)); +	snprintfrr(xpath_value, ISO_SYSID_STRLEN, "%pLS", lsp_id); +	data = yang_data_new_string(xpath_arg, xpath_value);  	listnode_add(arguments, data);  	hook_call(isis_hook_seqno_skipped, circuit, lsp_id); @@ -553,13 +569,15 @@ void isis_notif_own_lsp_purge(const struct isis_circuit *circuit,  	const char *xpath = "/frr-isisd:own-lsp-purge";  	struct list *arguments = yang_data_list_new();  	char xpath_arg[XPATH_MAXLEN]; +	char xpath_value[ISO_SYSID_STRLEN];  	struct yang_data *data;  	struct isis_area *area = circuit->area;  	notif_prep_instance_hdr(xpath, area, "default", arguments);  	notif_prepr_iface_hdr(xpath, circuit, arguments);  	snprintf(xpath_arg, sizeof(xpath_arg), "%s/lsp-id", xpath); -	data = yang_data_new_string(xpath_arg, rawlspid_print(lsp_id)); +	snprintfrr(xpath_value, ISO_SYSID_STRLEN, "%pLS", lsp_id); +	data = yang_data_new_string(xpath_arg, xpath_value);  	listnode_add(arguments, data);  	hook_call(isis_hook_own_lsp_purge, circuit, lsp_id); diff --git a/isisd/isis_nb_state.c b/isisd/isis_nb_state.c index 13fdddf555..b7c33ed27b 100644 --- a/isisd/isis_nb_state.c +++ b/isisd/isis_nb_state.c @@ -132,8 +132,11 @@ lib_interface_state_isis_adjacencies_adjacency_neighbor_sysid_get_elem(  	struct nb_cb_get_elem_args *args)  {  	const struct isis_adjacency *adj = args->list_entry; +	char xpath_value[ISO_SYSID_STRLEN]; -	return yang_data_new_string(args->xpath, sysid_print(adj->sysid)); +	snprintfrr(xpath_value, ISO_SYSID_STRLEN, "%pSY", adj->sysid); + +	return yang_data_new_string(args->xpath, xpath_value);  }  /* @@ -158,8 +161,11 @@ lib_interface_state_isis_adjacencies_adjacency_neighbor_snpa_get_elem(  	struct nb_cb_get_elem_args *args)  {  	const struct isis_adjacency *adj = args->list_entry; +	char xpath_value[ISO_SYSID_STRLEN]; + +	snprintfrr(xpath_value, ISO_SYSID_STRLEN, "%pSY", adj->snpa); -	return yang_data_new_string(args->xpath, snpa_print(adj->snpa)); +	return yang_data_new_string(args->xpath, xpath_value);  }  /* diff --git a/isisd/isis_pdu.c b/isisd/isis_pdu.c index d53d43ad0e..0b84289f2d 100644 --- a/isisd/isis_pdu.c +++ b/isisd/isis_pdu.c @@ -514,9 +514,9 @@ static int process_lan_hello(struct iih_info *iih)  	if (IS_DEBUG_ADJ_PACKETS) {  		zlog_debug( -			"ISIS-Adj (%s): Rcvd L%d LAN IIH from %s on %s, cirType %s, cirID %u, length %zd", -			iih->circuit->area->area_tag, iih->level, -			snpa_print(iih->ssnpa), iih->circuit->interface->name, +			"ISIS-Adj (%s): Rcvd L%d LAN IIH from %pSY on %s, cirType %s, cirID %u, length %zd", +			iih->circuit->area->area_tag, iih->level, iih->ssnpa, +			iih->circuit->interface->name,  			circuit_t2string(iih->circuit->is_type),  			iih->circuit->circuit_id,  			stream_get_endp(iih->circuit->rcv_stream)); @@ -862,31 +862,32 @@ static int process_lsp(uint8_t pdu_type, struct isis_circuit *circuit,  #ifndef FABRICD  	/* send northbound notification */ +	char buf[ISO_SYSID_STRLEN]; + +	snprintfrr(buf, ISO_SYSID_STRLEN, "%pSY", hdr.lsp_id);  	isis_notif_lsp_received(circuit, hdr.lsp_id, hdr.seqno, time(NULL), -				sysid_print(hdr.lsp_id)); +				buf);  #endif /* ifndef FABRICD */  	if (pdu_len_validate(hdr.pdu_len, circuit)) { -		zlog_debug("ISIS-Upd (%s): LSP %s invalid LSP length %hu", -			   circuit->area->area_tag, rawlspid_print(hdr.lsp_id), -			   hdr.pdu_len); +		zlog_debug("ISIS-Upd (%s): LSP %pLS invalid LSP length %hu", +			   circuit->area->area_tag, hdr.lsp_id, hdr.pdu_len);  		return ISIS_WARNING;  	}  	if (IS_DEBUG_UPDATE_PACKETS) { -		zlog_debug("ISIS-Upd (%s): Rcvd L%d LSP %s, seq 0x%08x, cksum 0x%04hx, lifetime %hus, len %hu, on %s", -			   circuit->area->area_tag, level, -			   rawlspid_print(hdr.lsp_id), hdr.seqno, hdr.checksum, -			   hdr.rem_lifetime, hdr.pdu_len, -			   circuit->interface->name); +		zlog_debug( +			"ISIS-Upd (%s): Rcvd L%d LSP %pLS, seq 0x%08x, cksum 0x%04hx, lifetime %hus, len %hu, on %s", +			circuit->area->area_tag, level, hdr.lsp_id, hdr.seqno, +			hdr.checksum, hdr.rem_lifetime, hdr.pdu_len, +			circuit->interface->name);  	}  	/* lsp is_type check */  	if ((hdr.lsp_bits & IS_LEVEL_1) != IS_LEVEL_1) { -		zlog_debug( -			"ISIS-Upd (%s): LSP %s invalid LSP is type 0x%x", -			circuit->area->area_tag, rawlspid_print(hdr.lsp_id), -			hdr.lsp_bits & IS_LEVEL_1_AND_2); +		zlog_debug("ISIS-Upd (%s): LSP %pLS invalid LSP is type 0x%x", +			   circuit->area->area_tag, hdr.lsp_id, +			   hdr.lsp_bits & IS_LEVEL_1_AND_2);  		/* continue as per RFC1122 Be liberal in what you accept, and  		 * conservative in what you send */  	} @@ -896,27 +897,25 @@ static int process_lsp(uint8_t pdu_type, struct isis_circuit *circuit,  	if (iso_csum_verify(STREAM_DATA(circuit->rcv_stream) + 12,  			    hdr.pdu_len - 12, hdr.checksum, 12)) {  		zlog_debug( -			"ISIS-Upd (%s): LSP %s invalid LSP checksum 0x%04hx", -			circuit->area->area_tag, rawlspid_print(hdr.lsp_id), -			hdr.checksum); +			"ISIS-Upd (%s): LSP %pLS invalid LSP checksum 0x%04hx", +			circuit->area->area_tag, hdr.lsp_id, hdr.checksum);  		return ISIS_WARNING;  	}  	/* 7.3.15.1 a) 1 - external domain circuit will discard lsps */  	if (circuit->ext_domain) {  		zlog_debug( -			"ISIS-Upd (%s): LSP %s received at level %d over circuit with externalDomain = true", -			circuit->area->area_tag, rawlspid_print(hdr.lsp_id), -			level); +			"ISIS-Upd (%s): LSP %pLS received at level %d over circuit with externalDomain = true", +			circuit->area->area_tag, hdr.lsp_id, level);  		return ISIS_WARNING;  	}  	/* 7.3.15.1 a) 2,3 - manualL2OnlyMode not implemented */  	if (!(circuit->is_type & level)) {  		zlog_debug( -			"ISIS-Upd (%s): LSP %s received at level %d over circuit of type %s", -			circuit->area->area_tag, rawlspid_print(hdr.lsp_id), -			level, circuit_t2string(circuit->is_type)); +			"ISIS-Upd (%s): LSP %pLS received at level %d over circuit of type %s", +			circuit->area->area_tag, hdr.lsp_id, level, +			circuit_t2string(circuit->is_type));  		return ISIS_WARNING;  	} @@ -1016,11 +1015,11 @@ static int process_lsp(uint8_t pdu_type, struct isis_circuit *circuit,  	if (circuit->circ_type == CIRCUIT_T_BROADCAST) {  		if (!isis_adj_lookup_snpa(ssnpa,  					  circuit->u.bc.adjdb[level - 1])) { -			zlog_debug("(%s): DS ======= LSP %s, seq 0x%08x, cksum 0x%04hx, lifetime %hus on %s", -				   circuit->area->area_tag, -				   rawlspid_print(hdr.lsp_id), hdr.seqno, -				   hdr.checksum, hdr.rem_lifetime, -				   circuit->interface->name); +			zlog_debug( +				"(%s): DS ======= LSP %pLS, seq 0x%08x, cksum 0x%04hx, lifetime %hus on %s", +				circuit->area->area_tag, hdr.lsp_id, hdr.seqno, +				hdr.checksum, hdr.rem_lifetime, +				circuit->interface->name);  			goto out; /* Silently discard */  		}  	} @@ -1057,9 +1056,9 @@ dontcheckadj:  	if (lsp && (lsp->hdr.seqno == hdr.seqno)  	    && (lsp->hdr.checksum != hdr.checksum)  	    && hdr.rem_lifetime) { -		zlog_warn("ISIS-Upd (%s): LSP %s seq 0x%08x with confused checksum received.", -			  circuit->area->area_tag, rawlspid_print(hdr.lsp_id), -			  hdr.seqno); +		zlog_warn( +			"ISIS-Upd (%s): LSP %pLS seq 0x%08x with confused checksum received.", +			circuit->area->area_tag, hdr.lsp_id, hdr.seqno);  		hdr.rem_lifetime = 0;  		lsp_confusion = true;  	} else @@ -1153,10 +1152,9 @@ dontcheckadj:  				}  				if (IS_DEBUG_UPDATE_PACKETS)  					zlog_debug( -						"ISIS-Upd (%s): (1) re-originating LSP %s new seq 0x%08x", +						"ISIS-Upd (%s): (1) re-originating LSP %pLS new seq 0x%08x",  						circuit->area->area_tag, -						rawlspid_print(hdr.lsp_id), -						lsp->hdr.seqno); +						hdr.lsp_id, lsp->hdr.seqno);  			} else {  				/* our own LSP with 0 remaining life time */  #ifndef FABRICD @@ -1194,9 +1192,8 @@ dontcheckadj:  #endif /* ifndef FABRICD */  			if (IS_DEBUG_UPDATE_PACKETS) {  				zlog_debug( -					"ISIS-Upd (%s): (2) re-originating LSP %s new seq 0x%08x", -					circuit->area->area_tag, -					rawlspid_print(hdr.lsp_id), +					"ISIS-Upd (%s): (2) re-originating LSP %pLS new seq 0x%08x", +					circuit->area->area_tag, hdr.lsp_id,  					lsp->hdr.seqno);  			}  			lsp_flood(lsp, NULL); @@ -1361,9 +1358,9 @@ static int process_snp(uint8_t pdu_type, struct isis_circuit *circuit,  	if (!is_csnp && (circuit->circ_type == CIRCUIT_T_BROADCAST)  	    && !circuit->u.bc.is_dr[level - 1]) {  		zlog_debug( -			"ISIS-Snp (%s): Rcvd L%d %cSNP from %s on %s, skipping: we are not the DIS", -			circuit->area->area_tag, level, typechar, -			snpa_print(ssnpa), circuit->interface->name); +			"ISIS-Snp (%s): Rcvd L%d %cSNP from %pSY on %s, skipping: we are not the DIS", +			circuit->area->area_tag, level, typechar, ssnpa, +			circuit->interface->name);  		return ISIS_OK;  	} @@ -1452,16 +1449,16 @@ static int process_snp(uint8_t pdu_type, struct isis_circuit *circuit,  	/* debug isis snp-packets */  	if (IS_DEBUG_SNP_PACKETS) { -		zlog_debug("ISIS-Snp (%s): Rcvd L%d %cSNP from %s on %s", -			   circuit->area->area_tag, level, typechar, -			   snpa_print(ssnpa), circuit->interface->name); +		zlog_debug("ISIS-Snp (%s): Rcvd L%d %cSNP from %pSY on %s", +			   circuit->area->area_tag, level, typechar, ssnpa, +			   circuit->interface->name);  		for (struct isis_lsp_entry *entry = entry_head; entry;  		     entry = entry->next) {  			zlog_debug( -				"ISIS-Snp (%s):         %cSNP entry %s, seq 0x%08x, cksum 0x%04hx, lifetime %hus", -				circuit->area->area_tag, typechar, -				rawlspid_print(entry->id), entry->seqno, -				entry->checksum, entry->rem_lifetime); +				"ISIS-Snp (%s):         %cSNP entry %pLS, seq 0x%08x, cksum 0x%04hx, lifetime %hus", +				circuit->area->area_tag, typechar, entry->id, +				entry->seqno, entry->checksum, +				entry->rem_lifetime);  		}  	} @@ -2481,11 +2478,11 @@ void send_lsp(struct isis_circuit *circuit, struct isis_lsp *lsp,  	if (stream_get_endp(lsp->pdu) > stream_get_size(circuit->snd_stream)) {  		flog_err(  			EC_ISIS_PACKET, -			"ISIS-Upd (%s): Can't send L%d LSP %s, seq 0x%08x, cksum 0x%04hx, lifetime %hus on %s. LSP Size is %zu while interface stream size is %zu.", -			circuit->area->area_tag, lsp->level, -			rawlspid_print(lsp->hdr.lsp_id), lsp->hdr.seqno, -			lsp->hdr.checksum, lsp->hdr.rem_lifetime, -			circuit->interface->name, stream_get_endp(lsp->pdu), +			"ISIS-Upd (%s): Can't send L%d LSP %pLS, seq 0x%08x, cksum 0x%04hx, lifetime %hus on %s. LSP Size is %zu while interface stream size is %zu.", +			circuit->area->area_tag, lsp->level, lsp->hdr.lsp_id, +			lsp->hdr.seqno, lsp->hdr.checksum, +			lsp->hdr.rem_lifetime, circuit->interface->name, +			stream_get_endp(lsp->pdu),  			stream_get_size(circuit->snd_stream));  #ifndef FABRICD  		/* send a northbound notification */ @@ -2509,14 +2506,14 @@ void send_lsp(struct isis_circuit *circuit, struct isis_lsp *lsp,  	}  	if (IS_DEBUG_UPDATE_PACKETS) { -		zlog_debug("ISIS-Upd (%s): Sending %sL%d LSP %s, seq 0x%08x, cksum 0x%04hx, lifetime %hus on %s", -			   circuit->area->area_tag, -			   (tx_type == TX_LSP_CIRCUIT_SCOPED) -				? "Circuit scoped " : "", -			   lsp->level, -			   rawlspid_print(lsp->hdr.lsp_id), lsp->hdr.seqno, -			   lsp->hdr.checksum, lsp->hdr.rem_lifetime, -			   circuit->interface->name); +		zlog_debug( +			"ISIS-Upd (%s): Sending %sL%d LSP %pLS, seq 0x%08x, cksum 0x%04hx, lifetime %hus on %s", +			circuit->area->area_tag, +			(tx_type == TX_LSP_CIRCUIT_SCOPED) ? "Circuit scoped " +							   : "", +			lsp->level, lsp->hdr.lsp_id, lsp->hdr.seqno, +			lsp->hdr.checksum, lsp->hdr.rem_lifetime, +			circuit->interface->name);  		if (IS_DEBUG_PACKET_DUMP)  			zlog_dump_data(STREAM_DATA(circuit->snd_stream),  				       stream_get_endp(circuit->snd_stream)); diff --git a/isisd/isis_snmp.c b/isisd/isis_snmp.c index 6d9974fe9f..f9e3780e29 100644 --- a/isisd/isis_snmp.c +++ b/isisd/isis_snmp.c @@ -833,12 +833,12 @@ static int isis_snmp_conv_next(uint8_t *buf, size_t max_len, size_t *out_len,   */  static int isis_snmp_area_addr_lookup_exact(oid *oid_idx, size_t oid_idx_len,  					    struct isis_area **ret_area, -					    struct area_addr **ret_addr) +					    struct iso_address **ret_addr)  {  	uint8_t cmp_buf[ISIS_SNMP_OSI_ADDR_LEN_MAX];  	size_t addr_len;  	struct isis_area *area = NULL; -	struct area_addr *addr = NULL; +	struct iso_address *addr = NULL;  	struct listnode *addr_node;  	struct isis *isis = isis_lookup_by_vrfid(VRF_DEFAULT); @@ -880,15 +880,15 @@ static int isis_snmp_area_addr_lookup_exact(oid *oid_idx, size_t oid_idx_len,  static int isis_snmp_area_addr_lookup_next(oid *oid_idx, size_t oid_idx_len,  					   struct isis_area **ret_area, -					   struct area_addr **ret_addr) +					   struct iso_address **ret_addr)  {  	uint8_t cmp_buf[ISIS_SNMP_OSI_ADDR_LEN_MAX];  	size_t addr_len;  	int try_exact = 0;  	struct isis_area *found_area = NULL;  	struct isis_area *area = NULL; -	struct area_addr *found_addr = NULL; -	struct area_addr *addr = NULL; +	struct iso_address *found_addr = NULL; +	struct iso_address *addr = NULL;  	struct listnode *addr_node;  	struct isis *isis = isis_lookup_by_vrfid(VRF_DEFAULT); @@ -1501,7 +1501,7 @@ static uint8_t *isis_snmp_find_man_area(struct variable *v, oid *name,  					WriteMethod **write_method)  {  	int res; -	struct area_addr *area_addr = NULL; +	struct iso_address *area_addr = NULL;  	oid *oid_idx;  	size_t oid_idx_len;  	size_t off = 0; @@ -2485,6 +2485,11 @@ static uint8_t *isis_snmp_find_isadj(struct variable *v, oid *name,  	uint32_t delta_ticks;  	time_t now_time; +	/* Ring buffer to print SNPA */ +#define FORMAT_BUF_COUNT 4 +	static char snpa[FORMAT_BUF_COUNT][ISO_SYSID_STRLEN]; +	static size_t cur_buf = 0; +  	*write_method = NULL;  	if (*length <= v->namelen) { @@ -2531,9 +2536,10 @@ static uint8_t *isis_snmp_find_isadj(struct variable *v, oid *name,  		return SNMP_INTEGER(adj->threeway_state);  	case ISIS_ISADJ_NEIGHSNPAADDRESS: { -		const char *snpa = (char *)snpa_print(adj->snpa); -		*var_len = strlen(snpa); -		return (uint8_t *)snpa; +		cur_buf = (cur_buf + 1) % FORMAT_BUF_COUNT; +		snprintfrr(snpa[cur_buf], ISO_SYSID_STRLEN, "%pSY", adj->snpa); +		*var_len = strlen(snpa[cur_buf]); +		return (uint8_t *)snpa[cur_buf];  	}  	case ISIS_ISADJ_NEIGHSYSTYPE: diff --git a/isisd/isis_spf.c b/isisd/isis_spf.c index bfe3758cd8..8597049ac0 100644 --- a/isisd/isis_spf.c +++ b/isisd/isis_spf.c @@ -1067,8 +1067,8 @@ end:  	    && !isis_level2_adj_up(spftree->area)) {  		struct prefix_pair ip_info = { {0} };  		if (IS_DEBUG_RTE_EVENTS) -			zlog_debug("ISIS-Spf (%s): add default %s route", -				   rawlspid_print(lsp->hdr.lsp_id), +			zlog_debug("ISIS-Spf (%pLS): add default %s route", +				   lsp->hdr.lsp_id,  				   spftree->family == AF_INET ? "ipv4"  							      : "ipv6"); @@ -1207,9 +1207,8 @@ static void isis_spf_preload_tent(struct isis_spftree *spftree,  		if (isis_lfa_excise_adj_check(spftree, adj_id)) {  			if (IS_DEBUG_LFA) -				zlog_debug("ISIS-SPF: excising adjacency %s", -					   isis_format_id(sadj->id, -							  ISIS_SYS_ID_LEN + 1)); +				zlog_debug("ISIS-SPF: excising adjacency %pPN", +					   sadj->id);  			continue;  		} @@ -1324,8 +1323,8 @@ static void spf_adj_list_parse_tlv(struct isis_spftree *spftree,  	LSP_FRAGMENT(lspid) = 0;  	lsp = lsp_search(spftree->lspdb, lspid);  	if (lsp == NULL || lsp->hdr.rem_lifetime == 0) { -		zlog_warn("ISIS-SPF: No LSP found from root to L%d %s", -			  spftree->level, rawlspid_print(lspid)); +		zlog_warn("ISIS-SPF: No LSP found from root to L%d %pLS", +			  spftree->level, lspid);  		return;  	} @@ -1663,9 +1662,8 @@ static void isis_spf_loop(struct isis_spftree *spftree,  		lsp = lsp_for_vertex(spftree, vertex);  		if (!lsp) { -			zlog_warn("ISIS-SPF: No LSP found for %s", -				  isis_format_id(vertex->N.id, -						 sizeof(vertex->N.id))); +			zlog_warn("ISIS-SPF: No LSP found for %pPN", +				  vertex->N.id);  			continue;  		} diff --git a/isisd/isis_sr.c b/isisd/isis_sr.c index cb330603e4..e43b84ab2e 100644 --- a/isisd/isis_sr.c +++ b/isisd/isis_sr.c @@ -1022,14 +1022,14 @@ static void show_node(struct vty *vty, struct isis_area *area, int level)  		if (!cap)  			continue; -		ttable_add_row( -			tt, "%s|%u - %u|%u - %u|%s|%u", -			sysid_print(lsp->hdr.lsp_id), cap->srgb.lower_bound, -			cap->srgb.lower_bound + cap->srgb.range_size - 1, -			cap->srlb.lower_bound, -			cap->srlb.lower_bound + cap->srlb.range_size - 1, -			cap->algo[0] == SR_ALGORITHM_SPF ? "SPF" : "S-SPF", -			cap->msd); +		ttable_add_row(tt, "%pSY|%u - %u|%u - %u|%s|%u", +			       lsp->hdr.lsp_id, cap->srgb.lower_bound, +			       cap->srgb.lower_bound + cap->srgb.range_size - 1, +			       cap->srlb.lower_bound, +			       cap->srlb.lower_bound + cap->srlb.range_size - 1, +			       cap->algo[0] == SR_ALGORITHM_SPF ? "SPF" +								: "S-SPF", +			       cap->msd);  	}  	/* Dump the generated table. */ diff --git a/isisd/isis_te.c b/isisd/isis_te.c index 3ecd2a6f65..4e180ead61 100644 --- a/isisd/isis_te.c +++ b/isisd/isis_te.c @@ -903,7 +903,7 @@ static int lsp_to_edge_cb(const uint8_t *id, uint32_t metric, bool old_metric,  	struct ls_edge *edge, *dst;  	struct ls_attributes *attr; -	te_debug("  |- Process Extended IS for %s", sysid_print(id)); +	te_debug("  |- Process Extended IS for %pSY", id);  	/* Check parameters */  	if (old_metric || !args || !tlvs) @@ -1180,14 +1180,14 @@ static void isis_te_parse_lsp(struct mpls_te_area *mta, struct isis_lsp *lsp)  	ted = mta->ted; -	te_debug("ISIS-TE(%s): Parse LSP %s", lsp->area->area_tag, -		 sysid_print(lsp->hdr.lsp_id)); +	te_debug("ISIS-TE(%s): Parse LSP %pSY", lsp->area->area_tag, +		 lsp->hdr.lsp_id);  	/* First parse LSP to obtain the corresponding Vertex */  	vertex = lsp_to_vertex(ted, lsp);  	if (!vertex) { -		zlog_warn("Unable to build Vertex from LSP %s. Abort!", -			  sysid_print(lsp->hdr.lsp_id)); +		zlog_warn("Unable to build Vertex from LSP %pSY. Abort!", +			  lsp->hdr.lsp_id);  		return;  	} @@ -1251,8 +1251,8 @@ static void isis_te_delete_lsp(struct mpls_te_area *mta, struct isis_lsp *lsp)  	if (!IS_MPLS_TE(mta) || !mta->ted || !lsp)  		return; -	te_debug("ISIS-TE(%s): Delete Link State TED objects from LSP %s", -		 lsp->area->area_tag, sysid_print(lsp->hdr.lsp_id)); +	te_debug("ISIS-TE(%s): Delete Link State TED objects from LSP %pSY", +		 lsp->area->area_tag, lsp->hdr.lsp_id);  	/* Compute Link State Node ID from IS-IS sysID ... */  	if (lsp->level == ISIS_LEVEL1) diff --git a/isisd/isis_tlvs.c b/isisd/isis_tlvs.c index b52a38be7f..3b6db0ee17 100644 --- a/isisd/isis_tlvs.c +++ b/isisd/isis_tlvs.c @@ -661,7 +661,7 @@ static void format_item_ext_subtlvs(struct isis_ext_subtlvs *exts,  				sbuf_push(  					buf, indent,  					"Lan-Adjacency-SID: %u, Weight: %hhu, Flags: F:%c B:%c, V:%c, L:%c, S:%c, P:%c\n" -					"  Neighbor-ID: %s\n", +					"  Neighbor-ID: %pSY\n",  					lan->sid, lan->weight,  					lan->flags & EXT_SUBTLV_LINK_ADJ_SID_FFLG  						? '1' @@ -681,7 +681,7 @@ static void format_item_ext_subtlvs(struct isis_ext_subtlvs *exts,  					lan->flags & EXT_SUBTLV_LINK_ADJ_SID_PFLG  						? '1'  						: '0', -					isis_format_id(lan->neighbor_id, 6)); +					lan->neighbor_id);  			}  	}  } @@ -1590,14 +1590,14 @@ static void format_item_area_address(uint16_t mtid, struct isis_item *i,  				     int indent)  {  	struct isis_area_address *addr = (struct isis_area_address *)i; +	struct iso_address iso_addr; -	if (json) { -		json_object_string_add(json, "area-addr", -				       isonet_print(addr->addr, addr->len)); -	} else { -		sbuf_push(buf, indent, "Area Address: %s\n", -			  isonet_print(addr->addr, addr->len)); -	} +	memcpy(iso_addr.area_addr, addr->addr, ISO_ADDR_SIZE); +	iso_addr.addr_len = addr->len; +	if (json) +		json_object_string_addf(json, "area-addr", "%pIS", &iso_addr); +	else +		sbuf_push(buf, indent, "Area Address: %pIS\n", &iso_addr);  }  static void free_item_area_address(struct isis_item *i) @@ -1678,17 +1678,18 @@ static void format_item_oldstyle_reach(uint16_t mtid, struct isis_item *i,  				       struct json_object *json, int indent)  {  	struct isis_oldstyle_reach *r = (struct isis_oldstyle_reach *)i; +	char sys_id[ISO_SYSID_STRLEN]; +	snprintfrr(sys_id, ISO_SYSID_STRLEN, "%pPN", r->id);  	if (json) {  		struct json_object *old_json;  		old_json = json_object_new_object();  		json_object_object_add(json, "old-reach-style", old_json); -		json_object_string_add(old_json, "is-reach", -				       isis_format_id(r->id, 7)); +		json_object_string_add(old_json, "is-reach", sys_id);  		json_object_int_add(old_json, "metric", r->metric);  	} else  		sbuf_push(buf, indent, "IS Reachability: %s (Metric: %hhu)\n", -			  isis_format_id(r->id, 7), r->metric); +			  sys_id, r->metric);  }  static void free_item_oldstyle_reach(struct isis_item *i) @@ -1760,13 +1761,13 @@ static void format_item_lan_neighbor(uint16_t mtid, struct isis_item *i,  				     int indent)  {  	struct isis_lan_neighbor *n = (struct isis_lan_neighbor *)i; +	char sys_id[ISO_SYSID_STRLEN]; -	if (json) { -		json_object_string_add(json, "lan-neighbor", -				       isis_format_id(n->mac, 6)); -	} else -		sbuf_push(buf, indent, "LAN Neighbor: %s\n", -			  isis_format_id(n->mac, 6)); +	snprintfrr(sys_id, ISO_SYSID_STRLEN, "%pSY", n->mac); +	if (json) +		json_object_string_add(json, "lan-neighbor", sys_id); +	else +		sbuf_push(buf, indent, "LAN Neighbor: %s\n", sys_id);  }  static void free_item_lan_neighbor(struct isis_item *i) @@ -1831,23 +1832,25 @@ static void format_item_lsp_entry(uint16_t mtid, struct isis_item *i,  				  int indent)  {  	struct isis_lsp_entry *e = (struct isis_lsp_entry *)i; +	char sys_id[ISO_SYSID_STRLEN]; +	snprintfrr(sys_id, ISO_SYSID_STRLEN, "%pLS", e->id);  	if (json) {  		char buf[255];  		struct json_object *lsp_json;  		lsp_json = json_object_new_object();  		json_object_object_add(json, "lsp-entry", lsp_json); -		json_object_string_add(lsp_json, "id", isis_format_id(e->id, 8)); +		json_object_string_add(lsp_json, "id", sys_id);  		snprintfrr(buf,sizeof(buf),"0x%08x",e->seqno);  		json_object_string_add(lsp_json, "seq", buf);  		snprintfrr(buf,sizeof(buf),"0x%04hx",e->checksum);  		json_object_string_add(lsp_json, "chksum", buf);  		json_object_int_add(lsp_json, "lifetime", e->checksum);  	} else -	sbuf_push(buf, indent, -		  "LSP Entry: %s, seq 0x%08x, cksum 0x%04hx, lifetime %hus\n", -		  isis_format_id(e->id, 8), e->seqno, e->checksum, -		  e->rem_lifetime); +		sbuf_push( +			buf, indent, +			"LSP Entry: %s, seq 0x%08x, cksum 0x%04hx, lifetime %hus\n", +			sys_id, e->seqno, e->checksum, e->rem_lifetime);  }  static void free_item_lsp_entry(struct isis_item *i) @@ -1919,7 +1922,9 @@ static void format_item_extended_reach(uint16_t mtid, struct isis_item *i,  				       struct json_object *json, int indent)  {  	struct isis_extended_reach *r = (struct isis_extended_reach *)i; +	char sys_id[ISO_SYSID_STRLEN]; +	snprintfrr(sys_id, ISO_SYSID_STRLEN, "%pPN", r->id);  	if (json) {  		struct json_object *reach_json;  		reach_json = json_object_new_object(); @@ -1927,8 +1932,7 @@ static void format_item_extended_reach(uint16_t mtid, struct isis_item *i,  		json_object_string_add(  			reach_json, "mt-id",  			(mtid == ISIS_MT_IPV4_UNICAST) ? "Extended" : "MT"); -		json_object_string_add(reach_json, "id", -				       isis_format_id(r->id, 7)); +		json_object_string_add(reach_json, "id", sys_id);  		json_object_int_add(reach_json, "metric", r->metric);  		if (mtid != ISIS_MT_IPV4_UNICAST)  			json_object_string_add(reach_json, "mt-name", @@ -1940,7 +1944,7 @@ static void format_item_extended_reach(uint16_t mtid, struct isis_item *i,  	} else {  		sbuf_push(buf, indent, "%s Reachability: %s (Metric: %u)",  			  (mtid == ISIS_MT_IPV4_UNICAST) ? "Extended" : "MT", -			  isis_format_id(r->id, 7), r->metric); +			  sys_id, r->metric);  		if (mtid != ISIS_MT_IPV4_UNICAST)  			sbuf_push(buf, 0, " %s", isis_mtid2str(mtid));  		sbuf_push(buf, 0, "\n"); @@ -3125,9 +3129,12 @@ static void  format_tlv_threeway_adj(const struct isis_threeway_adj *threeway_adj,  			struct sbuf *buf, struct json_object *json, int indent)  { +	char sys_id[ISO_SYSID_STRLEN]; +  	if (!threeway_adj)  		return; +	snprintfrr(sys_id, ISO_SYSID_STRLEN, "%pSY", threeway_adj->neighbor_id);  	if (json) {  		struct json_object *three_json;  		three_json = json_object_new_object(); @@ -3140,9 +3147,7 @@ format_tlv_threeway_adj(const struct isis_threeway_adj *threeway_adj,  				    threeway_adj->local_circuit_id);  		if (!threeway_adj->neighbor_set)  			return; -		json_object_string_add( -			three_json, "neigh-system-id", -			isis_format_id(threeway_adj->neighbor_id, 6)); +		json_object_string_add(three_json, "neigh-system-id", sys_id);  		json_object_int_add(three_json, "neigh-ext-circuit-id",  				    threeway_adj->neighbor_circuit_id);  	} else { @@ -3155,8 +3160,7 @@ format_tlv_threeway_adj(const struct isis_threeway_adj *threeway_adj,  		if (!threeway_adj->neighbor_set)  			return; -		sbuf_push(buf, indent, "  Neighbor System ID: %s\n", -			  isis_format_id(threeway_adj->neighbor_id, 6)); +		sbuf_push(buf, indent, "  Neighbor System ID: %s\n", sys_id);  		sbuf_push(buf, indent, "  Neighbor Extended Circuit ID: %u\n",  			  threeway_adj->neighbor_circuit_id);  	} @@ -3988,33 +3992,29 @@ static void format_tlv_purge_originator(struct isis_purge_originator *poi,  					struct sbuf *buf,  					struct json_object *json, int indent)  { +	char sen_id[ISO_SYSID_STRLEN]; +	char gen_id[ISO_SYSID_STRLEN]; +  	if (!poi)  		return; +	snprintfrr(gen_id, ISO_SYSID_STRLEN, "%pSY", poi->generator); +	if (poi->sender_set) +		snprintfrr(sen_id, ISO_SYSID_STRLEN, "%pSY", poi->sender); +  	if (json) {  		struct json_object *purge_json;  		purge_json = json_object_new_object();  		json_object_object_add(json, "purge_originator", purge_json); -		json_object_string_add( -			purge_json, "id", -			isis_format_id(poi->generator, sizeof(poi->generator))); -		if (poi->sender_set) { -			json_object_string_add( -				purge_json, "rec-from", -				isis_format_id(poi->sender, -					       sizeof(poi->sender))); -		} +		json_object_string_add(purge_json, "id", gen_id); +		if (poi->sender_set) +			json_object_string_add(purge_json, "rec-from", sen_id);  	} else {  		sbuf_push(buf, indent, "Purge Originator Identification:\n"); -		sbuf_push( -			buf, indent, "  Generator: %s\n", -			isis_format_id(poi->generator, sizeof(poi->generator))); -		if (poi->sender_set) { -			sbuf_push(buf, indent, "  Received-From: %s\n", -				  isis_format_id(poi->sender, -						 sizeof(poi->sender))); -		} +		sbuf_push(buf, indent, "  Generator: %s\n", gen_id); +		if (poi->sender_set) +			sbuf_push(buf, indent, "  Received-From: %s\n", sen_id);  	}  } @@ -5271,14 +5271,14 @@ void isis_tlvs_add_area_addresses(struct isis_tlvs *tlvs,  				  struct list *addresses)  {  	struct listnode *node; -	struct area_addr *area_addr; +	struct iso_address *area_addr;  	for (ALL_LIST_ELEMENTS_RO(addresses, node, area_addr)) {  		struct isis_area_address *a =  			XCALLOC(MTYPE_ISIS_TLV, sizeof(*a));  		a->len = area_addr->addr_len; -		memcpy(a->addr, area_addr->area_addr, 20); +		memcpy(a->addr, area_addr->area_addr, ISO_ADDR_SIZE);  		append_item(&tlvs->area_addresses, (struct isis_item *)a);  	}  } @@ -5475,7 +5475,7 @@ bool isis_tlvs_area_addresses_match(struct isis_tlvs *tlvs,  	for (struct isis_area_address *addr = addr_head; addr;  	     addr = addr->next) {  		struct listnode *node; -		struct area_addr *a; +		struct iso_address *a;  		for (ALL_LIST_ELEMENTS_RO(addresses, node, a)) {  			if (a->addr_len == addr->len diff --git a/isisd/isis_tx_queue.c b/isisd/isis_tx_queue.c index ec2d50d60a..caf97f1174 100644 --- a/isisd/isis_tx_queue.c +++ b/isisd/isis_tx_queue.c @@ -126,12 +126,12 @@ void _isis_tx_queue_add(struct isis_tx_queue *queue,  		return;  	if (IS_DEBUG_TX_QUEUE) { -		zlog_debug("Add LSP %s to %s queue as %s LSP. (From %s %s:%d)", -			   rawlspid_print(lsp->hdr.lsp_id), -			   queue->circuit->interface->name, -			   (type == TX_LSP_CIRCUIT_SCOPED) ? -			   "circuit scoped" : "regular", -			   func, file, line); +		zlog_debug( +			"Add LSP %pLS to %s queue as %s LSP. (From %s %s:%d)", +			lsp->hdr.lsp_id, queue->circuit->interface->name, +			(type == TX_LSP_CIRCUIT_SCOPED) ? "circuit scoped" +							: "regular", +			func, file, line);  	}  	struct isis_tx_queue_entry *e = tx_queue_find(queue, lsp); @@ -164,9 +164,8 @@ void _isis_tx_queue_del(struct isis_tx_queue *queue, struct isis_lsp *lsp,  		return;  	if (IS_DEBUG_TX_QUEUE) { -		zlog_debug("Remove LSP %s from %s queue. (From %s %s:%d)", -			   rawlspid_print(lsp->hdr.lsp_id), -			   queue->circuit->interface->name, +		zlog_debug("Remove LSP %pLS from %s queue. (From %s %s:%d)", +			   lsp->hdr.lsp_id, queue->circuit->interface->name,  			   func, file, line);  	} diff --git a/isisd/isisd.c b/isisd/isisd.c index c6369a884e..fd6b91b42e 100644 --- a/isisd/isisd.c +++ b/isisd/isisd.c @@ -272,7 +272,7 @@ void isis_area_del_circuit(struct isis_area *area, struct isis_circuit *circuit)  static void delete_area_addr(void *arg)  { -	struct area_addr *addr = (struct area_addr *)arg; +	struct iso_address *addr = (struct iso_address *)arg;  	XFREE(MTYPE_ISIS_AREA_ADDR, addr);  } @@ -809,8 +809,8 @@ static void area_set_mt_overload(struct isis_area *area, uint16_t mtid,  int area_net_title(struct vty *vty, const char *net_title)  {  	VTY_DECLVAR_CONTEXT(isis_area, area); -	struct area_addr *addr; -	struct area_addr *addrp; +	struct iso_address *addr; +	struct iso_address *addrp;  	struct listnode *node;  	uint8_t buff[255]; @@ -823,14 +823,14 @@ int area_net_title(struct vty *vty, const char *net_title)  		return CMD_ERR_NOTHING_TODO;  	} -	addr = XMALLOC(MTYPE_ISIS_AREA_ADDR, sizeof(struct area_addr)); +	addr = XMALLOC(MTYPE_ISIS_AREA_ADDR, sizeof(struct iso_address));  	addr->addr_len = dotformat2buff(buff, net_title);  	memcpy(addr->area_addr, buff, addr->addr_len);  #ifdef EXTREME_DEBUG  	zlog_debug("added area address %s for area %s (address length %d)",  		   net_title, area->area_tag, addr->addr_len);  #endif /* EXTREME_DEBUG */ -	if (addr->addr_len < 8 || addr->addr_len > 20) { +	if (addr->addr_len < ISO_ADDR_MIN || addr->addr_len > ISO_ADDR_SIZE) {  		vty_out(vty,  			"area address must be at least 8..20 octets long (%d)\n",  			addr->addr_len); @@ -852,8 +852,8 @@ int area_net_title(struct vty *vty, const char *net_title)  		memcpy(area->isis->sysid, GETSYSID(addr), ISIS_SYS_ID_LEN);  		area->isis->sysid_set = 1;  		if (IS_DEBUG_EVENTS) -			zlog_debug("Router has SystemID %s", -				   sysid_print(area->isis->sysid)); +			zlog_debug("Router has SystemID %pSY", +				   area->isis->sysid);  	} else {  		/*  		 * Check that the SystemID portions match @@ -899,12 +899,12 @@ int area_net_title(struct vty *vty, const char *net_title)  int area_clear_net_title(struct vty *vty, const char *net_title)  {  	VTY_DECLVAR_CONTEXT(isis_area, area); -	struct area_addr addr, *addrp = NULL; +	struct iso_address addr, *addrp = NULL;  	struct listnode *node;  	uint8_t buff[255];  	addr.addr_len = dotformat2buff(buff, net_title); -	if (addr.addr_len < 8 || addr.addr_len > 20) { +	if (addr.addr_len < ISO_ADDR_MIN || addr.addr_len > ISO_ADDR_SIZE) {  		vty_out(vty,  			"Unsupported area address length %d, should be 8...20 \n",  			addr.addr_len); @@ -2348,11 +2348,11 @@ static void common_isis_summary_json(struct json_object *json,  	time_t cur;  	char uptime[MONOTIME_STRLEN];  	char stier[5]; +  	json_object_string_add(json, "vrf", isis->name);  	json_object_int_add(json, "process-id", isis->process_id);  	if (isis->sysid_set) -		json_object_string_add(json, "system-id", -				       sysid_print(isis->sysid)); +		json_object_string_addf(json, "system-id", "%pSY", isis->sysid);  	cur = time(NULL);  	cur -= isis->uptime; @@ -2380,16 +2380,11 @@ static void common_isis_summary_json(struct json_object *json,  		}  		if (listcount(area->area_addrs) > 0) { -			struct area_addr *area_addr; +			struct iso_address *area_addr;  			for (ALL_LIST_ELEMENTS_RO(area->area_addrs, node2, -						  area_addr)) { -				json_object_string_add( -					area_json, "net", -					isonet_print(area_addr->area_addr, -						     area_addr->addr_len + -							     ISIS_SYS_ID_LEN + -							     1)); -			} +						  area_addr)) +				json_object_string_addf(area_json, "net", +							"%pISl", area_addr);  		}  		tx_pdu_json = json_object_new_object(); @@ -2462,8 +2457,7 @@ static void common_isis_summary_vty(struct vty *vty, struct isis *isis)  	vty_out(vty, "vrf             : %s\n", isis->name);  	vty_out(vty, "Process Id      : %ld\n", isis->process_id);  	if (isis->sysid_set) -		vty_out(vty, "System Id       : %s\n", -			sysid_print(isis->sysid)); +		vty_out(vty, "System Id       : %pSY\n", isis->sysid);  	vty_out(vty, "Up time         : ");  	vty_out_timestr(vty, isis->uptime); @@ -2485,15 +2479,10 @@ static void common_isis_summary_vty(struct vty *vty, struct isis *isis)  		}  		if (listcount(area->area_addrs) > 0) { -			struct area_addr *area_addr; +			struct iso_address *area_addr;  			for (ALL_LIST_ELEMENTS_RO(area->area_addrs, node2, -						  area_addr)) { -				vty_out(vty, "  Net: %s\n", -					isonet_print(area_addr->area_addr, -						     area_addr->addr_len -							     + ISIS_SYS_ID_LEN -							     + 1)); -			} +						  area_addr)) +				vty_out(vty, "  Net: %pISl\n", area_addr);  		}  		vty_out(vty, "  TX counters per PDU type:\n"); @@ -3497,15 +3486,10 @@ static int isis_config_write(struct vty *vty)  			write++;  			/* ISIS - Net */  			if (listcount(area->area_addrs) > 0) { -				struct area_addr *area_addr; +				struct iso_address *area_addr;  				for (ALL_LIST_ELEMENTS_RO(area->area_addrs,  							  node2, area_addr)) { -					vty_out(vty, " net %s\n", -						isonet_print( -							area_addr->area_addr, -							area_addr->addr_len -								+ ISIS_SYS_ID_LEN -								+ 1)); +					vty_out(vty, " net %pISl\n", area_addr);  					write++;  				}  			} diff --git a/isisd/isisd.h b/isisd/isisd.h index 0b1f1cb620..454876b7b0 100644 --- a/isisd/isisd.h +++ b/isisd/isisd.h @@ -24,6 +24,7 @@  #include "isis_lfa.h"  #include "qobj.h"  #include "ldp_sync.h" +#include "iso.h"  DECLARE_MGROUP(ISISD); @@ -87,7 +88,7 @@ struct isis {  	uint32_t router_id;		/* Router ID from zebra */  	struct list *area_list;	/* list of IS-IS areas */  	uint8_t max_area_addrs;		  /* maximumAreaAdresses */ -	struct area_addr *man_area_addrs; /* manualAreaAddresses */ +	struct iso_address *man_area_addrs; /* manualAreaAddresses */  	time_t uptime;			  /* when did we start */  	struct event *t_dync_clean; /* dynamic hostname cache cleanup thread */  	uint32_t circuit_ids_used[8];     /* 256 bits to track circuit ids 1 through 255 */ diff --git a/lib/iso.c b/lib/iso.c new file mode 100644 index 0000000000..fe97776ade --- /dev/null +++ b/lib/iso.c @@ -0,0 +1,144 @@ +/* + * ISO Network functions - iso_net.c + * + * Author: Olivier Dugeon <olivier.dugeon@orange.com> + * + * Copyright (C) 2023 Orange http://www.orange.com + * + * This file is part of Free Range Routing (FRR). + * + * FRR is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2, or (at your option) any + * later version. + * + * FRR is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; see the file COPYING; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "compiler.h" + +#include <string.h> +#include <ctype.h> +#include <time.h> + +#include "printfrr.h" +#include "iso.h" + +/** + * Print ISO System ID as 0000.0000.0000 + * + * @param	Print buffer + * @param	Print argument + * @param	Pointer to the System ID to be printed + * + * @return	Number of printed characters + */ +printfrr_ext_autoreg_p("SY", printfrr_iso_sysid); +static ssize_t printfrr_iso_sysid(struct fbuf *buf, struct printfrr_eargs *ea, +				  const void *vptr) +{ +	const uint8_t *id = vptr; + +	if (!id) +		return bputs(buf, "(null)"); + +	return bprintfrr(buf, "%02x%02x.%02x%02x.%02x%02x", +			 id[0], id[1], id[2], id[3], id[4], id[5]); +} + +/** + * Print ISO Pseudo Node system ID as 0000.0000.0000.00 + * + * @param	Print buffer + * @param	Print argument + * @param	Pointer to the System ID to be printed + * + * @return	Number of printed characters + */ +printfrr_ext_autoreg_p("PN", printfrr_iso_pseudo); +static ssize_t printfrr_iso_pseudo(struct fbuf *buf, struct printfrr_eargs *ea, +				   const void *vptr) +{ +	const uint8_t *id = vptr; + +	if (!id) +		return bputs(buf, "(null)"); + +	return bprintfrr(buf, "%02x%02x.%02x%02x.%02x%02x.%02x", +			 id[0], id[1], id[2], id[3], id[4], id[5], id[6]); +} + +/** + * Print ISO LSP Fragment System ID as 0000.0000.0000.00-00 + * + * @param	Print buffer + * @param	Print argument + * @param	Pointer to the System ID to be printed + * + * @return	Number of printed characters + */ +printfrr_ext_autoreg_p("LS", printfrr_iso_frag_id); +static ssize_t printfrr_iso_frag_id(struct fbuf *buf, struct printfrr_eargs *ea, +				    const void *vptr) +{ +	const uint8_t *id = vptr; + +	if (!id) +		return bputs(buf, "(null)"); + +	return bprintfrr(buf, "%02x%02x.%02x%02x.%02x%02x.%02x-%02x", +			 id[0], id[1], id[2], id[3], id[4], id[5], id[6], +			 id[7]); +} + +/** + * Print ISO Network address as 00.0000.0000.0000 ... with the System ID + * as 0000.0000.0000.00 when long 'l' option is added to '%pIS' + * + * @param	Print buffer + * @param	Print argument + * @param	Pointer to the ISO Network address + * + * @return	Number of printed characters + */ +printfrr_ext_autoreg_p("IS", printfrr_iso_addr); +static ssize_t printfrr_iso_addr(struct fbuf *buf, struct printfrr_eargs *ea, +				 const void *vptr) +{ +	const struct iso_address *ia = vptr; +	uint8_t len = 0; +	int i = 0; +	ssize_t ret = 0; + +	if (ea->fmt[0] == 'l') { +		len = 7; /* ISO SYSTEM ID + 1 */ +		ea->fmt++; +	} + +	if (!ia) +		return bputs(buf, "(null)"); + +	len += ia->addr_len; +	while (i < len) { +		/* No dot for odd index and at the end of address */ +		if ((i & 1) || (i == (len - 1))) +			ret += bprintfrr(buf, "%02x", ia->area_addr[i]); +		else +			ret += bprintfrr(buf, "%02x.", ia->area_addr[i]); +		i++; +	} + +	return ret; +} + diff --git a/lib/iso.h b/lib/iso.h new file mode 100644 index 0000000000..975d3c154b --- /dev/null +++ b/lib/iso.h @@ -0,0 +1,49 @@ +/* + * ISO Network definition - iso_net.h + * + * Author: Olivier Dugeon <olivier.dugeon@orange.com> + * + * Copyright (C) 2023 Orange http://www.orange.com + * + * This file is part of Free Range Routing (FRR). + * + * FRR is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2, or (at your option) any + * later version. + * + * FRR is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; see the file COPYING; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef LIB_ISO_H_ +#define LIB_ISO_H_ + +#include "compiler.h" + +/* len of "xx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xx" + '\0' */ +#define ISO_ADDR_STRLEN	51 +#define ISO_ADDR_MIN	8 +#define ISO_ADDR_SIZE	20 +struct iso_address { +	uint8_t addr_len; +	uint8_t area_addr[ISO_ADDR_SIZE]; +}; + +/* len of "xxxx.xxxx.xxxx.xx-xx" + '\0' */ +#define ISO_SYSID_STRLEN 21 + +#ifdef _FRR_ATTRIBUTE_PRINTFRR +#pragma FRR printfrr_ext "%pSY" (uint8_t *) +#pragma FRR printfrr_ext "%pPN" (uint8_t *) +#pragma FRR printfrr_ext "%pLS" (uint8_t *) +#pragma FRR printfrr_ext "%pIS" (struct iso_address *) +#endif + +#endif /* LIB_ISO_H_ */ diff --git a/lib/link_state.c b/lib/link_state.c index 0aba021b1a..076030a839 100644 --- a/lib/link_state.c +++ b/lib/link_state.c @@ -26,6 +26,7 @@  #include "printfrr.h"  #include <lib/json.h>  #include "link_state.h" +#include "iso.h"  /* Link State Memory allocation */  DEFINE_MTYPE_STATIC(LIB, LS_DB, "Link State Database"); @@ -1966,13 +1967,9 @@ static const char *const status2txt[] = {  static const char *ls_node_id_to_text(struct ls_node_id lnid, char *str,  				      size_t size)  { -	if (lnid.origin == ISIS_L1 || lnid.origin == ISIS_L2) { -		uint8_t *id; - -		id = lnid.id.iso.sys_id; -		snprintfrr(str, size, "%02x%02x.%02x%02x.%02x%02x", id[0], -			   id[1], id[2], id[3], id[4], id[5]); -	} else +	if (lnid.origin == ISIS_L1 || lnid.origin == ISIS_L2) +		snprintfrr(str, size, "%pSY", lnid.id.iso.sys_id); +	else  		snprintfrr(str, size, "%pI4", &lnid.id.ip.addr);  	return str; diff --git a/lib/subdir.am b/lib/subdir.am index 0f5bbef0b2..83eecbee57 100644 --- a/lib/subdir.am +++ b/lib/subdir.am @@ -47,6 +47,7 @@ lib_libfrr_la_SOURCES = \  	lib/if_rmap.c \  	lib/imsg-buffer.c \  	lib/imsg.c \ +	lib/iso.c \  	lib/jhash.c \  	lib/json.c \  	lib/keychain.c \ @@ -224,6 +225,7 @@ pkginclude_HEADERS += \  	lib/if_rmap.h \  	lib/imsg.h \  	lib/ipaddr.h \ +	lib/iso.h \  	lib/jhash.h \  	lib/json.h \  	lib/keychain.h \  | 
