Package dpkt :: Module aoe
[hide private]
[frames] | no frames]

Source Code for Module dpkt.aoe

 1  """ATA over Ethernet Protocol.""" 
 2   
 3  import struct 
 4   
 5   
 6  import dpkt 
 7   
 8   
9 -class AOE(dpkt.Packet):
10 __hdr__ = ( 11 ('ver_fl', 'B', 0x10), 12 ('err', 'B', 0), 13 ('maj', 'H', 0), 14 ('min', 'B', 0), 15 ('cmd', 'B', 0), 16 ('tag', 'I', 0), 17 ) 18 _cmdsw = {} 19
20 - def _get_ver(self): return self.ver_fl >> 4
21 - def _set_ver(self, ver): self.ver_fl = (ver << 4) | (self.ver_fl & 0xf)
22 ver = property(_get_ver, _set_ver) 23
24 - def _get_fl(self): return self.ver_fl & 0xf
25 - def _set_fl(self, fl): self.ver_fl = (self.ver_fl & 0xf0) | fl
26 fl = property(_get_fl, _set_fl) 27
28 - def set_cmd(cls, cmd, pktclass):
29 cls._cmdsw[cmd] = pktclass
30 set_cmd = classmethod(set_cmd) 31
32 - def get_cmd(cls, cmd):
33 return cls._cmdsw[cmd]
34 get_cmd = classmethod(get_cmd) 35
36 - def unpack(self, buf):
37 dpkt.Packet.unpack(self, buf) 38 try: 39 self.data = self._cmdsw[self.cmd](self.data) 40 setattr(self, self.data.__class__.__name__.lower(), self.data) 41 except (KeyError, struct.error, dpkt.UnpackError): 42 pass
43
44 - def pack_hdr(self):
45 try: 46 return dpkt.Packet.pack_hdr(self) 47 except struct.error, e: 48 raise dpkt.PackError(str(e))
49 50 51 AOE_CMD_ATA = 0 52 AOE_CMD_CFG = 1 53 AOE_FLAG_RSP = 1 << 3 54 55
56 -def __load_cmds():
57 prefix = 'AOE_CMD_' 58 g = globals() 59 for k, v in g.iteritems(): 60 if k.startswith(prefix): 61 name = 'aoe' + k[len(prefix):].lower() 62 try: 63 mod = __import__(name, g) 64 except ImportError: 65 continue 66 AOE.set_cmd(v, getattr(mod, name.upper()))
67 68 69 if not AOE._cmdsw: 70 __load_cmds() 71