mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-04-28 21:20:48 +00:00
Merge pull request #12698 from Orange-OpenSource/isisd
Isisd/Lib: Add new printfrr format facility for Intermediate System ID
This commit is contained in:
commit
f26a87cd24
@ -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
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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");
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
127
isisd/isis_lsp.c
127
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)
|
||||
|
@ -32,47 +32,12 @@
|
||||
#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 */
|
||||
|
@ -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; */
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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];
|
||||
|
||||
return yang_data_new_string(args->xpath, snpa_print(adj->snpa));
|
||||
snprintfrr(xpath_value, ISO_SYSID_STRLEN, "%pSY", adj->snpa);
|
||||
|
||||
return yang_data_new_string(args->xpath, xpath_value);
|
||||
}
|
||||
|
||||
/*
|
||||
|
121
isisd/isis_pdu.c
121
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));
|
||||
|
@ -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:
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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. */
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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++;
|
||||
}
|
||||
}
|
||||
|
@ -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 */
|
||||
|
144
lib/iso.c
Normal file
144
lib/iso.c
Normal file
@ -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;
|
||||
}
|
||||
|
49
lib/iso.h
Normal file
49
lib/iso.h
Normal file
@ -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_ */
|
@ -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;
|
||||
|
@ -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 \
|
||||
|
Loading…
Reference in New Issue
Block a user