components/net-snmp/patches/030.7147779.kernel_sunos5.patch
branchs11-update
changeset 2503 6b4484a2388e
equal deleted inserted replaced
2502:a97aabb9f4ea 2503:6b4484a2388e
       
     1 --- net-snmp-5.4.1.orig/agent/mibgroup/kernel_sunos5.c	2013-01-11 11:46:28.795419820 -0800
       
     2 +++ net-snmp-5.4.1/agent/mibgroup/kernel_sunos5.c	2013-01-11 11:45:51.611042099 -0800
       
     3 @@ -280,7 +280,9 @@
       
     4      kstat_t        *ks;
       
     5      kid_t           kid;
       
     6      kstat_named_t  *named;
       
     7 + 
       
     8      int             ret = -1;        /* fail unless ... */
       
     9 +    int             lookup_stat = 0;	
       
    10  
       
    11      if (kstat_fd == 0) {
       
    12  	kstat_fd = kstat_open();
       
    13 @@ -291,27 +293,88 @@
       
    14      if ((ksc = kstat_fd) == NULL) {
       
    15  	goto Return;
       
    16      }
       
    17 -    ks = kstat_lookup(ksc, classname, -1, statname);
       
    18 -    if (ks == NULL) {
       
    19 -	DEBUGMSGTL(("kernel_sunos5", "class %s, stat %s not found\n",
       
    20 -		classname ? classname : "NULL",
       
    21 -		statname ? statname : "NULL"));
       
    22 -	goto Return;
       
    23 -    }
       
    24 -    kid = kstat_read(ksc, ks, NULL);
       
    25 -    if (kid == -1) {
       
    26 -	DEBUGMSGTL(("kernel_sunos5", "cannot read class %s stats %s\n",
       
    27 -		classname ? classname : "NULL", statname ? statname : "NULL"));
       
    28 -	goto Return;
       
    29 -    }
       
    30 -    named = kstat_data_lookup(ks, varname);
       
    31 -    if (named == NULL) {
       
    32 -	DEBUGMSGTL(("kernel_sunos5", "no var %s for class %s stat %s\n",
       
    33 -		varname, classname ? classname : "NULL",
       
    34 -		statname ? statname : "NULL"));
       
    35 -	goto Return;
       
    36 +   
       
    37 +    if ((ks = kstat_lookup(ksc, statname, 0, "link")) != NULL)
       
    38 +    {
       
    39 +        kid = kstat_read(ksc, ks, NULL);
       
    40 +        if (kid == -1) {
       
    41 +            DEBUGMSGTL(("kernel_sunos5", "cannot read class %s stats %s\n",
       
    42 +                    statname ? statname : "NULL", "link"));
       
    43 +        }
       
    44 +        else
       
    45 +        {
       
    46 +            named = kstat_data_lookup(ks, varname);
       
    47 +            if (named == NULL) {
       
    48 +	        DEBUGMSGTL(("kernel_sunos5", "no var %s for class %s stat %s\n",
       
    49 +                        varname, statname ? statname : "NULL", "link"));
       
    50 +            }
       
    51 +            else {
       
    52 +                    switch (named->data_type) {
       
    53 +#ifdef KSTAT_DATA_INT32         /* Solaris 2.6 and up */
       
    54 +                        case KSTAT_DATA_INT32:
       
    55 +                            if(named->value.i32)
       
    56 +                                lookup_stat = 1;
       
    57 +	                    break;
       
    58 +                        case KSTAT_DATA_UINT32:
       
    59 +                            if(named->value.ui32)
       
    60 +                                lookup_stat = 1;
       
    61 +                            break;
       
    62 +                        case KSTAT_DATA_INT64:
       
    63 +                            if(named->value.i64)
       
    64 +                                lookup_stat = 1;
       
    65 +                            break;
       
    66 +                        case KSTAT_DATA_UINT64:
       
    67 +                            if(named->value.ui64)
       
    68 +                                lookup_stat = 1;
       
    69 +                            break;
       
    70 +#else
       
    71 +                        case KSTAT_DATA_LONG:
       
    72 +                            if(named->value.l)
       
    73 +                                lookup_stat = 1;
       
    74 +                            break;
       
    75 +                        case KSTAT_DATA_ULONG:
       
    76 +                            if(named->value.ul)
       
    77 +                                lookup_stat = 1;
       
    78 +                            break;
       
    79 +                        case KSTAT_DATA_LONGLONG:
       
    80 +                            if(named->value.ll)
       
    81 +                                lookup_stat = 1;
       
    82 +                            break;
       
    83 +                        case KSTAT_DATA_ULONGLONG:
       
    84 +                            if(named->value.ull)
       
    85 +                                lookup_stat = 1;
       
    86 +                            break;
       
    87 +#endif
       
    88 +                    } 
       
    89 +            }
       
    90 +        }
       
    91      }
       
    92 -
       
    93 +     
       
    94 +    if(!lookup_stat) 
       
    95 +    {
       
    96 +        ks = kstat_lookup(ksc, classname, -1, statname);
       
    97 +        if (ks == NULL) {
       
    98 +        DEBUGMSGTL(("kernel_sunos5", "class %s, stat %s not found\n",
       
    99 +                   classname ? classname : "NULL",
       
   100 +                   statname ? statname : "NULL"));
       
   101 +        goto Return;
       
   102 +        }
       
   103 +        
       
   104 +	kid = kstat_read(ksc, ks, NULL);
       
   105 +        if (kid == -1) {
       
   106 +            DEBUGMSGTL(("kernel_sunos5", "cannot read class %s stats %s\n",
       
   107 +                   classname ? classname : "NULL", statname ? statname : "NULL"));
       
   108 +            goto Return;
       
   109 +        }
       
   110 +        
       
   111 +	named = kstat_data_lookup(ks, varname);
       
   112 +        if (named == NULL) {
       
   113 +            DEBUGMSGTL(("kernel_sunos5", "no var %s for class %s stat %s\n",
       
   114 +                    varname, classname ? classname : "NULL",
       
   115 +                    statname ? statname : "NULL"));
       
   116 +            goto Return;
       
   117 +        }
       
   118 +    } 
       
   119      ret = 0;                /* maybe successful */
       
   120      switch (named->data_type) {
       
   121  #ifdef KSTAT_DATA_INT32         /* Solaris 2.6 and up */
       
   122 @@ -428,11 +491,20 @@
       
   123      /*
       
   124       * Get the named statistics 
       
   125       */
       
   126 -    if ((ks = kstat_lookup(ksc, module_name, instance, statname)) == NULL) {
       
   127 -	ret = -10;
       
   128 -	goto Return;        /* kstat errors */
       
   129 -    }
       
   130  
       
   131 +    if ((ks = kstat_lookup(ksc, module_name, instance, statname)) == NULL)
       
   132 +    {
       
   133 +        /*
       
   134 +         * Try to lookup the kstat module with
       
   135 +         * modulename = linkname and statname = "link".
       
   136 +         */
       
   137 +
       
   138 +        if ((ks = kstat_lookup(ksc, statname, 0, "link")) == NULL) {
       
   139 +            ret = -10;
       
   140 +            goto Return;    /* kstat errors */
       
   141 +        }
       
   142 +    }
       
   143 +   		
       
   144      if (kstat_read(ksc, ks, NULL) <= 0) {
       
   145  	ret = -10;
       
   146  	goto Return;        /* kstat errors */