summaryrefslogtreecommitdiff
path: root/pathd/pathd.c
diff options
context:
space:
mode:
authorJavier Garcia <javier.garcia@voltanet.io>2021-05-21 09:17:22 +0200
committerJavier Garcia <javier.garcia@voltanet.io>2021-06-22 12:04:03 +0200
commitab7fe289b911bc4601da1c48542159adabf3ef60 (patch)
tree1536913a710ffb81969dcfa0a6ccef42847c424b /pathd/pathd.c
parent56634922390ff08d2ae06ecb0c32f94c07028561 (diff)
pathd: Handle PCInitiated configuration, main thread. (3/4)
Co-authored-by: Javier Garcia <javier.garcia@voltanet.io> Signed-off-by: Sebastien Merle <sebastien@netdef.org>
Diffstat (limited to 'pathd/pathd.c')
-rw-r--r--pathd/pathd.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/pathd/pathd.c b/pathd/pathd.c
index 9dc3a41638..022813a497 100644
--- a/pathd/pathd.c
+++ b/pathd/pathd.c
@@ -294,7 +294,9 @@ void srte_segment_set_local_modification(struct srte_segment_list *s_list,
* @param endpoint The IP address of the policy endpoint
* @return The created policy
*/
-struct srte_policy *srte_policy_add(uint32_t color, struct ipaddr *endpoint)
+struct srte_policy *srte_policy_add(uint32_t color, struct ipaddr *endpoint,
+ enum srte_protocol_origin origin,
+ const char *originator)
{
struct srte_policy *policy;
@@ -302,6 +304,11 @@ struct srte_policy *srte_policy_add(uint32_t color, struct ipaddr *endpoint)
policy->color = color;
policy->endpoint = *endpoint;
policy->binding_sid = MPLS_LABEL_NONE;
+ policy->protocol_origin = origin;
+ if (originator != NULL)
+ strlcpy(policy->originator, originator,
+ sizeof(policy->originator));
+
RB_INIT(srte_candidate_head, &policy->candidate_paths);
RB_INSERT(srte_policy_head, &srte_policies, policy);
@@ -646,7 +653,9 @@ void srte_policy_apply_changes(struct srte_policy *policy)
* @return The added candidate path
*/
struct srte_candidate *srte_candidate_add(struct srte_policy *policy,
- uint32_t preference)
+ uint32_t preference,
+ enum srte_protocol_origin origin,
+ const char *originator)
{
struct srte_candidate *candidate;
struct srte_lsp *lsp;
@@ -657,8 +666,18 @@ struct srte_candidate *srte_candidate_add(struct srte_policy *policy,
candidate->preference = preference;
candidate->policy = policy;
candidate->type = SRTE_CANDIDATE_TYPE_UNDEFINED;
- candidate->discriminator = frr_weak_random();
+ candidate->discriminator = rand();
+ candidate->protocol_origin = origin;
+ if (originator != NULL) {
+ strlcpy(candidate->originator, originator,
+ sizeof(candidate->originator));
+ lsp->protocol_origin = origin;
+ }
+ if (candidate->protocol_origin == SRTE_ORIGIN_PCEP
+ || candidate->protocol_origin == SRTE_ORIGIN_BGP) {
+ candidate->type = SRTE_CANDIDATE_TYPE_DYNAMIC;
+ }
lsp->candidate = candidate;
candidate->lsp = lsp;