def _unpack_nx_vendor (raw, offset): from pox.lib.util import hexdump v = _unpack("!L", raw, offset + 8)[1][0] if v != NX_VENDOR_ID: return _old_unpacker(raw, offset) subtype = _unpack("!L", raw, offset+8+4)[1][0] if subtype == NXT_PACKET_IN: npi = nxt_packet_in() return npi.unpack(raw, offset)[0], npi else: print "NO UNPACKER FOR",subtype return _old_unpacker(raw, offset)
def unpack (self, raw, offset=0): _o = offset offset,length = self._unpack_header(raw, offset) offset,(vendor,subtype) = _unpack("!LL", raw, offset) offset,(self.cookie, self.command, self.idle_timeout, self.hard_timeout, self.priority, self._buffer_id, self.out_port, self.flags, match_len) = \ _unpack("!QHHHHLHHH", raw, offset) offset = self._skip(raw, offset, 6) offset = self.match.unpack(raw, offset, match_len) offset,self.actions = of._unpack_actions(raw, length-(offset - _o), offset) assert length == len(self) return offset,length
def _unpack_body(self, raw, offset, avail): offset, (self.subtype, host, sw) = of._unpack('!HHI', raw, offset) offset = of._skip(raw, offset, 8) self.fd = VidAddr(sw, host) return offset
def _unpack_body (self, raw, offset, avail): """ Unpack body in raw starting at offset. Return new offset """ offset,self.format = of._unpack("!L", raw, offset) return offset
def _unpack_body (self, raw, offset, avail): offset,(self.subtype,self.nbits, self.src_ofs, self.dst_ofs, src, dst) = \ of._unpack('!HHHH4s4s', raw, offset) self.dst = _class_for_nxm_header(dst) self.src = _class_for_nxm_header(src) return offset
def _unpack_body (self, raw, offset, avail): """ Unpack body in raw starting at offset. Return new offset """ offset,enable = of._unpack("!B", raw, offset) offset = of._skip(raw, offset, 7) self.enable = True if enable else False return offset
def unpack (self, raw, offset=0): _offset = offset offset,length = self._unpack_header(raw, offset) offset,(vendor,subtype) = _unpack("!LL", raw, offset) assert subtype == self.subtype #print "vendor %08x subtype %i" % (vendor,subtype) offset,(self._buffer_id, self._total_len, self.reason, self.table_id, self.cookie, match_len) = _unpack("!LHBBQH", raw, offset) offset = _skip(raw, offset, 6) self.match = None offset = self.match.unpack(raw, offset, match_len) offset = _skip(raw, offset, (match_len + 7)//8*8 - match_len) offset = _skip(raw, offset, 2) offset,self.data = _read(raw, offset, length-(offset-_offset)) assert length == len(self) return offset,length
def _unpack_body (self, raw, offset, avail): offset,(self.subtype,ofs_nbits, dst, self.value) = \ of._unpack('!HH4sQ', raw, offset) self.offset = ofs_nbits >> 6 self.nbits = (ofs_nbits & 0x3f) + 1 self.dst = _class_for_nxm_header(dst) return offset
def _unpack_body (self, raw, offset, avail): offset,(self.subtype, ofs_nbits, reg, self.max_len, _, _) = \ of._unpack('!HH4sHHI', raw, offset) self.offset = ofs_nbits >> 6 self.nbits = (ofs_nbits & 0x3f) + 1 self.reg = _class_for_nxm_header(reg) return offset
def _unpack_body (self, raw, offset, avail): offset,(self.subtype,ofs_nbits, dst, self.value) = \ of._unpack('!HH4sQ', raw, offset) self.offset = ofs_nbits >> 6 self.nbits = (ofs_nbits & 0x3f) + 1 _,dst = nxm_entry.unpack_new(dst, 0) self.dst = dst.__class__ return offset
def unpack (self, raw, offset=0): offset,length = self._unpack_header(raw, offset) offset = self.match.unpack(raw, offset, flow_mod=True) offset,(self.cookie, self._command, self.idle_timeout, self.hard_timeout, self.priority, self._buffer_id, self.out_port, self.flags) = \ _unpack("!QHHHHLHH", raw, offset) offset,self.actions = _unpack_actions(raw, length-(32 + len(self.match)), offset) assert length == len(self) return offset,length
def _unpack_body (self, raw, offset, avail): offset,(self.subtype,) = \ of._unpack('!H', raw, offset) offset = of._skip(raw, offset, 6) return offset
def _unpack_body (self, raw, offset, avail): offset,(self.subtype,self.fin_idle_timeout,self.fin_hard_timeout) = \ of._unpack('!HHH', raw, offset) offset = of._skip(raw, offset, 2) return offset
def _unpack_body (self, raw, offset, avail): offset,(self.subtype,self.in_port,self.table) = \ of._unpack('!HHB', raw, offset) offset = of._skip(raw, offset, 3) return offset
def unpack (self, raw, offset=0): offset,length = self._unpack_header(raw, offset) offset,(self.vendor,self.subtype) = _unpack("!LL", raw, offset) offset = self._unpack_body(raw, offset, length-16) return offset,length
def _unpack_body(self, raw, offset, avail): offset, (self.subtype, ) = of._unpack('!H', raw, offset) offset = of._skip(raw, offset, 8) return offset