summaryrefslogtreecommitdiff
path: root/pathd/path_nb_config.c
diff options
context:
space:
mode:
Diffstat (limited to 'pathd/path_nb_config.c')
-rw-r--r--pathd/path_nb_config.c41
1 files changed, 39 insertions, 2 deletions
diff --git a/pathd/path_nb_config.c b/pathd/path_nb_config.c
index af54f5bce2..5b0f5b44e5 100644
--- a/pathd/path_nb_config.c
+++ b/pathd/path_nb_config.c
@@ -160,6 +160,22 @@ int pathd_srte_segment_list_segment_sid_value_modify(
return NB_OK;
}
+int pathd_srte_segment_list_segment_sid_value_destroy(
+ struct nb_cb_destroy_args *args)
+{
+ struct srte_segment_entry *segment;
+
+ if (args->event != NB_EV_APPLY)
+ return NB_OK;
+
+ segment = nb_running_get_entry(args->dnode, NULL, true);
+ segment->sid_value = MPLS_LABEL_NONE;
+ SET_FLAG(segment->segment_list->flags, F_SEGMENT_LIST_MODIFIED);
+
+ return NB_OK;
+}
+
+
int pathd_srte_segment_list_segment_nai_destroy(struct nb_cb_destroy_args *args)
{
struct srte_segment_entry *segment;
@@ -184,6 +200,8 @@ void pathd_srte_segment_list_segment_nai_apply_finish(
enum srte_segment_nai_type type;
struct ipaddr local_addr, remote_addr;
uint32_t local_iface = 0, remote_iface = 0;
+ uint8_t algo = 0, local_prefix_len = 0;
+ const char *algo_buf, *local_prefix_len_buf;
segment = nb_running_get_entry(args->dnode, NULL, true);
type = yang_dnode_get_enum(args->dnode, "./type");
@@ -207,12 +225,31 @@ void pathd_srte_segment_list_segment_nai_apply_finish(
remote_iface = yang_dnode_get_uint32(args->dnode,
"./remote-interface");
break;
+ case SRTE_SEGMENT_NAI_TYPE_IPV4_ALGORITHM:
+ algo_buf = yang_dnode_get_string(args->dnode, "./algorithm");
+ algo = atoi(algo_buf);
+ local_prefix_len_buf = yang_dnode_get_string(
+ args->dnode, "./local-prefix-len");
+ local_prefix_len = atoi(local_prefix_len_buf);
+ break;
+ case SRTE_SEGMENT_NAI_TYPE_IPV4_LOCAL_IFACE:
+ local_iface =
+ yang_dnode_get_uint32(args->dnode, "./local-interface");
+ local_prefix_len_buf = yang_dnode_get_string(
+ args->dnode, "./local-prefix-len");
+ local_prefix_len = atoi(local_prefix_len_buf);
+ break;
default:
break;
}
- srte_segment_entry_set_nai(segment, type, &local_addr, local_iface,
- &remote_addr, remote_iface);
+ zlog_debug(" Segment list name (%d) index (%s) ", segment->index,
+ segment->segment_list->name);
+ if (srte_segment_entry_set_nai(segment, type, &local_addr, local_iface,
+ &remote_addr, remote_iface, algo,
+ local_prefix_len))
+ SET_FLAG(segment->segment_list->flags,
+ F_SEGMENT_LIST_SID_CONFLICT);
}
/*