diff options
author | 2015-09-20 15:53:42 +0300 | |
---|---|---|
committer | 2015-09-20 15:53:42 +0300 | |
commit | 28fef018f75b5a54ac69ac7c919127bf47f5b61f (patch) | |
tree | c21c2af8dfe7c05bee170e96fc923458b8894be6 /scripts/external_libs/dpkt-1.8.6/dpkt/aoe.py | |
parent | a78680a896f65dd6733d27d99e9cd8440eb185e9 (diff) | |
parent | 56dbd342eb97fc087611157ce8e965088b7f9bf8 (diff) |
Pushed Stateless progress (along with Packet Builder module)
Diffstat (limited to 'scripts/external_libs/dpkt-1.8.6/dpkt/aoe.py')
-rw-r--r-- | scripts/external_libs/dpkt-1.8.6/dpkt/aoe.py | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/scripts/external_libs/dpkt-1.8.6/dpkt/aoe.py b/scripts/external_libs/dpkt-1.8.6/dpkt/aoe.py new file mode 100644 index 00000000..45a1eaf2 --- /dev/null +++ b/scripts/external_libs/dpkt-1.8.6/dpkt/aoe.py @@ -0,0 +1,70 @@ +"""ATA over Ethernet Protocol.""" + +import struct + + +import dpkt + + +class AOE(dpkt.Packet): + __hdr__ = ( + ('ver_fl', 'B', 0x10), + ('err', 'B', 0), + ('maj', 'H', 0), + ('min', 'B', 0), + ('cmd', 'B', 0), + ('tag', 'I', 0), + ) + _cmdsw = {} + + def _get_ver(self): return self.ver_fl >> 4 + def _set_ver(self, ver): self.ver_fl = (ver << 4) | (self.ver_fl & 0xf) + ver = property(_get_ver, _set_ver) + + def _get_fl(self): return self.ver_fl & 0xf + def _set_fl(self, fl): self.ver_fl = (self.ver_fl & 0xf0) | fl + fl = property(_get_fl, _set_fl) + + def set_cmd(cls, cmd, pktclass): + cls._cmdsw[cmd] = pktclass + set_cmd = classmethod(set_cmd) + + def get_cmd(cls, cmd): + return cls._cmdsw[cmd] + get_cmd = classmethod(get_cmd) + + def unpack(self, buf): + dpkt.Packet.unpack(self, buf) + try: + self.data = self._cmdsw[self.cmd](self.data) + setattr(self, self.data.__class__.__name__.lower(), self.data) + except (KeyError, struct.error, dpkt.UnpackError): + pass + + def pack_hdr(self): + try: + return dpkt.Packet.pack_hdr(self) + except struct.error, e: + raise dpkt.PackError(str(e)) + + +AOE_CMD_ATA = 0 +AOE_CMD_CFG = 1 +AOE_FLAG_RSP = 1 << 3 + + +def __load_cmds(): + prefix = 'AOE_CMD_' + g = globals() + for k, v in g.iteritems(): + if k.startswith(prefix): + name = 'aoe' + k[len(prefix):].lower() + try: + mod = __import__(name, g) + except ImportError: + continue + AOE.set_cmd(v, getattr(mod, name.upper())) + + +if not AOE._cmdsw: + __load_cmds() |