1 from ryu.services.protocols.bgp.operator.views.base import \
3 from ryu.services.protocols.bgp.operator.views.base import \
5 from ryu.services.protocols.bgp.operator.views.base import OperatorDetailView
6 from ryu.services.protocols.bgp.operator.views import fields
8 from ryu.lib.packet.bgp import BGP_ATTR_TYPE_AS_PATH
9 from ryu.lib.packet.bgp import BGP_ATTR_TYPE_ORIGIN
10 from ryu.lib.packet.bgp import BGP_ATTR_TYPE_MULTI_EXIT_DISC
11 from ryu.lib.packet.bgp import BGP_ATTR_TYPE_LOCAL_PREF
12 from ryu.lib.packet.bgp import BGP_ATTR_TYPE_EXTENDED_COMMUNITIES
15 class CoreServiceDetailView(OperatorDetailView):
16 rf_state = fields.RelatedViewField(
18 'ryu.services.protocols.bgp.operator.views.bgp.RfStateDetailView'
20 importmap_manager = fields.RelatedDictViewField(
22 'ryu.services.protocols.bgp.operator'
23 '.views.other.ImportmapManagerDetailView'
25 table_manager = fields.RelatedViewField(
27 'ryu.services.protocols.bgp.operator.views.bgp.TableManagerDetailView'
29 peer_manager = fields.RelatedViewField(
31 'ryu.services.protocols.bgp.operator.views.bgp.PeerManagerDetailView'
33 router_id = fields.DataField('router_id')
36 class TableManagerDetailView(OperatorDetailView):
37 tables = fields.RelatedDictViewField(
39 'ryu.services.protocols.bgp.operator.views.bgp.TableDictView'
41 tables_for_rt = fields.RelatedDictViewField(
43 'ryu.services.protocols.bgp.operator.views.bgp.TableDictView'
45 global_tables = fields.RelatedDictViewField(
47 'ryu.services.protocols.bgp.operator.views.bgp.TableDictView'
49 asbr_label_range = fields.DataField('_asbr_label_range')
50 next_hop_label = fields.DataField('_next_hop_label')
51 next_vpnv4_label = fields.DataField('_next_vpnv4_label')
54 class PeerManagerDetailView(OperatorDetailView):
55 peers = fields.RelatedListViewField(
57 'ryu.services.protocols.bgp.operator.views.bgp.PeerDictView'
59 peers_summary = fields.RelatedListViewField(
61 'ryu.services.protocols.bgp.operator.views.bgp.PeerDictSummaryView'
65 class RfStateDetailView(OperatorDetailView):
69 class PeerStateDetailView(OperatorDetailView):
70 bgp_state = fields.DataField('_bgp_state')
71 last_error = fields.DataField('_last_bgp_error')
74 ret = super(PeerStateDetailView, self).encode()
75 ret.update(self._obj.get_stats_summary_dict())
79 class PeerDetailView(OperatorDetailView):
80 remote_as = fields.DataField('remote_as')
81 ip_address = fields.DataField('ip_address')
82 enabled = fields.DataField('enabled')
83 adj_rib_in = fields.RelatedViewField(
85 'ryu.services.protocols.bgp.operator.views.bgp.ReceivedRouteDictView'
87 adj_rib_out = fields.RelatedViewField(
89 'ryu.services.protocols.bgp.operator.views.bgp.SentRouteDictView'
91 neigh_conf = fields.RelatedViewField(
93 'ryu.services.protocols.bgp.operator.views.conf.ConfDetailView'
95 common_conf = fields.RelatedViewField(
97 'ryu.services.protocols.bgp.operator.views.conf.ConfDetailView'
99 state = fields.RelatedViewField(
101 'ryu.services.protocols.bgp.operator.views.bgp.PeerStateDetailView'
105 ret = super(PeerDetailView, self).encode()
107 'stats': self.rel('state').encode(),
108 'settings': self.rel('neigh_conf').encode()
113 class PeerDetailSummaryView(PeerDetailView):
116 'conf': self.rel('neigh_conf').encode(),
117 'info': self.rel('state').encode()
121 class PeerRfDetailView(OperatorDetailView):
122 rf = fields.DataField('rf')
123 enabled = fields.DataField('enabled')
124 peer = fields.RelatedViewField(
126 'ryu.services.protocols.bgp.operator.views.bgp.PeerDetailView'
130 class TableDetailView(OperatorDetailView):
131 scope_id = fields.DataField('scope_id')
132 route_family = fields.DataField('route_family')
133 destinations = fields.RelatedDictViewField(
135 'ryu.services.protocols.bgp.operator.views.bgp.DestinationDictView'
139 class PathDetailView(OperatorDetailView):
140 source_version_num = fields.DataField('source_version_num')
141 route_family = fields.RelatedViewField(
143 'ryu.services.protocols.bgp.operator.views.bgp.RouteFamilyView'
145 nlri = fields.RelatedViewField(
147 'ryu.services.protocols.bgp.operator.views.bgp.NlriDetailView'
149 is_withdraw = fields.DataField('is_withdraw')
150 nexthop = fields.DataField('nexthop')
151 pathattr_map = fields.DataField('pathattr_map')
152 source = fields.RelatedViewField(
154 'ryu.services.protocols.bgp.operator.views.bgp.PeerDetailView'
158 ret = super(PathDetailView, self).encode()
159 ret['nlri'] = self.rel('nlri').encode()
160 ret['route_family'] = self.rel('route_family').encode()
161 as_path = self.get_field('pathattr_map').get(BGP_ATTR_TYPE_AS_PATH)
162 origin = self.get_field('pathattr_map').get(BGP_ATTR_TYPE_ORIGIN)
163 metric = self.get_field('pathattr_map').get(
164 BGP_ATTR_TYPE_MULTI_EXIT_DISC)
165 local_pref = self.get_field('pathattr_map').get(
166 BGP_ATTR_TYPE_LOCAL_PREF
169 ret['as_path'] = as_path.value if as_path else None
170 ret['origin'] = origin.value if origin else None
171 ret['metric'] = metric.value if metric else None
172 ret['local_pref'] = local_pref.value if local_pref else None
173 ext = ret['pathattr_map'].get(BGP_ATTR_TYPE_EXTENDED_COMMUNITIES)
174 del ret['pathattr_map']
176 ret['rt_list'] = ext.rt_list
177 ret['soo_list'] = ext.soo_list
181 class SentRouteDetailView(OperatorDetailView):
182 timestamp = fields.DataField('timestamp')
183 filtered = fields.DataField('filtered')
184 path = fields.RelatedViewField(
186 'ryu.services.protocols.bgp.operator.views.bgp.PathDetailView',
188 peer = fields.RelatedViewField(
190 'ryu.services.protocols.bgp.operator.views.bgp.PeerDetailView'
194 ret = super(SentRouteDetailView, self).encode()
196 'path': self.rel('path').encode(),
201 class ReceivedRouteDetailView(OperatorDetailView):
202 timestamp = fields.DataField('timestamp')
203 filtered = fields.DataField('filtered')
204 path = fields.RelatedViewField(
206 'ryu.services.protocols.bgp.operator.views.bgp.PathDetailView',
208 peer = fields.RelatedViewField(
210 'ryu.services.protocols.bgp.operator.views.bgp.PeerDetailView'
214 ret = super(ReceivedRouteDetailView, self).encode()
216 'path': self.rel('path').encode(),
221 class DestinationDetailView(OperatorDetailView):
222 table = fields.RelatedViewField(
224 'ryu.services.protocols.bgp.operator.views.bgp.TableDetailView',
226 best_path = fields.RelatedViewField(
228 'ryu.services.protocols.bgp.operator.views.bgp.PathDetailView'
230 known_path_list = fields.RelatedListViewField(
232 'ryu.services.protocols.bgp.operator.views.bgp.PathListView'
234 new_path_list = fields.RelatedListViewField(
236 'ryu.services.protocols.bgp.operator.views.bgp.PathListView'
238 withdraw_list = fields.RelatedListViewField(
240 'ryu.services.protocols.bgp.operator.views.bgp.PathListView'
242 sent_routes = fields.RelatedListViewField(
244 'ryu.services.protocols.bgp.operator.views.bgp.SentRouteListView'
246 nlri = fields.DataField('nlri')
247 route_family = fields.DataField('route_family')
250 class IpNlriDetailView(OperatorDetailView):
251 formatted_nlri = fields.DataField('formatted_nlri_str')
252 prefix = fields.DataField('prefix')
255 class VpnNlriDetailView(IpNlriDetailView):
256 labels = fields.DataField('label_list')
257 rd = fields.DataField('route_dist')
260 class NlriDetailView(OperatorDetailView):
261 def __new__(cls, obj, filter_func=None):
262 from ryu.lib.packet.bgp import LabelledVPNIPAddrPrefix
263 from ryu.lib.packet.bgp import LabelledVPNIP6AddrPrefix
264 from ryu.lib.packet.bgp import IPAddrPrefix, IP6AddrPrefix
265 if isinstance(obj, (LabelledVPNIPAddrPrefix,
266 LabelledVPNIP6AddrPrefix)):
267 return VpnNlriDetailView(obj)
268 elif isinstance(obj, (IPAddrPrefix, IP6AddrPrefix)):
269 return IpNlriDetailView(obj)
271 return OperatorDetailView(obj, filter_func)
274 return self._obj.formatted_nlri_str
277 class RouteFamilyView(OperatorDetailView):
278 afi = fields.DataField('afi')
279 safi = fields.DataField('safi')
282 ##################################################################
283 # Declarations of list and dict views based on detail views above
284 ##################################################################
286 PeerListView = create_list_view_class(PeerDetailView, 'PeerListView')
287 PeerDictView = create_dict_view_class(PeerDetailView, 'PeerDictView')
289 PeerListSummaryView = create_list_view_class(
290 PeerDetailSummaryView,
291 'PeerListSummaryView'
294 PeerDictSummaryView = create_dict_view_class(
295 PeerDetailSummaryView,
296 'PeerDictSummaryView'
299 TableDictView = create_dict_view_class(TableDetailView, 'TableDictView')
302 DestinationListView = create_list_view_class(
303 DestinationDetailView, 'DestinationListView'
306 DestinationDictView = create_dict_view_class(
307 DestinationDetailView, 'DestinationDictView'
310 PathListView = create_list_view_class(PathDetailView, 'PathListView')
311 PathDictView = create_dict_view_class(PathDetailView, 'PathDictView')
313 SentRouteListView = create_list_view_class(
318 SentRouteDictView = create_dict_view_class(
323 ReceivedRouteDictView = create_dict_view_class(
324 ReceivedRouteDetailView,
325 'ReceivedRouteDictView'