Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 09 Mar 2015 01:56:17 +0000
From:      bugzilla-noreply@freebsd.org
To:        freebsd-ports-bugs@FreeBSD.org
Subject:   [Bug 198441] net/socat: changing speed on many serial devices does not work
Message-ID:  <bug-198441-13@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=198441

            Bug ID: 198441
           Summary: net/socat: changing speed on many serial devices does
                    not work
           Product: Ports & Packages
           Version: Latest
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: Individual Port(s)
          Assignee: ehaupt@FreeBSD.org
          Reporter: fbsd.bugzilla@fenyo.net
          Assignee: ehaupt@FreeBSD.org
             Flags: maintainer-feedback?(ehaupt@FreeBSD.org)

Created attachment 154044
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=154044&action=edit
add the content of this file in net/socat/files/patch-xioopts.c - this is a
patch for socat 1.7.3.0

With SOCAT on systems where b0 to b4000000 options are not available, like
FreeBSD, setting the speed of a TERMIOS terminal is done using the ispeed and
ospeed options.

But when using simultaneously ispeed and ospeed parameters with SOCAT, the
speed values are set within two distinct ioctl requests, so changing the speed
of terminals or devices that need matching input and output returns an Invalid
argument error (the TIOCSETA/TIOCSETAW/TIOCSETAF ioctl returns -1 and sets
errno to EINVAL).

This is especially the case On FreeBSD, where many tty device drivers need
matching input and output speeds:
- those that depend on ucom(4): uark(4), ubsa(4), ubser(4), uftdi(4), umcs(4),
uplcom(4), uslcom(4), uvscom(4)
- some others, even not depending on ucom(4): sio(4), digi(4), rp(4)
But some don't: tty(4)

With those drivers, the input and output speeds must match and be set inside a
single ioctl request (TIOCSETA, TIOCSETAW or TIOCSETAF). The only exception to
this rule is when the input baud rate is zero because, according to POSIX, in
that case, the input baud rate is set equal to the output baud rate.

For instance, this call to SOCAT on FreeBSD 10.1 terminates immediately with an
EINVAL error:
# socat -d /dev/cuaU2,ispeed=57600,ospeed=57600,echo=0,raw
TCP-LISTEN:9000,reuseaddr
2015/03/09 00:43:33 socat[20723] E tcsetattr(3, TCSADRAIN, 0x7fffffffe148):
Invalid argument

The attached patch avoids this type of error: when setting both input and
output speeds, only one ioctl syscall is performed.

-- 
You are receiving this mail because:
You are the assignee for the bug.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-198441-13>