---
name: "gensio_control"
section: "3"
platform: "linux"
package: "gensio"
version: "3.0.4-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/gensio_control"
---

# gensio\_control(3)

Perform gensio-specific actions

## NAME

gensio\_control - Perform gensio-specific actions

## SYNOPSIS

**#include \<gensio/gensio.h\>**

- **int gensio\_control(struct gensio \*io, int depth, bool get,**

  **unsigned int option,**\
   **char \*data, gensiods \*datalen);**

- **typedef void (\*gensio\_control\_done)(struct gensio \*io, int err,**

  **const char \*buf, gensiods len,**\
   **void \*cb\_data);**

- **int gensio\_acontrol(struct gensio \*io, int depth, bool get,**

  **unsigned int option,**\
   **char \*data, gensiods datalen,**\
   **gensio\_control\_done done, void \*cb\_data,**\
   **gensio\_time \*timeout);**

- **int gensio\_acontrol\_s(struct gensio \*io, int depth, bool get,**

  **unsigned int option,**\
   **char \*data, gensiods \*datalen,**\
   **gensio\_time \*timeout);**

- **int gensio\_acontrol\_s\_intr(struct gensio \*io, int depth, bool get,**

  **unsigned int option,**\
   **char \*data, gensiods \*datalen,**\
   **gensio\_time \*timeout);**

- **const char \*gensio\_parity\_to\_str(unsigned int ival);**

  - **int gensio\_str\_to\_parity(char \*sval);**

  - **const char \*gensio\_flowcontrol\_to\_str(unsigned int ival);**

  - **int gensio\_str\_to\_flowcontrol(char \*sval);**

  - **const char \*gensio\_onoff\_to\_str(unsigned int ival);**

  - **int gensio\_str\_to\_onoff(char \*sval);**

  ## DESCRIPTION

**gensio\_control** performs a gensio-specific operation on the gensio (if *depth* is 0) or one of its children ( *depth \> 0). If depth is* *GENSIO\_CONTROL\_DEPTH\_ALL,* then call all the children with the data. *GE\_NOTSUP* error returns from individual gensios are ignored in that case, but it will stop at the first error besides that.  If depth is GENSIO\_CONTROL\_DEPTH\_FIRST, it will return on the first gensio that doesn't return *GE\_NOTSUP.* It returns *GE\_NOTFOUND* if nothing handled it.

If you specify a depth \>= 0, and depth is greater than the number of gensios in the stack, this will return *GE\_NOTFOUND.* This way you can know if you reached the bottom of the stack.

Most controls use normal strings for configuration, a control will be this way unless othersise specified.  Some controls allow binary information to be passed.

If *get* is *GENSIO\_CONTROL\_GET* (true), attempt to fetch the option.  You cannot use *GENSIO\_CONTROL\_DEPTH\_ALL* with a fetch.  To fetch an option, you must pass in data long enough to hold the output and set *datalen* to the number of bytes available in *data* for the output.  It will return the length of the string (like strlen, not including the terminating nil) or binary data in *datalen.*

An operation with *get* set to *GENSIO\_CONTROL\_SET* (false) is a set operation, it will set values or controls in the gensio. For string values, *datalen* is not used in a put operation or for determining the length of the input string in *data,* it must be a nil terminated string.  For binary values, *datalen* must be provided.

All normal controls fetch data immediately and do not block.

**gensio\_acontrol** does a control that is asynchronous, meaning that it is not finished when the function returns.  If it returns zero, the done callback will be called with the result when the operation completes. All asynchronous control options start with **GENSIO\_ACONTROL\_xxx.** Asynchronous controls do not allow GENSIO\_CONTROL\_DEPTH\_ALL, they can only be called on a single gensio in the stack.

**gensio\_acontrol\_s** does an asynchronous control, but waits until the operation completes using an os function waiter.

The timeout values on the acontrol functions is a hint to the code, it may or may not have any effect.  It is not necessarily updated to the remaining time, either.  For telnet, this updates the default time to wait for a result.  For serialdev it has no effect, as those operations are immediate.  It is ignored for ipmisol.

