Esempio n. 1
0
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)
Esempio n. 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
Esempio n. 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
Esempio n. 4
0
 def deserializer(reader, typ):
     parser = parsers.get(typ)
     if not parser:
         raise loxi.ProtocolError("unknown instruction type %d" % typ)
     return parser(reader)
Esempio n. 5
0
 def skip(self, length):
     if self.offset + length > self.length:
         raise loxi.ProtocolError("Buffer too short")
     self.offset += length
Esempio n. 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
Esempio n. 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
Esempio n. 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
Esempio n. 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