blob: 9efd6aee1c621a7733913f156ea3184aabe9c9b6 [file] [log] [blame]
Zsolt Harasztid036b7e2016-12-23 15:36:01 -08001#!/usr/bin/env python
2#
3# Copyright 2016 the original author or authors.
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16#
17
18"""
19Logical device level CLI commands
20"""
21from cmd2 import Cmd
22from simplejson import dumps
23
Zsolt Haraszti85f12852016-12-24 08:30:58 -080024from cli.table import print_pb_as_table, print_pb_list_as_table
Zsolt Harasztid036b7e2016-12-23 15:36:01 -080025from cli.utils import pb2dict
26from cli.utils import print_flows
27from voltha.protos import third_party
Zsolt Haraszti85f12852016-12-24 08:30:58 -080028from google.protobuf.empty_pb2 import Empty
Zsolt Harasztid036b7e2016-12-23 15:36:01 -080029
30_ = third_party
31from voltha.protos import voltha_pb2
32
33
34class LogicalDeviceCli(Cmd):
35
36 def __init__(self, get_channel, logical_device_id):
37 Cmd.__init__(self)
38 self.get_channel = get_channel
39 self.logical_device_id = logical_device_id
40 self.prompt = '(' + self.colorize(
41 self.colorize('logical device {}'.format(logical_device_id), 'red'),
42 'bold') + ') '
43
Zsolt Haraszti9b485fb2016-12-26 23:11:15 -080044 def cmdloop(self):
45 self._cmdloop()
46
Zsolt Harasztid036b7e2016-12-23 15:36:01 -080047 def get_logical_device(self, depth=0):
48 stub = voltha_pb2.VolthaLocalServiceStub(self.get_channel())
49 res = stub.GetLogicalDevice(voltha_pb2.ID(id=self.logical_device_id),
50 metadata=(('get-depth', str(depth)), ))
51 return res
52
Zsolt Haraszti85f12852016-12-24 08:30:58 -080053 def get_device(self, id):
54 stub = voltha_pb2.VolthaLocalServiceStub(self.get_channel())
55 return stub.GetDevice(voltha_pb2.ID(id=id))
56
57 def get_devices(self):
58 stub = voltha_pb2.VolthaLocalServiceStub(self.get_channel())
59 res = stub.ListDevices(Empty())
60 return res.items
61
Zsolt Haraszti80175202016-12-24 00:17:51 -080062 do_exit = Cmd.do_quit
63
Zsolt Haraszti85f12852016-12-24 08:30:58 -080064 def do_show(self, _):
Zsolt Harasztid036b7e2016-12-23 15:36:01 -080065 """Show detailed logical device information"""
Sergio Slobodrianb5ef3482017-03-17 16:56:16 -040066 omit_fields = {
67 'flow_groups',
68 'flows',
69 'ports',
70 'switch_features.auxiliary_id',
71 'switch_features.capabilities',
72 'switch_features.datapath_id',
73 'switch_features.n_buffers',
74 'switch_features.n_tables',
75 'desc.dp_desc',
76 'desc.hw_desc',
77 'desc.mfr_desc',
78 'desc.serial_num',
79 'desc.sw_desc',
80 'datapath_id'
81 }
Zsolt Haraszti85f12852016-12-24 08:30:58 -080082 print_pb_as_table('Logical device {}'.format(self.logical_device_id),
Sergio Slobodrianb5ef3482017-03-17 16:56:16 -040083 self.get_logical_device(depth=-1), omit_fields)
Zsolt Harasztid036b7e2016-12-23 15:36:01 -080084
Zsolt Haraszti85f12852016-12-24 08:30:58 -080085 def do_ports(self, _):
86 """Show ports of logical device"""
87 device = self.get_logical_device(depth=-1)
88 omit_fields = {
89 'ofp_port.advertised',
90 'ofp_port.peer',
91 'ofp_port.max_speed',
Sergio Slobodriane896b642017-03-20 12:58:07 -040092 'ofp_port.supported',
93 'ofp_port.config'
Zsolt Haraszti85f12852016-12-24 08:30:58 -080094 }
95 print_pb_list_as_table('Logical device ports:', device.ports,
96 omit_fields, self.poutput)
97
98 def do_flows(self, _):
Zsolt Harasztid036b7e2016-12-23 15:36:01 -080099 """Show flow table for logical device"""
100 logical_device = pb2dict(self.get_logical_device(-1))
101 print_flows(
102 'Logical Device',
103 self.logical_device_id,
104 type='n/a',
105 flows=logical_device['flows']['items'],
106 groups=logical_device['flow_groups']['items']
107 )
108
Zsolt Haraszti85f12852016-12-24 08:30:58 -0800109 def do_devices(self, line):
110 """List devices that belong to this logical device"""
111 logical_device = self.get_logical_device()
112 root_device_id = logical_device.root_device_id
113 devices = [self.get_device(root_device_id)]
114 for d in self.get_devices():
115 if d.parent_id == root_device_id:
116 devices.append(d)
117 omit_fields = {
118 'adapter',
119 'vendor',
120 'model',
121 'hardware_version',
122 'software_version',
123 'firmware_version',
Sergio Slobodrianb5ef3482017-03-17 16:56:16 -0400124 'serial_number',
125 'parent_port_no',
126 'vlan',
127 'ports',
128 'reason',
129 'root',
130 'parent_id'
Zsolt Haraszti85f12852016-12-24 08:30:58 -0800131 }
132 print_pb_list_as_table('Devices:', devices, omit_fields, self.poutput)
133