예제 #1
0
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)
예제 #2
0
 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
예제 #3
0
    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
예제 #4
0
  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
예제 #5
0
  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
예제 #6
0
  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
예제 #7
0
  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
예제 #8
0
  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
예제 #9
0
  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
예제 #10
0
  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
예제 #11
0
 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
예제 #12
0
 def _unpack_body (self, raw, offset, avail):
   offset,(self.subtype,) = \
       of._unpack('!H', raw, offset)
   offset = of._skip(raw, offset, 6)
   return offset
예제 #13
0
 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
예제 #14
0
 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
예제 #15
0
 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
예제 #16
0
    def _unpack_body(self, raw, offset, avail):
        offset, (self.subtype, ) = of._unpack('!H', raw, offset)
        offset = of._skip(raw, offset, 8)

        return offset