xid: improve xid handling
Generate xid for ofp message instead of always 0. Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
This commit is contained in:
parent
2d3a510635
commit
104436157a
ryu
@ -16,6 +16,7 @@
|
||||
import gflags
|
||||
import logging
|
||||
import gevent
|
||||
import random
|
||||
from gevent.server import StreamServer
|
||||
from gevent.queue import Queue
|
||||
|
||||
@ -86,6 +87,7 @@ class Datapath(object):
|
||||
self.version_recv = None
|
||||
self.version_used = None
|
||||
self.set_version(max(self.supported_ofp_version))
|
||||
self.xid = random.randint(0, self.ofproto.MAX_XID)
|
||||
self.id = None # datapath_id is unknown yet
|
||||
self.ports = None
|
||||
|
||||
@ -128,8 +130,16 @@ class Datapath(object):
|
||||
def send(self, buf):
|
||||
self.send_q.put(buf)
|
||||
|
||||
def set_xid(self, msg):
|
||||
self.xid += 1
|
||||
self.xid &= self.ofproto.MAX_XID
|
||||
msg.set_xid(self.xid)
|
||||
return self.xid
|
||||
|
||||
def send_msg(self, msg):
|
||||
assert isinstance(msg, self.ofproto_parser.MsgBase)
|
||||
if msg.xid is None:
|
||||
self.set_xid(msg)
|
||||
msg.serialize()
|
||||
# LOG.debug('send_msg %s', msg)
|
||||
self.send(msg.buf)
|
||||
|
@ -106,6 +106,7 @@ class EchoHandler(object):
|
||||
# LOG.debug('echo request msg %s %s', msg, str(msg.data))
|
||||
datapath = msg.datapath
|
||||
echo_reply = datapath.ofproto_parser.OFPEchoReply(datapath)
|
||||
echo_reply.xid = msg.xid
|
||||
echo_reply.data = msg.data
|
||||
datapath.send_msg(echo_reply)
|
||||
|
||||
|
@ -66,6 +66,10 @@ class MsgBase(object):
|
||||
self.msg_len = msg_len
|
||||
self.xid = xid
|
||||
|
||||
def set_xid(self, xid):
|
||||
assert self.xid is None
|
||||
self.xid = xid
|
||||
|
||||
def set_buf(self, buf):
|
||||
self.buf = buffer(buf)
|
||||
|
||||
@ -95,12 +99,12 @@ class MsgBase(object):
|
||||
assert self.version is not None
|
||||
assert self.msg_type is not None
|
||||
assert self.msg_len is None
|
||||
assert self.xid is None
|
||||
assert self.buf is not None
|
||||
assert len(self.buf) >= self.datapath.ofproto.OFP_HEADER_SIZE
|
||||
|
||||
self.msg_len = len(self.buf)
|
||||
self.xid = 0 # TODO:XXX
|
||||
if self.xid is None:
|
||||
self.xid = 0
|
||||
|
||||
struct.pack_into(self.datapath.ofproto.OFP_HEADER_PACK_STR, self.buf, 0,
|
||||
self.version, self.msg_type, self.msg_len, self.xid)
|
||||
|
Loading…
x
Reference in New Issue
Block a user