On Sun, Jan 4, 2015 at 1:32 AM, Luke Mewburn <l...@mewburn.net> wrote:
> Hi all. > > I've observed that Wireshark's TCAP session (transaction) matching > (enabled with tcap.srt:TRUE) doesn't operate correctly in various cases. > > I've been working on improving Wireshark's TCAP session handling, > and have some questions about the "best" way to do this as a new > contributor to the Wireshark development community. > > I'm not sure if it's preferable to describe all of the issues > in one 'wall of text' email or split up the discussions across > multiple messages; I've gone with the former :) > > Please let me know if the issues should be split out into separate > discussions, or if there's a better forum for this (e.g. bugzilla > tickets). > > regards, > Luke. > > > Specific fixes > -------------- > > 1. SCCP GT not set if route-on-SSN. > > DETAILS:: When sccp.set_addresses is TRUE, the GT isn't used if present > when the SCCP route-on-SSN bit is set (i.e not route-on-GT). > The GT is still useful for TCAP matching even in this case. > > PROPOSAL: I've submitted a change for this at: > https://code.wireshark.org/review/#/c/6053/ > (The second patch attempt is a minor improvement to the wording > of the preference after the changes in the original patch). > > > 2. TCAP session matching incomplete. > > DETAILS: TCAP session matching doesn't cope with TCAP dialogue > confirmation. (See "TCAP background" below for more information > about dialogue confirmation). > > This is because the current implementation uses the destination > address for TCAP BEGIN matching (tcaphash_begin_info_key_t.dpc_hash), > and origin address for TCAP END matching > (tcaphash_end_info_key_t.opc_hash). > > When TCAP sessions (transactions) aren't correctly matched, > then higher level dissectors can mistakenly decode packets > part-way through the session because of assumptions about > protocol versions (etc). There are existing Wireshark > bugs in TCAP (and higher layer) that may be fixed by addressing this > > PROPOSAL: I have some changes to be submitted for review which > resolves this, and greatly improves transaction matching when > sccp.set_addresses:TRUE and tcap.srt:TRUE, even when the destination > address of the TCAP BEGIN changes as part of dialogue (transaction) > confirmation. > > > Future proposals > ---------------- > > (These could be moved into separate discussions). > > 1. SCCP addresses not set by default. > > DETAILS: By default, the SCCP GT is not set as the source and destination > addresses for higher layer protocols. The MTP3 (or M3UA) point codes > (PCs) are left as these addresses. > This can be changed with the preference option sccp.set_addresses. > For TCAP transaction matching, the SCCP GT is more correct than the > MTP3 PC. > > PROPOSAL: The sccp.set_addresses default could change to TRUE (and > possibly the SUA equivalent, although I haven't any experience with > SUA), but I'm not sure what ramifications that this has on protocols > other than TCAP that use SCCP. > > > 2. TCAP filters for party addresses. > > DETAILS: I've experimented with adding new filter nodes to contain the > (SCCP GT) addresses of the original calling party (from TCAP BEGIN), > the original called party (from TCAP BEGIN), and the confirmed party > (from first TCAP CONTINUE or END-after-BEGIN). > > These depend upon the SCCP addresses set (see above) and > the session matching fixed. > > PROPOSAL: Add new filters. I have a work in progress for this > which could be submitted for review. > > > 3. TCAP session matching not enabled by default. > > DETAILS: The session matching isn't enabled by default. > I suspect that this is because it has a performance impact > and that it doesn't work reliably (without my fixes :). > > PROPOSAL: Once the session matching is fixed, it could be > enabled by default. > > > 4. TCAP converted to conversation.h (after the latter is enhanced) > > DETAILS: TCAP uses its own session matching logic. If the standard > "conversation.h" implementation was used, then there may be other > benefits such as following conversation flows. > > I've experimented with this in a private branch, but ran into issues in > the current conversation.h implementation that need to be addressed > for TCAP. > > I implemented a new port type - PT_TCAP - to contain the TCAP > transaction ID (TID). > > As described below in "TCAP background": > > - TCAP BEGIN contains a src addr, otid (src port), and dst addr. > The dst addr may change in the first CONTINUE. > > We have to create the conversation with NO_ADDR2 as well as NO_PORT2, > which results in the conversation added to > conversation_hashtable_no_addr2_or_port2. > > - TCAP CONTINUE contains src addr, otid, dst addr, dtid. > > Looking this up with find_conversation() seems to work; > if it's the first CONTINUE the conversation is moved from > conversation_hashtable_no_addr2_or_port2 to > conversation_hashtable_exact. > > - TCAP END & ABORT contains the dst addr, dtid (dst port), and src addr > without src port (otid). > The dst addr may change in the first CONTINUE or an END after BEGIN. > > If the TCAP END is after a BEGIN, the conversation may be found > from conversation_hashtable_no_addr2_or_port2 if the addresses are > swapped, but if a TCAP CONTINUE is part of the transaction the > conversation will have been moved to conversation_hashtable_exact > and thus can't be found without the src port. > > PROPOSAL: Further investigation and discussion is required about how > to enhance conversation.h to resolve this. > I suspect we need special-case handling in find_conversation() (etc) > for PT_TCAP, including possibly a separate hashtable or keeping > the TCAP BEGIN in the conversation_hashtable_no_addr2_or_port2 in > parallel to the entry in conversation_hashtable_exact. > > > 5. Passing sccp_msg_info_t to child dissectors. > > DETAILS: sccp only passes the sccp_msg_info_t to child dissectors > if SCCP tracing is enabled and there's an SCCP association (i.e. > SCCP connection-based protocols). > > It could be useful to provide the sccp_msg_info_t sccp_msg member > of sccp_decode_context_t to TCAP (and possibly other connectionless) > dissectors so they can obtain SCCP addressing directly. > > I'm still experimenting with this. > > > TCAP background > --------------- > > TCAP (as described in ITU-T Q.771 (06/97) (et al)) uses SCCP for > addressing when used in SS7 networks. > Q.771 mentions that further study is required if other (non-SCCP) > networks are to be used; I'm not aware if any are. > > TCAP supports transactions (between two peers) with a structured > dialogue with transaction IDs, with each peer using its own > transaction ID, with TCAP messages BEGIN, CONTINUE, END, ABORT. > > TCAP uses originating and destination address from SCCP; > the SCCP calling party is the origination address, > the SCCP called party is the destination address. > > TCAP BEGIN has an originating transaction ID (OTID). > TCAP END & ABORT has a destination transaction ID (DTID). > TCAP CONTINUE has both an OTID and DTID. > > Common TCAP transaction patterns include: > > (1) TCAP BEGIN orig=A otid=At -> dest=B > TCAP END orig=B -> dest=A dtid=At > > (2) TCAP BEGIN orig=A otid=At -> dest=B > TCAP CONTINUE orig=B otid=Bt -> dest=A dtid=At > TCAP CONTINUE orig=A otid=At -> dest=B dtid=Bt > TCAP END orig=B -> dest=A dtid=At > > Note that the END (or ABORT) doesn't contain the otid. > > > TCAP also supports the concept of "dialogue confirmation" - > see Q.771 clause 3.1.2.2.2.2 "Confirmation of the dialogue". > This means that the first CONTINUE in a transaction can change > the orig address. The pattern for this can be: > > (3) TCAP BEGIN orig=A otid=At -> dest=B > TCAP CONTINUE orig=B2 otid=Bt -> dest=A dtid=At > TCAP CONTINUE orig=A otid=At -> dest=B2 dtid=Bt > TCAP END orig=B2 -> dest=A dtid=At > The BEGIN was to dest=B, the first CONTINUE was orig=B2. > > In practice, a transaction consisting of BEGIN then END (pattern (1) > above) can also do this in the END. > > The better is create a bug in bugtracker with subject like : Enhance TCAP dissector (and list the list of issue/change) and push your patch on gerrit with in commit log the reference to this bug (Ping-Bug: XXXX) Also attach in bug, some pcap sample for try. Regards, > > -- > > ___________________________________________________________________________ > Sent via: Wireshark-dev mailing list <wireshark-dev@wireshark.org> > Archives: http://www.wireshark.org/lists/wireshark-dev > Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev > mailto:wireshark-dev-requ...@wireshark.org > ?subject=unsubscribe >
___________________________________________________________________________ Sent via: Wireshark-dev mailing list <wireshark-dev@wireshark.org> Archives: http://www.wireshark.org/lists/wireshark-dev Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev mailto:wireshark-dev-requ...@wireshark.org?subject=unsubscribe