A get operation is always indempotent (it won't change anything, so multiple calls will not have any effect on the state of the system). A get operation may or may not use information passed in *data,* and returns information in the *data* field.

If the output does not fit in a get operation, *datalen* is updated to where it would have been if it had enough bytes (one less than the total number of bytes required for string controls), but the output in *data* is truncated (and nil terminated if possible for string controls). This can be used to probe to see how long a buffer is required by passing in a zero *\*datalen,* and then allocating *\*datalen* (+ 1 for string gensios) and calling the function again with that data.

gensio control operations in *option* depend on the particular gensio.  Below some are documented, but there may be other controls available.  See the gensio documentation in [gensio(5)](/gensio/5.md) for details.

### GENSIO\_CONTROL\_NODELAY

Set the enable/disable for any NAGLE type algorithms. For put the *data* should be a string "1" to disable delay, or "0" to enable delay. Return value from a get is a string "1" or "0".

### GENSIO\_CONTROL\_STREAMS

Return information about incoming and outgoing streams for the gensio. This is read(get)-only and returns the value in the data in the form "instream=\<n\>,ostream=\<n\>".  Used by SCTP.

### GENSIO\_CONTROL\_SEND\_BREAK

Request that a break be sent over the line (primarily for telnet).

### GENSIO\_CONTROL\_GET\_PEER\_CERT\_NAME

Return the object from the certificate from the remote end.  This is primarily for SSL and certauth so the application can validate the certificate's common name, but it can fetch any object from the certificate.

There are two ways to use this interface: fetch by index or fetch by object type.

To fetch by index, just pass in a number in the data, like "0" and it will fetch the value at that index.

To fetch by object type, pass in a number and the object type separated by a comma.  The object type to fetch is SN (short name) or LN (long name) descriptor per /usr/include/openssl/object.h.  Like "CN" or "commonName".  The index should be one less than the start search, you should use -1, for instance to fetch the first index.

The data returned is in the form: "\<index\>,\<sn\>,\<value\>". Where sn is the short name.

In fetch by object type mode, there may be more than one of an object in a certificate, so this interface can handle that. just pass in the index returned by the first into the second call and it will start after that index.  For instance, to fetch the first common name, do (with error checking removed for clarity):

-

  strcpy(data, "-1,CN");\
   gensio\_control(io, 0, true, data, &len)

Say it returns "3,CN,MyName.org"  You would use

-

  strcpy(data, "3,CN");\
   gensio\_control(io, 0, true, data, &len)

to get the next common name, which might be "4,CN,MyName2.org". You get an GE\_NOTFOUND at the end.

Returns *GE\_NOCERT if there is no remote certificate,* *GE\_CERTINVAL* if the passed in object name is not valid, and *GE\_NOTFOUND* if the object was not available in the certificate.

### GENSIO\_CONTROL\_CERT\_AUTH

Set the certificate authority file to the string in *data.* If it ends in '/', it is assumed to be a directory, otherwise it is assumed to be a file.  This generally must be done before authorization is done, generally before open or in the *GENSIO\_EVENT\_PRECERT\_VERIFY* event (see [gensio\_event(3)](/gensio_event/3.md) for details).

### GENSIO\_CONTROL\_USERNAME

Get/set the username for the gensio, generally the username sent from the client end on a certauth gensio.  This is always a string.

### GENSIO\_CONTROL\_PASSWORD

Get/set the password for the gensio, generally the password sent from the client end on a certauth gensio.  This is always a string.  On the server side this will only be available in the *GENSIO\_EVENT\_PASSWORD\_VERIFY* event. and is cleared outside of that.

### GENSIO\_CONTROL\_2FA

Get/set the 2-factor auth data for the gensio, generally the data sent from the client end on a certauth gensio.  This is non-nil terminated binary data, generally.  On the server side this will only be available in the GENSIO\_EVENT\_PASSWORD\_VERIFY event or the *GENSIO\_2FA\_VERIFY* event and is cleared outside of that.

### GENSIO\_CONTROL\_SERVICE

On a client, set the service data passed by the gensio to the server. On a server, et the service sent from the gensio client, generally available on a certauth server.  Returns *GE\_DATAMISSING* if a service was not sent.

This is a binary control, so arbitrary data can be passed in the service.

### GENSIO\_CONTROL\_CERT

Get the full certificate in text form sent from the other end.

### GENSIO\_CONTROL\_CERT\_FINGERPRINT

Get the fingerprint for the certificate from the other end.

### GENSIO\_CONTROL\_ENVIRONMENT

Set the environment pointer for an exec.  For pty and stdio connecter gensios.  The data is a pointer to an argv array (char \* const envp\[\])

### GENSIO\_CONTROL\_ARGS

Set the arguments for an exec.  For pty and stdio connecter gensios. The data is a pointer to an argv array (char \* const argv\[\])

### GENSIO\_CONTROL\_MAX\_WRITE\_PACKET

On a packet gensio, return the maximum packet size that can be sent. Any write of this amount or less will be sent as a single message that will be delivered as one read on the other end, or it will not be sent at all (zero-byte send count).

### GENSIO\_CONTROL\_EXIT\_CODE

On a stdio connectors and pty gensios, the exit code of the process that ran.  This is only valid after close has completed.  An integer string is returned.

### GENSIO\_CONTROL\_KILL\_TASK

Attempt to terminate the task.  The passed in string is converted (strtol) to an integer, if if it non-zero, a forced kill (kill -9) is done, otherwise a normal terminate is done.

### GENSIO\_CONTROL\_WAIT\_TASK

On a stdio connectors and pty gensios, do a waitpid on the process. If it has closed, this will return success and the exit code in the string.  Otherwise it will return GE\_NOTREADY.

### GENSIO\_CONTROL\_ADD\_MCAST

On UDP/AX25 gensios, add a multicast/UI address that the gensio will receive packets on.

### GENSIO\_CONTROL\_DEL\_MCAST

On UDP/AX25 gensios, delete a multicast/UI address that the gensio will receive packets on.

### GENSIO\_CONTROL\_GET\_MCAST

On AX25 gensios, return the given UI address.  The *data* string passed in should be the string representation of a the number (like created with snprintf()) for the particular index you want to fetch.  If you specify a number larger than the number of open listen sockets, *GE\_NOTFOUND* is returned.  The return data is a string holding the address.

### GENSIO\_CONTROL\_MCAST\_LOOP

On UDP connections, sets whether multicast packets sent on the socket will be received by the same machine.  Takes/returns string boolean "true" or "false".  Defaults to false.

### GENSIO\_CONTROL\_MCAST\_TTL

Sets the multicast time-to-live.  Takes/returns a string integer. The default is 1, meaning multicast stays in the local network. Increasing this value increases the number of hops over multicast routers a send packet will traverse.

### GENSIO\_CONTROL\_LADDR

Return the local address for the connection.  Only for network connections or sound devices.

For network devices, since a single gensio may have more than one local address, this control provides a means to tell which one.  The *data* string passed in should be the string representation of a the number (like created with snprintf()) for the particular index you want to fetch.  If you specify a number larger than the number of open listen sockets, *GE\_NOTFOUND* is returned.  The return data is a string holding the address.

Note that a single fetched string may contain more than one address. These will be separated by semicolons.  In some cases addresses may change dynamically (like with SCTP), so you get a single set of addresses.

For sound devices, pass in "in" or "out" in the string to get the full card number or name that uniquely identifies the sound card.

### GENSIO\_CONTROL\_ADD\_LADDR

For an AX25 gensio, add the given listen address to the addresses that will accept connections for the gensio.

### GENSIO\_CONTROL\_DEL\_LADDR

For an AX25 gensio, delete the given listen address to the addresses that will accept connections for the gensio.  This is the address string, not the instance number.

### GENSIO\_CONTROL\_RADDR

Like **GENSIO\_CONTROL\_LADDR** but gets the remote addresses on a gensio.  The gensio may need to be open.  This is only implemented on bottom-level gensios, like serialdev, network interfaces, echo, file, ipmisol, etc.

### GENSIO\_CONTROL\_RADDR\_BIN

Return the binary remote address for the given gensio.  Only implemented for network gensios and pty.

### GENSIO\_CONTROL\_LPORT

Return the local port for the connection.  Only for network connections.  This is useful if you pass in "0" for the port to let the OS chose; you can get the actual port chosen.

### GENSIO\_CONTROL\_CLOSE\_OUTPUT

Close writing to the gensio, but leave reading along.  This is only for stdio gensios; it lets you close stdin to the subprogram without affecting the subprogram's stdout.

### GENSIO\_CONTROL\_CONNECT\_ADDRESS\_STR

Return the address the connection was made to.  For SCTP. **gensio\_raddr\_to\_str()** returns all the remote addresses in SCTP's current state.  This will return the addresses that the original connectx was done to.

### GENSIO\_CONTROL\_REMOTE\_ID

Return some sort of remote id for what is on the other end of the connection.  Not implemented for most gensios, only for getting the pid on a pty and stdio and the file descriptor on serialdev.

### GENSIO\_CONTROL\_AUX\_DATA

Return auxiliary sent on the connection.  On certauth, this will be sent to the remote end and be available for them.

### GENSIO\_CONTROL\_REM\_AUX\_DATA

Return auxiliary received from the other end of the connection.  On certauth, this will be received from the remote end.

### GENSIO\_CONTROL\_IOD

Used to get the IOD pointer for the gensio as a raw pointer.  For gensios that have more than one IOD, the string you pass in will be a string number representing which IOD, "0" for the first (stdin), "1" for the second (stdout), and "2" for the third, (stderr).

### GENSIO\_CONTROL\_EXTRAINFO

This enables extra info to be returned on a received UDP packet.  If this is set to non-zero (normal string like "1" passed in), extra fields will be added to the auxdata in received packets.  These field are: "daddr:\<address\>" with the destination address from the packet and "ifidx:\<n\>" with the integer interface index the packet was received on.

### GENSIO\_CONTROL\_ENABLE\_OOB

Out of band (OOB) data is disabled by default on all gensios and setting this to non-zero (normal string like "1" passed in) will enable it.  Note that you should only set this on the gensio you are directly communicating with, it is used between some gensios.

### GENSIO\_CONTROL\_WIN\_SIZE

For pty gensios, sets the window size of the virtual window.  The value is a string with four values separated by ":".  The first two are the number of rows and number of columns.  The second two are number of horizontal pixels and number of vertical pixels.  The pixel values are currently ignored by windows.  pixel values do not have to be given, if there are less than 4 values, pixels values are ignored and set to zero.  datalen is ignored.

### GENSIO\_CONTROL\_START\_DIR

For pty and stdio gensios (that start another program), this will cause the new program to run in the given directory instead of the current directory.

### GENSIO\_CONTROL\_IN\_RATE , GENSIO\_CONTROL\_OUT\_RATE

For sound gensios, return the sample rate for the gensio for input or output.

### GENSIO\_CONTROL\_IN\_BUFSIZE , GENSIO\_CONTROL\_OUTBUFSIZE

For sound gensios, return the buffer size in bytes for input our output.  The data will be delivered to upper layer in chunks of this size.

### GENSIO\_CONTROL\_IN\_NR\_CHANS , GENSIO\_CONTROL\_OUT\_NR\_CHANS

For sound gensios, return the number of channels for the interface for input or output.

### GENSIO\_CONTROL\_IN\_FORMAT , GENSIO\_CONTROL\_OUT\_FORMAT

For sound gensios, return the format of the user data.  Like "float", "int16be", etc.

### GENSIO\_CONTROL\_DRAIN\_COUNT

The amount of data left to be transmitted.  For sound, this is in frames.

For ax25, this is the number of pending sent frames.  If you pass in a "0", it will count frames for the current connection.  If you pass in "1", it will count frames for all connections.

For network gensios, this is the number of unacked bytes in the transmit queue, or number of bytes in the receive queue, on the local side.

### GENSIO\_CONTROL\_DRAIN\_TIMEOUT

Set or get the drain timeout for the gensio.  This the same as the **drain\_timeout** parameter given when a gensio is created.  This does not have any meaning for gensios that do not queue output data in them, but for those that do, this sets the time (in milliseconds) that the gensio will wait for the data to drain before shutting down with pending data.  If you set this to a negative value, it will wait forever, which is the default.  Though not really forever, some lower layer is going to time out and shut the connection down before you reach this.

### GENSIO\_CONTROL\_IN\_ANTENNA

For a radio, the receive antenna name.  This is a string name.

### GENSIO\_CONTROL\_OUT\_ANTENNA

For a radio, the transmit antenna name.  This is a string name.

### GENSIO\_CONTROL\_IN\_GAIN

For a radio, the receive gain.  A double float as a string.  Passing in "auto" enables AGC.

### GENSIO\_CONTROL\_OUT\_GAIN

For a radio, the transmit gain.  A double float as a string.  Passing in "auto" enables AGC.

### GENSIO\_CONTROL\_FREQUENCY

For a radio, the both frequencies.  For a get this return the in frequency.  If you set this on the fsk gensio, it will adjust the frequencies in its child gensio to match what it does, see the documentation for the fsk gensio for details.  A double float as a string.  Returns the input frequency.

### GENSIO\_CONTROL\_IN\_FREQUENCY

For a radio, the receive frequency.  A double float as a string.

### GENSIO\_CONTROL\_OUT\_FREQUENCY

For a radio, the transmit frequency.  A double float as a string.

### GENSIO\_CONTROL\_IN\_FREQ\_ADJ

For a radio, add an offset to the set input frequency.  This is so a modulator can move the frequency a bit to get the frequency it wants and still let something else control the radio frequency.  A double float as a string.

### GENSIO\_CONTROL\_OUT\_FREQ\_ADJ

Like the above, for the output frequency.

### GENSIO\_CONTROL\_IN\_FREQ\_CORR

Set the frequency correction for the main oscillator, a double float as a string.  This is in parts-per-million.

### GENSIO\_CONTROL\_OUT\_FREQ\_CORR

Like the above, for the output frequency.

### GENSIO\_CONTROL\_IN\_IQ\_BALANCE

Set the IQ balance, two float values separated by a ',' in a string, first is I and second is Q.  This is a value from 0 to 1.  Passing in "auto" enables automatic IQ balance.

### GENSIO\_CONTROL\_OUT\_IQ\_BALANCE

Like the above, for the output.

### GENSIO\_CONTROL\_IN\_DC\_OFFSET

Set the DC offset, two float values separated by a ',' in a string, first is I and second is Q.  This is a value from 0 to 1.  Passing in "auto" enables automatic DC offset.

### GENSIO\_CONTROL\_OUT\_DC\_OFFSET

Like the above, for the output.

### GENSIO\_CONTROL\_IN\_BANDWIDTH

For a radio, the receive bandwidth.  A double float as a string.

### GENSIO\_CONTROL\_OUT\_BANDWIDTH

For a radio, the transmit bandwidth.  A double float as a string.

### GENSIO\_CONTROL\_IN\_CHANNEL

For a radio, the receive channel.  An integer as a string.  Read only.

### GENSIO\_CONTROL\_OUT\_CHANNEL

For a radio, the transmit channel.  An integer as a string.  Read only.

### SERIAL PORT CONTROLS

The following set various serial port values.

On the client these set the value or request the value from the other end.  When getting the data value is not used.  When setting the data value is a string with a number or setting.  The response in the done callback reports a string with the set value (which may be different than the requested value) in the same format as the request.

On the server these are used to respond to a client event.  The done callback is ignored.

GENSIO\_ACONTROL\_SER\_BAUD\
 is the baud rate as a number.  For instance, setting to "1200" sets 1200 baud.  Not all gensio support all baud rates.

GENSIO\_ACONTROL\_SER\_DATASIZE\
 is the datasize, a number from "5" to "8".  Not all gensio support all data sizes.

GENSIO\_ACONTROL\_SER\_PARITY\
 sets the parity, one of "none", "odd", "even", "mark" or "space".  You can use **gensio\_parity\_to\_str** and **gensio\_str\_to\_parity** to convert between the string and numeric values. **gensio\_parity\_to\_str** returns NULL if the number isn't value, **gensio\_str\_to\_parity** returns -1 if the string is not valid.

GENSIO\_ACONTROL\_SER\_STOPBITS\
 sets the number of stop bits, "1", or "2".

GENSIO\_ACONTROL\_SER\_FLOWCONTROL\
 sets the flow control type, one of "none", "xonxoff", or "rtscts".  You can use **gensio\_flowcontrol\_to\_str** and **gensio\_str\_to\_flowcontrol** to convert between the string and numeric values. **gensio\_flowcontrol\_to\_str** returns NULL if the number isn't value, **gensio\_str\_to\_flowcontrol** returns -1 if the string is not valid.

GENSIO\_ACONTROL\_SER\_IFLOWCONTROL\
 sets the input flow state, one of "none", "dcd", "dtr", or "dsr".  You use the same conversion functions as **GENSIO\_ACONTROL\_SER\_FLOWCONTROL** for converting between strings and integers.

GENSIO\_ACONTROL\_SER\_SBREAK\
 Enables or disables the break condition on a serial port.  One of "on" or "off".  You can use **gensio\_onoff\_to\_str** and **gensio\_str\_to\_onoff** to convert between the string and numeric values. **gensio\_onoff\_to\_str** returns NULL if the number isn't value, **gensio\_str\_to\_onoff** returns -1 if the string is not valid.

GENSIO\_ACONTROL\_SER\_DTR\
 Enables or disables the DTR line on a serial port.  One of "on" or "off". See GENSIO\_ACONTROL\_SER\_SBREAK for string/integer conversions.

GENSIO\_ACONTROL\_SER\_RTS\
 Enables or disables the RTS line on a serial port.  One of "on" or "off". See GENSIO\_ACONTROL\_SER\_SBREAK for string/integer conversions.

GENSIO\_ACONTROL\_SER\_CTS\
 Enables or disables the CTS line on a serial port.  One of "on" or "off".  ipmisol only. See GENSIO\_ACONTROL\_SER\_SBREAK for string/integer conversions.

GENSIO\_ACONTROL\_SER\_DCD\_DSR\
 Enables or disables the DCD and DTR lines on a serial port.  One of "on" or "off".  ipmisol only. See GENSIO\_ACONTROL\_SER\_SBREAK for string/integer conversions.

GENSIO\_ACONTROL\_SER\_RI\
 Enables or disables the RI line on a serial port.  One of "on" or "off".  ipmisol only. See GENSIO\_ACONTROL\_SER\_SBREAK for string/integer conversions.

GENSIO\_ACONTROL\_SER\_SIGNATURE\
 Fetches or reports the rfc2217 signature for a serial port.  This is an arbitrary string.  telnet only.

GENSIO\_ACONTROL\_SER\_FLUSH\
 Sends a flush to the other end and gets the response.

### SERIAL PORT REPORT MASKS

These set (on the client) the mask used to monitor various lines on a serial ports.  The bits set will be the ones reported in the corresponding events.  These are numbers in strings, you bitwise or the values together.

GENSIO\_ACONTROL\_SER\_SET\_MODEMSTATE\_MASK\
 Set the modemstate mask on the other end and get the response.  Values to or together are: GENSIO\_SER\_MODEMSTATE\_CTS, GENSIO\_SER\_MODEMSTATE\_DSR, GENSIO\_SER\_MODEMSTATE\_RI, GENSIO\_SER\_MODEMSTATE\_CD.

When you set the modemstate mask, it should always send the current modemstate up.

GENSIO\_ACONTROL\_SER\_SET\_LINESTATE\_MASK\
 Set the linestate mask on the other end and get the response.  Values to or together are: GENSIO\_SER\_LINESTATE\_DATA\_READY, GENSIO\_SER\_LINESTATE\_OVERRUN\_ERR, GENSIO\_SER\_LINESTATE\_PARITY\_ERR, GENSIO\_SER\_LINESTATE\_FRAMING\_ERR, GENSIO\_SER\_LINESTATE\_BREAK, GENSIO\_SER\_LINESTATE\_XMIT\_HOLD\_EMPTY, GENSIO\_SER\_LINESTATE\_XMIT\_SHIFT\_EMPTY, GENSIO\_SER\_LINESTATE\_TIMEOUT\_ERR.

The RFC2217 spec talks about sending the linestate mask back, but that really doesn't make any sense.  These are events, not states.  So currently that's not done, but it may change in the future.

### SENDING STATE STATUS TO THE OTHER END

If you are a telnet server, you can use these to send modemstate and linestate information to the remote end.

GENSIO\_CONTROL\_SER\_SEND\_MODEMSTATE\
 Send a modemstate message to the other end.  In addition to the ones listed for GENSIO\_CONTROL\_SER\_AMODEMSTATE\_MASK, you also have bits that tell if the value changed from the last report: GENSIO\_SER\_MODEMSTATE\_CTS\_CHANGED, GENSIO\_SER\_MODEMSTATE\_DSR\_CHANGED, GENSIO\_SER\_MODEMSTATE\_RI\_CHANGED, GENSIO\_SER\_MODEMSTATE\_CD\_CHANGED.

GENSIO\_CONTROL\_SER\_SEND\_LINESTATE\
 Send a linestate message to the other end.

### OTHER SERIAL PORT OPERATIONS

This is a set of other operations that can be performed on a serial port.

GENSIO\_CONTROL\_SER\_FLOWCONTROL\_STATE\

GENSIO\_CONTROL\_SER\_SEND\_BREAK\
 requests a serial break (of arbitrary length) be sent.  The value is not used.

## RETURN VALUES

Zero is returned on success, or a gensio error on failure.

## SEE ALSO

[gensio\_err(3)](/gensio_err/3.md), [gensio(5)](/gensio/5.md)
