Stanislav Fomichev <sdf@xxxxxxxxxxx> writes: > On 08/01, Petr Machata wrote: >> >> Stanislav Fomichev <sdf@xxxxxxxxxxx> writes: >> >> > On 07/31, Jakub Kicinski wrote: >> >> On Wed, 31 Jul 2024 13:34:58 +0200 Petr Machata wrote: >> >> > > + qstat = netfam.qstats_get({"ifindex": cfg.ifindex}, dump=True) >> >> > > + except NlError as e: >> >> > > + if e.error == 95: >> >> > >> >> > Could you do this as if e.error == errno.ENOTSUP? >> >> >> >> just to be clear EOPNOTSUPP .. >> > >> > That might be the reason it's coded explicitly as 95? :-D >> >> Both exist, I just didn't notice the latter. >> >> >>> import errno >> >>> errno.ENOTSUP >> 95 >> >>> errno.EOPNOTSUPP >> 95 > > I believe Jakub was talking about kernel's ENOTSUPP (524) vs EOPNOTSUPP (95): > > $ grep ENOTSUPP include/linux/errno.h > #define ENOTSUPP 524 /* Operation is not supported */ > > $ grep EOPNOTSUPP include/uapi/asm-generic/errno.h > #define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ > > These two are frequently confused. > > OTOH, ENOTSUP looks like a userspace/libc invention: > > $ grep -w ENOTSUP /usr/include/bits/errno.h > # ifndef ENOTSUP > # define ENOTSUP EOPNOTSUPP > > I'm gonna stick to kernel's EOPNOTSUPP to make it look similar to what > we have on the kernel side. Yep, sounds good.