diff options
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | epan/dissectors/packet-ncp-int.h | 186 | ||||
-rw-r--r-- | epan/dissectors/packet-ncp-nmas.c | 11 | ||||
-rw-r--r-- | epan/dissectors/packet-ncp-sss.c | 16 | ||||
-rwxr-xr-x | tools/ncp2222.py | 132 | ||||
-rw-r--r-- | ui/cli/Makefile.common | 1 | ||||
-rw-r--r-- | ui/cli/tap-ncpstat.c | 440 | ||||
-rw-r--r-- | ui/gtk/ncp_stat.c | 185 |
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) { |