We as Siemens Mobility GmbH are using the n_gsm module as specified by 3GPP 27.010 and required by UNISIG SUBSET-037 chapter 6 of the European train control system standard to establish multiple parallel connections to GSM-R radio mobiles as used in our communication system. This is needed to handle CS (circuit switched) and PS (packet switched) services and functions in parallel. It requires at least four multiplexed data link connections (DLCs), including the control channel. It also requires the use of convergence layer type 2 in advanced option mode. We have improved support for this use case and the overall stability of the driver to achieve this. The modified driver was extensively tested and is already included in our productive system. We have integrated it with mobiles from Funkwerk Systems GmbH and Triorail Bahnfunk GmbH. A rough summary of changes made can be found below. The patch presented here shall provide a first impression of the planned upcoming commits and allow others to test and comment on these at an early stage. We plan to separate these changes and commit smaller change sets of this. But this is still work in progress. Our motivation of this commitment to the community lies in a smoother migration to upcoming kernel versions, a broader use for a better test coverage and an overall better quality of the driver. In a first step a set of bug fixes unrelated to the new functions has already been committed. [CR] Changes included: [1] added: proper n_gsm Kernel module information fields and module version [2] added: optional start-of-frame flag skipping in advanced option mode [3] added: UI (unnumbered information) frame support [4] added: PN (parameter negotiation) message handling and function support [5] added: optional keep-alive control link supervision via Test messages [6] added: proc fs files to provide meta data for the n_gsm instances [7] added: various parameter gated kernel debug messages [8] added: option for strict mode to reject non-standard compliant behavior [9] added: TIOCM_OUT1 and TIOCM_OUT2 to allow responder to operate as modem [10] added: TIOCMIWAIT support on virtual ttys [11] added: additional ioctls and parameters to configure the new functions [12] added: more function comments and aligned all to the coding guidelines [13] changed: overall locking mechanism to avoid data race conditions [14] changed: outgoing data flow to decouple physical from virtual tty handling for better performance and to avoid dead-locks [15] fixed: advanced option mode implementation [16] fixed: convergence layer type 2 implementation [17] fixed: handling of CLD (multiplexer close down) messages [18] fixed: broken muxer close down procedure [NO] Points that remain open and are out of scope here: [1] DLCI priority handling according to the configured values. The priority is currently only handled according to the DLCI number. [2] correct flow control handling (the standard is ambiguous, ch. 5.4.8.1) [3] combined opening and closing flag handling in basic option mode (ch. 5.2.6.1; the data can be ambiguous) [4] power control services (ch. 5.1.5 and 5.4.7) [5] error recovery mode option (ch. 6) [6] convergence layer type 3 and 4 (ch. 5.5.3 and 5.5.4) [7] remote port negotiation (ch. 5.1.8.2.1 and 5.4.6.3.9) [8] service negotiation (ch. 5.1.8.1.2 and 5.4.6.3.11) The referenced chapters can be found in 3GPP TS 27.010. See link below. [X] Furthermore, the following commits conflict with this implementation: [1] commit 509067bbd264 ("tty: n_gsm: Delete gsm_disconnect when config requester") [2] commit 5b87686e3203 ("tty: n_gsm: Modify gsmtty driver register method when config requester") [3] commit 0b91b5332368 ("tty: n_gsm: Save dlci address open status when config requester") [4] commit 46292622ad73 ("tty: n_gsm: clean up indenting in gsm_queue()") [X1] conflicts with the new implementation for parameter negotiation. [X2], [X3] and [X4] implement dynamic virtual tty registration to allow uevents on the responder side. However, on responder side an application may first want to configure the link before it is established. That is why the virtual ttys need to be available directly after the control channel establishment. The responder still gets informed about a line open by waiting for DTR (data terminal ready) to be set. Just like on a physical serial interface. Please provide comments and hints for the integration of these changes into the upcoming Linux kernel. Feel free to refer to specific points by the given identifier (e.g. CR11 for TIOCMIWAIT support). With best regards, Daniel Starke Link: https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=1516 Link: https://www.era.europa.eu/sites/default/files/filesystem/ertms/ccs_tsi_annex_a_-_mandatory_specifications/set_of_specifications_3_etcs_b3_r2_gsm-r_b1/index010_-_subset-037_v320.pdf Daniel Starke (1): tty: n_gsm: improve standard compliance and feature completeness drivers/tty/n_gsm.c | 4523 +++++++++++++++++++++++++---------- include/uapi/linux/gsmmux.h | 70 +- 2 files changed, 3364 insertions(+), 1229 deletions(-) -- 2.25.1