aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt1
-rw-r--r--epan/dissectors/packet-ncp-int.h186
-rw-r--r--epan/dissectors/packet-ncp-nmas.c11
-rw-r--r--epan/dissectors/packet-ncp-sss.c16
-rwxr-xr-xtools/ncp2222.py132
-rw-r--r--ui/cli/Makefile.common1
-rw-r--r--ui/cli/tap-ncpstat.c440
-rw-r--r--ui/gtk/ncp_stat.c185
8 files changed, 628 insertions, 344 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e05394b3e0..19458c7e1a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1159,6 +1159,7 @@ set(TSHARK_TAP_SRC
ui/cli/tap-macltestat.c
ui/cli/tap-mgcpstat.c
ui/cli/tap-megacostat.c
+ ui/cli/tap-ncpstat.c
ui/cli/tap-protocolinfo.c
ui/cli/tap-protohierstat.c
ui/cli/tap-radiusstat.c
diff --git a/epan/dissectors/packet-ncp-int.h b/epan/dissectors/packet-ncp-int.h
index 4581442c6e..27bfc9797e 100644
--- a/epan/dissectors/packet-ncp-int.h
+++ b/epan/dissectors/packet-ncp-int.h
@@ -131,6 +131,192 @@ typedef struct {
guint32 nds_frag_flags;
} ncp_req_hash_value;
+
+static const value_string ncp_group_vals[] = {
+ { 0, "Synchronization" },
+ { 1, "Print" },
+ { 2, "File System" },
+ { 3, "Connection" },
+ { 4, "File Server Environment" },
+ { 5, "Message" },
+ { 6, "Bindery" },
+ { 7, "Queue Management System (QMS)" },
+ { 8, "Accounting" },
+ { 9, "Transaction Tracking" },
+ { 10, "AFP" },
+ { 11, "NCP Extension" },
+ { 12, "Extended Attribute" },
+ { 13, "Auditing" },
+ { 14, "Enhanced File System" },
+ { 15, "Migration" },
+ { 16, "Novell Modular Authentication Services (NMAS)" },
+ { 17, "Secret Store Services (SSS)" },
+ { 18, "Packet Burst" },
+ { 19, "Novell Directory Services (NDS)" },
+ { 20, "Time Synchronization" },
+ { 21, "Server Statistics" },
+ { 22, "Remote" },
+ { 0, NULL}
+};
+
+static const value_string sss_verb_enum[] = {
+ { 0x00000000, "Query Server" },
+ { 0x00000001, "Read App Secrets" },
+ { 0x00000002, "Write App Secrets" },
+ { 0x00000003, "Add Secret ID" },
+ { 0x00000004, "Remove Secret ID" },
+ { 0x00000005, "Remove SecretStore" },
+ { 0x00000006, "Enumerate Secret IDs" },
+ { 0x00000007, "Unlock Store" },
+ { 0x00000008, "Set Master Password" },
+ { 0x00000009, "Get Service Information" },
+ { 0x000000ff, "Fragment"},
+ { 0x00000000, NULL}
+};
+
+static const value_string nmas_subverb_enum[] = {
+ { 0, "Fragmented Ping" },
+ { 2, "Client Put Data" },
+ { 4, "Client Get Data" },
+ { 6, "Client Get User NDS Credentials" },
+ { 8, "Login Store Management" },
+ { 10, "Writable Object Check" },
+ { 1242, "Message Handler" },
+ { 0, NULL}
+};
+
+static const value_string ncp_nds_verb_vals[] = {
+ { 1, "Resolve Name" },
+ { 2, "Read Entry Information" },
+ { 3, "Read" },
+ { 4, "Compare" },
+ { 5, "List" },
+ { 6, "Search Entries" },
+ { 7, "Add Entry" },
+ { 8, "Remove Entry" },
+ { 9, "Modify Entry" },
+ { 10, "Modify RDN" },
+ { 11, "Create Attribute" },
+ { 12, "Read Attribute Definition" },
+ { 13, "Remove Attribute Definition" },
+ { 14, "Define Class" },
+ { 15, "Read Class Definition" },
+ { 16, "Modify Class Definition" },
+ { 17, "Remove Class Definition" },
+ { 18, "List Containable Classes" },
+ { 19, "Get Effective Rights" },
+ { 20, "Add Partition" },
+ { 21, "Remove Partition" },
+ { 22, "List Partitions" },
+ { 23, "Split Partition" },
+ { 24, "Join Partitions" },
+ { 25, "Add Replica" },
+ { 26, "Remove Replica" },
+ { 27, "Open Stream" },
+ { 28, "Search Filter" },
+ { 29, "Create Subordinate Reference" },
+ { 30, "Link Replica" },
+ { 31, "Change Replica Type" },
+ { 32, "Start Update Schema" },
+ { 33, "End Update Schema" },
+ { 34, "Update Schema" },
+ { 35, "Start Update Replica" },
+ { 36, "End Update Replica" },
+ { 37, "Update Replica" },
+ { 38, "Synchronize Partition" },
+ { 39, "Synchronize Schema" },
+ { 40, "Read Syntaxes" },
+ { 41, "Get Replica Root ID" },
+ { 42, "Begin Move Entry" },
+ { 43, "Finish Move Entry" },
+ { 44, "Release Moved Entry" },
+ { 45, "Backup Entry" },
+ { 46, "Restore Entry" },
+ { 47, "Save DIB (Obsolete)" },
+ { 48, "Control" },
+ { 49, "Remove Backlink" },
+ { 50, "Close Iteration" },
+ { 51, "Mutate Entry" },
+ { 52, "Audit Skulking" },
+ { 53, "Get Server Address" },
+ { 54, "Set Keys" },
+ { 55, "Change Password" },
+ { 56, "Verify Password" },
+ { 57, "Begin Login" },
+ { 58, "Finish Login" },
+ { 59, "Begin Authentication" },
+ { 60, "Finish Authentication" },
+ { 61, "Logout" },
+ { 62, "Repair Ring (Obsolete)" },
+ { 63, "Repair Timestamps" },
+ { 64, "Create Back Link" },
+ { 65, "Delete External Reference" },
+ { 66, "Rename External Reference" },
+ { 67, "Create Queue Entry Directory" },
+ { 68, "Remove Queue Entry Directory" },
+ { 69, "Merge Entries" },
+ { 70, "Change Tree Name" },
+ { 71, "Partition Entry Count" },
+ { 72, "Check Login Restrictions" },
+ { 73, "Start Join" },
+ { 74, "Low Level Split" },
+ { 75, "Low Level Join" },
+ { 76, "Abort Partition Operation" },
+ { 77, "Get All Servers" },
+ { 78, "Partition Function" },
+ { 79, "Read References" },
+ { 80, "Inspect Entry" },
+ { 81, "Get Remote Entry ID" },
+ { 82, "Change Security" },
+ { 83, "Check Console Operator" },
+ { 84, "Start Move Tree" },
+ { 85, "Move Tree" },
+ { 86, "End Move Tree" },
+ { 87, "Low Level Abort Join" },
+ { 88, "Check Security Equivalence" },
+ { 89, "Merge Tree" },
+ { 90, "Sync External Reference" },
+ { 91, "Resend Entry" },
+ { 92, "New Schema Epoch" },
+ { 93, "Statistics" },
+ { 94, "Ping" },
+ { 95, "Get Bindery Contexts" },
+ { 96, "Monitor Connection" },
+ { 97, "Get DS Statistics" },
+ { 98, "Reset DS Counters" },
+ { 99, "Console" },
+ { 100, "Read Stream" },
+ { 101, "Write Stream" },
+ { 102, "Create Orphan Partition" },
+ { 103, "Remove Orphan Partition" },
+ { 104, "Link Orphan Partition" },
+ { 105, "Set Distributed Reference Link (DRL)" },
+ { 106, "Available" },
+ { 107, "Available" },
+ { 108, "Verify Distributed Reference Link (DRL)" },
+ { 109, "Verify Partition" },
+ { 110, "Iterator" },
+ { 111, "Available" },
+ { 112, "Close Stream" },
+ { 113, "Available" },
+ { 114, "Read Status" },
+ { 115, "Partition Sync Status" },
+ { 116, "Read Reference Data" },
+ { 117, "Write Reference Data" },
+ { 118, "Resource Event" },
+ { 119, "DIB Request (obsolete)" },
+ { 120, "Set Replication Filter" },
+ { 121, "Get Replication Filter" },
+ { 122, "Change Attribute Definition" },
+ { 123, "Schema in Use" },
+ { 124, "Remove Keys" },
+ { 125, "Clone" },
+ { 126, "Multiple Operations Transaction" },
+ { 240, "Ping" },
+ { 255, "EDirectory Call" },
+ { 0, NULL }
+};
+
void dissect_ncp_request(tvbuff_t*, packet_info*, guint32,
guint8, guint16, proto_tree *volatile);
diff --git a/epan/dissectors/packet-ncp-nmas.c b/epan/dissectors/packet-ncp-nmas.c
index f5cb3ac5f0..d0a5727d18 100644
--- a/epan/dissectors/packet-ncp-nmas.c
+++ b/epan/dissectors/packet-ncp-nmas.c
@@ -74,17 +74,6 @@ static const value_string nmas_func_enum[] = {
{ 0, NULL }
};
-static const value_string nmas_subverb_enum[] = {
- { 0, "Fragmented Ping" },
- { 2, "Client Put Data" },
- { 4, "Client Get Data" },
- { 6, "Client Get User NDS Credentials" },
- { 8, "Login Store Management" },
- { 10, "Writable Object Check" },
- { 1242, "Message Handler" },
- { 0, NULL }
-};
-
static const value_string nmas_msgverb_enum[] = {
{ 1, "Echo Data" },
{ 3, "Start Session" },
diff --git a/epan/dissectors/packet-ncp-sss.c b/epan/dissectors/packet-ncp-sss.c
index 0cb09faffc..abd1710a8a 100644
--- a/epan/dissectors/packet-ncp-sss.c
+++ b/epan/dissectors/packet-ncp-sss.c
@@ -95,22 +95,6 @@ static const value_string sss_func_enum[] = {
{ 0, NULL }
};
-
-static const value_string sss_verb_enum[] = {
- { 0x00000000, "Query Server" },
- { 0x00000001, "Read App Secrets" },
- { 0x00000002, "Write App Secrets" },
- { 0x00000003, "Add Secret ID" },
- { 0x00000004, "Remove Secret ID" },
- { 0x00000005, "Remove SecretStore" },
- { 0x00000006, "Enumerate Secret IDs" },
- { 0x00000007, "Unlock Store" },
- { 0x00000008, "Set Master Password" },
- { 0x00000009, "Get Service Information" },
- { 0x000000ff, "Fragment"},
- { 0, NULL }
-};
-
static const value_string sss_errors_enum[] = {
{ 0xFFFFFCE0, "(-800) Target object could not be found" },
{ 0xFFFFFCDF, "(-801) NICI operations have failed" },
diff --git a/tools/ncp2222.py b/tools/ncp2222.py
index 43e677dc97..19f85f0254 100755
--- a/tools/ncp2222.py
+++ b/tools/ncp2222.py
@@ -6612,138 +6612,6 @@ static expert_field ei_ncp_server = EI_INIT;
# proto_register_ncp2222()
print("""
-static const value_string ncp_nds_verb_vals[] = {
- { 1, "Resolve Name" },
- { 2, "Read Entry Information" },
- { 3, "Read" },
- { 4, "Compare" },
- { 5, "List" },
- { 6, "Search Entries" },
- { 7, "Add Entry" },
- { 8, "Remove Entry" },
- { 9, "Modify Entry" },
- { 10, "Modify RDN" },
- { 11, "Create Attribute" },
- { 12, "Read Attribute Definition" },
- { 13, "Remove Attribute Definition" },
- { 14, "Define Class" },
- { 15, "Read Class Definition " },
- { 16, "Modify Class Definition" },
- { 17, "Remove Class Definition" },
- { 18, "List Containable Classes" },
- { 19, "Get Effective Rights" },
- { 20, "Add Partition" },
- { 21, "Remove Partition" },
- { 22, "List Partitions" },
- { 23, "Split Partition" },
- { 24, "Join Partitions" },
- { 25, "Add Replica" },
- { 26, "Remove Replica" },
- { 27, "Open Stream" },
- { 28, "Search Filter" },
- { 29, "Create Subordinate Reference" },
- { 30, "Link Replica" },
- { 31, "Change Replica Type" },
- { 32, "Start Update Schema" },
- { 33, "End Update Schema" },
- { 34, "Update Schema" },
- { 35, "Start Update Replica" },
- { 36, "End Update Replica" },
- { 37, "Update Replica" },
- { 38, "Synchronize Partition" },
- { 39, "Synchronize Schema" },
- { 40, "Read Syntaxes" },
- { 41, "Get Replica Root ID" },
- { 42, "Begin Move Entry" },
- { 43, "Finish Move Entry" },
- { 44, "Release Moved Entry" },
- { 45, "Backup Entry" },
- { 46, "Restore Entry" },
- { 47, "Save DIB (Obsolete)" },
- { 48, "Control" },
- { 49, "Remove Backlink" },
- { 50, "Close Iteration" },
- { 51, "Mutate Entry" },
- { 52, "Audit Skulking" },
- { 53, "Get Server Address" },
- { 54, "Set Keys" },
- { 55, "Change Password" },
- { 56, "Verify Password" },
- { 57, "Begin Login" },
- { 58, "Finish Login" },
- { 59, "Begin Authentication" },
- { 60, "Finish Authentication" },
- { 61, "Logout" },
- { 62, "Repair Ring (Obsolete)" },
- { 63, "Repair Timestamps" },
- { 64, "Create Back Link" },
- { 65, "Delete External Reference" },
- { 66, "Rename External Reference" },
- { 67, "Create Queue Entry Directory" },
- { 68, "Remove Queue Entry Directory" },
- { 69, "Merge Entries" },
- { 70, "Change Tree Name" },
- { 71, "Partition Entry Count" },
- { 72, "Check Login Restrictions" },
- { 73, "Start Join" },
- { 74, "Low Level Split" },
- { 75, "Low Level Join" },
- { 76, "Abort Partition Operation" },
- { 77, "Get All Servers" },
- { 78, "Partition Function" },
- { 79, "Read References" },
- { 80, "Inspect Entry" },
- { 81, "Get Remote Entry ID" },
- { 82, "Change Security" },
- { 83, "Check Console Operator" },
- { 84, "Start Move Tree" },
- { 85, "Move Tree" },
- { 86, "End Move Tree" },
- { 87, "Low Level Abort Join" },
- { 88, "Check Security Equivalence" },
- { 89, "Merge Tree" },
- { 90, "Sync External Reference" },
- { 91, "Resend Entry" },
- { 92, "New Schema Epoch" },
- { 93, "Statistics" },
- { 94, "Ping" },
- { 95, "Get Bindery Contexts" },
- { 96, "Monitor Connection" },
- { 97, "Get DS Statistics" },
- { 98, "Reset DS Counters" },
- { 99, "Console" },
- { 100, "Read Stream" },
- { 101, "Write Stream" },
- { 102, "Create Orphan Partition" },
- { 103, "Remove Orphan Partition" },
- { 104, "Link Orphan Partition" },
- { 105, "Set Distributed Reference Link (DRL)" },
- { 106, "Available" },
- { 107, "Available" },
- { 108, "Verify Distributed Reference Link (DRL)" },
- { 109, "Verify Partition" },
- { 110, "Iterator" },
- { 111, "Available" },
- { 112, "Close Stream" },
- { 113, "Available" },
- { 114, "Read Status" },
- { 115, "Partition Sync Status" },
- { 116, "Read Reference Data" },
- { 117, "Write Reference Data" },
- { 118, "Resource Event" },
- { 119, "DIB Request (obsolete)" },
- { 120, "Set Replication Filter" },
- { 121, "Get Replication Filter" },
- { 122, "Change Attribute Definition" },
- { 123, "Schema in Use" },
- { 124, "Remove Keys" },
- { 125, "Clone" },
- { 126, "Multiple Operations Transaction" },
- { 240, "Ping" },
- { 255, "EDirectory Call" },
- { 0, NULL }
-};
-
static const value_string connection_status_vals[] = {
{ 0x00, "Ok" },
{ 0x01, "Bad Service Connection" },
diff --git a/ui/cli/Makefile.common b/ui/cli/Makefile.common
index d74abfef36..0d5ee86976 100644
--- a/ui/cli/Makefile.common
+++ b/ui/cli/Makefile.common
@@ -64,6 +64,7 @@ TSHARK_TAP_SRC = \
tap-macltestat.c \
tap-megacostat.c \
tap-mgcpstat.c \
+ tap-ncpstat.c \
tap-protocolinfo.c \
tap-protohierstat.c \
tap-radiusstat.c \
diff --git a/ui/cli/tap-ncpstat.c b/ui/cli/tap-ncpstat.c
new file mode 100644
index 0000000000..7455d3fadf
--- /dev/null
+++ b/ui/cli/tap-ncpstat.c
@@ -0,0 +1,440 @@
+/* tap-ncpstat.c
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "epan/packet_info.h"
+#include <epan/tap.h>
+#include <epan/stat_tap_ui.h>
+#include "epan/value_string.h"
+#include <ui/cli/cli_service_response_time_table.h>
+#include <epan/dissectors/packet-ncp-int.h>
+#include "epan/timestats.h"
+
+void register_tap_listener_ncpstat(void);
+
+#define NCP_NUM_PROCEDURES 0
+
+/* used to keep track of the statistics for an entire program interface */
+typedef struct _ncpstat_t {
+ srt_stat_table ncp_srt_table;
+ srt_stat_table nds_srt_table;
+ srt_stat_table func_srt_table;
+ srt_stat_table sss_srt_table;
+ srt_stat_table nmas_srt_table;
+ srt_stat_table sub_17_srt_table;
+ srt_stat_table sub_21_srt_table;
+ srt_stat_table sub_22_srt_table;
+ srt_stat_table sub_23_srt_table;
+ srt_stat_table sub_32_srt_table;
+ srt_stat_table sub_34_srt_table;
+ srt_stat_table sub_35_srt_table;
+ srt_stat_table sub_36_srt_table;
+ srt_stat_table sub_86_srt_table;
+ srt_stat_table sub_87_srt_table;
+ srt_stat_table sub_89_srt_table;
+ srt_stat_table sub_90_srt_table;
+ srt_stat_table sub_92_srt_table;
+ srt_stat_table sub_94_srt_table;
+ srt_stat_table sub_104_srt_table;
+ srt_stat_table sub_111_srt_table;
+ srt_stat_table sub_114_srt_table;
+ srt_stat_table sub_123_srt_table;
+ srt_stat_table sub_131_srt_table;
+} ncpstat_t;
+
+static int
+ncpstat_packet(void *pss, packet_info *pinfo, epan_dissect_t *edt _U_, const void *prv)
+{
+ ncpstat_t *ss=(ncpstat_t *)pss;
+ const ncp_req_hash_value *request_val=(const ncp_req_hash_value *)prv;
+ gchar* tmp_str;
+
+ /* if we haven't seen the request, just ignore it */
+ if(!request_val || request_val->ncp_rec==0){
+ return 0;
+ }
+ /* By Group */
+ tmp_str = val_to_str_wmem(NULL, request_val->ncp_rec->group, ncp_group_vals, "Unknown(%u)");
+ init_srt_table_row(&ss->ncp_srt_table, request_val->ncp_rec->group, tmp_str);
+ wmem_free(NULL, tmp_str);
+ add_srt_table_data(&ss->ncp_srt_table, request_val->ncp_rec->group, &request_val->req_frame_time, pinfo);
+ /* By NCP number without subfunction*/
+ if (request_val->ncp_rec->subfunc==0) {
+ init_srt_table_row(&ss->func_srt_table, request_val->ncp_rec->func, request_val->ncp_rec->name);
+ add_srt_table_data(&ss->func_srt_table, request_val->ncp_rec->func, &request_val->req_frame_time, pinfo);
+ }
+ /* By Subfunction number */
+ if(request_val->ncp_rec->subfunc!=0){
+ if (request_val->ncp_rec->func==17) {
+ init_srt_table_row(&ss->sub_17_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name);
+ add_srt_table_data(&ss->sub_17_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo);
+ }
+ if (request_val->ncp_rec->func==21) {
+ init_srt_table_row(&ss->sub_21_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name);
+ add_srt_table_data(&ss->sub_21_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo);
+ }
+ if (request_val->ncp_rec->func==22) {
+ init_srt_table_row(&ss->sub_22_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name);
+ add_srt_table_data(&ss->sub_22_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo);
+ }
+ if (request_val->ncp_rec->func==23) {
+ init_srt_table_row(&ss->sub_23_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name);
+ add_srt_table_data(&ss->sub_23_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo);
+ }
+ if (request_val->ncp_rec->func==32) {
+ init_srt_table_row(&ss->sub_32_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name);
+ add_srt_table_data(&ss->sub_32_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo);
+ }
+ if (request_val->ncp_rec->func==34) {
+ init_srt_table_row(&ss->sub_34_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name);
+ add_srt_table_data(&ss->sub_34_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo);
+ }
+ if (request_val->ncp_rec->func==35) {
+ init_srt_table_row(&ss->sub_35_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name);
+ add_srt_table_data(&ss->sub_35_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo);
+ }
+ if (request_val->ncp_rec->func==36) {
+ init_srt_table_row(&ss->sub_36_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name);
+ add_srt_table_data(&ss->sub_36_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo);
+ }
+ if (request_val->ncp_rec->func==86) {
+ init_srt_table_row(&ss->sub_86_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name);
+ add_srt_table_data(&ss->sub_86_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo);
+ }
+ if (request_val->ncp_rec->func==87) {
+ init_srt_table_row(&ss->sub_87_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name);
+ add_srt_table_data(&ss->sub_87_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo);
+ }
+ if (request_val->ncp_rec->func==89) {
+ init_srt_table_row(&ss->sub_89_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name);
+ add_srt_table_data(&ss->sub_89_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo);
+ }
+ if (request_val->ncp_rec->func==90) {
+ init_srt_table_row(&ss->sub_90_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name);
+ add_srt_table_data(&ss->sub_90_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo);
+ }
+ if (request_val->ncp_rec->func==92) {
+ init_srt_table_row(&ss->sub_92_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name);
+ add_srt_table_data(&ss->sub_92_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo);
+ }
+ if (request_val->ncp_rec->func==94) {
+ init_srt_table_row(&ss->sub_94_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name);
+ add_srt_table_data(&ss->sub_94_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo);
+ }
+ if (request_val->ncp_rec->func==104) {
+ init_srt_table_row(&ss->sub_104_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name);
+ add_srt_table_data(&ss->sub_104_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo);
+ }
+ if (request_val->ncp_rec->func==111) {
+ init_srt_table_row(&ss->sub_111_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name);
+ add_srt_table_data(&ss->sub_111_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo);
+ }
+ if (request_val->ncp_rec->func==114) {
+ init_srt_table_row(&ss->sub_114_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name);
+ add_srt_table_data(&ss->sub_114_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo);
+ }
+ if (request_val->ncp_rec->func==123) {
+ init_srt_table_row(&ss->sub_123_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name);
+ add_srt_table_data(&ss->sub_123_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo);
+ }
+ if (request_val->ncp_rec->func==131) {
+ init_srt_table_row(&ss->sub_131_srt_table, (request_val->ncp_rec->subfunc), request_val->ncp_rec->name);
+ add_srt_table_data(&ss->sub_131_srt_table, (request_val->ncp_rec->subfunc), &request_val->req_frame_time, pinfo);
+ }
+ }
+ /* By NDS verb */
+ if (request_val->ncp_rec->func==0x68) {
+ tmp_str = val_to_str_wmem(NULL, request_val->nds_request_verb, ncp_nds_verb_vals, "Unknown(%u)");
+ init_srt_table_row(&ss->nds_srt_table, (request_val->nds_request_verb), tmp_str);
+ wmem_free(NULL, tmp_str);
+ add_srt_table_data(&ss->nds_srt_table, (request_val->nds_request_verb), &request_val->req_frame_time, pinfo);
+ }
+ if (request_val->ncp_rec->func==0x5c) {
+ tmp_str = val_to_str_wmem(NULL, request_val->req_nds_flags, sss_verb_enum, "Unknown(%u)");
+ init_srt_table_row(&ss->sss_srt_table, (request_val->req_nds_flags), tmp_str);
+ wmem_free(NULL, tmp_str);
+ add_srt_table_data(&ss->sss_srt_table, (request_val->req_nds_flags), &request_val->req_frame_time, pinfo);
+ }
+ if (request_val->ncp_rec->func==0x5e) {
+ tmp_str = val_to_str_wmem(NULL, request_val->req_nds_flags, nmas_subverb_enum, "Unknown(%u)");
+ init_srt_table_row(&ss->nmas_srt_table, (request_val->req_nds_flags), tmp_str);
+ wmem_free(NULL, tmp_str);
+ add_srt_table_data(&ss->nmas_srt_table, (request_val->req_nds_flags), &request_val->req_frame_time, pinfo);
+ }
+ return 1;
+}
+
+static void
+ncpstat_draw_header(srt_stat_table *rst)
+{
+ printf("%s SRT Statistics:\n", rst->name);
+ printf("Filter: %s\n", rst->filter_string ? rst->filter_string : "");
+}
+
+static void
+ncpstat_draw(void *pss)
+{
+ ncpstat_t *ss = (ncpstat_t *)pss;
+
+ printf("\n");
+ printf("===================================================================\n");
+
+ /* Tables were intentionally initialized to 0 rows, so only output tables with rows > 0 */
+ if (ss->ncp_srt_table.num_procs > 0) {
+ ncpstat_draw_header(&ss->ncp_srt_table);
+ draw_srt_table_data(&ss->ncp_srt_table, FALSE, FALSE);
+ }
+ if (ss->func_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->func_srt_table);
+ draw_srt_table_data(&ss->func_srt_table, FALSE, FALSE);
+ }
+ if (ss->nds_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->nds_srt_table);
+ draw_srt_table_data(&ss->nds_srt_table, FALSE, FALSE);
+ }
+ if (ss->sss_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->sss_srt_table);
+ draw_srt_table_data(&ss->sss_srt_table, FALSE, FALSE);
+ }
+ if (ss->nmas_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->nmas_srt_table);
+ draw_srt_table_data(&ss->nmas_srt_table, FALSE, FALSE);
+ }
+ if (ss->sub_17_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->sub_17_srt_table);
+ draw_srt_table_data(&ss->sub_17_srt_table, FALSE, FALSE);
+ }
+ if (ss->sub_21_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->sub_21_srt_table);
+ draw_srt_table_data(&ss->sub_21_srt_table, FALSE, FALSE);
+ }
+ if (ss->sub_22_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->sub_22_srt_table);
+ draw_srt_table_data(&ss->sub_22_srt_table, FALSE, FALSE);
+ }
+ if (ss->sub_23_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->sub_23_srt_table);
+ draw_srt_table_data(&ss->sub_23_srt_table, FALSE, FALSE);
+ }
+ if (ss->sub_32_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->sub_32_srt_table);
+ draw_srt_table_data(&ss->sub_32_srt_table, FALSE, FALSE);
+ }
+ if (ss->sub_34_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->sub_34_srt_table);
+ draw_srt_table_data(&ss->sub_34_srt_table, FALSE, FALSE);
+ }
+ if (ss->sub_35_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->sub_35_srt_table);
+ draw_srt_table_data(&ss->sub_35_srt_table, FALSE, FALSE);
+ }
+ if (ss->sub_36_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->sub_36_srt_table);
+ draw_srt_table_data(&ss->sub_36_srt_table, FALSE, FALSE);
+ }
+ if (ss->sub_86_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->sub_86_srt_table);
+ draw_srt_table_data(&ss->sub_86_srt_table, FALSE, FALSE);
+ }
+ if (ss->sub_87_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->sub_87_srt_table);
+ draw_srt_table_data(&ss->sub_87_srt_table, FALSE, FALSE);
+ }
+ if (ss->sub_89_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->sub_89_srt_table);
+ draw_srt_table_data(&ss->sub_89_srt_table, FALSE, FALSE);
+ }
+ if (ss->sub_90_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->sub_90_srt_table);
+ draw_srt_table_data(&ss->sub_90_srt_table, FALSE, FALSE);
+ }
+ if (ss->sub_92_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->sub_92_srt_table);
+ draw_srt_table_data(&ss->sub_92_srt_table, FALSE, FALSE);
+ }
+ if (ss->sub_94_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->sub_94_srt_table);
+ draw_srt_table_data(&ss->sub_94_srt_table, FALSE, FALSE);
+ }
+ if (ss->sub_104_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->sub_104_srt_table);
+ draw_srt_table_data(&ss->sub_104_srt_table, FALSE, FALSE);
+ }
+ if (ss->sub_111_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->sub_111_srt_table);
+ draw_srt_table_data(&ss->sub_111_srt_table, FALSE, FALSE);
+ }
+ if (ss->sub_114_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->sub_114_srt_table);
+ draw_srt_table_data(&ss->sub_114_srt_table, FALSE, FALSE);
+ }
+ if (ss->sub_123_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->sub_123_srt_table);
+ draw_srt_table_data(&ss->sub_123_srt_table, FALSE, FALSE);
+ }
+ if (ss->sub_131_srt_table.num_procs > 0) {
+ printf("\n");
+ ncpstat_draw_header(&ss->sub_131_srt_table);
+ draw_srt_table_data(&ss->sub_131_srt_table, FALSE, FALSE);
+ }
+
+ printf("===================================================================\n");
+}
+
+
+static void
+ncpstat_init(const char *opt_arg, void *userdata _U_)
+{
+ ncpstat_t *ss;
+ const char *filter = NULL;
+ GString *error_string;
+
+ if (!strncmp(opt_arg, "ncp,srt,", 8)) {
+ filter = opt_arg + 8;
+ }
+
+ ss = g_new(ncpstat_t, 1);
+
+ /* Initialize all of the SRT tables with 0 rows. That way we can "filter" the drawing
+ function to only output tables with rows > 0 */
+ init_srt_table("NCP", &ss->ncp_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.group");
+
+ /* NCP Functions */
+ init_srt_table("NCP Functions without Subfunctions", &ss->func_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.func");
+
+ /* NCP Subfunctions */
+ init_srt_table("Subfunctions for NCP 17", &ss->sub_17_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.func==17 && ncp.subfunc");
+ init_srt_table("Subfunctions for NCP 21", &ss->sub_21_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.func==21 && ncp.subfunc");
+ init_srt_table("Subfunctions for NCP 22", &ss->sub_22_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.func==22 && ncp.subfunc");
+ init_srt_table("Subfunctions for NCP 23", &ss->sub_23_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.func==23 && ncp.subfunc");
+ init_srt_table("Subfunctions for NCP 32", &ss->sub_32_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.func==32 && ncp.subfunc");
+ init_srt_table("Subfunctions for NCP 34", &ss->sub_34_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.func==34 && ncp.subfunc");
+ init_srt_table("Subfunctions for NCP 35", &ss->sub_35_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.func==35 && ncp.subfunc");
+ init_srt_table("Subfunctions for NCP 36", &ss->sub_36_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.func==36 && ncp.subfunc");
+ init_srt_table("Subfunctions for NCP 86", &ss->sub_86_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.func==86 && ncp.subfunc");
+ init_srt_table("Subfunctions for NCP 87", &ss->sub_87_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.func==87 && ncp.subfunc");
+ init_srt_table("Subfunctions for NCP 89 (Extended NCP's with UTF8 Support)", &ss->sub_89_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.func==89 && ncp.subfunc");
+ init_srt_table("Subfunctions for NCP 90", &ss->sub_90_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.func==90 && ncp.subfunc");
+ init_srt_table("Subfunctions for NCP 92 (Secret Store Services)", &ss->sub_92_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.func==92 && ncp.subfunc");
+ init_srt_table("Subfunctions for NCP 94 (Novell Modular Authentication Services)", &ss->sub_94_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.func==94 && ncp.subfunc");
+ init_srt_table("Subfunctions for NCP 104", &ss->sub_104_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.func==104 && ncp.subfunc");
+ init_srt_table("Subfunctions for NCP 111", &ss->sub_111_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.func==111 && ncp.subfunc");
+ init_srt_table("Subfunctions for NCP 114", &ss->sub_114_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.func==114 && ncp.subfunc");
+ init_srt_table("Subfunctions for NCP 123", &ss->sub_123_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.func==123 && ncp.subfunc");
+ init_srt_table("Subfunctions for NCP 131", &ss->sub_131_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.func==131 && ncp.subfunc");
+
+ /* NDS Verbs */
+ init_srt_table("NDS Verbs", &ss->nds_srt_table, NCP_NUM_PROCEDURES, NULL, "ncp.ndsverb");
+ /* Secret Store Verbs */
+ init_srt_table("Secret Store Verbs", &ss->sss_srt_table, NCP_NUM_PROCEDURES, NULL, "sss.subverb");
+ /* NMAS Verbs */
+ init_srt_table("NMAS Verbs", &ss->nmas_srt_table, NCP_NUM_PROCEDURES, NULL, "nmas.subverb");
+
+ error_string = register_tap_listener("ncp_srt", ss, filter, 0, NULL, ncpstat_packet, ncpstat_draw);
+ if (error_string) {
+ /* error, we failed to attach to the tap. clean up */
+ free_srt_table_data(&ss->ncp_srt_table);
+ free_srt_table_data(&ss->nds_srt_table);
+ free_srt_table_data(&ss->func_srt_table);
+ free_srt_table_data(&ss->sss_srt_table);
+ free_srt_table_data(&ss->nmas_srt_table);
+ free_srt_table_data(&ss->sub_17_srt_table);
+ free_srt_table_data(&ss->sub_21_srt_table);
+ free_srt_table_data(&ss->sub_22_srt_table);
+ free_srt_table_data(&ss->sub_23_srt_table);
+ free_srt_table_data(&ss->sub_32_srt_table);
+ free_srt_table_data(&ss->sub_34_srt_table);
+ free_srt_table_data(&ss->sub_35_srt_table);
+ free_srt_table_data(&ss->sub_36_srt_table);
+ free_srt_table_data(&ss->sub_86_srt_table);
+ free_srt_table_data(&ss->sub_87_srt_table);
+ free_srt_table_data(&ss->sub_89_srt_table);
+ free_srt_table_data(&ss->sub_90_srt_table);
+ free_srt_table_data(&ss->sub_92_srt_table);
+ free_srt_table_data(&ss->sub_94_srt_table);
+ free_srt_table_data(&ss->sub_104_srt_table);
+ free_srt_table_data(&ss->sub_111_srt_table);
+ free_srt_table_data(&ss->sub_114_srt_table);
+ free_srt_table_data(&ss->sub_123_srt_table);
+ free_srt_table_data(&ss->sub_131_srt_table);
+ g_free(ss);
+
+ fprintf(stderr, "tshark: Couldn't register ncp,srt tap: %s\n",
+ error_string->str);
+ g_string_free(error_string, TRUE);
+ exit(1);
+ }
+}
+
+static stat_tap_ui ncpstat_ui = {
+ REGISTER_STAT_GROUP_GENERIC,
+ NULL,
+ "ncp,srt",
+ ncpstat_init,
+ 0,
+ NULL
+};
+
+void
+register_tap_listener_ncpstat(void)
+{
+ register_stat_tap_ui(&ncpstat_ui, NULL);
+}
+
+/*
+ * Editor modelines - http://www.wireshark.org/tools/modelines.html
+ *
+ * Local variables:
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: t
+ * End:
+ *
+ * vi: set shiftwidth=4 tabstop=4 noexpandtab:
+ * :indentSize=4:tabSize=4:noTabs=false:
+ */
diff --git a/ui/gtk/ncp_stat.c b/ui/gtk/ncp_stat.c
index 57c1fed7d9..77aa0b06aa 100644
--- a/ui/gtk/ncp_stat.c
+++ b/ui/gtk/ncp_stat.c
@@ -70,191 +70,6 @@ typedef struct _ncpstat_t {
srt_stat_table sub_131_srt_table;
} ncpstat_t;
-static const value_string ncp_group_vals[] = {
- { 0, "Synchronization" },
- { 1, "Print" },
- { 2, "File System" },
- { 3, "Connection" },
- { 4, "File Server Environment" },
- { 5, "Message" },
- { 6, "Bindery" },
- { 7, "Queue Management System (QMS)" },
- { 8, "Accounting" },
- { 9, "Transaction Tracking" },
- { 10, "AFP" },
- { 11, "NCP Extension" },
- { 12, "Extended Attribute" },
- { 13, "Auditing" },
- { 14, "Enhanced File System" },
- { 15, "Migration" },
- { 16, "Novell Modular Authentication Services (NMAS)" },
- { 17, "Secret Store Services (SSS)" },
- { 18, "Packet Burst" },
- { 19, "Novell Directory Services (NDS)" },
- { 20, "Time Synchronization" },
- { 21, "Server Statistics" },
- { 22, "Remote" },
- { 0, NULL}
-};
-
-static const value_string sss_verb_enum[] = {
- { 0x00000000, "Query Server" },
- { 0x00000001, "Read App Secrets" },
- { 0x00000002, "Write App Secrets" },
- { 0x00000003, "Add Secret ID" },
- { 0x00000004, "Remove Secret ID" },
- { 0x00000005, "Remove SecretStore" },
- { 0x00000006, "Enumerate Secret IDs" },
- { 0x00000007, "Unlock Store" },
- { 0x00000008, "Set Master Password" },
- { 0x00000009, "Get Service Information" },
- { 0x000000ff, "Fragment"},
- { 0x00000000, NULL}
-};
-
-static const value_string nmas_subverb_enum[] = {
- { 0, "Fragmented Ping" },
- { 2, "Client Put Data" },
- { 4, "Client Get Data" },
- { 6, "Client Get User NDS Credentials" },
- { 8, "Login Store Management" },
- { 10, "Writable Object Check" },
- { 1242, "Message Handler" },
- { 0, NULL}
-};
-
-static const value_string ncp_nds_verb_vals[] = {
- { 1, "Resolve Name" },
- { 2, "Read Entry Information" },
- { 3, "Read" },
- { 4, "Compare" },
- { 5, "List" },
- { 6, "Search Entries" },
- { 7, "Add Entry" },
- { 8, "Remove Entry" },
- { 9, "Modify Entry" },
- { 10, "Modify RDN" },
- { 11, "Create Attribute" },
- { 12, "Read Attribute Definition" },
- { 13, "Remove Attribute Definition" },
- { 14, "Define Class" },
- { 15, "Read Class Definition" },
- { 16, "Modify Class Definition" },
- { 17, "Remove Class Definition" },
- { 18, "List Containable Classes" },
- { 19, "Get Effective Rights" },
- { 20, "Add Partition" },
- { 21, "Remove Partition" },
- { 22, "List Partitions" },
- { 23, "Split Partition" },
- { 24, "Join Partitions" },
- { 25, "Add Replica" },
- { 26, "Remove Replica" },
- { 27, "Open Stream" },
- { 28, "Search Filter" },
- { 29, "Create Subordinate Reference" },
- { 30, "Link Replica" },
- { 31, "Change Replica Type" },
- { 32, "Start Update Schema" },
- { 33, "End Update Schema" },
- { 34, "Update Schema" },
- { 35, "Start Update Replica" },
- { 36, "End Update Replica" },
- { 37, "Update Replica" },
- { 38, "Synchronize Partition" },
- { 39, "Synchronize Schema" },
- { 40, "Read Syntaxes" },
- { 41, "Get Replica Root ID" },
- { 42, "Begin Move Entry" },
- { 43, "Finish Move Entry" },
- { 44, "Release Moved Entry" },
- { 45, "Backup Entry" },
- { 46, "Restore Entry" },
- { 47, "Save DIB (Obsolete)" },
- { 48, "Control" },
- { 49, "Remove Backlink" },
- { 50, "Close Iteration" },
- { 51, "Mutate Entry" },
- { 52, "Audit Skulking" },
- { 53, "Get Server Address" },
- { 54, "Set Keys" },
- { 55, "Change Password" },
- { 56, "Verify Password" },
- { 57, "Begin Login" },
- { 58, "Finish Login" },
- { 59, "Begin Authentication" },
- { 60, "Finish Authentication" },
- { 61, "Logout" },
- { 62, "Repair Ring (Obsolete)" },
- { 63, "Repair Timestamps" },
- { 64, "Create Back Link" },
- { 65, "Delete External Reference" },
- { 66, "Rename External Reference" },
- { 67, "Create Queue Entry Directory" },
- { 68, "Remove Queue Entry Directory" },
- { 69, "Merge Entries" },
- { 70, "Change Tree Name" },
- { 71, "Partition Entry Count" },
- { 72, "Check Login Restrictions" },
- { 73, "Start Join" },
- { 74, "Low Level Split" },
- { 75, "Low Level Join" },
- { 76, "Abort Partition Operation" },
- { 77, "Get All Servers" },
- { 78, "Partition Function" },
- { 79, "Read References" },
- { 80, "Inspect Entry" },
- { 81, "Get Remote Entry ID" },
- { 82, "Change Security" },
- { 83, "Check Console Operator" },
- { 84, "Start Move Tree" },
- { 85, "Move Tree" },
- { 86, "End Move Tree" },
- { 87, "Low Level Abort Join" },
- { 88, "Check Security Equivalence" },
- { 89, "Merge Tree" },
- { 90, "Sync External Reference" },
- { 91, "Resend Entry" },
- { 92, "New Schema Epoch" },
- { 93, "Statistics" },
- { 94, "Ping" },
- { 95, "Get Bindery Contexts" },
- { 96, "Monitor Connection" },
- { 97, "Get DS Statistics" },
- { 98, "Reset DS Counters" },
- { 99, "Console" },
- { 100, "Read Stream" },
- { 101, "Write Stream" },
- { 102, "Create Orphan Partition" },
- { 103, "Remove Orphan Partition" },
- { 104, "Link Orphan Partition" },
- { 105, "Set Distributed Reference Link (DRL)" },
- { 106, "Available" },
- { 107, "Available" },
- { 108, "Verify Distributed Reference Link (DRL)" },
- { 109, "Verify Partition" },
- { 110, "Iterator" },
- { 111, "Available" },
- { 112, "Close Stream" },
- { 113, "Available" },
- { 114, "Read Status" },
- { 115, "Partition Sync Status" },
- { 116, "Read Reference Data" },
- { 117, "Write Reference Data" },
- { 118, "Resource Event" },
- { 119, "DIB Request (obsolete)" },
- { 120, "Set Replication Filter" },
- { 121, "Get Replication Filter" },
- { 122, "Change Attribute Definition" },
- { 123, "Schema in Use" },
- { 124, "Remove Keys" },
- { 125, "Clone" },
- { 126, "Multiple Operations Transaction" },
- { 240, "Ping" },
- { 255, "EDirectory Call" },
- { 0, NULL }
-};
-
static void
ncpstat_set_title(ncpstat_t *ss)
{