예제 #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