From be09b030ed40c76ee0727dd3980df77094fdc907 Mon Sep 17 00:00:00 2001 From: Ondrej Zajicek Date: Wed, 4 Oct 2023 15:00:24 +0200 Subject: MPLS: Update to support and use 64bit source id --- nest/mpls.c | 4 ++-- nest/mpls.h | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'nest') diff --git a/nest/mpls.c b/nest/mpls.c index 54bfb402..e37535c5 100644 --- a/nest/mpls.c +++ b/nest/mpls.c @@ -847,12 +847,12 @@ mpls_get_fec_by_label(struct mpls_fec_map *m, u32 label) } struct mpls_fec * -mpls_get_fec_by_net(struct mpls_fec_map *m, const net_addr *net, u32 path_id) +mpls_get_fec_by_net(struct mpls_fec_map *m, const net_addr *net, u64 path_id) { if (!m->net_hash.data) HASH_INIT(m->net_hash, m->pool, 4); - u32 hash = net_hash(net) ^ u32_hash(path_id); + u32 hash = net_hash(net) ^ u64_hash(path_id); struct mpls_fec *fec = HASH_FIND(m->net_hash, NET, net, path_id, hash); if (fec) diff --git a/nest/mpls.h b/nest/mpls.h index def490c1..c2bdf5ef 100644 --- a/nest/mpls.h +++ b/nest/mpls.h @@ -126,11 +126,6 @@ struct mpls_fec { u32 label; /* Label for FEC */ u32 hash; /* Hash for primary key (net / rta) */ u32 uc; /* Number of LSPs for FEC */ - union { /* Extension part of key */ - u32 path_id; /* Source path_id */ - u32 class_id; /* Aaggregation class */ - }; - u8 state; /* FEC state (MPLS_FEC_*) */ u8 policy; /* Label policy (MPLS_POLICY_*) */ @@ -138,6 +133,11 @@ struct mpls_fec { struct mpls_fec *next_k; /* Next in mpls_fec.net_hash/rta_hash */ struct mpls_fec *next_l; /* Next in mpls_fec.label_hash */ + + union { /* Extension part of key */ + u64 path_id; /* Source path_id */ + u32 class_id; /* Aaggregation class */ + }; union { /* Primary key */ struct rta *rta; struct iface *iface; @@ -169,7 +169,7 @@ void mpls_fec_map_reconfigure(struct mpls_fec_map *m, struct channel *C); void mpls_fec_map_free(struct mpls_fec_map *m); struct mpls_fec *mpls_find_fec_by_label(struct mpls_fec_map *x, u32 label); struct mpls_fec *mpls_get_fec_by_label(struct mpls_fec_map *m, u32 label); -struct mpls_fec *mpls_get_fec_by_net(struct mpls_fec_map *m, const net_addr *net, u32 path_id); +struct mpls_fec *mpls_get_fec_by_net(struct mpls_fec_map *m, const net_addr *net, u64 path_id); struct mpls_fec *mpls_get_fec_by_rta(struct mpls_fec_map *m, const rta *src, u32 class_id); void mpls_free_fec(struct mpls_fec_map *x, struct mpls_fec *fec); int mpls_handle_rte(struct mpls_fec_map *m, const net_addr *n, rte *r, linpool *lp, struct mpls_fec **locked_fec); -- cgit v1.2.3