summaryrefslogtreecommitdiffstats
path: root/ospfd/ospf_te.c
diff options
context:
space:
mode:
authorPhilippe Guibert <philippe.guibert@6wind.com>2023-04-20 18:33:21 +0200
committerGitHub <noreply@github.com>2023-04-20 18:33:21 +0200
commit7b343a9ed5381d6e66cb68a6aa396d2194de7444 (patch)
treece55d7f53e9f05634719b44217cf132bb4ebc952 /ospfd/ospf_te.c
parentMerge pull request #13329 from Pdoijode/pdoijode/bgp-attr-crash-fix (diff)
parenttests: Update TE topotests to follow new Edge Key (diff)
downloadfrr-7b343a9ed5381d6e66cb68a6aa396d2194de7444.tar.xz
frr-7b343a9ed5381d6e66cb68a6aa396d2194de7444.zip
Merge pull request #12933 from Orange-OpenSource/link_state
lib: Update edge key in link state database
Diffstat (limited to 'ospfd/ospf_te.c')
-rw-r--r--ospfd/ospf_te.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/ospfd/ospf_te.c b/ospfd/ospf_te.c
index 5f83e1c2c..3cf39e5fb 100644
--- a/ospfd/ospf_te.c
+++ b/ospfd/ospf_te.c
@@ -1665,12 +1665,13 @@ static struct ls_vertex *get_vertex(struct ls_ted *ted, struct ospf_lsa *lsa)
static struct ls_edge *get_edge(struct ls_ted *ted, struct ls_node_id adv,
struct in_addr link_id)
{
- uint64_t key;
+ struct ls_edge_key key;
struct ls_edge *edge;
struct ls_attributes *attr;
/* Search Edge that corresponds to the Link ID */
- key = ((uint64_t)ntohl(link_id.s_addr)) & 0xffffffff;
+ key.family = AF_INET;
+ IPV4_ADDR_COPY(&key.k.addr, &link_id);
edge = ls_find_edge_by_key(ted, key);
/* Create new one if not exist */
@@ -2350,7 +2351,7 @@ static int ospf_te_delete_te(struct ls_ted *ted, struct ospf_lsa *lsa)
struct ls_attributes *attr;
struct tlv_header *tlvh;
struct in_addr addr;
- uint64_t key = 0;
+ struct ls_edge_key key = {.family = AF_UNSPEC};
uint16_t len, sum;
uint8_t lsa_id;
@@ -2366,12 +2367,13 @@ static int ospf_te_delete_te(struct ls_ted *ted, struct ospf_lsa *lsa)
for (tlvh = TLV_DATA(tlvh); sum < len; tlvh = TLV_HDR_NEXT(tlvh)) {
if (ntohs(tlvh->type) == TE_LINK_SUBTLV_LCLIF_IPADDR) {
memcpy(&addr, TLV_DATA(tlvh), TE_LINK_SUBTLV_DEF_SIZE);
- key = ((uint64_t)ntohl(addr.s_addr)) & 0xffffffff;
+ key.family = AF_INET;
+ IPV4_ADDR_COPY(&key.k.addr, &addr);
break;
}
sum += TLV_SIZE(tlvh);
}
- if (key == 0)
+ if (key.family == AF_UNSPEC)
return 0;
/* Search Edge that corresponds to the Link ID */
@@ -2862,11 +2864,12 @@ static int ospf_te_delete_ext_link(struct ls_ted *ted, struct ospf_lsa *lsa)
struct ls_edge *edge;
struct ls_attributes *atr;
struct ext_tlv_link *ext;
- uint64_t key;
+ struct ls_edge_key key;
/* Search for corresponding Edge from Link State Data Base */
ext = (struct ext_tlv_link *)TLV_HDR_TOP(lsa->data);
- key = ((uint64_t)ntohl(ext->link_data.s_addr)) & 0xffffffff;
+ key.family = AF_INET;
+ IPV4_ADDR_COPY(&key.k.addr, &ext->link_data);
edge = ls_find_edge_by_key(ted, key);
/* Check if there is a corresponding Edge */
@@ -4298,6 +4301,7 @@ DEFUN (show_ip_ospf_mpls_te_db,
struct ls_edge *edge;
struct ls_subnet *subnet;
uint64_t key;
+ struct ls_edge_key ekey;
bool verbose = false;
bool uj = use_json(argc, argv);
json_object *json = NULL;
@@ -4351,8 +4355,9 @@ DEFUN (show_ip_ospf_mpls_te_db,
return CMD_WARNING_CONFIG_FAILED;
}
/* Get the Edge from the Link State Database */
- key = ((uint64_t)ntohl(ip_addr.s_addr)) & 0xffffffff;
- edge = ls_find_edge_by_key(OspfMplsTE.ted, key);
+ ekey.family = AF_INET;
+ IPV4_ADDR_COPY(&ekey.k.addr, &ip_addr);
+ edge = ls_find_edge_by_key(OspfMplsTE.ted, ekey);
if (!edge) {
vty_out(vty, "No edge found for ID %pI4\n",
&ip_addr);