components/net-snmp/patches/005.16736.patch
author Mike Sullivan <Mike.Sullivan@Oracle.COM>
Thu, 30 Jan 2014 13:44:37 -0800
changeset 1679 51291a5fd692
parent 252 ee0fb1eabcbf
permissions -rw-r--r--
backout 17949399/16488880/15685782/15997718/15705167/15754602/16066103/16242256 - needs more work
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
252
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
     1
Index: net-snmp/agent/mibgroup/kernel_sunos5.h
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
     2
===================================================================
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
     3
--- net-snmp/agent/mibgroup/kernel_sunos5.h	(revision 16735)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
     4
+++ net-snmp/agent/mibgroup/kernel_sunos5.h	(revision 16736)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
     5
@@ -193,6 +193,8 @@
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
     6
     int             getKstatString(const char *statname, const char *varname,
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
     7
                                    char *value, size_t value_len);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
     8
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
     9
+    int             solaris2_if_nametoindex(const char *, int);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    10
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    11
 #ifdef _STDC_COMPAT
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    12
 #ifdef __cplusplus
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    13
 }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    14
Index: net-snmp/agent/mibgroup/if-mib/data_access/interface_solaris2.c
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    15
===================================================================
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    16
--- net-snmp/agent/mibgroup/if-mib/data_access/interface_solaris2.c	(revision 16735)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    17
+++ net-snmp/agent/mibgroup/if-mib/data_access/interface_solaris2.c	(revision 16736)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    18
@@ -14,6 +14,7 @@
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    19
 #include <sys/ioctl.h>
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    20
 #include <sys/sockio.h>
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    21
 #include <strings.h>
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    22
+#include <string.h>
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    23
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    24
 static int _set_ip_flags_v4(netsnmp_interface_entry *, mib2_ifEntry_t *);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    25
 static int _match_ifname_v4addr(void *ifname, void *ipaddr);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    26
@@ -43,25 +44,7 @@
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    27
 #if defined(HAVE_IF_NAMETOINDEX)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    28
     return if_nametoindex(name);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    29
 #else /* use GIFINDEX */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    30
-    int             sd;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    31
-    struct ifreq    ifr;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    32
-
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    33
-    if (name == 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    34
-        return (0);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    35
-    }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    36
-
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    37
-    if ((sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    38
-        return (0);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    39
-    }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    40
-
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    41
-    strncpy(ifr.ifr_name, name, IFNAMSIZ);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    42
-    if (ioctl(sd, SIOCGIFINDEX, (char *) &ifr) < 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    43
-        close(sd);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    44
-        return (0);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    45
-    }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    46
-
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    47
-    close(sd);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    48
-    return (ifr.ifr_index);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    49
+    return solaris2_if_nametoindex(name, strlen(name));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    50
 #endif /* defined(HAVE_IF_NAMETOINDEX) */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    51
 }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    52
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    53
Index: net-snmp/agent/mibgroup/mibII/interfaces.c
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    54
===================================================================
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    55
--- net-snmp/agent/mibgroup/mibII/interfaces.c	(revision 16735)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    56
+++ net-snmp/agent/mibgroup/mibII/interfaces.c	(revision 16736)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    57
@@ -2245,71 +2245,7 @@
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    58
 int
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    59
 Interface_Index_By_Name(char *Name, int Len)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    60
 {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    61
-    int             i, sd, lastlen = 0, interfaces = 0;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    62
-    struct ifconf   ifc;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    63
-    struct ifreq   *ifrp = NULL;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    64
-    char           *buf = NULL;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    65
-
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    66
-    if (Name == 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    67
-        return 0;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    68
-    }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    69
-    if ((sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    70
-        return 0;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    71
-    }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    72
-
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    73
-    /*
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    74
-     * Cope with lots of interfaces and brokenness of ioctl SIOCGIFCONF
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    75
-     * on some platforms; see W. R. Stevens, ``Unix Network Programming
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    76
-     * Volume I'', p.435.  
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    77
-     */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    78
-
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    79
-    for (i = 8;; i += 8) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    80
-        buf = calloc(i, sizeof(struct ifreq));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    81
-        if (buf == NULL) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    82
-            close(sd);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    83
-            return 0;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    84
-        }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    85
-        ifc.ifc_len = i * sizeof(struct ifreq);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    86
-        ifc.ifc_buf = (caddr_t) buf;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    87
-
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    88
-        if (ioctl(sd, SIOCGIFCONF, (char *) &ifc) < 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    89
-            if (errno != EINVAL || lastlen != 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    90
-                /*
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    91
-                 * Something has gone genuinely wrong.  
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    92
-                 */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    93
-                free(buf);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    94
-                close(sd);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    95
-                return 0;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    96
-            }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    97
-            /*
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    98
-             * Otherwise, it could just be that the buffer is too small.  
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
    99
-             */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   100
-        } else {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   101
-            if (ifc.ifc_len == lastlen) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   102
-                /*
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   103
-                 * The length is the same as the last time; we're done.  
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   104
-                 */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   105
-                break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   106
-            }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   107
-            lastlen = ifc.ifc_len;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   108
-        }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   109
-        free(buf);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   110
-    }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   111
-
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   112
-    ifrp = ifc.ifc_req;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   113
-    interfaces = (ifc.ifc_len / sizeof(struct ifreq)) + 1;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   114
-
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   115
-    for (i = 1; i < interfaces; i++, ifrp++) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   116
-        if (strncmp(ifrp->ifr_name, Name, Len) == 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   117
-            free(buf);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   118
-            close(sd);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   119
-            return i;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   120
-        }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   121
-    }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   122
-
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   123
-    free(buf);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   124
-    close(sd);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   125
-    return 0;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   126
+    return (solaris2_if_nametoindex(Name, Len));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   127
 }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   128
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   129
 #endif                          /* solaris2 */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   130
