Total Complexity | 8 |
Total Lines | 44 |
Duplicated Lines | 0 % |
Coverage | 100% |
Changes | 0 |
1 | """Manage link speeds when OF spec is not enough.""" |
||
2 | 1 | import json |
|
3 | 1 | from os.path import dirname |
|
4 | 1 | from pathlib import Path |
|
5 | |||
6 | |||
7 | 1 | class UserSpeed: |
|
8 | """User-defined interface speeds. |
||
9 | |||
10 | In case there is no matching speed in OF spec or the speed is not correctly |
||
11 | detected. |
||
12 | """ |
||
13 | |||
14 | 1 | _FILE = Path(dirname(__file__)) / 'user_speed.json' |
|
15 | |||
16 | 1 | def __init__(self): |
|
17 | """Load user-created file.""" |
||
18 | 1 | if self._FILE.exists(): |
|
19 | 1 | with self._FILE.open() as user_file: |
|
20 | # print('UserSpeed', user_file.read()) |
||
21 | 1 | self._speed = json.load(user_file) |
|
22 | else: |
||
23 | 1 | self._speed = {} |
|
24 | |||
25 | 1 | def get_speed(self, dpid, port=None): |
|
26 | """Return speed in bits/sec or None if not defined by the user. |
||
27 | |||
28 | Args: |
||
29 | dpid (str): Switch dpid. |
||
30 | port (int or str): Port number. |
||
31 | """ |
||
32 | 1 | if not isinstance(port, str): |
|
33 | 1 | port = str(port) |
|
34 | 1 | speed = None |
|
35 | 1 | switch = self._speed.get(dpid) |
|
36 | 1 | if switch is None: |
|
37 | 1 | speed = self._speed.get('default') |
|
38 | else: |
||
39 | 1 | if port is None or port not in switch: |
|
40 | 1 | speed = switch.get('default') |
|
41 | else: |
||
42 | 1 | speed = switch.get(port) |
|
43 | return speed |
||
44 |