@@ -56,10 +56,16 @@ def sids_set_handler(self, key, data):
56
56
locator_name = key .split ("|" )[0 ]
57
57
ip_prefix = key .split ("|" )[1 ].lower ()
58
58
key = "{}|{}" .format (locator_name , ip_prefix )
59
+ prefix_len = int (ip_prefix .split ("/" )[1 ])
59
60
60
61
if not self .directory .path_exist (self .db_name , "SRV6_MY_LOCATORS" , locator_name ):
61
62
log_err ("Found a SRv6 SID config entry with a locator that does not exist: {} | {}" .format (key , data ))
62
63
return False
64
+
65
+ locator = self .directory .get (self .db_name , "SRV6_MY_LOCATORS" , locator_name )
66
+ if locator .block_len + locator .node_len > prefix_len :
67
+ log_err ("Found a SRv6 SID config entry with an invalid prefix length {} | {}" .format (key , data ))
68
+ return False
63
69
64
70
if 'action' not in data :
65
71
log_err ("Found a SRv6 SID config entry that does not specify action: {} | {}" .format (key , data ))
@@ -80,7 +86,7 @@ def sids_set_handler(self, key, data):
80
86
self .cfg_mgr .push_list (cmd_list )
81
87
log_debug ("{} SRv6 static configuration {}|{} is scheduled for updates. {}" .format (self .db_name , self .table_name , key , str (cmd_list )))
82
88
83
- self .directory .put (self .db_name , self .table_name , key , (sid , sid_cmd ))
89
+ self .directory .put (self .db_name , self .table_name , key . replace ( "/" , " \\ " ) , (sid , sid_cmd ))
84
90
return True
85
91
86
92
def del_handler (self , key ):
@@ -102,18 +108,18 @@ def sids_del_handler(self, key):
102
108
ip_prefix = key .split ("|" )[1 ].lower ()
103
109
key = "{}|{}" .format (locator_name , ip_prefix )
104
110
105
- if not self .directory .path_exist (self .db_name , self .table_name , key ):
111
+ if not self .directory .path_exist (self .db_name , self .table_name , key . replace ( "/" , " \\ " ) ):
106
112
log_warn ("Encountered a config deletion with a SRv6 SID that does not exist: {}" .format (key ))
107
113
return
108
114
109
- _ , sid_cmd = self .directory .get (self .db_name , self .table_name , key )
115
+ _ , sid_cmd = self .directory .get (self .db_name , self .table_name , key . replace ( "/" , " \\ " ) )
110
116
cmd_list = ['segment-routing' , 'srv6' , "static-sids" ]
111
117
no_sid_cmd = 'no ' + sid_cmd
112
118
cmd_list .append (no_sid_cmd )
113
119
114
120
self .cfg_mgr .push_list (cmd_list )
115
121
log_debug ("{} SRv6 static configuration {}|{} is scheduled for updates. {}" .format (self .db_name , self .table_name , key , str (cmd_list )))
116
- self .directory .remove (self .db_name , self .table_name , key )
122
+ self .directory .remove (self .db_name , self .table_name , key . replace ( "/" , " \\ " ) )
117
123
118
124
class Locator :
119
125
def __init__ (self , name , data ):
0 commit comments