ELL 0.59 Does Not Compile against Linux-4.9.212 and/or GLibC-2.28

Grant Erickson <[email protected]> Wed, 8 Nov 2023 13:21:30 -0800
Newsgroups dev.linux.lists.ell
Message-ID <[email protected]>
ELL Community:

Over on the connman mailing list, Marcel and Denis have been advocating, rightly so, for iwd over wpa_supplicant for Wi-Fi.

Is there a kernel version expectation of ELL?

For the current project I am engaged on, the kernel is locked at linux-4.9.212, glibc-2.28, and GCC 8.2. With that combination, I have found that the absolutely latest version of ELL I can build is 0.28. Regrettably, iwd requires a more recent version than that. However, neither the version of ELL that iwd embeds nor the latest independent version of ELL, 0.59 compile against the aforementioned combination. I see the following errors:

    Processing ".build/Makefile/${PRODUCT}/arm/gnu-toolchain/8.2-2018.11/release/Makefile"
    make[1]: Entering directory 'third_party/ell/.build/Makefile/${PRODUCT}/arm/gnu-toolchain/8.2-2018.11/release'
    make --no-print-directory all-am
      CC       ell/netlink.lo
      CC       ell/genl.lo
      CC       ell/dbus.lo
      CC       ell/rtnl.lo
    In file included from third_party/ell/ell-0.59/ell/rtnl.c:13:
    ${BuildRoot}/results/${PRODUCT}/arm/gnu-toolchain/8.2-2018.11/release/third_party/linux/linux-dey/include/linux/if.h:234:19: error: field 'ifru_addr' has incomplete type
       struct sockaddr ifru_addr;
                       ^~~~~~~~~
    ${BuildRoot}/results/${PRODUCT}/arm/gnu-toolchain/8.2-2018.11/release/third_party/linux/linux-dey/include/linux/if.h:235:19: error: field 'ifru_dstaddr' has incomplete type
       struct sockaddr ifru_dstaddr;
                       ^~~~~~~~~~~~
    ${BuildRoot}/results/${PRODUCT}/arm/gnu-toolchain/8.2-2018.11/release/third_party/linux/linux-dey/include/linux/if.h:236:19: error: field 'ifru_broadaddr' has incomplete type
       struct sockaddr ifru_broadaddr;
                       ^~~~~~~~~~~~~~
    ${BuildRoot}/results/${PRODUCT}/arm/gnu-toolchain/8.2-2018.11/release/third_party/linux/linux-dey/include/linux/if.h:237:19: error: field 'ifru_netmask' has incomplete type
       struct sockaddr ifru_netmask;
                       ^~~~~~~~~~~~
    ${BuildRoot}/results/${PRODUCT}/arm/gnu-toolchain/8.2-2018.11/release/third_party/linux/linux-dey/include/linux/if.h:238:20: error: field 'ifru_hwaddr' has incomplete type
       struct  sockaddr ifru_hwaddr;
                        ^~~~~~~~~~~
    third_party/ell/ell-0.59/ell/netlink.c: In function 'l_netlink_set_debug':
    third_party/ell/ell-0.59/ell/netlink.c:629:56: error: 'NETLINK_EXT_ACK' undeclared (first use in this function); did you mean 'NETLINK_CAP_ACK'?
      if (setsockopt(l_io_get_fd(netlink->io), SOL_NETLINK, NETLINK_EXT_ACK,
                                                            ^~~~~~~~~~~~~~~
                                                            NETLINK_CAP_ACK
    third_party/ell/ell-0.59/ell/netlink.c:629:56: note: each undeclared identifier is reported only once for each function it appears in
    third_party/ell/ell-0.59/ell/netlink.c: In function 'netlink_parse_ext_ack_error':
    third_party/ell/ell-0.59/ell/netlink.c:649:29: error: 'NLM_F_ACK_TLVS' undeclared (first use in this function); did you mean 'NLM_F_ACK'?
      if (!(nlmsg->nlmsg_flags & NLM_F_ACK_TLVS))
                                 ^~~~~~~~~~~~~~
                                 NLM_F_ACK
    third_party/ell/ell-0.59/ell/netlink.c:657:29: error: 'NLM_F_CAPPED' undeclared (first use in this function); did you mean 'NLM_F_APPEND'?
      if (!(nlmsg->nlmsg_flags & NLM_F_CAPPED))
                                 ^~~~~~~~~~~~
                                 NLM_F_APPEND
    third_party/ell/ell-0.59/ell/netlink.c:677:8: error: 'NLMSGERR_ATTR_MSG' undeclared (first use in this function)
       case NLMSGERR_ATTR_MSG:
            ^~~~~~~~~~~~~~~~~
    third_party/ell/ell-0.59/ell/genl.c: In function 'l_genl_new':
    third_party/ell/ell-0.59/ell/netlink.c:681:8: error: 'NLMSGERR_ATTR_OFFS' undeclared (first use in this function)
       case NLMSGERR_ATTR_OFFS:
            ^~~~~~~~~~~~~~~~~~
    third_party/ell/ell-0.59/ell/genl.c:1088:30: error: 'NETLINK_EXT_ACK' undeclared (first use in this function); did you mean 'NETLINK_CAP_ACK'?
      setsockopt(fd, SOL_NETLINK, NETLINK_EXT_ACK,
                                  ^~~~~~~~~~~~~~~
                                  NETLINK_CAP_ACK
    third_party/ell/ell-0.59/ell/genl.c:1088:30: note: each undeclared identifier is reported only once for each function it appears in
    make[2]: *** [Makefile:2009: ell/netlink.lo] Error 1
    make[2]: *** Waiting for unfinished jobs....
    make[2]: *** [Makefile:2009: ell/genl.lo] Error 1
    make[2]: *** [Makefile:2009: ell/rtnl.lo] Error 1
    make[1]: *** [Makefile:1288: all] Error 2
    make[1]: Leaving directory 'third_party/ell/.build/Makefile/${PRODUCT}/arm/gnu-toolchain/8.2-2018.11/release'
    make: *** [Makefile:94: build] Error 2

I expect the ’sockaddr’ issues to be easily resolved with a different set of include directives; however, the rest appear to be new symbols introduced in later kernels.

Best,

Grant