示例#1
0
文件: action.py 项目: mapleyip/oftest
def parse_experimenter(reader):

    experimenter, = reader.peek("!4xL")
    if experimenter == 0x005c16c7: # Big Switch Networks
        subtype, = reader.peek("!8xL")
    elif experimenter == 0x00002320: # Nicira
        subtype, = reader.peek("!8xH")
    else:
        raise loxi.ProtocolError("unexpected experimenter id %#x" % experimenter)

    if subtype in experimenter_parsers[experimenter]:
        return experimenter_parsers[experimenter][subtype](reader)
    else:
        raise loxi.ProtocolError("unexpected BSN experimenter subtype %#x" % subtype)
示例#2
0
 def read(self, fmt):
     st = struct.Struct(fmt)
     if self.offset + st.size > self.length:
         raise loxi.ProtocolError("Buffer too short")
     result = st.unpack_from(self.buf, self.start + self.offset)
     self.offset += st.size
     return result
示例#3
0
 def slice(self, length, rewind=0):
     if self.offset + length - rewind > self.length:
         raise loxi.ProtocolError("Buffer too short")
     reader = OFReader(self.buf, self.start + self.offset - rewind, length)
     reader.skip(rewind)
     self.offset += length - rewind
     return reader
示例#4
0
 def deserializer(reader, typ):
     parser = parsers.get(typ)
     if not parser:
         raise loxi.ProtocolError("unknown instruction type %d" % typ)
     return parser(reader)
示例#5
0
 def skip(self, length):
     if self.offset + length > self.length:
         raise loxi.ProtocolError("Buffer too short")
     self.offset += length
示例#6
0
 def skip_align(self):
     new_offset = (self.offset + 7) / 8 * 8
     if new_offset > self.length:
         raise loxi.ProtocolError("Buffer too short")
     self.offset = new_offset
示例#7
0
 def slice(self, length):
     if self.offset + length > self.length:
         raise loxi.ProtocolError("Buffer too short")
     reader = OFReader(self.buf, self.start + self.offset, length)
     self.offset += length
     return reader
示例#8
0
 def slice(self, length):
     if self.offset + length > len(self.buf):
         raise loxi.ProtocolError("Buffer too short")
     buf = OFReader(buffer(self.buf, self.offset, length))
     self.offset += length
     return buf
示例#9
0
 def peek(self, fmt):
     st = struct.Struct(fmt)
     if self.offset + st.size > len(self.buf):
         raise loxi.ProtocolError("Buffer too short")
     result = st.unpack_from(self.buf, self.offset)
     return result