1
1
#!/usr/bin/env python
2
2
3
3
import sys , errno
4
- import time
5
4
import os
6
5
from python_sdk_api .sxd_api import *
7
6
from python_sdk_api .sx_api import *
8
7
8
+ REGISTER_NUM = 1
9
+ SXD_LOG_VERBOSITY_LEVEL = 0
10
+ DEVICE_ID = 1
11
+ SWITCH_ID = 0
12
+ SX_PORT_ATTR_ARR_SIZE = 64
13
+
14
+ PMAOS_ASE = 1
15
+ PMAOS_EE = 1
16
+ PMAOS_E = 2
17
+ PMAOS_RST = 0
18
+ PMAOS_ENABLE = 1
19
+ PMAOS_DISABLE = 2
20
+
21
+ def get_port_admin_status_by_log_port (log_port ):
22
+ oper_state_p = new_sx_port_oper_state_t_p ()
23
+ admin_state_p = new_sx_port_admin_state_t_p ()
24
+ module_state_p = new_sx_port_module_state_t_p ()
25
+ rc = sx_api_port_state_get (handle , log_port , oper_state_p , admin_state_p , module_state_p )
26
+ assert rc == SXD_STATUS_SUCCESS , "sx_api_port_state_get failed, rc = %d" % rc
27
+
28
+ admin_state = sx_port_admin_state_t_p_value (admin_state_p )
29
+ if admin_state == SX_PORT_ADMIN_STATUS_UP :
30
+ return True
31
+ else :
32
+ return False
33
+
34
+ def set_port_admin_status_by_log_port (handle , log_port , admin_status ):
35
+ rc = sx_api_port_state_set (handle , log_port , admin_status )
36
+ assert rc == SX_STATUS_SUCCESS , "sx_api_port_state_set failed, rc = %d" % rc
37
+
38
+ # Get all the ports related to the sfp, if port admin status is up, put it to list
9
39
def get_log_ports (handle , sfp_module ):
10
- port_attributes_list = new_sx_port_attributes_t_arr (64 )
40
+ port_attributes_list = new_sx_port_attributes_t_arr (SX_PORT_ATTR_ARR_SIZE )
11
41
port_cnt_p = new_uint32_t_p ()
12
- uint32_t_p_assign (port_cnt_p , 64 )
42
+ uint32_t_p_assign (port_cnt_p , SX_PORT_ATTR_ARR_SIZE )
13
43
14
- rc = sx_api_port_device_get (handle , 1 , 0 , port_attributes_list , port_cnt_p )
44
+ rc = sx_api_port_device_get (handle , DEVICE_ID , SWITCH_ID , port_attributes_list , port_cnt_p )
15
45
assert rc == SX_STATUS_SUCCESS , "sx_api_port_device_get failed, rc = %d" % rc
16
46
17
47
port_cnt = uint32_t_p_value (port_cnt_p )
18
48
log_port_list = []
19
49
for i in range (0 , port_cnt ):
20
50
port_attributes = sx_port_attributes_t_arr_getitem (port_attributes_list , i )
21
51
if port_attributes .port_mapping .module_port == sfp_module :
22
- log_port_list .append (port_attributes .log_port )
52
+ if get_port_admin_status_by_log_port (port_attributes .log_port ):
53
+ log_port_list .append (port_attributes .log_port )
23
54
24
55
return log_port_list
25
56
26
- def set_sfp_admin_status (handle , meta , sfp_module , sfp_log_port_list , admin_status ):
57
+ def init_sx_meta_data ():
58
+ meta = sxd_reg_meta_t ()
59
+ meta .dev_id = DEVICE_ID
60
+ meta .swid = SWITCH_ID
61
+ return meta
62
+
63
+ def set_sfp_admin_status (sfp_module , admin_status ):
27
64
# Get PMAOS
28
65
pmaos = ku_pmaos_reg ()
29
66
pmaos .module = sfp_module
67
+ meta = init_sx_meta_data ()
30
68
meta .access_cmd = SXD_ACCESS_CMD_GET
31
- rc = sxd_access_reg_pmaos (pmaos , meta , 1 , None , None )
69
+ rc = sxd_access_reg_pmaos (pmaos , meta , REGISTER_NUM , None , None )
32
70
assert rc == SXD_STATUS_SUCCESS , "sxd_access_reg_pmaos failed, rc = %d" % rc
33
71
34
72
# Set admin status to PMAOS
35
- pmaos .ase = 1
36
- pmaos .ee = 1
37
- pmaos .e = 2
38
- pmaos .rst = 0
73
+ pmaos .ase = PMAOS_ASE
74
+ pmaos .ee = PMAOS_EE
75
+ pmaos .e = PMAOS_E
76
+ pmaos .rst = PMAOS_RST
39
77
if admin_status == SX_PORT_ADMIN_STATUS_DOWN :
40
- pmaos .admin_status = 2
78
+ pmaos .admin_status = PMAOS_DISABLE
41
79
else :
42
- pmaos .admin_status = 1
80
+ pmaos .admin_status = PMAOS_ENABLE
43
81
44
82
meta .access_cmd = SXD_ACCESS_CMD_SET
45
- rc = sxd_access_reg_pmaos (pmaos , meta , 1 , None , None )
83
+ rc = sxd_access_reg_pmaos (pmaos , meta , REGISTER_NUM , None , None )
46
84
assert rc == SXD_STATUS_SUCCESS , "sxd_access_reg_pmaos failed, rc = %d" % rc
47
85
86
+ def set_sfp_lpmode (sfp_module , lpm_enable ):
87
+ # Get PMMP
88
+ pmmp = ku_pmmp_reg ()
89
+ pmmp .module = sfp_module
90
+ meta = init_sx_meta_data ()
91
+ meta .access_cmd = SXD_ACCESS_CMD_GET
92
+ rc = sxd_access_reg_pmmp (pmmp , meta , REGISTER_NUM , None , None )
93
+ assert rc == SXD_STATUS_SUCCESS , "sxd_access_reg_pmmp failed, rc = %d" % rc
94
+
95
+ # Set low power mode status
96
+ lpm_mask = 1 << 8
97
+ if lpm_enable :
98
+ pmmp .eeprom_override = pmmp .eeprom_override | lpm_mask
99
+ else :
100
+ pmmp .eeprom_override = pmmp .eeprom_override & (~ lpm_mask )
101
+
102
+ meta .access_cmd = SXD_ACCESS_CMD_SET
103
+ rc = sxd_access_reg_pmmp (pmmp , meta , REGISTER_NUM , None , None )
104
+ assert rc == SXD_STATUS_SUCCESS , "sxd_access_reg_pmmp failed, rc = %d" % rc
105
+
48
106
# Check if SFP port number is provided
49
107
if len (sys .argv ) < 3 :
50
108
print "SFP module number or LPM is missed."
@@ -67,41 +125,30 @@ def set_sfp_admin_status(handle, meta, sfp_module, sfp_log_port_list, admin_stat
67
125
sys .exit (errno .EACCES )
68
126
69
127
pid = os .getpid ()
70
- rc = sxd_access_reg_init (pid , None , 0 )
71
- if (rc != 0 ):
128
+ rc = sxd_access_reg_init (pid , None , SXD_LOG_VERBOSITY_LEVEL )
129
+ if (rc != SXD_STATUS_SUCCESS ):
72
130
print "Failed to initializing register access.\n Please check that SDK is running."
73
131
sys .exit (errno .EACCES );
74
132
75
- # Get SFP module and log ports number and LPM status
133
+ # Get SFP module
76
134
sfp_module = int (sys .argv [1 ])
135
+
136
+ # Get all ports at admin up status that related to the SFP module
77
137
log_port_list = get_log_ports (handle , sfp_module )
78
- if not log_port_list :
79
- print "Failed to get log ports"
80
- sys .exit (errno .EACCES )
81
138
82
- # Get PMMP
83
- pmmp = ku_pmmp_reg ()
84
- pmmp .module = sfp_module
85
- meta = sxd_reg_meta_t ()
86
- meta .dev_id = 1
87
- meta .swid = 0
88
- meta .access_cmd = SXD_ACCESS_CMD_GET
89
- rc = sxd_access_reg_pmmp (pmmp , meta , 1 , None , None )
90
- assert rc == SXD_STATUS_SUCCESS , "sxd_access_reg_pmmp failed, rc = %d" % rc
139
+ # SET SFP related ports to admin down status
140
+ for log_port in log_port_list :
141
+ set_port_admin_status_by_log_port (handle , log_port , SX_PORT_ADMIN_STATUS_DOWN )
91
142
92
143
# Disable admin status before LPM settings
93
- set_sfp_admin_status (handle , meta , sfp_module , log_port_list , SX_PORT_ADMIN_STATUS_DOWN )
144
+ set_sfp_admin_status (sfp_module , SX_PORT_ADMIN_STATUS_DOWN )
94
145
95
146
# Set low power mode status
96
- lpm_mask = 1 << 8
97
- if lpm_enable :
98
- pmmp .eeprom_override = pmmp .eeprom_override | lpm_mask
99
- else :
100
- pmmp .eeprom_override = pmmp .eeprom_override & (~ lpm_mask )
101
-
102
- meta .access_cmd = SXD_ACCESS_CMD_SET
103
- rc = sxd_access_reg_pmmp (pmmp , meta , 1 , None , None )
104
- assert rc == SXD_STATUS_SUCCESS , "sxd_access_reg_pmmp failed, rc = %d" % rc
147
+ set_sfp_lpmode (sfp_module , lpm_enable )
105
148
106
149
# Enable admin status after LPM settings
107
- set_sfp_admin_status (handle , meta , sfp_module , log_port_list , SX_PORT_ADMIN_STATUS_UP )
150
+ set_sfp_admin_status (sfp_module , SX_PORT_ADMIN_STATUS_UP )
151
+
152
+ # SET SFP related ports to admin up status
153
+ for log_port in log_port_list :
154
+ set_port_admin_status_by_log_port (handle , log_port , SX_PORT_ADMIN_STATUS_UP )
0 commit comments