backing up
[vsorcdistro/.git] / ryu / build / lib.linux-armv7l-2.7 / ryu / services / protocols / bgp / operator / views / bgp.py
1 from ryu.services.protocols.bgp.operator.views.base import \
2     create_dict_view_class
3 from ryu.services.protocols.bgp.operator.views.base import \
4     create_list_view_class
5 from ryu.services.protocols.bgp.operator.views.base import OperatorDetailView
6 from ryu.services.protocols.bgp.operator.views import fields
7
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
13
14
15 class CoreServiceDetailView(OperatorDetailView):
16     rf_state = fields.RelatedViewField(
17         'rf_state',
18         'ryu.services.protocols.bgp.operator.views.bgp.RfStateDetailView'
19     )
20     importmap_manager = fields.RelatedDictViewField(
21         '_importmap_manager',
22         'ryu.services.protocols.bgp.operator'
23         '.views.other.ImportmapManagerDetailView'
24     )
25     table_manager = fields.RelatedViewField(
26         '_table_manager',
27         'ryu.services.protocols.bgp.operator.views.bgp.TableManagerDetailView'
28     )
29     peer_manager = fields.RelatedViewField(
30         '_peer_manager',
31         'ryu.services.protocols.bgp.operator.views.bgp.PeerManagerDetailView'
32     )
33     router_id = fields.DataField('router_id')
34
35
36 class TableManagerDetailView(OperatorDetailView):
37     tables = fields.RelatedDictViewField(
38         '_tables',
39         'ryu.services.protocols.bgp.operator.views.bgp.TableDictView'
40     )
41     tables_for_rt = fields.RelatedDictViewField(
42         '_tables_for_rt',
43         'ryu.services.protocols.bgp.operator.views.bgp.TableDictView'
44     )
45     global_tables = fields.RelatedDictViewField(
46         '_global_tables',
47         'ryu.services.protocols.bgp.operator.views.bgp.TableDictView'
48     )
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')
52
53
54 class PeerManagerDetailView(OperatorDetailView):
55     peers = fields.RelatedListViewField(
56         '_peers',
57         'ryu.services.protocols.bgp.operator.views.bgp.PeerDictView'
58     )
59     peers_summary = fields.RelatedListViewField(
60         '_peers',
61         'ryu.services.protocols.bgp.operator.views.bgp.PeerDictSummaryView'
62     )
63
64
65 class RfStateDetailView(OperatorDetailView):
66     pass
67
68
69 class PeerStateDetailView(OperatorDetailView):
70     bgp_state = fields.DataField('_bgp_state')
71     last_error = fields.DataField('_last_bgp_error')
72
73     def encode(self):
74         ret = super(PeerStateDetailView, self).encode()
75         ret.update(self._obj.get_stats_summary_dict())
76         return ret
77
78
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(
84         'adj_rib_in',
85         'ryu.services.protocols.bgp.operator.views.bgp.ReceivedRouteDictView'
86     )
87     adj_rib_out = fields.RelatedViewField(
88         'adj_rib_out',
89         'ryu.services.protocols.bgp.operator.views.bgp.SentRouteDictView'
90     )
91     neigh_conf = fields.RelatedViewField(
92         '_neigh_conf',
93         'ryu.services.protocols.bgp.operator.views.conf.ConfDetailView'
94     )
95     common_conf = fields.RelatedViewField(
96         '_common_conf',
97         'ryu.services.protocols.bgp.operator.views.conf.ConfDetailView'
98     )
99     state = fields.RelatedViewField(
100         'state',
101         'ryu.services.protocols.bgp.operator.views.bgp.PeerStateDetailView'
102     )
103
104     def encode(self):
105         ret = super(PeerDetailView, self).encode()
106         ret.update({
107             'stats': self.rel('state').encode(),
108             'settings': self.rel('neigh_conf').encode()
109         })
110         return ret
111
112
113 class PeerDetailSummaryView(PeerDetailView):
114     def encode(self):
115         return {
116             'conf': self.rel('neigh_conf').encode(),
117             'info': self.rel('state').encode()
118         }
119
120
121 class PeerRfDetailView(OperatorDetailView):
122     rf = fields.DataField('rf')
123     enabled = fields.DataField('enabled')
124     peer = fields.RelatedViewField(
125         'peer',
126         'ryu.services.protocols.bgp.operator.views.bgp.PeerDetailView'
127     )
128
129
130 class TableDetailView(OperatorDetailView):
131     scope_id = fields.DataField('scope_id')
132     route_family = fields.DataField('route_family')
133     destinations = fields.RelatedDictViewField(
134         '_destinations',
135         'ryu.services.protocols.bgp.operator.views.bgp.DestinationDictView'
136     )
137
138
139 class PathDetailView(OperatorDetailView):
140     source_version_num = fields.DataField('source_version_num')
141     route_family = fields.RelatedViewField(
142         'route_family',
143         'ryu.services.protocols.bgp.operator.views.bgp.RouteFamilyView'
144     )
145     nlri = fields.RelatedViewField(
146         'nlri',
147         'ryu.services.protocols.bgp.operator.views.bgp.NlriDetailView'
148     )
149     is_withdraw = fields.DataField('is_withdraw')
150     nexthop = fields.DataField('nexthop')
151     pathattr_map = fields.DataField('pathattr_map')
152     source = fields.RelatedViewField(
153         'source',
154         'ryu.services.protocols.bgp.operator.views.bgp.PeerDetailView'
155     )
156
157     def encode(self):
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
167         )
168
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']
175         if ext:
176             ret['rt_list'] = ext.rt_list
177             ret['soo_list'] = ext.soo_list
178         return ret
179
180
181 class SentRouteDetailView(OperatorDetailView):
182     timestamp = fields.DataField('timestamp')
183     filtered = fields.DataField('filtered')
184     path = fields.RelatedViewField(
185         'path',
186         'ryu.services.protocols.bgp.operator.views.bgp.PathDetailView',
187     )
188     peer = fields.RelatedViewField(
189         'sent_peer',
190         'ryu.services.protocols.bgp.operator.views.bgp.PeerDetailView'
191     )
192
193     def encode(self):
194         ret = super(SentRouteDetailView, self).encode()
195         ret.update({
196             'path': self.rel('path').encode(),
197         })
198         return ret
199
200
201 class ReceivedRouteDetailView(OperatorDetailView):
202     timestamp = fields.DataField('timestamp')
203     filtered = fields.DataField('filtered')
204     path = fields.RelatedViewField(
205         'path',
206         'ryu.services.protocols.bgp.operator.views.bgp.PathDetailView',
207     )
208     peer = fields.RelatedViewField(
209         'received_peer',
210         'ryu.services.protocols.bgp.operator.views.bgp.PeerDetailView'
211     )
212
213     def encode(self):
214         ret = super(ReceivedRouteDetailView, self).encode()
215         ret.update({
216             'path': self.rel('path').encode(),
217         })
218         return ret
219
220
221 class DestinationDetailView(OperatorDetailView):
222     table = fields.RelatedViewField(
223         '_table',
224         'ryu.services.protocols.bgp.operator.views.bgp.TableDetailView',
225     )
226     best_path = fields.RelatedViewField(
227         'best_path',
228         'ryu.services.protocols.bgp.operator.views.bgp.PathDetailView'
229     )
230     known_path_list = fields.RelatedListViewField(
231         'known_path_list',
232         'ryu.services.protocols.bgp.operator.views.bgp.PathListView'
233     )
234     new_path_list = fields.RelatedListViewField(
235         '_new_path_list',
236         'ryu.services.protocols.bgp.operator.views.bgp.PathListView'
237     )
238     withdraw_list = fields.RelatedListViewField(
239         '_withdraw_list',
240         'ryu.services.protocols.bgp.operator.views.bgp.PathListView'
241     )
242     sent_routes = fields.RelatedListViewField(
243         'sent_routes',
244         'ryu.services.protocols.bgp.operator.views.bgp.SentRouteListView'
245     )
246     nlri = fields.DataField('nlri')
247     route_family = fields.DataField('route_family')
248
249
250 class IpNlriDetailView(OperatorDetailView):
251     formatted_nlri = fields.DataField('formatted_nlri_str')
252     prefix = fields.DataField('prefix')
253
254
255 class VpnNlriDetailView(IpNlriDetailView):
256     labels = fields.DataField('label_list')
257     rd = fields.DataField('route_dist')
258
259
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)
270         else:
271             return OperatorDetailView(obj, filter_func)
272
273     def encode(self):
274         return self._obj.formatted_nlri_str
275
276
277 class RouteFamilyView(OperatorDetailView):
278     afi = fields.DataField('afi')
279     safi = fields.DataField('safi')
280
281
282 ##################################################################
283 # Declarations of list and dict views based on detail views above
284 ##################################################################
285
286 PeerListView = create_list_view_class(PeerDetailView, 'PeerListView')
287 PeerDictView = create_dict_view_class(PeerDetailView, 'PeerDictView')
288
289 PeerListSummaryView = create_list_view_class(
290     PeerDetailSummaryView,
291     'PeerListSummaryView'
292 )
293
294 PeerDictSummaryView = create_dict_view_class(
295     PeerDetailSummaryView,
296     'PeerDictSummaryView'
297 )
298
299 TableDictView = create_dict_view_class(TableDetailView, 'TableDictView')
300
301
302 DestinationListView = create_list_view_class(
303     DestinationDetailView, 'DestinationListView'
304 )
305
306 DestinationDictView = create_dict_view_class(
307     DestinationDetailView, 'DestinationDictView'
308 )
309
310 PathListView = create_list_view_class(PathDetailView, 'PathListView')
311 PathDictView = create_dict_view_class(PathDetailView, 'PathDictView')
312
313 SentRouteListView = create_list_view_class(
314     SentRouteDetailView,
315     'SentRouteListView'
316 )
317
318 SentRouteDictView = create_dict_view_class(
319     SentRouteDetailView,
320     'SentRouteDictView'
321 )
322
323 ReceivedRouteDictView = create_dict_view_class(
324     ReceivedRouteDetailView,
325     'ReceivedRouteDictView'
326 )