ipc: add master socket number/path parameters
osmo-trx-ipc needs to know which master socket it should talk to, so pass this path in the config device args like this: dev-args ipc_msock=/path/to/socket Additionally, add a master socket suffix number parameter to the ipc backend, ipc-driver-test -n 0 to start serving /tmp/ipc_sock0 Change-Id: I24857fbb74e5fc808b2a218957c723291de2ba04
This commit is contained in:
parent
76c8846df9
commit
a670630cfe
|
@ -721,18 +721,26 @@ static int ipc_chan_sock_cb(struct osmo_fd *bfd, unsigned int flags)
|
||||||
|
|
||||||
int IPCDevice::open(const std::string &args, int ref, bool swap_channels)
|
int IPCDevice::open(const std::string &args, int ref, bool swap_channels)
|
||||||
{
|
{
|
||||||
//float_type sr_host, sr_rf;
|
std::string k,v;
|
||||||
//unsigned int i, n;
|
std::string::size_type keyend;
|
||||||
//int rc, dev_id;
|
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
LOGC(DDEV, INFO) << "Opening IPC device..";
|
if ((keyend = args.find('=')) != std::string::npos) {
|
||||||
|
k = args.substr(0, keyend++);
|
||||||
|
v = args.substr(keyend);
|
||||||
|
}
|
||||||
|
if(k != "ipc_msock" || !v.length()) {
|
||||||
|
LOGC(DDEV, ERROR) << "Invalid device args provided, expected \"dev-args ipc_msock=/path/to/socket\"\n";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOGC(DDEV, INFO) << "Opening IPC device" << v << "..";
|
||||||
|
|
||||||
memset(&sk_state, 0x00, sizeof(sk_state));
|
memset(&sk_state, 0x00, sizeof(sk_state));
|
||||||
INIT_LLIST_HEAD(&sk_state.upqueue);
|
INIT_LLIST_HEAD(&sk_state.upqueue);
|
||||||
rc = osmo_sock_unix_init_ofd(&sk_state.conn_bfd, SOCK_SEQPACKET, 0, IPC_SOCK_PATH, OSMO_SOCK_F_CONNECT);
|
rc = osmo_sock_unix_init_ofd(&sk_state.conn_bfd, SOCK_SEQPACKET, 0, v.c_str(), OSMO_SOCK_F_CONNECT);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
LOGC(DDEV, ERROR) << "Failed to connect to the BTS (" << IPC_SOCK_PATH << "). "
|
LOGC(DDEV, ERROR) << "Failed to connect to the BTS (" << v << "). "
|
||||||
<< "Retrying...\n";
|
<< "Retrying...\n";
|
||||||
osmo_timer_setup(&sk_state.timer, ipc_sock_timeout, NULL);
|
osmo_timer_setup(&sk_state.timer, ipc_sock_timeout, NULL);
|
||||||
osmo_timer_schedule(&sk_state.timer, 5, 0);
|
osmo_timer_schedule(&sk_state.timer, 5, 0);
|
||||||
|
|
|
@ -33,7 +33,7 @@ extern "C" {
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include <sys/stat.h> /* For mode constants */
|
#include <sys/stat.h> /* For mode constants */
|
||||||
#include <fcntl.h> /* For O_* constants */
|
#include <fcntl.h> /* For O_* constants */
|
||||||
|
#include <getopt.h>
|
||||||
|
|
||||||
#include <osmocom/core/application.h>
|
#include <osmocom/core/application.h>
|
||||||
#include <osmocom/core/talloc.h>
|
#include <osmocom/core/talloc.h>
|
||||||
|
@ -193,7 +193,7 @@ static int ipc_tx_open_cnf(int rc, uint32_t num_chans, int32_t timingoffset)
|
||||||
|
|
||||||
chan_info = ipc_prim->u.open_cnf.chan_info;
|
chan_info = ipc_prim->u.open_cnf.chan_info;
|
||||||
for (i = 0; i < num_chans; i++) {
|
for (i = 0; i < num_chans; i++) {
|
||||||
snprintf(chan_info->chan_ipc_sk_path, sizeof(chan_info->chan_ipc_sk_path), "%s_%d", IPC_SOCK_PATH, i);
|
snprintf(chan_info->chan_ipc_sk_path, sizeof(chan_info->chan_ipc_sk_path), "%s_%d", IPC_SOCK_PATH_PREFIX, i);
|
||||||
/* FIXME: dynamc chan limit, currently 8 */
|
/* FIXME: dynamc chan limit, currently 8 */
|
||||||
if (i < 8)
|
if (i < 8)
|
||||||
ipc_sock_init(chan_info->chan_ipc_sk_path, &global_ctrl_socks[i], ipc_chan_sock_accept, i);
|
ipc_sock_init(chan_info->chan_ipc_sk_path, &global_ctrl_socks[i], ipc_chan_sock_accept, i);
|
||||||
|
@ -272,7 +272,7 @@ void *downlink_thread(void *x_void_ptr)
|
||||||
bool underrun;
|
bool underrun;
|
||||||
uhdwrap_write(global_dev, chann, &underrun);
|
uhdwrap_write(global_dev, chann, &underrun);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ipc_rx_chan_start_req(struct ipc_sk_chan_if_op_void *req, uint8_t chan_nr)
|
int ipc_rx_chan_start_req(struct ipc_sk_chan_if_op_void *req, uint8_t chan_nr)
|
||||||
|
@ -392,6 +392,51 @@ int ipc_sock_init(const char *path, struct ipc_sock_state **global_state_var,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void print_help(void)
|
||||||
|
{
|
||||||
|
printf( "ipc-driver-test Usage:\n"
|
||||||
|
" -h --help This message\n"
|
||||||
|
" -n --sock-num NR Master socket suffix number NR\n"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int msocknum = 0;
|
||||||
|
|
||||||
|
static void handle_options(int argc, char **argv)
|
||||||
|
{
|
||||||
|
while (1) {
|
||||||
|
int option_index = 0, c;
|
||||||
|
const struct option long_options[] = {
|
||||||
|
{ "help", 0, 0, 'h' },
|
||||||
|
{ "sock-num", 1, 0, 'n' },
|
||||||
|
{0,0,0,0}
|
||||||
|
};
|
||||||
|
|
||||||
|
c = getopt_long(argc, argv, "hn:",
|
||||||
|
long_options, &option_index);
|
||||||
|
if (c == -1)
|
||||||
|
break;
|
||||||
|
|
||||||
|
switch (c) {
|
||||||
|
case 'h':
|
||||||
|
print_help();
|
||||||
|
exit(0);
|
||||||
|
break;
|
||||||
|
case 'n':
|
||||||
|
msocknum = atoi(optarg);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
exit(2);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc > optind) {
|
||||||
|
fprintf(stderr, "Unsupported positional arguments on command line\n");
|
||||||
|
exit(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(IPCMAGIC) && defined(__cplusplus)
|
#if defined(IPCMAGIC) && defined(__cplusplus)
|
||||||
extern "C" int osmo_ctx_init(const char *id);
|
extern "C" int osmo_ctx_init(const char *id);
|
||||||
|
|
||||||
|
@ -404,13 +449,17 @@ extern "C" int magicmain(int argc, char **argv)
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
|
char ipc_msock_path[sizeof(IPC_SOCK_PATH_PREFIX)+3];
|
||||||
tall_ctx = talloc_named_const(NULL, 0, "OsmoTRX");
|
tall_ctx = talloc_named_const(NULL, 0, "OsmoTRX");
|
||||||
msgb_talloc_ctx_init(tall_ctx, 0);
|
msgb_talloc_ctx_init(tall_ctx, 0);
|
||||||
osmo_init_logging2(tall_ctx, &log_infox);
|
osmo_init_logging2(tall_ctx, &log_infox);
|
||||||
log_enable_multithread();
|
log_enable_multithread();
|
||||||
|
|
||||||
|
handle_options(argc, argv);
|
||||||
|
snprintf(ipc_msock_path,sizeof(ipc_msock_path), "%s%d", IPC_SOCK_PATH_PREFIX, msocknum);
|
||||||
|
|
||||||
LOGP(DMAIN, LOGL_INFO, "Starting %s\n", argv[0]);
|
LOGP(DMAIN, LOGL_INFO, "Starting %s\n", argv[0]);
|
||||||
ipc_sock_init(IPC_SOCK_PATH, &global_ipc_sock_state, ipc_sock_accept, 0);
|
ipc_sock_init(ipc_msock_path, &global_ipc_sock_state, ipc_sock_accept, 0);
|
||||||
while (!ipc_exit_requested)
|
while (!ipc_exit_requested)
|
||||||
osmo_select_main(0);
|
osmo_select_main(0);
|
||||||
//ipc_sock_close()
|
//ipc_sock_close()
|
||||||
|
|
|
@ -78,7 +78,7 @@ struct ipc_shm_region *ipc_shm_decode_region(void *tall_ctx, struct ipc_shm_raw_
|
||||||
// Master socket
|
// Master socket
|
||||||
//////////////////
|
//////////////////
|
||||||
|
|
||||||
#define IPC_SOCK_PATH "/tmp/ipc_sock"
|
#define IPC_SOCK_PATH_PREFIX "/tmp/ipc_sock"
|
||||||
#define IPC_SOCK_API_VERSION 1
|
#define IPC_SOCK_API_VERSION 1
|
||||||
|
|
||||||
/* msg_type */
|
/* msg_type */
|
||||||
|
|
Loading…
Reference in New Issue