From e693ddff874890a9e5c990f6ca75d2e2358d065a Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Thu, 16 Dec 1999 13:23:32 +0000 Subject: [PATCH] Handle cases when SIOCGIFINDEX is defined, but doesn't work (new glibc with 2.0 kernels). --- TODO | 2 -- sysdep/unix/krt-iface.c | 12 ++++++------ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/TODO b/TODO index 2c0a0227..475c545f 100644 --- a/TODO +++ b/TODO @@ -17,8 +17,6 @@ Core - netlink: import Linux route attributes to our rta's, so that they can be filtered? -- iface: SIOCGIFINDEX exists on glibc systems, but it doesn't work on 2.0.x kernels! - - socket: Use IP_RECVERR for BGP TCP sockets? - config: executable config files diff --git a/sysdep/unix/krt-iface.c b/sysdep/unix/krt-iface.c index 3a50e8b2..e9df6e43 100644 --- a/sysdep/unix/krt-iface.c +++ b/sysdep/unix/krt-iface.c @@ -36,11 +36,11 @@ scan_ifs(struct ifreq *r, int cnt) unsigned fl; ip_addr netmask; int l; - int sec = 0; if_start_update(); for (cnt /= sizeof(struct ifreq); cnt; cnt--, r++) { + int sec = 0; bzero(&i, sizeof(i)); bzero(&a, sizeof(a)); DBG("%s\n", r->ifr_name); @@ -136,11 +136,12 @@ scan_ifs(struct ifreq *r, int cnt) i.mtu = r->ifr_mtu; #ifdef SIOCGIFINDEX - if (ioctl(if_scan_sock, SIOCGIFINDEX, r) < 0) - DBG("SIOCGIFINDEX failed: %m\n"); - else + if (ioctl(if_scan_sock, SIOCGIFINDEX, r) >= 0) i.index = r->ifr_ifindex; -#else + else if (errno != -EINVAL) + DBG("SIOCGIFINDEX failed: %m\n"); + else /* defined, but not supported by the kernel */ +#endif /* * The kernel doesn't give us real ifindices, but we still need them * at least for OSPF unnumbered links. So let's make them up ourselves. @@ -152,7 +153,6 @@ scan_ifs(struct ifreq *r, int cnt) static int if_index_counter = 1; i.index = if_index_counter++; } -#endif pi = NULL; if (sec)