#include "thread.h"
#include "linklist.h"
#include "command.h"
-#include "version.h"
+#include <lib/version.h>
#include "memory.h"
#include "sockunion.h"
#include "smux.h"
struct list *treelist;
/* SMUX oid. */
-oid *smux_oid;
+oid *smux_oid = NULL;
size_t smux_oid_len;
-/* SMUX default oid. */
-oid *smux_default_oid;
-size_t smux_default_oid_len;
-
/* SMUX password. */
-char *smux_passwd;
-char *smux_default_passwd = "";
+char *smux_passwd = NULL;
/* SMUX read threads. */
struct thread *smux_read_thread;
}
\f
void
-smux_oid_dump (char *prefix, oid *oid, size_t oid_len)
+smux_oid_dump (const char *prefix, oid *oid, size_t oid_len)
{
- int i;
+ unsigned int i;
int first = 1;
char buf[MAX_OID_LEN * 3];
sprintf (buf + strlen (buf), "%s%d", first ? "" : ".", (int) oid[i]);
first = 0;
}
- zlog_info ("%s: %s", prefix, buf);
+ zlog_debug ("%s: %s", prefix, buf);
}
int
memset (&serv, 0, sizeof (struct sockaddr_in));
serv.sin_family = AF_INET;
-#ifdef HAVE_SIN_LEN
+#ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
serv.sin_len = sizeof (struct sockaddr_in);
-#endif /* HAVE_SIN_LEN */
+#endif /* HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */
sp = getservbyname ("smux", "tcp");
if (sp != NULL)
int ret;
u_char buf[BUFSIZ];
u_char *ptr, *h1, *h1e, *h2, *h2e;
- int len, length;
+ size_t len, length;
ptr = buf;
len = BUFSIZ;
if (debug_smux)
{
- zlog_info ("SMUX GETRSP send");
- zlog_info ("SMUX GETRSP reqid: %ld", reqid);
+ zlog_debug ("SMUX GETRSP send");
+ zlog_debug ("SMUX GETRSP reqid: %ld", reqid);
}
h1 = ptr;
&reqid, sizeof (reqid));
if (debug_smux)
- zlog_info ("SMUX GETRSP errstat: %ld", errstat);
+ zlog_debug ("SMUX GETRSP errstat: %ld", errstat);
ptr = asn_build_int (ptr, &len,
(u_char) (ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
&errstat, sizeof (errstat));
if (debug_smux)
- zlog_info ("SMUX GETRSP errindex: %ld", errindex);
+ zlog_debug ("SMUX GETRSP errindex: %ld", errindex);
ptr = asn_build_int (ptr, &len,
(u_char) (ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
asn_build_sequence(h1,&length,(u_char)SMUX_GETRSP,ptr-h1e);
if (debug_smux)
- zlog_info ("SMUX getresp send: %d", ptr - buf);
+ zlog_debug ("SMUX getresp send: %ld", (ptr - buf));
ret = send (smux_sock, buf, (ptr - buf), 0);
}
char *
-smux_var (char *ptr, int len, oid objid[], size_t *objid_len,
+smux_var (char *ptr, size_t len, oid objid[], size_t *objid_len,
size_t *var_val_len,
u_char *var_val_type,
void **var_value)
u_char *val;
if (debug_smux)
- zlog_info ("SMUX var parse: len %d", len);
+ zlog_debug ("SMUX var parse: len %ld", len);
/* Parse header. */
ptr = asn_parse_header (ptr, &len, &type);
if (debug_smux)
{
- zlog_info ("SMUX var parse: type %d len %d", type, len);
- zlog_info ("SMUX var parse: type must be %d",
+ zlog_debug ("SMUX var parse: type %d len %ld", type, len);
+ zlog_debug ("SMUX var parse: type must be %d",
(ASN_SEQUENCE | ASN_CONSTRUCTOR));
}
smux_oid_dump ("Request OID", objid, *objid_len);
if (debug_smux)
- zlog_info ("SMUX val_type: %d", val_type);
+ zlog_debug ("SMUX val_type: %d", val_type);
/* Check request value type. */
if (debug_smux)
case ASN_NULL:
/* In case of SMUX_GET or SMUX_GET_NEXT val_type is set to
ASN_NULL. */
- zlog_info ("ASN_NULL");
+ zlog_debug ("ASN_NULL");
break;
case ASN_INTEGER:
- zlog_info ("ASN_INTEGER");
+ zlog_debug ("ASN_INTEGER");
break;
case ASN_COUNTER:
case ASN_GAUGE:
case ASN_TIMETICKS:
case ASN_UINTEGER:
- zlog_info ("ASN_COUNTER");
+ zlog_debug ("ASN_COUNTER");
break;
case ASN_COUNTER64:
- zlog_info ("ASN_COUNTER64");
+ zlog_debug ("ASN_COUNTER64");
break;
case ASN_IPADDRESS:
- zlog_info ("ASN_IPADDRESS");
+ zlog_debug ("ASN_IPADDRESS");
break;
case ASN_OCTET_STR:
- zlog_info ("ASN_OCTET_STR");
+ zlog_debug ("ASN_OCTET_STR");
break;
case ASN_OPAQUE:
case ASN_NSAP:
case ASN_OBJECT_ID:
- zlog_info ("ASN_OPAQUE");
+ zlog_debug ("ASN_OPAQUE");
break;
case SNMP_NOSUCHOBJECT:
- zlog_info ("SNMP_NOSUCHOBJECT");
+ zlog_debug ("SNMP_NOSUCHOBJECT");
break;
case SNMP_NOSUCHINSTANCE:
- zlog_info ("SNMP_NOSUCHINSTANCE");
+ zlog_debug ("SNMP_NOSUCHINSTANCE");
break;
case SNMP_ENDOFMIBVIEW:
- zlog_info ("SNMP_ENDOFMIBVIEW");
+ zlog_debug ("SNMP_ENDOFMIBVIEW");
break;
case ASN_BIT_STR:
- zlog_info ("ASN_BIT_STR");
+ zlog_debug ("ASN_BIT_STR");
break;
default:
- zlog_info ("Unknown type");
+ zlog_debug ("Unknown type");
break;
}
return ptr;
struct variable *v;
int subresult;
oid *suffix;
- int suffix_len;
+ size_t suffix_len;
int result;
u_char *statP = NULL;
WriteMethod *write_method = NULL;
- struct listnode *node;
+ struct listnode *node, *nnode;
/* Check */
- for (node = treelist->head; node; node = node->next)
+ for (ALL_LIST_ELEMENTS (treelist, node, nnode, subtree))
{
- subtree = node->data;
subresult = oid_compare_part (reqid, *reqid_len,
subtree->name, subtree->name_len);
if (result == 0)
{
if (debug_smux)
- zlog_info ("SMUX function call index is %d", v->magic);
+ zlog_debug ("SMUX function call index is %d", v->magic);
statP = (*v->findVar) (v, suffix, &suffix_len, 1,
&val_len, &write_method);
struct variable *v;
int subresult;
oid *suffix;
- int suffix_len;
+ size_t suffix_len;
int result;
WriteMethod *write_method=NULL;
- struct listnode *node;
+ struct listnode *node, *nnode;
/* Check */
- for (node = treelist->head; node; node = node->next)
+ for (ALL_LIST_ELEMENTS (treelist, node, nnode,subtree))
{
- subtree = node->data;
subresult = oid_compare_part (reqid, *reqid_len,
subtree->name, subtree->name_len);
if (result == 0)
{
if (debug_smux)
- zlog_info ("SMUX function call index is %d", v->magic);
+ zlog_debug ("SMUX function call index is %d", v->magic);
*val = (*v->findVar) (v, suffix, &suffix_len, exact,
val_len, &write_method);
struct variable *v;
int subresult;
oid *suffix;
- int suffix_len;
+ size_t suffix_len;
int result;
WriteMethod *write_method=NULL;
- struct listnode *node;
+ struct listnode *node, *nnode;
/* Save incoming request. */
savelen = *reqid_len;
/* Check */
- for (node = treelist->head; node; node = node->next)
+ for (ALL_LIST_ELEMENTS (treelist, node, nnode, subtree))
{
- subtree = node->data;
subresult = oid_compare_part (reqid, *reqid_len,
subtree->name, subtree->name_len);
if (result <= 0)
{
if (debug_smux)
- zlog_info ("SMUX function call index is %d", v->magic);
+ zlog_debug ("SMUX function call index is %d", v->magic);
if(result<0)
{
oid_copy(suffix, v->name, v->namelen);
ptr = asn_parse_int (ptr, len, &type, reqid, sizeof (*reqid));
if (debug_smux)
- zlog_info ("SMUX GET reqid: %d len: %d", (int) *reqid, (int) *len);
+ zlog_debug ("SMUX GET reqid: %d len: %d", (int) *reqid, (int) *len);
/* Error status. */
ptr = asn_parse_int (ptr, len, &type, &errstat, sizeof (errstat));
if (debug_smux)
- zlog_info ("SMUX GET errstat %ld len: %d", errstat, *len);
+ zlog_debug ("SMUX GET errstat %ld len: %ld", errstat, *len);
/* Error index. */
ptr = asn_parse_int (ptr, len, &type, &errindex, sizeof (errindex));
if (debug_smux)
- zlog_info ("SMUX GET errindex %ld len: %d", errindex, *len);
+ zlog_debug ("SMUX GET errindex %ld len: %ld", errindex, *len);
return ptr;
}
int ret;
if (debug_smux)
- zlog_info ("SMUX SET(%s) message parse: len %d",
+ zlog_debug ("SMUX SET(%s) message parse: len %ld",
(RESERVE1 == action) ? "RESERVE1" : ((FREE == action) ? "FREE" : "COMMIT"),
len);
ret = smux_set (oid, &oid_len, val_type, val, val_len, action);
if (debug_smux)
- zlog_info ("SMUX SET ret %d", ret);
+ zlog_debug ("SMUX SET ret %d", ret);
/* Return result. */
if (RESERVE1 == action)
int ret;
if (debug_smux)
- zlog_info ("SMUX GET message parse: len %d", len);
+ zlog_debug ("SMUX GET message parse: len %ld", len);
/* Parse GET message header. */
ptr = smux_parse_get_header (ptr, &len, &reqid);
/* SMUX_RRSP message. */
void
-smux_parse_rrsp (char *ptr, int len)
+smux_parse_rrsp (char *ptr, size_t len)
{
char val;
long errstat;
ptr = asn_parse_int (ptr, &len, &val, &errstat, sizeof (errstat));
if (debug_smux)
- zlog_info ("SMUX_RRSP value: %d errstat: %ld", val, errstat);
+ zlog_debug ("SMUX_RRSP value: %d errstat: %ld", val, errstat);
}
/* Parse SMUX message. */
int
-smux_parse (char *ptr, int len)
+smux_parse (char *ptr, size_t len)
{
/* This buffer we'll use for SOUT message. We could allocate it with
malloc and save only static pointer/lenght, but IMHO static
ptr = asn_parse_header (ptr, &len, &type);
if (debug_smux)
- zlog_info ("SMUX message received type: %d rest len: %d", type, len);
+ zlog_debug ("SMUX message received type: %d rest len: %ld", type, len);
switch (type)
{
case SMUX_SOUT:
/* SMUX_SOUT message is now valied for us. */
if (debug_smux)
- zlog_info ("SMUX_SOUT(%s)", rollback ? "rollback" : "commit");
+ zlog_debug ("SMUX_SOUT(%s)", rollback ? "rollback" : "commit");
if (sout_save_len > 0)
{
case SMUX_CLOSE:
/* Close SMUX connection. */
if (debug_smux)
- zlog_info ("SMUX_CLOSE");
+ zlog_debug ("SMUX_CLOSE");
smux_parse_close (ptr, len);
return -1;
break;
case SMUX_RRSP:
/* This is response for register message. */
if (debug_smux)
- zlog_info ("SMUX_RRSP");
+ zlog_debug ("SMUX_RRSP");
smux_parse_rrsp (ptr, len);
break;
case SMUX_GET:
/* Exact request for object id. */
if (debug_smux)
- zlog_info ("SMUX_GET");
+ zlog_debug ("SMUX_GET");
smux_parse_get (ptr, len, 1);
break;
case SMUX_GETNEXT:
/* Next request for object id. */
if (debug_smux)
- zlog_info ("SMUX_GETNEXT");
+ zlog_debug ("SMUX_GETNEXT");
smux_parse_get (ptr, len, 0);
break;
case SMUX_SET:
/* SMUX_SET is supported with some limitations. */
if (debug_smux)
- zlog_info ("SMUX_SET");
+ zlog_debug ("SMUX_SET");
/* save the data for future SMUX_SOUT */
memcpy (sout_save_buff, ptr, len);
smux_read_thread = NULL;
if (debug_smux)
- zlog_info ("SMUX read start");
+ zlog_debug ("SMUX read start");
/* Read message from SMUX socket. */
len = recv (sock, buf, SMUXMAXPKTSIZE, 0);
if (len < 0)
{
- zlog_warn ("Can't read all SMUX packet: %s", strerror (errno));
+ zlog_warn ("Can't read all SMUX packet: %s", safe_strerror (errno));
close (sock);
smux_sock = -1;
smux_event (SMUX_CONNECT, 0);
}
if (debug_smux)
- zlog_info ("SMUX read len: %d", len);
+ zlog_debug ("SMUX read len: %d", len);
/* Parse the message. */
ret = smux_parse (buf, len);
{
u_char buf[BUFSIZ];
u_char *ptr;
- int len;
+ size_t len;
u_long version;
- u_char progname[] = "zebra-" QUAGGA_VERSION;
+ u_char progname[] = QUAGGA_PROGNAME "-" QUAGGA_VERSION;
if (debug_smux)
{
smux_oid_dump ("SMUX open oid", smux_oid, smux_oid_len);
- zlog_info ("SMUX open progname: %s", progname);
- zlog_info ("SMUX open password: %s", smux_passwd);
+ zlog_debug ("SMUX open progname: %s", progname);
+ zlog_debug ("SMUX open password: %s", smux_passwd);
}
ptr = buf;
version = 0;
ptr = asn_build_int (ptr, &len,
(u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
- &version, sizeof (u_long));
+ &version, sizeof (version));
/* SMUX connection oid. */
ptr = asn_build_objid (ptr, &len,
struct trap_object *trapobj, size_t trapobjlen,
unsigned int tick, u_char sptrap)
{
- int i;
+ unsigned int i;
u_char buf[BUFSIZ];
u_char *ptr;
- int len, length;
+ size_t len, length;
struct in_addr addr;
unsigned long val;
u_char *h1, *h1e;
ptr = asn_build_string (ptr, &len,
(u_char)
(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_IPADDRESS),
- (u_char *)&addr, sizeof (struct in_addr));
+ (u_char *)&addr, sizeof (addr));
/* Generic trap integer. */
val = SNMP_TRAP_ENTERPRISESPECIFIC;
ptr = asn_build_int (ptr, &len,
(u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
- &val, sizeof (int));
+ &val, sizeof (val));
/* Specific trap integer. */
val = sptrap;
ptr = asn_build_int (ptr, &len,
(u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
- &val, sizeof (int));
+ &val, sizeof (val));
/* Timeticks timestamp. */
val = 0;
ptr = asn_build_unsigned_int (ptr, &len,
(u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_TIMETICKS),
- &val, sizeof (int));
+ &val, sizeof (val));
/* Variables. */
h1 = ptr;
u_char val_type;
/* Make OID. */
- oid_copy (oid, name, namelen);
- oid_copy (oid + namelen, trapobj[i].name, trapobj[i].namelen);
- oid_copy (oid + namelen + trapobj[i].namelen, iname, inamelen);
- oid_len = namelen + trapobj[i].namelen + inamelen;
+ if (trapobj[i].namelen > 0)
+ {
+ oid_copy (oid, name, namelen);
+ oid_copy (oid + namelen, trapobj[i].name, trapobj[i].namelen);
+ oid_copy (oid + namelen + trapobj[i].namelen, iname, inamelen);
+ oid_len = namelen + trapobj[i].namelen + inamelen;
+ }
+ else
+ {
+ oid_copy (oid, name, namelen);
+ oid_copy (oid + namelen, trapobj[i].name, trapobj[i].namelen * (-1));
+ oid_len = namelen + trapobj[i].namelen * (-1) ;
+ }
- if (debug_smux)
- smux_oid_dump ("Trap", oid, oid_len);
+ if (debug_smux)
+ {
+ smux_oid_dump ("Trap", name, namelen);
+ if (trapobj[i].namelen < 0)
+ smux_oid_dump ("Trap",
+ trapobj[i].name, (- 1) * (trapobj[i].namelen));
+ else
+ {
+ smux_oid_dump ("Trap", trapobj[i].name, (trapobj[i].namelen));
+ smux_oid_dump ("Trap", iname, inamelen);
+ }
+ smux_oid_dump ("Trap", oid, oid_len);
+ zlog_info ("BUFSIZ: %d // oid_len: %lu", BUFSIZ, (u_long)oid_len);
+ }
ret = smux_get (oid, &oid_len, 1, &val_type, &val, &val_len);
if (debug_smux)
- zlog_info ("smux_get result %d", ret);
+ zlog_debug ("smux_get result %d", ret);
if (ret == 0)
ptr = snmp_build_var_op (ptr, oid, &oid_len,
{
u_char buf[BUFSIZ];
u_char *ptr;
- int len, ret;
+ int ret;
+ size_t len;
long priority;
long operation;
struct subtree *subtree;
- struct listnode *node;
+ struct listnode *node, *nnode;
ret = 0;
- for (node = treelist->head; node; node = node->next)
+ for (ALL_LIST_ELEMENTS (treelist, node, nnode, subtree))
{
ptr = buf;
len = BUFSIZ;
- subtree = node->data;
-
/* SMUX RReq Header. */
ptr = asn_build_header (ptr, &len, (u_char) SMUX_RREQ, 0);
priority = -1;
ptr = asn_build_int (ptr, &len,
(u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
- &priority, sizeof (u_long));
+ &priority, sizeof (priority));
/* Operation. */
operation = 2; /* Register R/W */
ptr = asn_build_int (ptr, &len,
(u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
- &operation, sizeof (u_long));
+ &operation, sizeof (operation));
if (debug_smux)
{
smux_oid_dump ("SMUX register oid", subtree->name, subtree->name_len);
- zlog_info ("SMUX register priority: %ld", priority);
- zlog_info ("SMUX register operation: %ld", operation);
+ zlog_debug ("SMUX register priority: %ld", priority);
+ zlog_debug ("SMUX register operation: %ld", operation);
}
len = BUFSIZ;
int ret;
if (debug_smux)
- zlog_info ("SMUX connect try %d", fail + 1);
+ zlog_debug ("SMUX connect try %d", fail + 1);
/* Clear thread poner of myself. */
smux_connect_thread = NULL;
ret = smux_open (smux_sock);
if (ret < 0)
{
- zlog_warn ("SMUX open message send failed: %s", strerror (errno));
+ zlog_warn ("SMUX open message send failed: %s", safe_strerror (errno));
close (smux_sock);
smux_sock = -1;
if (++fail < SMUX_MAX_FAILURE)
ret = smux_register (smux_sock);
if (ret < 0)
{
- zlog_warn ("SMUX register message send failed: %s", strerror (errno));
+ zlog_warn ("SMUX register message send failed: %s", safe_strerror (errno));
close (smux_sock);
smux_sock = -1;
if (++fail < SMUX_MAX_FAILURE)
}
\f
int
-smux_str2oid (char *str, oid *oid, size_t *oid_len)
+smux_str2oid (const char *str, oid *oid, size_t *oid_len)
{
int len;
int val;
}
int
-smux_peer_oid (struct vty *vty, char *oid_str, char *passwd_str)
+smux_peer_oid (struct vty *vty, const char *oid_str, const char *passwd_str)
{
int ret;
oid oid[MAX_OID_LEN];
return CMD_WARNING;
}
- if (smux_oid && smux_oid != smux_default_oid)
- free (smux_oid);
+ if (smux_oid)
+ {
+ free (smux_oid);
+ smux_oid = NULL;
+ }
- if (smux_passwd && smux_passwd != smux_default_passwd)
+ /* careful, smux_passwd might point to string constant */
+ if (smux_passwd)
{
free (smux_passwd);
smux_passwd = NULL;
if (passwd_str)
smux_passwd = strdup (passwd_str);
+ else
+ smux_passwd = strdup ("");
- return CMD_SUCCESS;
+ return 0;
}
int
int
smux_peer_default ()
{
- if (smux_oid != smux_default_oid)
+ if (smux_oid)
{
free (smux_oid);
- smux_oid = smux_default_oid;
- smux_oid_len = smux_default_oid_len;
+ smux_oid = NULL;
}
- if (smux_passwd != smux_default_passwd)
+
+ /* careful, smux_passwd might be pointing at string constant */
+ if (smux_passwd)
{
free (smux_passwd);
- smux_passwd = smux_default_passwd;
+ smux_passwd = NULL;
}
+
return CMD_SUCCESS;
}
"SNMP MUX peer settings\n"
"Object ID used in SMUX peering\n")
{
- return smux_peer_oid (vty, argv[0], NULL);
+ if (smux_peer_oid (vty, argv[0], NULL) == 0)
+ {
+ smux_start();
+ return CMD_SUCCESS;
+ }
+ else
+ return CMD_WARNING;
}
DEFUN (smux_peer_password,
"SMUX peering object ID\n"
"SMUX peering password\n")
{
- return smux_peer_oid (vty, argv[0], argv[1]);
+ if (smux_peer_oid (vty, argv[0], argv[1]) == 0)
+ {
+ smux_start();
+ return CMD_SUCCESS;
+ }
+ else
+ return CMD_WARNING;
}
DEFUN (no_smux_peer,
no_smux_peer_cmd,
- "no smux peer OID",
+ "no smux peer",
NO_STR
"SNMP MUX protocol settings\n"
- "SNMP MUX peer settings\n"
- "Object ID used in SMUX peering\n")
+ "SNMP MUX peer settings\n")
{
+ smux_stop();
return smux_peer_default ();
}
-DEFUN (no_smux_peer_password,
- no_smux_peer_password_cmd,
+ALIAS (no_smux_peer,
+ no_smux_peer_oid_cmd,
+ "no smux peer OID",
+ NO_STR
+ "SNMP MUX protocol settings\n"
+ "SNMP MUX peer settings\n"
+ "SMUX peering object ID\n")
+
+ALIAS (no_smux_peer,
+ no_smux_peer_oid_password_cmd,
"no smux peer OID PASSWORD",
NO_STR
"SNMP MUX protocol settings\n"
"SNMP MUX peer settings\n"
"SMUX peering object ID\n"
"SMUX peering password\n")
-{
- return smux_peer_default ();
-}
int
config_write_smux (struct vty *vty)
{
int first = 1;
- int i;
+ unsigned int i;
- if (smux_oid != smux_default_oid || smux_passwd != smux_default_passwd)
+ if (smux_oid)
{
vty_out (vty, "smux peer ");
for (i = 0; i < smux_oid_len; i++)
/* Register subtree to smux master tree. */
void
-smux_register_mib (char *descr, struct variable *var, size_t width, int num,
+smux_register_mib (const char *descr, struct variable *var,
+ size_t width, int num,
oid name[], size_t namelen)
{
struct subtree *tree;
/* Initialize some values then schedule first SMUX connection. */
void
-smux_init (struct thread_master *tm, oid defoid[], size_t defoid_len)
+smux_init (struct thread_master *tm)
{
- /* Set default SMUX oid. */
- smux_default_oid = defoid;
- smux_default_oid_len = defoid_len;
-
- smux_oid = smux_default_oid;
- smux_oid_len = smux_default_oid_len;
- smux_passwd = smux_default_passwd;
-
/* copy callers thread master */
master = tm;
install_element (CONFIG_NODE, &smux_peer_cmd);
install_element (CONFIG_NODE, &smux_peer_password_cmd);
install_element (CONFIG_NODE, &no_smux_peer_cmd);
- install_element (CONFIG_NODE, &no_smux_peer_password_cmd);
+ install_element (CONFIG_NODE, &no_smux_peer_oid_cmd);
+ install_element (CONFIG_NODE, &no_smux_peer_oid_password_cmd);
}
void