3
3
from swsscommon import swsscommon
4
4
from .managers_rm import ROUTE_MAPS
5
5
import ipaddress
6
- from .log import log_info , log_err
6
+ from .log import log_info , log_err , log_debug
7
7
8
8
9
9
class AdvertiseRouteMgr (Manager ):
10
- """This class Advertises routes when ADVERTISE_NETWORK_TABLE in STATE_DB is updated"""
10
+ """ This class Advertises routes when ADVERTISE_NETWORK_TABLE in STATE_DB is updated """
11
11
12
12
def __init__ (self , common_objs , db , table ):
13
13
"""
@@ -23,70 +23,38 @@ def __init__(self, common_objs, db, table):
23
23
table ,
24
24
)
25
25
26
- self .directory .subscribe (
27
- [
28
- ("CONFIG_DB" , swsscommon .CFG_DEVICE_METADATA_TABLE_NAME , "localhost/bgp_asn" ),
29
- ],
30
- self .on_bgp_asn_change ,
31
- )
26
+ self .directory .subscribe ([("CONFIG_DB" , swsscommon .CFG_DEVICE_METADATA_TABLE_NAME , "localhost/bgp_asn" ),], self .on_bgp_asn_change )
32
27
self .advertised_routes = dict ()
33
28
29
+
34
30
OP_DELETE = "DELETE"
35
31
OP_ADD = "ADD"
36
32
37
33
def set_handler (self , key , data ):
38
- log_info ("AdvertiseRouteMgr:: set handler" )
39
- if not self ._set_handler_validate (key , data ):
34
+ log_debug ("AdvertiseRouteMgr:: set handler" )
35
+ if not self .__set_handler_validate (key , data ):
40
36
return True
41
37
vrf , ip_prefix = self .split_key (key )
42
38
self .add_route_advertisement (vrf , ip_prefix , data )
43
39
44
40
return True
45
41
46
42
def del_handler (self , key ):
47
- log_info ("AdvertiseRouteMgr:: del handler" )
48
- if not self ._del_handler_validate (key ):
49
- return
43
+ log_debug ("AdvertiseRouteMgr:: del handler" )
50
44
vrf , ip_prefix = self .split_key (key )
51
45
self .remove_route_advertisement (vrf , ip_prefix )
52
46
53
- def _ip_addr_validate (self , key ):
54
- if key :
55
- _ , ip_prefix = self .split_key (key )
56
- ip_prefix = ip_prefix .split ("/" )
57
- if len (ip_prefix ) != 2 :
58
- log_err ("BGPAdvertiseRouteMgr:: No valid ip prefix for advertised route %s" % key )
59
- return False
60
- try :
61
- ip = ipaddress .ip_address (ip_prefix [0 ])
62
- if ip .version == 4 and int (ip_prefix [1 ]) not in range (0 , 33 ):
63
- log_err (
64
- "BGPAdvertiseRouteMgr:: ipv4 prefix %s is illegal for advertised route %s" % (ip_prefix [1 ], key )
65
- )
66
- return False
67
- if ip .version == 6 and int (ip_prefix [1 ]) not in range (0 , 129 ):
68
- log_err (
69
- "BGPAdvertiseRouteMgr:: ipv6 prefix %s is illegal for advertised route %s" % (ip_prefix [1 ], key )
70
- )
71
- return False
72
- except ValueError :
73
- log_err ("BGPAdvertiseRouteMgr:: No valid ip %s for advertised route %s" % (ip_prefix [0 ], key ))
74
- return False
75
- else :
76
- return False
77
- return True
78
-
79
- def _set_handler_validate (self , key , data ):
47
+ def __set_handler_validate (self , key , data ):
80
48
if data :
81
49
if ("profile" in data and data ["profile" ] in ROUTE_MAPS ) or data == {"" :"" }:
82
- return self ._ip_addr_validate (key )
50
+ """
51
+ APP which config the data should be responsible to pass a valid IP prefix
52
+ """
53
+ return True
83
54
84
55
log_err ("BGPAdvertiseRouteMgr:: Invalid data %s for advertised route %s" % (data , key ))
85
56
return False
86
57
87
- def _del_handler_validate (self , key ):
88
- return self ._ip_addr_validate (key )
89
-
90
58
def add_route_advertisement (self , vrf , ip_prefix , data ):
91
59
if self .directory .path_exist ("CONFIG_DB" , swsscommon .CFG_DEVICE_METADATA_TABLE_NAME , "localhost/bgp_asn" ):
92
60
if not self .advertised_routes .get (vrf , dict ()):
@@ -110,9 +78,8 @@ def remove_route_advertisement(self, vrf, ip_prefix):
110
78
111
79
def advertise_route_commands (self , ip_prefix , vrf , op , data = None ):
112
80
is_ipv6 = TemplateFabric .is_ipv6 (ip_prefix )
113
- bgp_asn = self .directory .get_slot ("CONFIG_DB" , swsscommon .CFG_DEVICE_METADATA_TABLE_NAME )["localhost" ][
114
- "bgp_asn"
115
- ]
81
+ bgp_asn = self .directory .get_slot ("CONFIG_DB" , swsscommon .CFG_DEVICE_METADATA_TABLE_NAME )["localhost" ]["bgp_asn" ]
82
+
116
83
cmd_list = []
117
84
if vrf == "default" :
118
85
cmd_list .append ("router bgp %s" % bgp_asn )
@@ -123,24 +90,22 @@ def advertise_route_commands(self, ip_prefix, vrf, op, data=None):
123
90
124
91
if data and "profile" in data :
125
92
cmd_list .append (" network %s route-map %s" % (ip_prefix , "%s_RM" % data ["profile" ]))
126
- log_info (
93
+ log_debug (
127
94
"BGPAdvertiseRouteMgr:: Update bgp %s network %s with route-map %s"
128
95
% (bgp_asn , vrf + "|" + ip_prefix , "%s_RM" % data ["profile" ])
129
96
)
130
97
else :
131
98
cmd_list .append (" %snetwork %s" % ("no " if op == self .OP_DELETE else "" , ip_prefix ))
132
- log_info (
99
+ log_debug (
133
100
"BGPAdvertiseRouteMgr:: %sbgp %s network %s"
134
101
% ("Remove " if op == self .OP_DELETE else "Update " , bgp_asn , vrf + "|" + ip_prefix )
135
102
)
136
103
137
104
self .cfg_mgr .push_list (cmd_list )
138
- log_info ("BGPAdvertiseRouteMgr::Done" )
105
+ log_debug ("BGPAdvertiseRouteMgr::Done" )
139
106
140
107
def bgp_network_import_check_commands (self , vrf , op ):
141
- bgp_asn = self .directory .get_slot ("CONFIG_DB" , swsscommon .CFG_DEVICE_METADATA_TABLE_NAME )["localhost" ][
142
- "bgp_asn"
143
- ]
108
+ bgp_asn = self .directory .get_slot ("CONFIG_DB" , swsscommon .CFG_DEVICE_METADATA_TABLE_NAME )["localhost" ]["bgp_asn" ]
144
109
cmd_list = []
145
110
if vrf == "default" :
146
111
cmd_list .append ("router bgp %s" % bgp_asn )
0 commit comments