Index: net-snmp/agent/mibgroup/kernel_sunos5.c
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   131
===================================================================
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   132
--- net-snmp/agent/mibgroup/kernel_sunos5.c	(revision 16735)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   133
+++ net-snmp/agent/mibgroup/kernel_sunos5.c	(revision 16736)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   134
@@ -169,11 +169,14 @@
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   135
 getif(mib2_ifEntry_t *ifbuf, size_t size, req_e req_type, mib2_ifEntry_t *resp,
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   136
       size_t *length, int (*comp)(void *, void *), void *arg);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   137
 static void 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   138
-set_if_info(mib2_ifEntry_t *ifp, unsigned index, char *name, uint64_t flags,int mtu);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   139
+set_if_info(mib2_ifEntry_t *ifp, unsigned index, char *name, uint64_t flags,
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   140
+            int mtu);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   141
 static int get_if_stats(mib2_ifEntry_t *ifp);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   142
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   143
-static int get_phys_address(mib2_ifEntry_t *ifp);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   144
-static int _dlpi_phys_address(int fd, char *paddr, int maxlen, int *paddrlen);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   145
+static int _dlpi_open(const char *devname);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   146
+static int _dlpi_get_phys_address(int fd, char *paddr, int maxlen,
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   147
+                                  int *paddrlen);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   148
+static int _dlpi_get_iftype(int fd, unsigned int *iftype);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   149
 static int _dlpi_attach(int fd, int ppa);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   150
 static int _dlpi_parse_devname(char *devname, int *ppap);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   151
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   152
@@ -1047,7 +1050,7 @@
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   153
       mib2_ifEntry_t *resp,  size_t *length, int (*comp)(void *, void *),
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   154
       void *arg)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   155
 {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   156
-    int             i, ret;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   157
+    int             fd, i, ret;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   158
     int             ifsd, ifsd6 = -1;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   159
     struct lifreq   lifreq, *lifrp;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   160
     mib2_ifEntry_t *ifp;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   161
@@ -1109,6 +1112,15 @@
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   162
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   163
         memset(ifp, 0, sizeof(mib2_ifEntry_t));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   164
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   165
+        if ((fd = _dlpi_open(ifnp->if_name)) != -1) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   166
+            /* Could open DLPI... now try to grab some info */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   167
+            (void) _dlpi_get_phys_address(fd, ifp->ifPhysAddress.o_bytes,
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   168
+                                sizeof(ifp->ifPhysAddress.o_bytes),
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   169
+                                &ifp->ifPhysAddress.o_length);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   170
+            (void) _dlpi_get_iftype(fd, &ifp->ifType);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   171
+            close(fd);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   172
+        }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   173
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   174
         set_if_info(ifp, ifnp->if_index, ifnp->if_name, if_flags, 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   175
                     lifrp->lifr_metric);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   176
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   177
@@ -1117,9 +1129,6 @@
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   178
             continue;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   179
         }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   180
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   181
-        /* try to obtain the physical address */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   182
-        (void) get_phys_address(ifp);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   183
-
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   184
         /*
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   185
          * Once we reach here we know that all went well, so move to
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   186
          * the next ifEntry. 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   187
@@ -1294,8 +1303,11 @@
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   188
 #endif /*defined(HAVE_IF_NAMEINDEX)&&defined(NETSNMP_INCLUDE_IFTABLE_REWRITES)*/
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   189
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   190
 static void
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   191
-set_if_info(mib2_ifEntry_t *ifp, unsigned index, char *name, uint64_t flags, int mtu)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   192
+set_if_info(mib2_ifEntry_t *ifp, unsigned index, char *name, uint64_t flags,
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   193
+            int mtu)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   194
 { 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   195
+    boolean_t havespeed = B_FALSE;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   196
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   197
     /*
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   198
      * Set basic information 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   199
      */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   200
@@ -1307,101 +1319,122 @@
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   201
     ifp->ifLastChange = 0;      /* Who knows ...  */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   202
     ifp->flags = flags;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   203
     ifp->ifMtu = mtu;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   204
+    ifp->ifSpeed = 0;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   205
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   206
-    /* make ifOperStatus depend on link status if available */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   207
-    if (ifp->ifAdminStatus == 1) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   208
-        int i_tmp;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   209
-        /* only UPed interfaces get correct link status - if any */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   210
-        if (getKstatInt(NULL, name,"link_up",&i_tmp) == 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   211
-            ifp->ifOperStatus = i_tmp ? 1 : 2;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   212
-        }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   213
-    }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   214
-
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   215
     /*
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   216
-     * Set link Type and Speed
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   217
+     * Get link speed
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   218
      */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   219
