예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
	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)
예제 #4
0
	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)
예제 #5
0
	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)
예제 #6
0
	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)