From: SourceForge.net <no...@so...> - 2006-02-27 12:50:29
|
Feature Requests item #1439599, was opened at 2006-02-27 14:50 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=362694&aid=1439599&group_id=12694 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None Priority: 5 Submitted By: OferMotorola (grr1967) Assigned to: Nobody/Anonymous (nobody) Summary: Providing specific MAC address for engineIDType 3 Initial Comment: The snmpd.conf token engineIDType 3 along with engineIDNic <eth interface> allows the engineID to be taken from the MAC address of a given ethernet interface. There are cases that you want to provide a specific MAC address instead of dynamically loading it from an ethernet interface. One solution to this issue can be to allow the combination of engineIDType 3 with engineID, so in snmpd.conf it will be written as: engineIDType 3 engineID 001122334455 The modifications to the code in this case would be: 1) Adding an "internal" ENGINEID_TYPE to snmpv3.h #define ENGINEID_TYPE_MACADDR_HEX 127 2) In snmpv3.c change: if (NULL != text) { if (engineIDType == ENGINEID_TYPE_MACADDR) engineIDType = localEngineIDType = ENGINEID_TYPE_MACADDR_HEX; else engineIDType = localEngineIDType = ENGINEID_TYPE_TEXT; } to allow a combination of MACADDR + text: if (NULL != text) { if (engineIDType == ENGINEID_TYPE_MACADDR) engineIDType = localEngineIDType = ENGINEID_TYPE_MACADDR_HEX; else engineIDType = localEngineIDType = ENGINEID_TYPE_TEXT; } 3) take into account the length (snmpv3.c) case ENGINEID_TYPE_MACADDR_HEX: /* MAC address given as hex */ len += 6; /* + 6 bytes for MAC address */ break; 4) And finally do the conversion from hex to binary and append to the engineID buffer (also in snmpv3.c) case ENGINEID_TYPE_MACADDR_HEX: { int x; bufp[4] = ENGINEID_TYPE_MACADDR; memset(&bufp[5], 0, 6); /* * use default NIC if none provided */ if (NULL != text) { size_t out_len = 0; size_t buf_len = 6; u_char *mac_addr = (u_char *)malloc (buf_len); x = netsnmp_hex_to_binary(&mac_addr, &buf_len, &out_len, 0, /*do not allow realloc*/ text, NULL /*no delim*/); if (x == 0) snmp_log(LOG_ERR, "Invalid MAC address specified '%s'\n", text); else if (buf_len != out_len) snmp_log(LOG_ERR, "MAC address '% s' is of wrong length\n", text); else memcpy(&bufp[5], mac_addr, buf_len); free(mac_addr); Another possible solution would be to add a new token, like engineIDMac to provide the MAC and thus not using the engineID which might raise backword compatibility issues. } else { snmp_log (LOG_ERR, "Missing engineID token to specify MAC address\n"); } } break; ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=362694&aid=1439599&group_id=12694 |