aboutsummaryrefslogtreecommitdiff
path: root/docs/j1demo/firmware/defines_tcpip.py
blob: bbeb16bf3c915d06e18893bb2bc516dcf684eeb7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
layout = [
    ('ETH', [
        ('DST', 6),
        ('SRC',  6),
        ('TYPE', 2),
        [
            ('IP', [
                ('VHLTOS', 2),
                ('LENGTH', 2),
                ('IPID', 2),
                ('IPOFFSET', 2),
                ('TTLPROTO', 2),
                ('CHKSUM', 2),
                ('SRCIP', 4),
                ('DSTIP', 4),
                [
                    ('ICMP', [
                        ('TYPECODE', 2),
                        ('CHKSUM', 2),
                        ('IDENTIFIER', 2),
                        ('SEQUENCE', 2) ]),
                    ('TCP', [
                        ('SOURCEPORT', 2),
                        ('DESTPORT', 2),
                        ('SEQNUM', 4),
                        ('ACK', 4),
                        ('FLAGS', 2),
                        ('WINDOW', 2),
                        ('CHECKSUM', 2),
                        ('URGENT', 2) ]),
                    ('UDP', [
                        ('SOURCEPORT', 2),
                        ('DESTPORT', 2),
                        ('LENGTH', 2),
                        ('CHECKSUM', 2),
                        [
                            ('DHCP', [
                                ('OP', 1),
                                ('HTYPE', 1),
                                ('HLEN', 1),
                                ('HOPS', 1),
                                ('XID', 4),
                                ('SECS', 2),
                                ('FLAGS', 2),
                                ('CIADDR', 4),
                                ('YIADDR', 4),
                                ('SIADDR', 4),
                                ('GIADDR', 4),
                                ('CHADDR', 16),
                                ('SNAME', 64),
                                ('FILE', 128),
                                ('OPTIONS', 312)
                            ]),
                            ('DNS', [
                                ('IDENTIFICATION', 2),
                                ('FLAGS', 2),
                                ('NOQ', 2),
                                ('NOA', 2),
                                ('NORR', 2),
                                ('NOARR', 2),
                                ('QUERY', 1)
                            ]),
                            ('JUICE', [
                                ('HASH', 20),
                                ('MAGIC', 4),
                                ('SEQ', 2),
                                ('COMMAND', 2),
                                ('PAYLOAD', 2)
                            ])
                        ]
                    ])
                ]
            ])
        ]])
]

offsets = {}
def descend(offset, prefix, node):
    (name, members) = node
    offsets[prefix + name] = offset
    start = offset
    for m in members:
        if isinstance(m, tuple):
            (field, size) = m
            # print prefix, name, field, offset
            offsets["%s%s_%s" % (prefix, name, field)] = offset
            offset += size
        else:
            for n in m:
                descend(offset, prefix, n)
    # print prefix, name, "SIZE", offset - start
    offsets["%s%s_SIZE" % (prefix, name)] = offset - start

descend(0, 'OFFSET_', layout[0])