-    ifp->ifType = 1;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   220
-    ifp->ifSpeed = 0;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   221
-
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   222
-    if ((getKstatInt(NULL, name, "ifspeed", &ifp->ifSpeed) == 0) &&
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   223
-        (ifp->ifSpeed != 0)) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   224
+    if ((getKstatInt(NULL, name, "ifspeed", &ifp->ifSpeed) == 0)) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   225
         /*
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   226
          * check for SunOS patch with half implemented ifSpeed 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   227
          */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   228
-        if (ifp->ifSpeed < 10000) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   229
+        if (ifp->ifSpeed > 0 && ifp->ifSpeed < 10000) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   230
             ifp->ifSpeed *= 1000000;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   231
         }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   232
+	havespeed = B_TRUE;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   233
     } else if (getKstatInt(NULL, name, "ifSpeed", &ifp->ifSpeed) == 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   234
         /*
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   235
          * this is good 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   236
          */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   237
+	havespeed = B_TRUE;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   238
     }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   239
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   240
-    switch (name[0]) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   241
-    case 'a':          /* ath (802.11) */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   242
-        if (name[1] == 't' && name[2] == 'h')
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   243
-            ifp->ifType = 71;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   244
-        break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   245
-    case 'l':          /* le / lo / lane (ATM LAN Emulation) */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   246
-        if (name[1] == 'o') {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   247
-        if (!ifp->ifSpeed)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   248
-            ifp->ifSpeed = 127000000;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   249
-        ifp->ifType = 24;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   250
-        } else if (name[1] == 'e') {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   251
-        if (!ifp->ifSpeed)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   252
-            ifp->ifSpeed = 10000000;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   253
-        ifp->ifType = 6;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   254
-        } else if (name[1] == 'a') {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   255
-        if (!ifp->ifSpeed)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   256
-            ifp->ifSpeed = 155000000;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   257
-        ifp->ifType = 37;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   258
-        }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   259
-        break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   260
+    /* make ifOperStatus depend on link status if available */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   261
+    if (ifp->ifAdminStatus == 1) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   262
+        int i_tmp;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   263
+        /* only UPed interfaces get correct link status - if any */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   264
+        if (getKstatInt(NULL, name,"link_up",&i_tmp) == 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   265
+            ifp->ifOperStatus = i_tmp ? 1 : 2;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   266
+#ifdef IFF_FAILED
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   267
+        } else if (flags & IFF_FAILED) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   268
+            /*
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   269
+	     * If IPMP is used, and if the daemon marks the interface
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   270
+	     * as 'failed', then we know for sure something is amiss.
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   271
+             */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   272
+            ifp->ifOperStatus = 2;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   273
+#endif
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   274
+	} else if (havespeed == B_TRUE && ifp->ifSpeed == 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   275
+	    /* Heuristic */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   276
+	    ifp->ifOperStatus = 2;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   277
+	}
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   278
+    }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   279
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   280
-    case 'g':          /* ge (gigabit ethernet card)  */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   281
-    case 'c':          /* ce (Cassini Gigabit-Ethernet (PCI) */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   282
-        if (!ifp->ifSpeed)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   283
-        ifp->ifSpeed = 1000000000;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   284
-        ifp->ifType = 6;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   285
-        break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   286
-
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   287
-    case 'h':          /* hme (SBus card) */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   288
-    case 'e':          /* eri (PCI card) */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   289
-    case 'b':          /* be */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   290
-    case 'd':          /* dmfe -- found on netra X1 */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   291
-        if (!ifp->ifSpeed)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   292
-        ifp->ifSpeed = 100000000;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   293
-        ifp->ifType = 6;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   294
-        break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   295
-
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   296
-    case 'f':          /* fa (Fore ATM) */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   297
-        if (!ifp->ifSpeed)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   298
-        ifp->ifSpeed = 155000000;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   299
-        ifp->ifType = 37;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   300
-        break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   301
-
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   302
-    case 'q':         /* qe (QuadEther)/qa (Fore ATM)/qfe (QuadFastEther) */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   303
-        if (name[1] == 'a') {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   304
-        if (!ifp->ifSpeed)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   305
-            ifp->ifSpeed = 155000000;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   306
-        ifp->ifType = 37;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   307
-        } else if (name[1] == 'e') {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   308
+    /*
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   309
+     * Set link Type and Speed (if it could not be determined from kstat)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   310
+     */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   311
+    if (ifp->ifType == 24) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   312
+        ifp->ifSpeed = 127000000;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   313
+    } else if (ifp->ifType == 1 || ifp->ifType == 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   314
+        /*
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   315
+	 * Could not get the type from DLPI, so lets fall back to the hardcoded
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   316
+	 * values.
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   317
+	 */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   318
+        switch (name[0]) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   319
+        case 'a':          /* ath (802.11) */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   320
+            if (name[1] == 't' && name[2] == 'h')
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   321
+                ifp->ifType = 71;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   322
+            break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   323
+        case 'l':          /* le / lo / lane (ATM LAN Emulation) */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   324
+            if (name[1] == 'o') {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   325
             if (!ifp->ifSpeed)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   326
+                ifp->ifSpeed = 127000000;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   327
+            ifp->ifType = 24;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   328
+            } else if (name[1] == 'e') {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   329
+            if (!ifp->ifSpeed)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   330
                 ifp->ifSpeed = 10000000;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   331
             ifp->ifType = 6;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   332
-        } else if (name[1] == 'f') {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   333
+            } else if (name[1] == 'a') {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   334
             if (!ifp->ifSpeed)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   335
-                ifp->ifSpeed = 100000000;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   336
+                ifp->ifSpeed = 155000000;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   337
+            ifp->ifType = 37;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   338
+            }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   339
+            break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   340
+    
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   341
+        case 'g':          /* ge (gigabit ethernet card)  */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   342
+        case 'c':          /* ce (Cassini Gigabit-Ethernet (PCI) */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   343
+            if (!ifp->ifSpeed)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   344
+            ifp->ifSpeed = 1000000000;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   345
             ifp->ifType = 6;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   346
+            break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   347
+    
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   348
+        case 'h':          /* hme (SBus card) */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   349
+        case 'e':          /* eri (PCI card) */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   350
+        case 'b':          /* be */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   351
+        case 'd':          /* dmfe -- found on netra X1 */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   352
+            if (!ifp->ifSpeed)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   353
+            ifp->ifSpeed = 100000000;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   354
+            ifp->ifType = 6;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   355
+            break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   356
+    
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   357
+        case 'f':          /* fa (Fore ATM) */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   358
+            if (!ifp->ifSpeed)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   359
+            ifp->ifSpeed = 155000000;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   360
+            ifp->ifType = 37;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   361
+            break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   362
+    
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   363
+        case 'q':         /* qe (QuadEther)/qa (Fore ATM)/qfe (QuadFastEther) */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   364
+            if (name[1] == 'a') {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   365
+            if (!ifp->ifSpeed)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   366
+                ifp->ifSpeed = 155000000;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   367
+            ifp->ifType = 37;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   368
+            } else if (name[1] == 'e') {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   369
+                if (!ifp->ifSpeed)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   370
+                    ifp->ifSpeed = 10000000;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   371
+                ifp->ifType = 6;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   372
+            } else if (name[1] == 'f') {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   373
+                if (!ifp->ifSpeed)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   374
+                    ifp->ifSpeed = 100000000;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   375
+                ifp->ifType = 6;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   376
+            }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   377
+            break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   378
+    
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   379
+        case 'i':          /* ibd (Infiniband)/ip.tun (IP tunnel) */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   380
+            if (name[1] == 'b')
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   381
+                ifp->ifType = 199;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   382
+            else if (name[1] == 'p')
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   383
+                ifp->ifType = 131;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   384
+            break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   385
         }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   386
