xref: /aosp_15_r20/tools/netsim/pdl/netlink.pdl (revision cf78ab8cffb8fc9207af348f23af247fb04370a6)
1*cf78ab8cSAndroid Build Coastguard Worker// PDL grammar file for netlink packet format.
2*cf78ab8cSAndroid Build Coastguard Worker//
3*cf78ab8cSAndroid Build Coastguard Worker// This only includes definitions necessary for the mac80211_hwsim
4*cf78ab8cSAndroid Build Coastguard Worker// use case.
5*cf78ab8cSAndroid Build Coastguard Worker//
6*cf78ab8cSAndroid Build Coastguard Worker// See
7*cf78ab8cSAndroid Build Coastguard Worker//   - [RFC 3549](https://datatracker.ietf.org/doc/html/rfc3549)
8*cf78ab8cSAndroid Build Coastguard Worker//   - netlink.h
9*cf78ab8cSAndroid Build Coastguard Worker
10*cf78ab8cSAndroid Build Coastguard Worker
11*cf78ab8cSAndroid Build Coastguard Worker// Host byte order
12*cf78ab8cSAndroid Build Coastguard Workerlittle_endian_packets
13*cf78ab8cSAndroid Build Coastguard Worker
14*cf78ab8cSAndroid Build Coastguard Worker// Netlink Message Header
15*cf78ab8cSAndroid Build Coastguard Worker
16*cf78ab8cSAndroid Build Coastguard Workerstruct NlMsgHdr {
17*cf78ab8cSAndroid Build Coastguard Worker    nlmsg_len : 32,             // Length of message including header
18*cf78ab8cSAndroid Build Coastguard Worker    nlmsg_type : 16,            // Message type identifier
19*cf78ab8cSAndroid Build Coastguard Worker    nlmsg_flags : 16,           // Flags (NLM_F_)
20*cf78ab8cSAndroid Build Coastguard Worker    nlmsg_seq : 32,             // Sequence number
21*cf78ab8cSAndroid Build Coastguard Worker    nlmsg_pid : 32,             // Sending process port ID
22*cf78ab8cSAndroid Build Coastguard Worker}
23*cf78ab8cSAndroid Build Coastguard Worker
24*cf78ab8cSAndroid Build Coastguard Worker// Netlink Attribute Header
25*cf78ab8cSAndroid Build Coastguard Worker
26*cf78ab8cSAndroid Build Coastguard Worker/*
27*cf78ab8cSAndroid Build Coastguard Worker *  <------- NLA_HDRLEN ------> <-- NLA_ALIGN(payload)-->
28*cf78ab8cSAndroid Build Coastguard Worker * +---------------------+- - -+- - - - - - - - - -+- - -+
29*cf78ab8cSAndroid Build Coastguard Worker * |        Header       | Pad |     Payload       | Pad |
30*cf78ab8cSAndroid Build Coastguard Worker * |   (struct nlattr)   | ing |                   | ing |
31*cf78ab8cSAndroid Build Coastguard Worker * +---------------------+- - -+- - - - - - - - - -+- - -+
32*cf78ab8cSAndroid Build Coastguard Worker *  <-------------- nlattr->nla_len -------------->
33*cf78ab8cSAndroid Build Coastguard Worker */
34*cf78ab8cSAndroid Build Coastguard Worker
35*cf78ab8cSAndroid Build Coastguard Worker/*
36*cf78ab8cSAndroid Build Coastguard Worker * nla_type (16 bits)
37*cf78ab8cSAndroid Build Coastguard Worker * +---+---+-------------------------------+
38*cf78ab8cSAndroid Build Coastguard Worker * | N | O | Attribute Type                |
39*cf78ab8cSAndroid Build Coastguard Worker * +---+---+-------------------------------+
40*cf78ab8cSAndroid Build Coastguard Worker * N := Carries nested attributes
41*cf78ab8cSAndroid Build Coastguard Worker * O := Payload stored in network byte order
42*cf78ab8cSAndroid Build Coastguard Worker *
43*cf78ab8cSAndroid Build Coastguard Worker * Note: The N and O flag are mutually exclusive.
44*cf78ab8cSAndroid Build Coastguard Worker */
45*cf78ab8cSAndroid Build Coastguard Worker
46*cf78ab8cSAndroid Build Coastguard Worker// Base netlink attribute TLV header.
47*cf78ab8cSAndroid Build Coastguard Worker
48*cf78ab8cSAndroid Build Coastguard Workerstruct NlAttrHdr {
49*cf78ab8cSAndroid Build Coastguard Worker    nla_len : 16,
50*cf78ab8cSAndroid Build Coastguard Worker    nla_type: 14,
51*cf78ab8cSAndroid Build Coastguard Worker    nla_m : 1,
52*cf78ab8cSAndroid Build Coastguard Worker    nla_o : 1,
53*cf78ab8cSAndroid Build Coastguard Worker}
54*cf78ab8cSAndroid Build Coastguard Worker
55