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
22 ver = property(_get_ver, _set_ver)
23
26 fl = property(_get_fl, _set_fl)
27
30 set_cmd = classmethod(set_cmd)
31
34 get_cmd = classmethod(get_cmd)
35
43
49
50
51 AOE_CMD_ATA = 0
52 AOE_CMD_CFG = 1
53 AOE_FLAG_RSP = 1 << 3
54
55
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