-        break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   387
-
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   388
-    case 'i':          /* ibd (Infiniband)/ip.tun (IP tunnel) */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   389
-        if (name[1] == 'b')
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   390
-            ifp->ifType = 199;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   391
-        else if (name[1] == 'p')
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   392
-            ifp->ifType = 131;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   393
-        break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   394
     }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   395
 }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   396
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   397
@@ -1491,68 +1524,69 @@
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   398
 }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   399
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   400
 /*
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   401
- * Obtain the physical address using DLPI. Pieces of this code is directly
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   402
- * taken from libdlpi, which unfortunately is not yet commonly available. 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   403
+ * Open a DLPI device.
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   404
+ *
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   405
+ * On success the file descriptor is returned.
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   406
+ * On error -1 is returned.
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   407
  */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   408
-
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   409
-static int 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   410
-get_phys_address(mib2_ifEntry_t *ifp)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   411
+static int
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   412
+_dlpi_open(const char *devname)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   413
 {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   414
-    char                  *devstr;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   415
-    int                   fd;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   416
-    int                   ppa = -1;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   417
-    int                   rc = -1;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   418
+    char *devstr;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   419
+    int fd = -1;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   420
+    int ppa = -1;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   421
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   422
-    DEBUGMSGTL(("kernel_sunos5", "get_phys_address called\n"));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   423
+    DEBUGMSGTL(("kernel_sunos5", "_dlpi_open called\n"));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   424
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   425
-    if ((devstr = malloc(5 + ifp->ifDescr.o_length + 1)) == NULL)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   426
+    if (devname == NULL)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   427
         return (-1);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   428
-    (void) sprintf(devstr, "/dev/%s", ifp->ifDescr.o_bytes);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   429
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   430
+    if ((devstr = malloc(5 + strlen(devname) + 1)) == NULL)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   431
+        return (-1);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   432
+    (void) sprintf(devstr, "/dev/%s", devname);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   433
     DEBUGMSGTL(("kernel_sunos5:dlpi", "devstr(%s)\n", devstr));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   434
     /*
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   435
      * First try opening the device using style 1, if the device does not
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   436
      * exist we try style 2. Modules will not be pushed, so something like
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   437
      * ip tunnels will not work. 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   438
      */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   439
-    if ((fd = open(devstr, O_RDWR | O_NONBLOCK)) != -1) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   440
-        DEBUGMSGTL(("kernel_sunos5:dlpi", "style1 open(%s)\n", devstr));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   441
-        rc = _dlpi_phys_address(fd, ifp->ifPhysAddress.o_bytes,
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   442
-                                sizeof(ifp->ifPhysAddress.o_bytes),
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   443
-                                &ifp->ifPhysAddress.o_length);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   444
-    } else if (_dlpi_parse_devname(devstr, &ppa) == 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   445
-        DEBUGMSGTL(("kernel_sunos5:dlpi", "style2 parse: %s, %d\n", 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   446
-                    devstr, ppa));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   447
-        /* try style 2 */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   448
-        if ((fd = open(devstr, O_RDWR | O_NONBLOCK)) != -1) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   449
-             DEBUGMSGTL(("kernel_sunos5:dlpi", "style2 open(%s)\n", devstr));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   450
-             if (_dlpi_attach(fd, ppa) == 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   451
-                 DEBUGMSGTL(("kernel_sunos5:dlpi", "attached\n"));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   452
-                 rc = _dlpi_phys_address(fd, ifp->ifPhysAddress.o_bytes,
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   453
-                                         sizeof(ifp->ifPhysAddress.o_bytes),
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   454
-                                         &ifp->ifPhysAddress.o_length);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   455
-             }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   456
-         } 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   457
-     }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   458
+   
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   459
+    DEBUGMSGTL(("kernel_sunos5:dlpi", "style1 open(%s)\n", devstr));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   460
+    if ((fd = open(devstr, O_RDWR | O_NONBLOCK)) < 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   461
+        DEBUGMSGTL(("kernel_sunos5:dlpi", "style1 open failed\n"));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   462
+        if (_dlpi_parse_devname(devstr, &ppa) == 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   463
+            DEBUGMSGTL(("kernel_sunos5:dlpi", "style2 parse: %s, %d\n", 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   464
+                       devstr, ppa));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   465
+            /* try style 2 */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   466
+            DEBUGMSGTL(("kernel_sunos5:dlpi", "style2 open(%s)\n", devstr));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   467
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   468
-     free(devstr);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   469
-     if (fd != -1)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   470
-         close(fd);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   471
+            if ((fd = open(devstr, O_RDWR | O_NONBLOCK)) != -1) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   472
+                if (_dlpi_attach(fd, ppa) == 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   473
+                    DEBUGMSGTL(("kernel_sunos5:dlpi", "attached\n"));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   474
+                } else {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   475
+                    DEBUGMSGTL(("kernel_sunos5:dlpi", "attached failed\n"));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   476
+                    close(fd);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   477
+                    fd = -1;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   478
+                }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   479
+            } else {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   480
+                DEBUGMSGTL(("kernel_sunos5:dlpi", "style2 open failed\n"));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   481
+            }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   482
+        } 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   483
+    } else {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   484
+        DEBUGMSGTL(("kernel_sunos5:dlpi", "style1 open succeeded\n"));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   485
+    }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   486
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   487
-     if (rc == 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   488
-         /* successful */        
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   489
-         DEBUGMSGTL(("kernel_sunos5:dlpi", "got phys addr using DLPI\n"));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   490
-         return (0);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   491
-     } else {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   492
-         DEBUGMSGTL(("kernel_sunos5:dlpi", "unable to get phys address\n"));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   493
-         return (-1);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   494
-     }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   495
+    /* clean up */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   496
+    free(devstr);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   497
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   498
+    return (fd);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   499
 }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   500
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   501
 /*
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   502
- *
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   503
+ * Obtain the physical address of the interface using DLPI
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   504
  */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   505
 static int
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   506
-_dlpi_phys_address(int fd, char *addr, int maxlen, int *addrlen)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   507
+_dlpi_get_phys_address(int fd, char *addr, int maxlen, int *addrlen)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   508
 {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   509
     dl_phys_addr_req_t  paddr_req;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   510
     union DL_primitives *dlp;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   511
@@ -1560,6 +1594,8 @@
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   512
     char                buf[MAX(DL_PHYS_ADDR_ACK_SIZE+64, DL_ERROR_ACK_SIZE)];
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   513
     int                 flag = 0;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   514
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   515
+    DEBUGMSGTL(("kernel_sunos5:dlpi", "_dlpi_get_phys_address\n"));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   516
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   517
     paddr_req.dl_primitive = DL_PHYS_ADDR_REQ;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   518
     paddr_req.dl_addr_type = DL_CURR_PHYS_ADDR;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   519
     ctlbuf.buf = (char *)&paddr_req;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   520
@@ -1570,7 +1606,7 @@
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   521
     ctlbuf.maxlen = sizeof(buf);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   522
     ctlbuf.len = 0;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   523
     ctlbuf.buf = buf;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   524
-    if (getmsg(fd, &ctlbuf, NULL, &flag) != 0)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   525
+    if (getmsg(fd, &ctlbuf, NULL, &flag) < 0)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   526
         return (-1);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   527
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   528
     if (ctlbuf.len < sizeof(uint32_t))
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   529
@@ -1580,6 +1616,7 @@
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   530
     case DL_PHYS_ADDR_ACK: {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   531
         dl_phys_addr_ack_t *phyp = (dl_phys_addr_ack_t *)buf;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   532
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   533
+        DEBUGMSGTL(("kernel_sunos5:dlpi", "got ACK\n"));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   534
         if (ctlbuf.len < DL_PHYS_ADDR_ACK_SIZE || phyp->dl_addr_length > maxlen)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   535
             return (-1); 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   536
         (void) memcpy(addr, buf+phyp->dl_addr_offset, phyp->dl_addr_length);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   537
@@ -1589,16 +1626,137 @@
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   538
     case DL_ERROR_ACK: {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   539
         dl_error_ack_t *errp = (dl_error_ack_t *)buf;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   540
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   541
+        DEBUGMSGTL(("kernel_sunos5:dlpi", "got ERROR ACK\n"));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   542
         if (ctlbuf.len < DL_ERROR_ACK_SIZE)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   543
             return (-1);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   544
         return (errp->dl_errno);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   545
     }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   546
     default:
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   547
+        DEBUGMSGTL(("kernel_sunos5:dlpi", "got type: %x\n", dlp->dl_primitive));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   548
         return (-1);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   549
     }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   550
 }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   551
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   552
+/*
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   553
+ * Query the interface about it's type.
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   554
+ */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   555
 static int
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   556
+_dlpi_get_iftype(int fd, unsigned int *iftype)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   557
+{
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   558
+    dl_info_req_t info_req;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   559
+    union DL_primitives *dlp;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   560
+    struct strbuf       ctlbuf;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   561
+    char                buf[MAX(DL_INFO_ACK_SIZE, DL_ERROR_ACK_SIZE)];
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   562
+    int                 flag = 0;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   563
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   564
+    DEBUGMSGTL(("kernel_sunos5:dlpi", "_dlpi_get_iftype\n"));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   565
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   566
+    info_req.dl_primitive = DL_INFO_REQ;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   567
+    ctlbuf.buf = (char *)&info_req;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   568
+    ctlbuf.len = DL_INFO_REQ_SIZE;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   569
+    if (putmsg(fd, &ctlbuf, NULL, 0) < 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   570
+        DEBUGMSGTL(("kernel_sunos5:dlpi", "putmsg failed: %d\nn", errno));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   571
+        return (-1);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   572
+    }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   573
+    
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   574
+    ctlbuf.maxlen = sizeof(buf);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   575
+    ctlbuf.len = 0;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   576
+    ctlbuf.buf = buf;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   577
+    if (getmsg(fd, &ctlbuf, NULL, &flag) < 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   578
+        DEBUGMSGTL(("kernel_sunos5:dlpi", "getmsg failed: %d\n", errno));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   579
+        return (-1);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   580
+    }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   581
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   582
+    if (ctlbuf.len < sizeof(uint32_t))
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   583
+        return (-1);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   584
+    dlp = (union DL_primitives *)buf;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   585
+    switch (dlp->dl_primitive) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   586
+    case DL_INFO_ACK: {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   587
+        dl_info_ack_t *info = (dl_info_ack_t *)buf;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   588
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   589
+        if (ctlbuf.len < DL_INFO_ACK_SIZE)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   590
+            return (-1); 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   591
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   592
+        DEBUGMSGTL(("kernel_sunos5:dlpi", "dl_mac_type: %x\n",
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   593
+	           info->dl_mac_type));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   594
+	switch (info->dl_mac_type) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   595
+	case DL_CSMACD:
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   596
+	case DL_ETHER:
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   597
+	case DL_ETH_CSMA:
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   598
+		*iftype = 6;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   599
+		break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   600
+	case DL_TPB:	/* Token Passing Bus */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   601
+		*iftype = 8;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   602
+		break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   603
+	case DL_TPR:	/* Token Passing Ring */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   604
+		*iftype = 9;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   605
+		break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   606
+	case DL_HDLC:
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   607
+		*iftype = 118;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   608
+		break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   609
+	case DL_FDDI:
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   610
+		*iftype = 15;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   611
+		break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   612
+	case DL_FC:	/* Fibre channel */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   613
+		*iftype = 56;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   614
+		break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   615
+	case DL_ATM:
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   616
+		*iftype = 37;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   617
+		break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   618
+	case DL_X25:
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   619
+	case DL_ISDN:
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   620
+		*iftype = 63;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   621
+		break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   622
+	case DL_HIPPI:
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   623
+		*iftype = 47;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   624
+		break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   625
+#ifdef DL_IB
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   626
+	case DL_IB:
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   627
+		*iftype = 199;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   628
+		break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   629
+#endif
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   630
+	case DL_FRAME:	/* Frame Relay */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   631
+		*iftype = 32;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   632
+		break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   633
+	case DL_LOOP:
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   634
+		*iftype = 24;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   635
+		break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   636
+#ifdef DL_WIFI
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   637
+	case DL_WIFI:
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   638
+		*iftype = 71;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   639
+		break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   640
+#endif
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   641
+#ifdef DL_IPV4	/* then IPv6 is also defined */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   642
+	case DL_IPV4:	/* IPv4 Tunnel */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   643
+	case DL_IPV6:	/* IPv6 Tunnel */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   644
+		*iftype = 131;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   645
+		break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   646
+#endif
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   647
+	default:
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   648
+		*iftype = 1;	/* Other */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   649
+		break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   650
+	}
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   651
+	
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   652
+        return (0);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   653
+    }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   654
+    case DL_ERROR_ACK: {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   655
+        dl_error_ack_t *errp = (dl_error_ack_t *)buf;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   656
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   657
+        DEBUGMSGTL(("kernel_sunos5:dlpi",
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   658
+                    "got DL_ERROR_ACK: dlpi %d, error %d\n", errp->dl_errno,
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   659
+                    errp->dl_unix_errno));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   660
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   661
+        if (ctlbuf.len < DL_ERROR_ACK_SIZE)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   662
+            return (-1);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   663
+        return (errp->dl_errno);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   664
+    }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   665
+    default:
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   666
+        DEBUGMSGTL(("kernel_sunos5:dlpi", "got type %x\n", dlp->dl_primitive));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   667
+        return (-1);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   668
+    }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   669
+}
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   670
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   671
+static int
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   672
 _dlpi_attach(int fd, int ppa)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   673
 {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   674
     dl_attach_req_t     attach_req;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   675
@@ -1680,8 +1838,83 @@
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   676
     } else {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   677
 	return 1;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   678
     }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   679
