[[e1dp]] == Client Interface This chapter documents the _Client interface_ which is used by application programs wanting to send and/or receive data on the E1 circuits served by `osmo-e1d`. The interface is based on a `unix domain socket` and works in the following way: * `osmo-e1d` implements the server side of a unix domain socket * the application program acts as a client program establishing a socket connection to the e1d unix domain socket * the application program preforms operations such as opening of a specific E1 timeslot on a spcific line/interface. * `osmo-e1d` passes a file descriptor from the daemon to the client application * the client application can read/write data from/to the E1 timeslot via this file descriptor This architecture was chosen to allow for the _one file descriptor per timeslot_ paradigm that is known from other drivers, such as DAHDI. Each timeslot of each line on each interface can theoretically be opened by a different program. This permits for example control/user plane splits like a signaling gateway + media gateway implemented as separate processes. When opening a timeslot, the client specifies the _mode_. * In _RAW mode_, the transparent 64kBps bit-stream is passed over the per-timeslot file descriptor. This is mostly used for B-channels / user traffic. * In _HDLC-FCS mode_, a (software) HDLC processor is instantiated. It performs flag sequence detection/generation and bit-stuffing. This is mostly used for D-channels / signalling. Details about the messaging on the unix domain socket can be found in the definitions contained in the `include/osmocom/e1d/proto.h` header file, as well as the doxygen API documentation generated from it. === `libosmo-e1d` client library To simplify interfacing `osmo-e1d` from an application, there is a companion library called `libosmo-e1d`. It contains functions implementing the above-mentioned client interface protocol and prevents the application developer from having to implement the low-level bits of this interface. The library is licensed under GNU LGPL-3.0-or-later, which is a weak copyleft license that permits using the library from non-open-source / proprietary applications. The library offers the following functions: * initialization / teardown ** `osmo_e1dp_client_create()` ** `osmo_e1dp_client_destroy()` * information querying ** `osmo_e1dp_client_intf_query()` ** `osmo_e1dp_client_line_query()` ** `osmo_e1dp_client_ts_query()` * configuration ** `osmo_e1dp_client_line_config()` * opening of timeslots ** `osmo_e1dp_client_ts_open()` ** `osmo_e1dp_client_ts_open_force()` Details about those functions can be found in the definitions contained in the `include/osmocom/e1d/proto_clnt.h` header file.