Hello community, here is the log from the commit of package dynamips for openSUSE:Factory checked in at 2014-09-26 10:52:18 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/dynamips (Old) and /work/SRC/openSUSE:Factory/.dynamips.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "dynamips" Changes: -------- --- /work/SRC/openSUSE:Factory/dynamips/dynamips.changes 2014-07-12 17:14:57.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.dynamips.new/dynamips.changes 2014-09-26 11:21:36.000000000 +0200 @@ -1,0 +2,13 @@ +Thu Sep 25 08:38:11 UTC 2014 - [email protected] + +- new upstream version 0.2.14 + * Add optional argument 'format' to hypervisor commands 'send_con_msg' and + 'send_aux_msg'. Report "X byte(s) written" on succeess. + * String formats: + - plain - plain string (default, old behavior) + - base64 - base64 encoded string + * Fix issue with 7200 IOS crashing after restart + * Fixed issue #49 - IOS crashes after router restart + * Fixed issue #50 - vm send_con_msg + +------------------------------------------------------------------- Old: ---- dynamips-0.2.13.tar.gz New: ---- dynamips-0.2.14.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ dynamips.spec ++++++ --- /var/tmp/diff_new_pack.yz8KbB/_old 2014-09-26 11:21:37.000000000 +0200 +++ /var/tmp/diff_new_pack.yz8KbB/_new 2014-09-26 11:21:37.000000000 +0200 @@ -17,7 +17,7 @@ Name: dynamips -Version: 0.2.13 +Version: 0.2.14 Release: 0 BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: dos2unix ++++++ dynamips-0.2.13.tar.gz -> dynamips-0.2.14.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dynamips-0.2.13/CMakeLists.txt new/dynamips-0.2.14/CMakeLists.txt --- old/dynamips-0.2.13/CMakeLists.txt 2014-07-10 17:49:35.000000000 +0200 +++ new/dynamips-0.2.14/CMakeLists.txt 2014-09-23 20:59:26.000000000 +0200 @@ -25,7 +25,7 @@ message ( STATUS "CMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}" ) project ( dynamips C ) -set ( DYNAMIPS_VERSION_TRAIN 0.2.13 ) +set ( DYNAMIPS_VERSION_TRAIN 0.2.14 ) set ( DYNAMIPS_VERSION_SUB ) include ( utils ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dynamips-0.2.13/ChangeLog new/dynamips-0.2.14/ChangeLog --- old/dynamips-0.2.13/ChangeLog 2014-07-10 17:49:35.000000000 +0200 +++ new/dynamips-0.2.14/ChangeLog 2014-09-23 20:59:26.000000000 +0200 @@ -2924,3 +2924,23 @@ +--------------------. | Release: v0.2.13 | +--------------------' + +10-Jul-2014 to 01-Sep-2014 +-------------------------- + - Add -DUSE_UNSTABLE when making an unstable build (MacOSX) + - Add optional argument 'format' to hypervisor commands + - 'send_con_msg' and 'send_aux_msg'. + - Report "X byte(s) written" on succeess. + - String formats: + * plain - plain string (default, old behavior) + * base64 - base64 encoded string + - Use an auxiliary variable to record configured ram size for npe-400 + +Fixed issue #49 - IOS crashes after router restart +Fixed issue #50 - vm send_con_msg +Fixed issue #55 - 'unstable' installs 'stable' version on Mac OS X + ++--------------------+ +| Release: v0.2.14 | ++--------------------+ + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dynamips-0.2.13/README.hypervisor new/dynamips-0.2.14/README.hypervisor --- old/dynamips-0.2.13/README.hypervisor 2014-07-10 17:49:35.000000000 +0200 +++ new/dynamips-0.2.14/README.hypervisor 2014-09-23 20:59:26.000000000 +0200 @@ -224,11 +224,29 @@ The instance must exist, "cpu_id" is ignored. (since version 0.2.8-RC5-community) -* "vm send_con_msg <instance_name> <str>" : - Send a message on the console. (since version 0.2.6-RC3) +* "vm send_con_msg <instance_name> <str> [<format>]" : + (since version 0.2.6-RC3) Send a message on the console. + It only writes the bytes that fit in the console buffer. -* "vm send_aux_msg <instance_name> <str>" : - Send a message on the AUX port. (since version 0.2.6-RC3) + (since version 0.2.14) + The optional argument <format> indicates the string format. + On success it will report "X byte(s) written". + + String formats: + * plain - plain string (default, old behavior) + * base64 - base64 encoded string + +* "vm send_aux_msg <instance_name> <str> [<format>]" : + (since version 0.2.6-RC3) Send a message on the AUX port. + It only writes the bytes that fit in the aux buffer. + + (since version 0.2.14) + The optional argument <format> indicates the string format. + On success it will report "X byte(s) written". + + String formats: + * plain - plain string (default, old behavior) + * base64 - base64 encoded string * "vm slot_bindings <instance_name>" : Show slot bindings. (since version 0.2.8-RC1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dynamips-0.2.13/RELEASE-NOTES new/dynamips-0.2.14/RELEASE-NOTES --- old/dynamips-0.2.13/RELEASE-NOTES 2014-07-10 17:49:35.000000000 +0200 +++ new/dynamips-0.2.14/RELEASE-NOTES 2014-09-23 20:59:26.000000000 +0200 @@ -1,31 +1,29 @@ Release Notes for Cisco router simulator (Dynamips) =================================================== -Version: v0.2.13 +Version: v0.2.14 -Release date: Thursday, July 10, 2014 (2014-07-10) +Release date: Tuesday, September 23, 2014 (2014-09-23) -Source code: https://github.com/GNS3/dynamips/tree/v0.2.13 +Source code: https://github.com/GNS3/dynamips/tree/v0.2.14 License: GNU GPLv2 -What's New since v0.2.12 +What's New since v0.2.13 ======================== -Identify 10Mbps Ethernet chip in dev_am79c971 as Am79C970A. IOS said "AMD Unknown", now it's "AMD Presidio". -Add CMake build system. -Enable the Travis Continual Integration service. -Fix Wireshark error "Frame too long" (thread safety issue could cause bad capture file data) -Make a single FAT16 partition when pcmcia disks are first created. -Improve packet transmission performance of i8254x (C7200-IO-2FE/E, C7200-I/O-GE+E, PA-2FE-TX, PA-GE) by sending up to 16 packets at a time. - - Code by candlerb (merged) -Cleanups. - -Final fix for issue #9 - Reproducable crash -Fixed issue #38 - Unknown file system detected -Fixed issue #41 - "Frame is Too Long" error in Wireshark -Merge pull request #45 from candlerb/candlerb/txperformance +Allow building unstable version on MacOSX +Add optional argument 'format' to hypervisor commands 'send_con_msg' and +'send_aux_msg'. Report "X byte(s) written" on succeess. + - String formats: + * plain - plain string (default, old behavior) + * base64 - base64 encoded string +Fix issue with 7200 IOS crashing after restart + +Fixed issue #49 - IOS crashes after router restart +Fixed issue #50 - vm send_con_msg +Fixed issue #55 - 'unstable' installs 'stable' version on Mac OS X Known Issues @@ -40,8 +38,8 @@ Packet transmission rate is limited. - https://github.com/GNS3/dynamips/issues/46 -IOS crashes after router restart - - https://github.com/GNS3/dynamips/issues/49 +c1700 IOS Images start once and then fail to boot on second boot + - https://github.com/GNS3/dynamips/issues/54 There is lots of missing hardware functionality. There are memory leaks. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dynamips-0.2.13/common/dev_c7200.c new/dynamips-0.2.14/common/dev_c7200.c --- old/dynamips-0.2.13/common/dev_c7200.c 2014-07-10 17:49:35.000000000 +0200 +++ new/dynamips-0.2.14/common/dev_c7200.c 2014-09-23 20:59:26.000000000 +0200 @@ -329,6 +329,7 @@ memset(router,0,sizeof(*router)); router->vm = vm; + router->npe400_ram_size = C7200_DEFAULT_RAM_SIZE; vm->hw_data = router; vm->elf_machine_id = C7200_ELF_MACHINE_ID; @@ -1195,12 +1196,15 @@ /* * Add supplemental memory (as "iomem") if we have more than 256 Mb. */ - if (vm->ram_size > C7200_BASE_RAM_LIMIT) { - vm->iomem_size = vm->ram_size - C7200_BASE_RAM_LIMIT; + if (VM_C7200(vm)->npe400_ram_size > C7200_BASE_RAM_LIMIT) { + vm->iomem_size = VM_C7200(vm)->npe400_ram_size - C7200_BASE_RAM_LIMIT; vm->ram_size = C7200_BASE_RAM_LIMIT; - dev_ram_init(vm,"ram1",vm->ram_mmap,TRUE,NULL,vm->sparse_mem, + dev_ram_init(vm,"iomem",vm->ram_mmap,TRUE,NULL,vm->sparse_mem, C7200_IOMEM_ADDR,vm->iomem_size*1048576); } + else { + vm->iomem_size = 0; + } /* Initialize the Galileo GT-64120 system controller */ if (c7200_init_gt64120(router) == -1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dynamips-0.2.13/common/dev_c7200.h new/dynamips-0.2.14/common/dev_c7200.h --- old/dynamips-0.2.13/common/dev_c7200.h 2014-07-10 17:49:35.000000000 +0200 +++ new/dynamips-0.2.14/common/dev_c7200.h 2014-09-23 20:59:26.000000000 +0200 @@ -164,6 +164,9 @@ /* Associated VM instance */ vm_instance_t *vm; + /* RAM size for npe-400 */ + m_uint32_t npe400_ram_size; + /* MV64460 device for NPE-G2 */ struct mv64460_data *mv64460_sysctr; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dynamips-0.2.13/common/dev_vtty.c new/dynamips-0.2.14/common/dev_vtty.c --- old/dynamips-0.2.13/common/dev_vtty.c 2014-07-10 17:49:35.000000000 +0200 +++ new/dynamips-0.2.14/common/dev_vtty.c 2014-09-23 20:59:26.000000000 +0200 @@ -618,21 +618,21 @@ return(0); } -/* Store a string in the FIFO buffer */ -int vtty_store_str(vtty_t *vtty,char *str) +/* Store arbritary data in the FIFO buffer */ +int vtty_store_data(vtty_t *vtty,char *data, int len) { - if (!vtty) - return(0); + int bytes; - while(*str != 0) { - if (vtty_store(vtty,*str) == -1) - return(-1); - - str++; + if (!vtty || !data || len < 0) + return(-1); // invalid argument + + for (bytes = 0; bytes < len; bytes++) { + if (vtty_store(vtty,data[bytes]) == -1) + break; } vtty->input_pending = TRUE; - return(0); + return(bytes); } /* Store CTRL+C in buffer */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dynamips-0.2.13/common/dev_vtty.h new/dynamips-0.2.14/common/dev_vtty.h --- old/dynamips-0.2.13/common/dev_vtty.h 2014-07-10 17:49:35.000000000 +0200 +++ new/dynamips-0.2.14/common/dev_vtty.h 2014-09-23 20:59:26.000000000 +0200 @@ -101,8 +101,8 @@ /* delete a virtual tty */ void vtty_delete(vtty_t *vtty); -/* Store a string in the FIFO buffer */ -int vtty_store_str(vtty_t *vtty,char *str); +/* Store arbritary data in the FIFO buffer */ +int vtty_store_data(vtty_t *vtty,char *data, int len); /* read a character from the buffer (-1 if the buffer is empty) */ int vtty_get_char(vtty_t *vtty); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dynamips-0.2.13/common/dynamips.c new/dynamips-0.2.14/common/dynamips.c --- old/dynamips-0.2.13/common/dynamips.c 2014-07-10 17:49:35.000000000 +0200 +++ new/dynamips-0.2.14/common/dynamips.c 2014-09-23 20:59:26.000000000 +0200 @@ -74,7 +74,7 @@ const char *sw_version = DYNAMIPS_VERSION"-"JIT_ARCH; /* Software version tag */ -const char *sw_version_tag = "2014071016"; +const char *sw_version_tag = "2014092320"; /* Hypervisor */ int hypervisor_mode = 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dynamips-0.2.13/man/hypervisor_mode.7 new/dynamips-0.2.14/man/hypervisor_mode.7 --- old/dynamips-0.2.13/man/hypervisor_mode.7 2014-07-10 17:49:35.000000000 +0200 +++ new/dynamips-0.2.14/man/hypervisor_mode.7 2014-09-23 20:59:26.000000000 +0200 @@ -274,11 +274,33 @@ The instance must exist, "cpu_id" is ignored. (since version 0.2.8\-RC5\-community) .TP -.B vm send_con_msg <instance_name> <str> -Send a message on the console. (since version 0.2.6\-RC3) +.B vm send_con_msg <instance_name> <str> [<format>] +(since version 0.2.6\-RC3) Send a message on the console. +It only writes the bytes that fit in the console buffer. +.RS +.PP +(since version 0.2.14) +The optional argument <format> indicates the string format. +On success it will report "X byte(s) written". +.PP +String formats: + * plain - plain string (default, old behavior) + * base64 - base64 encoded string +.RE .TP -.B vm send_aux_msg <instance_name> <str> -Send a message on the AUX port. (since version 0.2.6\-RC3) +.B vm send_aux_msg <instance_name> <str> [<format>] +(since version 0.2.6\-RC3) Send a message on the AUX port. +It only writes the bytes that fit in the aux buffer. +.RS +.PP +(since version 0.2.14) +The optional argument <format> indicates the string format. +On success it will report "X byte(s) written". +.PP +String formats: + * plain - plain string (default, old behavior) + * base64 - base64 encoded string +.RE .TP .B vm slot_bindings <instance_name> Show slot bindings. (since version 0.2.8\-RC1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dynamips-0.2.13/stable/hv_vm.c new/dynamips-0.2.14/stable/hv_vm.c --- old/dynamips-0.2.13/stable/hv_vm.c 2014-07-10 17:49:35.000000000 +0200 +++ new/dynamips-0.2.14/stable/hv_vm.c 2014-09-23 20:59:26.000000000 +0200 @@ -301,6 +301,10 @@ vm->ram_size = atoi(argv[1]); + /* XXX npe-400 can split excess ram into iomem, adjusting ram_size */ + if (vm->elf_machine_id == C7200_ELF_MACHINE_ID) + VM_C7200(vm)->npe400_ram_size = vm->ram_size; + vm_release(vm); hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK"); return(0); @@ -856,31 +860,75 @@ /* Send a message on the console */ static int cmd_send_con_msg(hypervisor_conn_t *conn,int argc,char *argv[]) { - vm_instance_t *vm; + vm_instance_t *vm = NULL; + const char *format = NULL; + char *data = NULL; + int len,written; if (!(vm = hypervisor_find_object(conn,argv[0],OBJ_TYPE_VM))) return(-1); - vtty_store_str(vm->vtty_con,argv[1]); + format = (argc > 2)? argv[2]: "plain"; + len = (int)strlen(argv[1]); + written = -1; + + if (strcmp(format,"plain") == 0 && len >= 0) { + written = vtty_store_data(vm->vtty_con,argv[1],len); + } + else if (strcmp(format,"base64") == 0 && len >= 0) { + data = malloc(len+1); + len = base64_decode((unsigned char*)data,(const unsigned char *)argv[1],len); + written = vtty_store_data(vm->vtty_con,data,len); + free(data); + data = NULL; + } vm_release(vm); - hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK"); - return(0); + if (written < 0) { + hypervisor_send_reply(conn,HSC_ERR_INV_PARAM,1,"Invalid parameter"); + return(-1); + } + else { + hypervisor_send_reply(conn,HSC_INFO_OK,1,"%d byte(s) written",written); + return(0); + } } /* Send a message on the AUX port */ static int cmd_send_aux_msg(hypervisor_conn_t *conn,int argc,char *argv[]) { - vm_instance_t *vm; + vm_instance_t *vm = NULL; + const char *format = NULL; + char *data = NULL; + int len,written; if (!(vm = hypervisor_find_object(conn,argv[0],OBJ_TYPE_VM))) return(-1); - vtty_store_str(vm->vtty_aux,argv[1]); + format = (argc > 2)? argv[2]: "plain"; + len = (int)strlen(argv[1]); + written = -1; + + if (strcmp(format,"plain") == 0 && len >= 0) { + written = vtty_store_data(vm->vtty_aux,argv[1],len); + } + else if (strcmp(format,"base64") == 0 && len >= 0) { + data = malloc(len+1); + len = base64_decode((unsigned char*)data,(const unsigned char *)argv[1],len); + written = vtty_store_data(vm->vtty_aux,data,len); + free(data); + data = NULL; + } vm_release(vm); - hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK"); - return(0); + if (written < 0) { + hypervisor_send_reply(conn,HSC_ERR_INV_PARAM,1,"Invalid parameter"); + return(-1); + } + else { + hypervisor_send_reply(conn,HSC_INFO_OK,1,"%d byte(s) written",written); + return(0); + } } @@ -1237,8 +1285,8 @@ { "cpu_usage", 2, 2, cmd_show_cpu_usage, NULL }, { "suspend", 1, 1, cmd_suspend, NULL }, { "resume", 1, 1, cmd_resume, NULL }, - { "send_con_msg", 2, 2, cmd_send_con_msg, NULL }, - { "send_aux_msg", 2, 2, cmd_send_aux_msg, NULL }, + { "send_con_msg", 2, 3, cmd_send_con_msg, NULL }, + { "send_aux_msg", 2, 3, cmd_send_aux_msg, NULL }, { "slot_bindings", 1, 1, cmd_slot_bindings, NULL }, { "slot_nio_bindings", 2, 2, cmd_slot_nio_bindings, NULL }, { "slot_add_binding", 4, 4, cmd_slot_add_binding, NULL }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dynamips-0.2.13/unstable/CMakeLists.txt new/dynamips-0.2.14/unstable/CMakeLists.txt --- old/dynamips-0.2.13/unstable/CMakeLists.txt 2014-07-10 17:49:35.000000000 +0200 +++ new/dynamips-0.2.14/unstable/CMakeLists.txt 2014-09-23 20:59:26.000000000 +0200 @@ -37,6 +37,8 @@ endif ( NOT BUILD_DYNAMIPS_UNSTABLE ) # dynamips_*_unstable +add_definitions( "-DUSE_UNSTABLE" ) + set ( _files "${COMMON}/mempool.c" "${COMMON}/registry.c" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dynamips-0.2.13/unstable/hv_vm.c new/dynamips-0.2.14/unstable/hv_vm.c --- old/dynamips-0.2.13/unstable/hv_vm.c 2014-07-10 17:49:35.000000000 +0200 +++ new/dynamips-0.2.14/unstable/hv_vm.c 2014-09-23 20:59:26.000000000 +0200 @@ -322,6 +322,10 @@ vm->ram_size = atoi(argv[1]); + /* XXX npe-400 can split excess ram into iomem, adjusting ram_size */ + if (vm->elf_machine_id == C7200_ELF_MACHINE_ID) + VM_C7200(vm)->npe400_ram_size = vm->ram_size; + vm_release(vm); hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK"); return(0); @@ -877,31 +881,75 @@ /* Send a message on the console */ static int cmd_send_con_msg(hypervisor_conn_t *conn,int argc,char *argv[]) { - vm_instance_t *vm; + vm_instance_t *vm = NULL; + const char *format = NULL; + char *data = NULL; + int len,written; if (!(vm = hypervisor_find_object(conn,argv[0],OBJ_TYPE_VM))) return(-1); - vtty_store_str(vm->vtty_con,argv[1]); + format = (argc > 2)? argv[2]: "plain"; + len = (int)strlen(argv[1]); + written = -1; + + if (strcmp(format,"plain") == 0 && len >= 0) { + written = vtty_store_data(vm->vtty_con,argv[1],len); + } + else if (strcmp(format,"base64") == 0 && len >= 0) { + data = malloc(len+1); + len = base64_decode((unsigned char*)data,(const unsigned char *)argv[1],len); + written = vtty_store_data(vm->vtty_con,data,len); + free(data); + data = NULL; + } vm_release(vm); - hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK"); - return(0); + if (written < 0) { + hypervisor_send_reply(conn,HSC_ERR_INV_PARAM,1,"Invalid parameter"); + return(-1); + } + else { + hypervisor_send_reply(conn,HSC_INFO_OK,1,"%d byte(s) written",written); + return(0); + } } /* Send a message on the AUX port */ static int cmd_send_aux_msg(hypervisor_conn_t *conn,int argc,char *argv[]) { - vm_instance_t *vm; + vm_instance_t *vm = NULL; + const char *format = NULL; + char *data = NULL; + int len,written; if (!(vm = hypervisor_find_object(conn,argv[0],OBJ_TYPE_VM))) return(-1); - vtty_store_str(vm->vtty_aux,argv[1]); + format = (argc > 2)? argv[2]: "plain"; + len = (int)strlen(argv[1]); + written = -1; + + if (strcmp(format,"plain") == 0 && len >= 0) { + written = vtty_store_data(vm->vtty_aux,argv[1],len); + } + else if (strcmp(format,"base64") == 0 && len >= 0) { + data = malloc(len+1); + len = base64_decode((unsigned char*)data,(const unsigned char *)argv[1],len); + written = vtty_store_data(vm->vtty_aux,data,len); + free(data); + data = NULL; + } vm_release(vm); - hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK"); - return(0); + if (written < 0) { + hypervisor_send_reply(conn,HSC_ERR_INV_PARAM,1,"Invalid parameter"); + return(-1); + } + else { + hypervisor_send_reply(conn,HSC_INFO_OK,1,"%d byte(s) written",written); + return(0); + } } @@ -1259,8 +1307,8 @@ { "cpu_usage", 2, 2, cmd_show_cpu_usage, NULL }, { "suspend", 1, 1, cmd_suspend, NULL }, { "resume", 1, 1, cmd_resume, NULL }, - { "send_con_msg", 2, 2, cmd_send_con_msg, NULL }, - { "send_aux_msg", 2, 2, cmd_send_aux_msg, NULL }, + { "send_con_msg", 2, 3, cmd_send_con_msg, NULL }, + { "send_aux_msg", 2, 3, cmd_send_aux_msg, NULL }, { "slot_bindings", 1, 1, cmd_slot_bindings, NULL }, { "slot_nio_bindings", 2, 2, cmd_slot_nio_bindings, NULL }, { "slot_add_binding", 4, 4, cmd_slot_add_binding, NULL }, -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
