Ejemplo 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)
Ejemplo 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
Ejemplo 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
Ejemplo 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)
Ejemplo n.º 5
0
 def skip(self, length):
     if self.offset + length > self.length:
         raise loxi.ProtocolError("Buffer too short")
     self.offset += length
Ejemplo 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
Ejemplo 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
Ejemplo 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
Ejemplo 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