REQ libXfont
[unleashed-userland.git] / components / net-snmp / patches / 038.16032482.kernel_sunos5.patch
blob50230aa7044f51d0dee2ddbb7ec7690e6ed50a78
1 --- net-snmp-5.4.1.2/agent/Makefile.in.~1~ 2014-03-13 23:54:04.717800170 +0400
2 +++ net-snmp-5.4.1.2/agent/Makefile.in 2014-03-13 23:56:36.202934491 +0400
3 @@ -121,6 +121,8 @@
4 LOBJS = $(LLIBAGENTOBJS) $(LAGENTOBJS) mib_modules.lo auto_nlist.lo
6 LIB_LD_ADD_AGENT =-lnetsnmp -lnetsnmphelpers
8 +LIB_LD_ADD_MIBS =-ldladm
10 LIB_LD_ADD_PATH_MIBS =-Lhelpers -L../snmplib
12 @@ -150,7 +152,7 @@
13 $(RANLIB) $(AGENTLIB)
15 libnetsnmpmibs.$(LIB_EXTENSION)$(LIB_VERSION): ${LMIBOBJS} $(HELPERLIB) $(AGENTLIB) $(USELIBS)
16 - $(LIB_LD_CMD) $(MIBLIB) ${LMIBOBJS} $(HELPERLIB) $(AGENTLIB) $(USELIBS) ${LMIBLIBS} $(LDFLAGS) $(LIB_LD_LIBS)
17 + $(LIB_LD_CMD) $(MIBLIB) ${LMIBOBJS} $(HELPERLIB) $(AGENTLIB) $(USELIBS) ${LMIBLIBS} $(LDFLAGS) $(LIB_LD_LIBS) $(LIB_LD_ADD_MIBS)
18 $(RANLIB) $(MIBLIB)
20 agentlib: $(AGENTLIB)
21 --- net-snmp-5.4.1.old/agent/mibgroup/kernel_sunos5.c 2014-02-25 06:04:49.253524010 -0500
22 +++ net-snmp-5.4.1/agent/mibgroup/kernel_sunos5.c 2014-02-26 05:32:10.697219080 -0500
23 @@ -60,6 +60,8 @@
24 #include <net/if.h>
25 #include <netinet/in.h>
27 +#include <libdladm.h>
28 +#include <libdllink.h>
29 /*-
30 * Includes of local application header files
32 @@ -172,7 +174,7 @@
33 set_if_info(mib2_ifEntry_t *ifp, unsigned index, char *name, uint64_t flags,
34 boolean_t flags_unknown, int mtu);
35 static int get_if_stats(mib2_ifEntry_t *ifp);
37 +static int link_to_phydev(char *link, char *phy_devname);
38 #if defined(HAVE_IF_NAMEINDEX) && defined(NETSNMP_INCLUDE_IFTABLE_REWRITES)
39 static int _dlpi_open(const char *devname);
40 static int _dlpi_get_phys_address(int fd, char *paddr, int maxlen,
41 @@ -1724,11 +1726,155 @@
43 #endif /*defined(HAVE_IF_NAMEINDEX)&&defined(NETSNMP_INCLUDE_IFTABLE_REWRITES)*/
45 +int link_to_phydev(char *link, char *phy_devname)
47 + char *key = NULL;
48 + datalink_id_t linkid;
49 + dladm_phys_attr_t dpa;
50 + dladm_handle_t handle;
52 + if (dladm_open(&handle) != DLADM_STATUS_OK) {
53 + DEBUGMSGTL(("kernel_sunos5","dladm_open failed "
54 + "with errno=%d\n",errno));
55 + return (-1);
56 + }
58 + if (dladm_name2info(handle, link, &linkid, NULL, NULL, NULL) !=
59 + DLADM_STATUS_OK) {
60 + DEBUGMSGTL(("kernel_sunos5","dladm_name2info failed "
61 + "with errno=%d\n",errno));
62 + dladm_close(handle);
63 + return (-1);
64 + }
66 + /*
67 + * Get the device name of the link, which will be used as the door
68 + * file name used to communicate with the driver.
69 + */
70 + if (dladm_phys_info(handle, linkid, &dpa, DLADM_OPT_ACTIVE) !=
71 + DLADM_STATUS_OK) {
72 + DEBUGMSGTL(("kernel_sunos5","dladm_phys_info failed "
73 + "with errno=%d\n",errno));
74 + dladm_close(handle);
75 + return (-1);
76 + }
78 + if(dpa.dp_dev == NULL) {
79 + DEBUGMSGTL(("kernel_sunos5","device name from "
80 + "dladm_phys_info = NULL\n"));
81 + dladm_close(handle);
82 + return -1;
84 + }
85 + strcpy(phy_devname, dpa.dp_dev);
86 + dladm_close(handle);
88 + return 0;
92 +static int getKstatIntInstance(const char *classname, int instance,
93 + const char *statname, const char *varname,
94 + int *value)
96 + kstat_ctl_t *ksc;
97 + kstat_t *ks;
98 + kid_t kid;
99 + kstat_named_t *named;
101 + int ret = -1; /* fail unless ... */
102 + int lookup_stat = 0;
104 + DEBUGMSGTL(("kernel_sunos5","\n Inside getKstatIntInstance: variable = %s",
105 + varname));
107 + if (kstat_fd == 0) {
108 + kstat_fd = kstat_open();
109 + if (kstat_fd == 0) {
110 + snmp_log_perror("kstat_open");
113 + if ((ksc = kstat_fd) == NULL) {
114 + goto Return;
117 + ks = kstat_lookup(ksc, classname, instance, statname);
118 + if (ks == NULL) {
119 + DEBUGMSGTL(("kernel_sunos5","\nclass %s, stat %s not found\n",
120 + classname ? classname : "NULL",
121 + statname ? statname : "NULL"));
122 + goto Return;
125 + kid = kstat_read(ksc, ks, NULL);
126 + if (kid == -1) {
127 + DEBUGMSGTL(("kernel_sunos5","\ncannot read class %s stats %s\n",
128 + classname ? classname : "NULL",
129 + statname ? statname : "NULL"));
130 + goto Return;
133 + named = kstat_data_lookup(ks, varname);
134 + if (named == NULL) {
135 + DEBUGMSGTL(("kernel_sunos5","\nno var %s for class %s stat %s\n",
136 + varname, classname ? classname : "NULL",
137 + statname ? statname : "NULL"));
138 + goto Return;
140 + ret = 0; /* maybe successful */
141 + switch (named->data_type) {
142 +#ifdef KSTAT_DATA_INT32 /* Solaris 2.6 and up */
143 + case KSTAT_DATA_INT32:
144 + DEBUGMSGTL(("kernel_sunos5"," value: %d\n", named->value.i32));
145 + *value = named->value.i32;
146 + break;
147 + case KSTAT_DATA_UINT32:
148 + DEBUGMSGTL(("kernel_sunos5"," value: %u\n", named->value.ui32));
149 + *value = named->value.ui32;
150 + break;
151 + case KSTAT_DATA_INT64:
152 + DEBUGMSGTL(("kernel_sunos5"," value: %ld\n", named->value.i64));
153 + *value = named->value.i64;
154 + break;
155 + case KSTAT_DATA_UINT64:
156 + DEBUGMSGTL(("kernel_sunos5"," value: %llu\n", named->value.ui64));
157 + *value = named->value.ui64;
158 + break;
159 +#else
160 + case KSTAT_DATA_LONG:
161 + DEBUGMSGTL(("kernel_sunos5"," value: %ld\n", named->value.l));
162 + *value = named->value.l;
163 + break;
164 + case KSTAT_DATA_ULONG:
165 + DEBUGMSGTL(("kernel_sunos5"," value: %lu\n", named->value.ul));
166 + *value = named->value.ul;
167 + break;
168 + case KSTAT_DATA_LONGLONG:
169 + DEBUGMSGTL(("kernel_sunos5"," value: %lld\n", (long) named->value.ll));
170 + *value = (long)named->value.ll;
171 + break;
172 + case KSTAT_DATA_ULONGLONG:
173 + DEBUGMSGTL(("kernel_sunos5"," value: %llu\n",
174 + (unsigned long) named->value.ull));
175 + *value = (unsigned long)named->value.ull;
176 + break;
177 +#endif
178 + default:
179 + ret = -1; /* fail */
180 + break;
182 + Return:
183 + return ret;
186 static void
187 set_if_info(mib2_ifEntry_t *ifp, unsigned index, char *name, uint64_t flags,
188 boolean_t flags_unknown, int mtu)
190 boolean_t havespeed = B_FALSE;
191 + char phydevname[100];
192 + char devbasename[100];
193 + int instance = -1;
196 * Set basic information
197 @@ -1770,6 +1916,16 @@
198 /* only UPed interfaces get correct link status - if any */
199 if (getKstatInt(NULL, name,"link_up",&i_tmp) == 0) {
200 ifp->ifOperStatus = i_tmp ? 1 : 2;
201 + } else if(link_to_phydev(name, phydevname) == 0) {
202 + strcpy(devbasename, phydevname);
203 + DEBUGMSGTL(("kernel_sunos5","phydevname = %s\n", phydevname));
204 + _dlpi_parse_devname(devbasename, &instance);
205 + DEBUGMSGTL(("kernel_sunos5","devbasename = %s, "
206 + "instance= %d\n", devbasename, instance));
207 + if(getKstatIntInstance(devbasename, instance, "phys",
208 + "link_up", &i_tmp) == 0) {
209 + ifp->ifOperStatus = i_tmp ? 1 : 2;
210 + }
211 #ifdef IFF_FAILED
212 } else if (flags & IFF_FAILED) {