-}	
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   680
+}
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   681
 
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   682
+/*
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   683
+ * Try to determine the index of a particular interface. If mfd-rewrites is
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   684
+ * specified, then this function would only be used when the system does not
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   685
+ * have if_nametoindex(3SOCKET).
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   686
+ */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   687
+int
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   688
+solaris2_if_nametoindex(const char *Name, int Len)
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   689
+{
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   690
+    int             i, sd, lastlen = 0, interfaces = 0;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   691
+    struct ifconf   ifc;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   692
+    struct ifreq   *ifrp = NULL;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   693
+    char           *buf = NULL;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   694
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   695
+    if (Name == 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   696
+        return 0;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   697
+    }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   698
+    if ((sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   699
+        return 0;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   700
+    }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   701
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   702
+    /*
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   703
+     * Cope with lots of interfaces and brokenness of ioctl SIOCGIFCONF
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   704
+     * on some platforms; see W. R. Stevens, ``Unix Network Programming
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   705
+     * Volume I'', p.435.  
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   706
+     */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   707
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   708
+    for (i = 8;; i += 8) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   709
+        buf = calloc(i, sizeof(struct ifreq));
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   710
+        if (buf == NULL) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   711
+            close(sd);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   712
+            return 0;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   713
+        }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   714
+        ifc.ifc_len = i * sizeof(struct ifreq);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   715
+        ifc.ifc_buf = (caddr_t) buf;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   716
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   717
+        if (ioctl(sd, SIOCGIFCONF, (char *) &ifc) < 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   718
+            if (errno != EINVAL || lastlen != 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   719
+                /*
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   720
+                 * Something has gone genuinely wrong.  
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   721
+                 */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   722
+                free(buf);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   723
+                close(sd);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   724
+                return 0;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   725
+            }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   726
+            /*
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   727
+             * Otherwise, it could just be that the buffer is too small.  
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   728
+             */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   729
+        } else {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   730
+            if (ifc.ifc_len == lastlen) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   731
+                /*
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   732
+                 * The length is the same as the last time; we're done.  
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   733
+                 */
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   734
+                break;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   735
+            }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   736
+            lastlen = ifc.ifc_len;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   737
+        }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   738
+        free(buf);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   739
+    }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   740
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   741
+    ifrp = ifc.ifc_req;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   742
+    interfaces = (ifc.ifc_len / sizeof(struct ifreq)) + 1;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   743
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   744
+    for (i = 1; i < interfaces; i++, ifrp++) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   745
+        if (strncmp(ifrp->ifr_name, Name, Len) == 0) {
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   746
+            free(buf);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   747
+            close(sd);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   748
+            return i;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   749
+        }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   750
+    }
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   751
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   752
+    free(buf);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   753
+    close(sd);
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   754
+    return 0;
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   755
+}
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   756
+
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   757
 #ifdef _STDC_COMPAT
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   758
 #ifdef __cplusplus
ee0fb1eabcbf 7041085 move net-snmp to userland
gowtham thommandra - Sun Microsystems - Bangalore India <Gowtham.Thommandra@Sun.COM>
parents:
diff changeset
   759
 }