components/net-snmp-57/patches/010.if-mib-zone.patch
changeset 5867 445e2cf1c845
parent 252 ee0fb1eabcbf
equal deleted inserted replaced
5866:683c5c035a79 5867:445e2cf1c845
       
     1 --- net-snmp-5.4.1/agent/mibgroup/kernel_sunos5.c	2009-05-11 15:32:06.000000000 -0700
       
     2 +++ net-snmp-5.4.1.fix/agent/mibgroup/kernel_sunos5.c	2009-05-11 16:47:40.637063871 -0700
       
     3 @@ -170,7 +170,7 @@
       
     4        size_t *length, int (*comp)(void *, void *), void *arg);
       
     5  static void 
       
     6  set_if_info(mib2_ifEntry_t *ifp, unsigned index, char *name, uint64_t flags,
       
     7 -            int mtu);
       
     8 +            boolean_t flags_unknown, int mtu);
       
     9  static int get_if_stats(mib2_ifEntry_t *ifp);
       
    10  
       
    11  #if defined(HAVE_IF_NAMEINDEX) && defined(NETSNMP_INCLUDE_IFTABLE_REWRITES)
       
    12 @@ -1332,8 +1332,9 @@
       
    13      mib2_ifEntry_t *ifp;
       
    14      int             nentries = size / sizeof(mib2_ifEntry_t);
       
    15      found_e         result = NOT_FOUND;
       
    16 -    boolean_t       if_isv6;
       
    17 +    boolean_t       if_isv6, flags_unknown;
       
    18      uint64_t        if_flags;    
       
    19 +    short           mtu = 0;
       
    20      struct if_nameindex *ifname, *ifnp;
       
    21  
       
    22      lifrp = &lifreq; 
       
    23 @@ -1365,6 +1366,7 @@
       
    24          memcpy(lifrp->lifr_name, ifnp->if_name, LIFNAMSIZ);
       
    25          if_isv6 = B_FALSE;
       
    26  
       
    27 +        flags_unknown = B_FALSE;
       
    28          if (ioctl(ifsd, SIOCGLIFFLAGS, lifrp) < 0) {
       
    29              if (ifsd6 == -1) {
       
    30                  if ((ifsd6 = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
       
    31 @@ -1373,17 +1375,19 @@
       
    32                  }
       
    33              }
       
    34              if (ioctl(ifsd6, SIOCGLIFFLAGS, lifrp) < 0) {
       
    35 -                snmp_log(LOG_ERR, "SIOCGLIFFLAGS %s: %s\n", 
       
    36 -                         lifrp->lifr_name, strerror(errno));
       
    37 -                continue;
       
    38 +                DEBUGMSGTL(("kernel_sunos5",
       
    39 +                            "...... SIOCGLIFFLAGS failed\n"));
       
    40 +                flags_unknown = B_TRUE;
       
    41              }
       
    42              if_isv6 = B_TRUE;
       
    43          } 
       
    44          if_flags = lifrp->lifr_flags;
       
    45              
       
    46          if (ioctl(if_isv6?ifsd6:ifsd, SIOCGLIFMTU, lifrp) < 0) {
       
    47 +            mtu = 0;
       
    48              DEBUGMSGTL(("kernel_sunos5", "...... SIOCGLIFMTU failed\n"));
       
    49 -            continue;
       
    50 +        } else {
       
    51 +            mtu = lifrp->lifr_mtu;
       
    52          }
       
    53  
       
    54          memset(ifp, 0, sizeof(mib2_ifEntry_t));
       
    55 @@ -1398,11 +1402,12 @@
       
    56          }
       
    57  
       
    58          set_if_info(ifp, ifnp->if_index, ifnp->if_name, if_flags, 
       
    59 -                    lifrp->lifr_metric);
       
    60 +                    flags_unknown, mtu);
       
    61  
       
    62          if (get_if_stats(ifp) < 0) {
       
    63 +            snmp_log(LOG_ERR, "Failed to get interface statistics for %s\n",
       
    64 +                     ifnp->if_name);
       
    65              DEBUGMSGTL(("kernel_sunos5", "...... get_if_stats failed\n"));
       
    66 -            continue;
       
    67          }
       
    68  
       
    69          /*
       
    70 @@ -1581,7 +1586,7 @@
       
    71  
       
    72  static void
       
    73  set_if_info(mib2_ifEntry_t *ifp, unsigned index, char *name, uint64_t flags,
       
    74 -            int mtu)
       
    75 +            boolean_t flags_unknown, int mtu)
       
    76  { 
       
    77      boolean_t havespeed = B_FALSE;
       
    78  
       
    79 @@ -1592,7 +1597,10 @@
       
    80      ifp->ifDescr.o_length = strlen(name);
       
    81      strcpy(ifp->ifDescr.o_bytes, name);
       
    82      ifp->ifAdminStatus = (flags & IFF_UP) ? 1 : 2;
       
    83 -    ifp->ifOperStatus = ((flags & IFF_UP) && (flags & IFF_RUNNING)) ? 1 : 2;
       
    84 +    if (flags_unknown)
       
    85 +        ifp->ifOperStatus = 4; /* status unknown */
       
    86 +    else
       
    87 +        ifp->ifOperStatus = ((flags & IFF_UP) && (flags & IFF_RUNNING)) ? 1 : 2;
       
    88      ifp->ifLastChange = 0;      /* Who knows ...  */
       
    89      ifp->flags = flags;
       
    90      ifp->ifMtu = mtu;