def get_ieee_qcn(self): a = NulStrAttr(DCB_ATTR_IFNAME, self.intf) m = DcbNlMessage(type = RTM_GETDCB, cmd = DCB_CMD_IEEE_GET, flags=NLM_F_REQUEST, attrs=[a]) m.send(self.conn) m = DcbNlMessage.recv(self.conn) ieee = m.attrs[DCB_ATTR_IEEE].nested() rpg_enable = array.array('B') rpg_enable.fromstring(ieee[DCB_ATTR_IEEE_QCN].str()[:8]) a = array.array('I') a.fromstring(ieee[DCB_ATTR_IEEE_QCN].str()[8:]) lst_params = self.__parse_array(a,8) rppp_max_rps = lst_params[0] rpg_time_reset = lst_params[1] rpg_byte_reset = lst_params[2] rpg_threshold = lst_params[3] rpg_max_rate = lst_params[4] rpg_ai_rate = lst_params[5] rpg_hai_rate = lst_params[6] rpg_gd = lst_params[7] rpg_min_dec_fac = lst_params[8] rpg_min_rate = lst_params[9] cndd_state_machine = lst_params[10] return rpg_enable, rppp_max_rps, rpg_time_reset, rpg_byte_reset, rpg_threshold, rpg_max_rate, rpg_ai_rate, rpg_hai_rate, rpg_gd, rpg_min_dec_fac, rpg_min_rate, cndd_state_machine
def get_ieee_qcn(self): a = NulStrAttr(DCB_ATTR_IFNAME, self.intf) m = DcbNlMessage(type=RTM_GETDCB, cmd=DCB_CMD_IEEE_GET, flags=NLM_F_REQUEST, attrs=[a]) m.send(self.conn) m = DcbNlMessage.recv(self.conn) ieee = m.attrs[DCB_ATTR_IEEE].nested() rpg_enable = array.array('B') rpg_enable.fromstring(ieee[DCB_ATTR_IEEE_QCN].str()[:8]) a = array.array('I') a.fromstring(ieee[DCB_ATTR_IEEE_QCN].str()[8:]) lst_params = self.__parse_array(a, 8) rppp_max_rps = lst_params[0] rpg_time_reset = lst_params[1] rpg_byte_reset = lst_params[2] rpg_threshold = lst_params[3] rpg_max_rate = lst_params[4] rpg_ai_rate = lst_params[5] rpg_hai_rate = lst_params[6] rpg_gd = lst_params[7] rpg_min_dec_fac = lst_params[8] rpg_min_rate = lst_params[9] cndd_state_machine = lst_params[10] return rpg_enable, rppp_max_rps, rpg_time_reset, rpg_byte_reset, rpg_threshold, rpg_max_rate, rpg_ai_rate, rpg_hai_rate, rpg_gd, rpg_min_dec_fac, rpg_min_rate, cndd_state_machine
def get_ieee_qcnstats(self): a = NulStrAttr(DCB_ATTR_IFNAME, self.intf) m = DcbNlMessage(type=RTM_GETDCB, cmd=DCB_CMD_IEEE_GET, flags=NLM_F_REQUEST, attrs=[a]) m.send(self.conn) m = DcbNlMessage.recv(self.conn) ieee = m.attrs[DCB_ATTR_IEEE].nested() rppp_rp_centiseconds = struct.unpack_from( "QQQQQQQQ", ieee[DCB_ATTR_IEEE_QCN_STATS].str(), 0) a = array.array('I') a.fromstring(ieee[DCB_ATTR_IEEE_QCN_STATS].str()[64:]) lst_statistics = self.__parse_array(a, 8) rppp_created_rps = lst_statistics[0] ignored_cnm = lst_statistics[1] estimated_total_rate = lst_statistics[2] cnms_handled_successfully = lst_statistics[3] min_total_limiters_rate = lst_statistics[4] max_total_limiters_rate = lst_statistics[5] return rppp_rp_centiseconds, rppp_created_rps, ignored_cnm, estimated_total_rate, cnms_handled_successfully, min_total_limiters_rate, max_total_limiters_rate
def get_ieee_pfc(self): a = NulStrAttr(DCB_ATTR_IFNAME, self.intf) m = DcbNlMessage(type = RTM_GETDCB, cmd = DCB_CMD_IEEE_GET, flags=NLM_F_REQUEST, attrs=[a]) m.send(self.conn) m = DcbNlMessage.recv(self.conn) ieee = m.attrs[DCB_ATTR_IEEE].nested() a = array.array('B') a.fromstring(ieee[DCB_ATTR_IEEE_PFC].str()[0:]) return a[1]
def get_ieee_pfc_delay(self): a = NulStrAttr(DCB_ATTR_IFNAME, self.intf) m = DcbNlMessage(type = RTM_GETDCB, cmd = DCB_CMD_IEEE_GET, flags=NLM_F_REQUEST, attrs=[a]) m.send(self.conn) m = DcbNlMessage.recv(self.conn) ieee = m.attrs[DCB_ATTR_IEEE].nested() a = array.array('B') a.fromstring(ieee[DCB_ATTR_IEEE_PFC].str()[0:]) return a[4] + (a[5] << 8)
def set_ieee_ets(self, _prio_tc, _tsa, _tc_bw): willing = 0 ets_cap = 0 cbs = 0 tc_rx_bw = array.array('B', '\0' * 8) tc_reco_bw = array.array('B', '\0' * 8) tc_reco_tsa = array.array('B', '\0' * 8) reco_prio_tc = array.array('B', '\0' * 8) tc_tc_bw = array.array('B', '\0' * 8) tc_tsa = array.array('B', '\0' * 8) prio_tc = array.array('B', '\0' * 8) for up in range(len(_prio_tc)): prio_tc[up] = _prio_tc[up] for tc in range(len(_tsa)): tc_tsa[tc] = _tsa[tc] for tc in range(len(_tc_bw)): tc_tc_bw[tc] = _tc_bw[tc] ets = struct.pack("BBB", willing, ets_cap, cbs) + ( tc_tc_bw + tc_rx_bw + tc_tsa + prio_tc + tc_reco_bw + tc_reco_tsa + reco_prio_tc).tostring() intf = NulStrAttr(DCB_ATTR_IFNAME, self.intf) ieee_ets = StrAttr(DCB_ATTR_IEEE_ETS, ets) ieee = Nested(DCB_ATTR_IEEE, [ieee_ets]) m = DcbNlMessage(type=RTM_GETDCB, cmd=DCB_CMD_IEEE_SET, flags=NLM_F_REQUEST, attrs=[intf, ieee]) m.send(self.conn) m = DcbNlMessage.recv(self.conn) self.check_err(m, DCB_ATTR_IEEE)
def get_family_id(self, family): a = NulStrAttr(CTRL_ATTR_FAMILY_NAME, family) m = GeNlMessage(GENL_ID_CTRL, CTRL_CMD_GETFAMILY, flags=NLM_F_REQUEST, attrs=[a]) m.send(self.conn) m = GeNlMessage.recv(self.conn) return m.attrs[CTRL_ATTR_FAMILY_ID].u16()
def get_dcbx(self): a = NulStrAttr(DCB_ATTR_IFNAME, self.intf) m = DcbNlMessage(type = RTM_GETDCB, cmd = DCB_CMD_GDCBX, flags=NLM_F_REQUEST, attrs=[a]) m.send(self.conn) m = DcbNlMessage.recv(self.conn) return m.attrs[DCB_ATTR_DCBX].u8()
def set_ieee_pfc(self, _pfc_en, _delay): pfc_cap = 8 mbc = 0 requests = array.array('B', '\0' * 64) indications = array.array('B', '\0' * 64) #netlink packet is 64bit alignment pads = array.array('B', '\0' * 3) #delay is 16bit value pfc = struct.pack( "BBBBBB", pfc_cap, _pfc_en, mbc, 0, _delay & 0xFF, _delay >> 8) + (requests + indications + pads).tostring() intf = NulStrAttr(DCB_ATTR_IFNAME, self.intf) ieee_pfc = StrAttr(DCB_ATTR_IEEE_PFC, pfc) ieee = Nested(DCB_ATTR_IEEE, [ieee_pfc]) m = DcbNlMessage(type=RTM_GETDCB, cmd=DCB_CMD_IEEE_SET, flags=NLM_F_REQUEST, attrs=[intf, ieee]) m.send(self.conn) m = DcbNlMessage.recv(self.conn) self.check_err(m, DCB_ATTR_IEEE)
def set_dcb_state(self, state): a = NulStrAttr(DCB_ATTR_IFNAME, self.intf) state_attr = U8Attr(DCB_ATTR_STATE, state) m = DcbNlMessage(type = RTM_GETDCB, cmd = DCB_CMD_SSTATE, flags=NLM_F_REQUEST, attrs=[a, state_attr]) m.send(self.conn) m = DcbNlMessage.recv(self.conn) self.check_err(m, DCB_ATTR_STATE)
def set_dcbx(self, mode): a = NulStrAttr(DCB_ATTR_IFNAME, self.intf) mode_attr = U8Attr(DCB_ATTR_DCBX , mode) m = DcbNlMessage(type = RTM_GETDCB, cmd = DCB_CMD_SDCBX, flags=NLM_F_REQUEST, attrs=[a, mode_attr]) m.send(self.conn) m = DcbNlMessage.recv(self.conn) self.check_err(m, DCB_ATTR_DCBX)
def get_ieee_ets(self): a = NulStrAttr(DCB_ATTR_IFNAME, self.intf) m = DcbNlMessage(type = RTM_GETDCB, cmd = DCB_CMD_IEEE_GET, flags=NLM_F_REQUEST, attrs=[a]) m.send(self.conn) m = DcbNlMessage.recv(self.conn) ieee = m.attrs[DCB_ATTR_IEEE].nested() willing, ets_cap, cbs = struct.unpack_from("BBB", ieee[DCB_ATTR_IEEE_ETS].str(), 0) a = array.array('B') a.fromstring(ieee[DCB_ATTR_IEEE_ETS].str()[3:]) f = lambda A, n=8: [A[i:i+n] for i in range(0, len(A), n)] tc_tc_bw, tc_rx_bw, tc_tsa, prio_tc, tc_reco_bw, tc_reco_tsa, reco_prio_tc = f(a,8) return prio_tc, tc_tsa, tc_tc_bw
def del_ieee_app(self, selector, priority, protocol): dcb_app = struct.pack("BBH", selector, priority, protocol) intf = NulStrAttr(DCB_ATTR_IFNAME, self.intf) ieee_app = StrAttr(DCB_ATTR_IEEE_APP, dcb_app) ieee_app_table = Nested(DCB_ATTR_IEEE_APP_TABLE, [ieee_app]); ieee = Nested(DCB_ATTR_IEEE, [ieee_app_table]); m = DcbNlMessage(type = RTM_GETDCB, cmd = DCB_CMD_IEEE_DEL, flags=NLM_F_REQUEST, attrs=[intf, ieee]) m.send(self.conn) m = DcbNlMessage.recv(self.conn) self.check_err(m, DCB_ATTR_IEEE)
def set_dcb_buffer(self, _prio2buffer, _buffer_size): dcb_buffer = _prio2buffer.tostring() + _buffer_size.tostring() intf = NulStrAttr(DCB_ATTR_IFNAME, self.intf) dcb_buffer_str = StrAttr(DCB_ATTR_DCB_BUFFER, dcb_buffer) ieee = Nested(DCB_ATTR_IEEE, [dcb_buffer_str]); m = DcbNlMessage(type = RTM_GETDCB, cmd = DCB_CMD_IEEE_SET, flags=NLM_F_REQUEST, attrs=[intf, ieee]) m.send(self.conn) m = DcbNlMessage.recv(self.conn) self.check_err(m, DCB_ATTR_IEEE)
def set_ieee_qcn(self, _qcn): qcn = _qcn[0].tostring() + (_qcn[1] + _qcn[2] + _qcn[3] + _qcn[4] + _qcn[5] + _qcn[6] + _qcn[7] + _qcn[8] + _qcn[9] + _qcn[10] + _qcn[11]).tostring() intf = NulStrAttr(DCB_ATTR_IFNAME, self.intf) ieee_qcn = StrAttr(DCB_ATTR_IEEE_QCN, qcn) ieee = Nested(DCB_ATTR_IEEE, [ieee_qcn]); m = DcbNlMessage(type = RTM_GETDCB, cmd = DCB_CMD_IEEE_SET, flags=NLM_F_REQUEST, attrs=[intf, ieee]) m.send(self.conn) m = DcbNlMessage.recv(self.conn) self.check_err(m, DCB_ATTR_IEEE)
def get_ieee_maxrate(self): a = NulStrAttr(DCB_ATTR_IFNAME, self.intf) m = DcbNlMessage(type = RTM_GETDCB, cmd = DCB_CMD_IEEE_GET, flags=NLM_F_REQUEST, attrs=[a]) m.send(self.conn) m = DcbNlMessage.recv(self.conn) ieee_nested = m.attrs[DCB_ATTR_IEEE] ieee = m.attrs[DCB_ATTR_IEEE].nested() tc_maxrate = struct.unpack_from("QQQQQQQQ",ieee[DCB_ATTR_IEEE_MAXRATE].str(), 0); return tc_maxrate
def get_ieee_qcnstats(self): a = NulStrAttr(DCB_ATTR_IFNAME, self.intf) m = DcbNlMessage(type = RTM_GETDCB, cmd = DCB_CMD_IEEE_GET, flags=NLM_F_REQUEST, attrs=[a]) m.send(self.conn) m = DcbNlMessage.recv(self.conn) ieee = m.attrs[DCB_ATTR_IEEE].nested() rppp_rp_centiseconds = struct.unpack_from("QQQQQQQQ",ieee[DCB_ATTR_IEEE_QCN_STATS].str(), 0); a = array.array('I') a.fromstring(ieee[DCB_ATTR_IEEE_QCN_STATS].str()[64:]) lst_statistics = self.__parse_array(a,8) rppp_created_rps = lst_statistics[0] ignored_cnm = lst_statistics[1] estimated_total_rate = lst_statistics[2] cnms_handled_successfully = lst_statistics[3] min_total_limiters_rate = lst_statistics[4] max_total_limiters_rate = lst_statistics[5] return rppp_rp_centiseconds, rppp_created_rps, ignored_cnm, estimated_total_rate, cnms_handled_successfully, min_total_limiters_rate, max_total_limiters_rate
def get_ieee_dcb_buffer(self): a = NulStrAttr(DCB_ATTR_IFNAME, self.intf) m = DcbNlMessage(type = RTM_GETDCB, cmd = DCB_CMD_IEEE_GET, flags=NLM_F_REQUEST, attrs=[a]) m.send(self.conn) m = DcbNlMessage.recv(self.conn) ieee = m.attrs[DCB_ATTR_IEEE].nested() prio2buffer = array.array('B') prio2buffer.fromstring(ieee[DCB_ATTR_DCB_BUFFER].str()[:8]) buffer_size = array.array('I') buffer_size.fromstring(ieee[DCB_ATTR_DCB_BUFFER].str()[8:]) return prio2buffer, buffer_size
def get_ieee_app_table(self): a = NulStrAttr(DCB_ATTR_IFNAME, self.intf) m = DcbNlMessage(type = RTM_GETDCB, cmd = DCB_CMD_IEEE_GET, flags=NLM_F_REQUEST, attrs=[a]) m.send(self.conn) m = DcbNlMessage.recv(self.conn) ieee = m.attrs[DCB_ATTR_IEEE].nested() ieee_app_table = ieee[DCB_ATTR_IEEE_APP_TABLE] attrs = ieee_app_table.get_app_table() appTable = DcbAppTable() for i in range(len(attrs)): selector, priority, protocol = struct.unpack('BBH', attrs[i].data) appTable.apps[i] = DcbApp(selector, priority, protocol) return appTable
def set_ieee_maxrate(self, _tc_maxrate): tc_maxrate = struct.pack("QQQQQQQQ", _tc_maxrate[0], _tc_maxrate[1], _tc_maxrate[2], _tc_maxrate[3], _tc_maxrate[4], _tc_maxrate[5], _tc_maxrate[6], _tc_maxrate[7], ) intf = NulStrAttr(DCB_ATTR_IFNAME, self.intf) ieee_maxrate = StrAttr(DCB_ATTR_IEEE_MAXRATE, tc_maxrate) ieee = Nested(DCB_ATTR_IEEE, [ieee_maxrate]); m = DcbNlMessage(type = RTM_GETDCB, cmd = DCB_CMD_IEEE_SET, flags=NLM_F_REQUEST, attrs=[intf, ieee]) m.send(self.conn) m = DcbNlMessage.recv(self.conn) self.check_err(m, DCB_ATTR_IEEE)