From 0eeeab7c5ed269be238d9faebfba85c0c84b1f4b Mon Sep 17 00:00:00 2001 From: Michal Pazdera Date: Mon, 5 Oct 2015 12:25:05 +0200 Subject: H225, H245 over IPv6 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit extends h225 and h245 dissectors to support dissection of ipv6 packets. Change-Id: Id8c045344711a96f15d619ddd72065aa3712c429 Reviewed-on: https://code.wireshark.org/review/10799 Reviewed-by: Tomáš Kukosa Petri-Dish: Anders Broman Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman --- asn1/h225/h225.cnf | 33 +++++++++++++++++++++++++-------- asn1/h225/packet-h225-template.c | 8 ++++---- 2 files changed, 29 insertions(+), 12 deletions(-) (limited to 'asn1/h225') diff --git a/asn1/h225/h225.cnf b/asn1/h225/h225.cnf index b34e55a3e6..9315e047a2 100644 --- a/asn1/h225/h225.cnf +++ b/asn1/h225/h225.cnf @@ -327,7 +327,18 @@ IsupNumber/nationalStandardPartyNumber isupNationalStandardPartyNumber ipv4_address = tvb_get_ipv4(value_tvb, 0); #.END #---------------------------------------------------------------------------------------- -#.FN_PARS H245TransportAddress/ipAddress/port VAL_PTR = &ipv4_port +#.FN_BODY H245TransportAddress/ip6Address/ip VAL_PTR = &value_tvb + tvbuff_t *value_tvb; + + ipv6_address = ipv6_address_zeros; +%(DEFAULT_BODY)s + if (value_tvb) + tvb_get_ipv6(value_tvb, 0, &ipv6_address); +#.END +#---------------------------------------------------------------------------------------- +#.FN_PARS H245TransportAddress/ipAddress/port VAL_PTR = &ip_port +#---------------------------------------------------------------------------------------- +#.FN_PARS H245TransportAddress/ip6Address/port VAL_PTR = &ip_port #---------------------------------------------------------------------------------------- #.FN_BODY ParallelH245Control/_item VAL_PTR = &h245_tvb tvbuff_t *h245_tvb = NULL; @@ -430,7 +441,8 @@ IsupNumber/nationalStandardPartyNumber isupNationalStandardPartyNumber #---------------------------------------------------------------------------------------- #.FN_HDR H245TransportAddress ipv4_address=0; - ipv4_port=0; + ipv6_address = ipv6_address_zeros; + ip_port=0; #.END #---------------------------------------------------------------------------------------- @@ -438,21 +450,26 @@ IsupNumber/nationalStandardPartyNumber isupNationalStandardPartyNumber /* we need this info for TAPing */ h225_pi->is_h245 = TRUE; h225_pi->h245_address = ipv4_address; - h225_pi->h245_port = ipv4_port; + h225_pi->h245_port = ip_port; - if((!actx->pinfo->fd->flags.visited) && ipv4_address!=0 && ipv4_port!=0 && h245_handle){ + if ( !actx->pinfo->fd->flags.visited && h245_handle && ip_port!=0 ) { address src_addr; conversation_t *conv=NULL; - SET_ADDRESS(&src_addr, AT_IPv4, 4, &ipv4_address); + if (ipv4_address!=0) { + SET_ADDRESS(&src_addr, AT_IPv4, 4, &ipv4_address); + } else if (memcmp(ipv6_address.bytes, ipv6_address_zeros.bytes, sizeof(ipv6_address.bytes))!=0) { + SET_ADDRESS(&src_addr, AT_IPv6, 16, ipv6_address.bytes); + } else { + return offset; + } - conv=find_conversation(actx->pinfo->fd->num, &src_addr, &src_addr, PT_TCP, ipv4_port, ipv4_port, NO_ADDR_B|NO_PORT_B); + conv=find_conversation(actx->pinfo->fd->num, &src_addr, &src_addr, PT_TCP, ip_port, ip_port, NO_ADDR_B|NO_PORT_B); if(!conv){ - conv=conversation_new(actx->pinfo->fd->num, &src_addr, &src_addr, PT_TCP, ipv4_port, ipv4_port, NO_ADDR2|NO_PORT2); + conv=conversation_new(actx->pinfo->fd->num, &src_addr, &src_addr, PT_TCP, ip_port, ip_port, NO_ADDR2|NO_PORT2); conversation_set_dissector(conv, h245_handle); } } - #.END #---------------------------------------------------------------------------------------- #.FN_BODY FacilityReason VAL_PTR = &value diff --git a/asn1/h225/packet-h225-template.c b/asn1/h225/packet-h225-template.c index cf6cfc31fb..9e78f785ee 100644 --- a/asn1/h225/packet-h225-template.c +++ b/asn1/h225/packet-h225-template.c @@ -52,7 +52,6 @@ #include "packet-q931.h" #include "packet-ssl.h" - #define PNAME "H323-MESSAGES" #define PSNAME "H.225.0" #define PFNAME "h225" @@ -141,8 +140,10 @@ static gboolean h225_h245_in_tree = TRUE; static gboolean h225_tp_in_tree = TRUE; /* Global variables */ -static guint32 ipv4_address; -static guint32 ipv4_port; +static guint32 ipv4_address; +static struct e_in6_addr ipv6_address; +static struct e_in6_addr ipv6_address_zeros = {{0}}; +static guint32 ip_port; static gboolean contains_faststart = FALSE; static e_guid_t *call_id_guid; @@ -248,7 +249,6 @@ h225rassrt_packet(void *phs, packet_info *pinfo _U_, epan_dissect_t *edt _U_, co #include "packet-h225-fn.c" - /* Forward declaration we need below */ void proto_reg_handoff_h225(void); -- cgit v1.2.3