Hi Alejandro,

we added IFF_ECHO these days on suggestion of Dave Miller - and the IFF_LOWER_UP/IFF_DORMANT were already there at that time.

I don't know if there ioctls are still used for retrieving these flags as I assume this is done via netlink interface today.

At least there is enough space (in the union) in the ioctl structure for longer data structures:

https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/if.h#L265

https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/if.h#L247

https://elixir.bootlin.com/linux/latest/source/net/core/dev_ioctl.c#L114

If you continue discussing about this topic, please remove the Volkswagen mail addresses from Urs and me.

I'm still maintaining the CAN subsystem in the Linux kernel - but with a private mail address.

And you should better add the netdev ML to your recipients netdev@vger.kernel.org where all the netdev guys (including Dave Miller) hang out.

Best,
Oliver



------------------------------------------------------------------------
*Von:* Alejandro Colomar (man-pages) <alx.manpa...@gmail.com>
*Gesendet:* Freitag, März 19, 2021 9:00 PM
*An:* Erik Flodin; mtk.manpa...@gmail.com
*Cc:* linux-...@vger.kernel.org; Stefan Rompf; David S. Miller; Fredrik Arnerup; John Dykstra; David S. Miller; Hartkopp, Oliver, Dr. (EESC/3); Thuermann, Urs, Dr. (K-AERD/M)
*Betreff:* Re: netdevice.7 SIOCGIFFLAGS/SIOCSIFFLAGS
[CC += Fredrik, John, David S., Steven, Oliver, Urs]

Hi,

On 3/17/21 3:12 PM, Erik Flodin wrote:
Hi,

The documentation for SIOCGIFFLAGS/SIOCSIFFLAGS in netdevice.7 lists
IFF_LOWER_UP, IFF_DORMANT and IFF_ECHO, but those can't be set in
ifr_flags as it is only a short and the flags start at 1<<16.

See also https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=746e6ad23cd6fec2edce056e014a0eabeffa838c
<https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=746e6ad23cd6fec2edce056e014a0eabeffa838c>


I don't know what's the history of that.
I researched a bit, and while the struct member is indeed a 'short' [1],
the flags were added to the kernel for some reason.
I added a few people to the thread that may know better what to do.Let's
see if they can comment.

Links to relevant commits:

<https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=746e6ad23cd6fec2edce056e014a0eabeffa838c <https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=746e6ad23cd6fec2edce056e014a0eabeffa838c>> <https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b00055aacdb172c05067612278ba27265fcd05ce <https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b00055aacdb172c05067612278ba27265fcd05ce>> <https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cd05acfe65ed2cf2db683fa9a6adb8d35635263b <https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cd05acfe65ed2cf2db683fa9a6adb8d35635263b>> <https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/commit/?id=6ecda4d14604d250d385346f4fe9de707f281759 <https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/commit/?id=6ecda4d14604d250d385346f4fe9de707f281759>>

Thanks,

Alex

[1]:

.../linux$ sed -n '/struct ifreq {/,/};/p' include/uapi/linux/if.h
struct ifreq {
#define IFHWADDRLEN     6
         union
         {
                char    ifrn_name[IFNAMSIZ];            /* if name, e.g. "en0" */
         } ifr_ifrn;

         union {
                 struct  sockaddr ifru_addr;
                 struct  sockaddr ifru_dstaddr;
                 struct  sockaddr ifru_broadaddr;
                 struct  sockaddr ifru_netmask;
                 struct  sockaddr ifru_hwaddr;
                 short   ifru_flags;
                 int     ifru_ivalue;
                 int     ifru_mtu;
                 struct  ifmap ifru_map;
                 char    ifru_slave[IFNAMSIZ];   /* Just fits the size */
                 char    ifru_newname[IFNAMSIZ];
                 void __user *   ifru_data;
                 struct  if_settings ifru_settings;
         } ifr_ifru;
};
.../linux$ grep 'define\sifr_flags' include/uapi/linux/if.h
#define ifr_flags       ifr_ifru.ifru_flags     /* flags                */
.../linux$

--
Alejandro Colomar
Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/ <https://www.kernel.org/doc/man-pages/>
http://www.alejandro-colomar.es/ <http://www.alejandro-colomar.es/>

Reply via email to