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_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 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_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 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)