xref: /aosp_15_r20/external/crosvm/net_sys/bindgen.sh (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker#!/usr/bin/env bash
2*bb4ee6a4SAndroid Build Coastguard Worker# Copyright 2022 The ChromiumOS Authors
3*bb4ee6a4SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
4*bb4ee6a4SAndroid Build Coastguard Worker# found in the LICENSE file.
5*bb4ee6a4SAndroid Build Coastguard Worker
6*bb4ee6a4SAndroid Build Coastguard Worker# Regenerate net_sys bindgen bindings.
7*bb4ee6a4SAndroid Build Coastguard Worker
8*bb4ee6a4SAndroid Build Coastguard Workerset -euo pipefail
9*bb4ee6a4SAndroid Build Coastguard Workercd "$(dirname "${BASH_SOURCE[0]}")/.."
10*bb4ee6a4SAndroid Build Coastguard Worker
11*bb4ee6a4SAndroid Build Coastguard Workersource tools/impl/bindgen-common.sh
12*bb4ee6a4SAndroid Build Coastguard Worker
13*bb4ee6a4SAndroid Build Coastguard Worker# Replace definition of struct sockaddr with an import of libc::sockaddr.
14*bb4ee6a4SAndroid Build Coastguard Workerreplace_sockaddr_libc() {
15*bb4ee6a4SAndroid Build Coastguard Worker    # Match the following structure definition across multiple lines:
16*bb4ee6a4SAndroid Build Coastguard Worker    #
17*bb4ee6a4SAndroid Build Coastguard Worker    # #[repr(C)]
18*bb4ee6a4SAndroid Build Coastguard Worker    # #[derive(Debug, Default, Copy, Clone)]
19*bb4ee6a4SAndroid Build Coastguard Worker    # pub struct sockaddr {
20*bb4ee6a4SAndroid Build Coastguard Worker    #     pub sa_family: sa_family_t,
21*bb4ee6a4SAndroid Build Coastguard Worker    #     pub sa_data: [::std::os::raw::c_char; 14usize],
22*bb4ee6a4SAndroid Build Coastguard Worker    # }
23*bb4ee6a4SAndroid Build Coastguard Worker    sed -E \
24*bb4ee6a4SAndroid Build Coastguard Worker        -e '1h;2,$H;$!d;g' \
25*bb4ee6a4SAndroid Build Coastguard Worker        -e 's/#\[repr\(C\)\]\n#\[derive\([^)]+\)\]\npub struct sockaddr \{\n(    pub [^\n]+\n)+\}/\nuse libc::sockaddr;\n/'
26*bb4ee6a4SAndroid Build Coastguard Worker}
27*bb4ee6a4SAndroid Build Coastguard Worker
28*bb4ee6a4SAndroid Build Coastguard Worker# Remove custom sa_family_t type in favor of libc::sa_family_t.
29*bb4ee6a4SAndroid Build Coastguard Workerremove_sa_family_t() {
30*bb4ee6a4SAndroid Build Coastguard Worker    grep -v "pub type sa_family_t = "
31*bb4ee6a4SAndroid Build Coastguard Worker}
32*bb4ee6a4SAndroid Build Coastguard Worker
33*bb4ee6a4SAndroid Build Coastguard Workerbindgen_generate \
34*bb4ee6a4SAndroid Build Coastguard Worker    --allowlist-type='ifreq' \
35*bb4ee6a4SAndroid Build Coastguard Worker    --allowlist-type='net_device_flags' \
36*bb4ee6a4SAndroid Build Coastguard Worker    --bitfield-enum='net_device_flags' \
37*bb4ee6a4SAndroid Build Coastguard Worker    "${BINDGEN_LINUX_X86_HEADERS}/include/linux/if.h" \
38*bb4ee6a4SAndroid Build Coastguard Worker    | replace_linux_int_types \
39*bb4ee6a4SAndroid Build Coastguard Worker    | replace_sockaddr_libc \
40*bb4ee6a4SAndroid Build Coastguard Worker    | remove_sa_family_t \
41*bb4ee6a4SAndroid Build Coastguard Worker    | rustfmt \
42*bb4ee6a4SAndroid Build Coastguard Worker    > net_sys/src/iff.rs
43*bb4ee6a4SAndroid Build Coastguard Worker
44*bb4ee6a4SAndroid Build Coastguard Workerbindgen_generate \
45*bb4ee6a4SAndroid Build Coastguard Worker    --allowlist-type='sock_fprog' \
46*bb4ee6a4SAndroid Build Coastguard Worker    --allowlist-var='TUN_.*' \
47*bb4ee6a4SAndroid Build Coastguard Worker    --allowlist-var='IFF_NO_PI' \
48*bb4ee6a4SAndroid Build Coastguard Worker    --allowlist-var='IFF_MULTI_QUEUE' \
49*bb4ee6a4SAndroid Build Coastguard Worker    --allowlist-var='IFF_TAP' \
50*bb4ee6a4SAndroid Build Coastguard Worker    --allowlist-var='IFF_VNET_HDR' \
51*bb4ee6a4SAndroid Build Coastguard Worker    "${BINDGEN_LINUX}/include/uapi/linux/if_tun.h" \
52*bb4ee6a4SAndroid Build Coastguard Worker    | replace_linux_int_types \
53*bb4ee6a4SAndroid Build Coastguard Worker    > net_sys/src/if_tun.rs
54*bb4ee6a4SAndroid Build Coastguard Worker
55*bb4ee6a4SAndroid Build Coastguard Workerbindgen_generate \
56*bb4ee6a4SAndroid Build Coastguard Worker    --allowlist-var='SIOC.*' \
57*bb4ee6a4SAndroid Build Coastguard Worker    "${BINDGEN_LINUX}/include/uapi/linux/sockios.h" \
58*bb4ee6a4SAndroid Build Coastguard Worker    | replace_linux_int_types \
59*bb4ee6a4SAndroid Build Coastguard Worker    > net_sys/src/sockios.rs
60