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.