diff options
author | Michael Mann <mmann78@netscape.net> | 2015-02-08 13:49:57 -0500 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2015-02-09 01:13:28 +0000 |
commit | 2042385ac9eaa7e512b1a0b9af2f916324314e63 (patch) | |
tree | 78a92e5df2c01c53699fced1e7e56495f00b9314 /epan/column-utils.c | |
parent | 4497bb48fd3439474049f7c5e86b4ffa1df35828 (diff) |
Add "column filter string" support to address types.
Information about dissector (filter) fields should be kept in a dissector as much as possible. Supporting "column filter string" also allows other dissectors to create their own "address types" with different column filters (because AT_ETHER isn't always an "Ethernet" address).
This feature also allowed a few "dissector specific" address types to be moved to their own dissector.
Change-Id: Ie9024af4db62bc2ee4f8c9d28a1d807f706f45bf
Ping-Bug:7728
Reviewed-on: https://code.wireshark.org/review/7029
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan/column-utils.c')
-rw-r--r-- | epan/column-utils.c | 64 |
1 files changed, 5 insertions, 59 deletions
diff --git a/epan/column-utils.c b/epan/column-utils.c index 018cdf5efb..06e8fbee23 100644 --- a/epan/column-utils.c +++ b/epan/column-utils.c @@ -31,6 +31,7 @@ #include "packet_info.h" #include "wsutil/pint.h" #include "addr_resolv.h" +#include "address_types.h" #include "ipv6-utils.h" #include "osi-utils.h" #include "value_string.h" @@ -1850,66 +1851,10 @@ col_set_addr(packet_info *pinfo, const int col, const address *addr, const gbool if (!fill_col_exprs) return; - switch (addr->type) { - case AT_AX25: - if (is_src) - pinfo->cinfo->col_expr.col_expr[col] = "ax25.src"; - else - pinfo->cinfo->col_expr.col_expr[col] = "ax25.dst"; - address_to_str_buf(addr, pinfo->cinfo->col_expr.col_expr_val[col], COL_MAX_LEN); - break; - - case AT_ETHER: - if (is_src) - pinfo->cinfo->col_expr.col_expr[col] = "eth.src"; - else - pinfo->cinfo->col_expr.col_expr[col] = "eth.dst"; - address_to_str_buf(addr, pinfo->cinfo->col_expr.col_expr_val[col], COL_MAX_LEN); - break; - - case AT_IPv4: - if (is_src) - pinfo->cinfo->col_expr.col_expr[col] = "ip.src"; - else - pinfo->cinfo->col_expr.col_expr[col] = "ip.dst"; - ip_to_str_buf((const guint8 *)addr->data, pinfo->cinfo->col_expr.col_expr_val[col], COL_MAX_LEN); - break; - - case AT_IPv6: - if (is_src) - pinfo->cinfo->col_expr.col_expr[col] = "ipv6.src"; - else - pinfo->cinfo->col_expr.col_expr[col] = "ipv6.dst"; - address_to_str_buf(addr, pinfo->cinfo->col_expr.col_expr_val[col], COL_MAX_LEN); - break; - - case AT_ATALK: - if (is_src) - pinfo->cinfo->col_expr.col_expr[col] = "ddp.src"; - else - pinfo->cinfo->col_expr.col_expr[col] = "ddp.dst"; - g_strlcpy(pinfo->cinfo->col_expr.col_expr_val[col], pinfo->cinfo->col_buf[col], COL_MAX_LEN); - break; - - case AT_ARCNET: - if (is_src) - pinfo->cinfo->col_expr.col_expr[col] = "arcnet.src"; - else - pinfo->cinfo->col_expr.col_expr[col] = "arcnet.dst"; - g_strlcpy(pinfo->cinfo->col_expr.col_expr_val[col], pinfo->cinfo->col_buf[col], COL_MAX_LEN); - break; - - case AT_URI: - if (is_src) - pinfo->cinfo->col_expr.col_expr[col] = "uri.src"; - else - pinfo->cinfo->col_expr.col_expr[col] = "uri.dst"; + pinfo->cinfo->col_expr.col_expr[col] = address_type_column_filter_string(addr, is_src); + /* For address types that have a filter, create a string */ + if (strlen(pinfo->cinfo->col_expr.col_expr[col]) > 0) address_to_str_buf(addr, pinfo->cinfo->col_expr.col_expr_val[col], COL_MAX_LEN); - break; - - default: - break; - } /* Some addresses (e.g. ieee80211) use a standard format like AT_ETHER but * don't use the same hf_ value (and thus don't use the same filter string). @@ -1917,6 +1862,7 @@ col_set_addr(packet_info *pinfo, const int col, const address *addr, const gbool * value they use. If they did so, we overwrite the default filter string * with their specific one here. See bug #7728 for further discussion. * https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7728 */ + /* XXX - can the new address types fix this and prevent the need for this logic? */ if (addr->hf != -1) { pinfo->cinfo->col_expr.col_expr[col] = proto_registrar_get_nth(addr->hf)->abbrev; } |