Move main.c to src/

This commit is contained in:
Andreas Eversberg 2022-12-16 22:01:51 +01:00
parent b64a17c748
commit 65dac95ff0
1 changed files with 68 additions and 56 deletions

View File

@ -1,5 +1,6 @@
/*
* (C) 2022 by Harald Welte <laforge@osmocom.org>
* (C) 2021 by Andreas Eversberg <andreas@eversberg.eu>
* All Rights Reserved
*
* This program is free software; you can redistribute it and/or modify
@ -50,15 +51,15 @@
#include <osmocom/abis/abis.h>
#include "logging.h"
#include "v5x_internal.h"
#include "v5x_protocol.h"
#include "v51_le_ctrl.h"
#include "v52_le_user_port_fsm.h"
#include "v5x_le_ctrl_fsm.h"
#include "v5x_le_port_fsm.h"
#include "v5x_le_pstn_fsm.h"
#include "v5x_l2_mgmt.h"
#include "v51_le_provisioning.h"
#include "lapv5.h"
#include "v5x_le_management.h"
#include "v5x_le_provisioning.h"
#include "v5x_vty.h"
#include "logging.h"
#define _GNU_SOURCE
#include <getopt.h>
@ -103,7 +104,6 @@ static const struct e1inp_line_ops v5le_e1_line_ops = {
.sign_link = v5le_rx_sign,
};
#include "v5x_protocol.h"
/* data L1 -> L2 */
static void hdlc_rx_cb(struct e1inp_ts *ts, struct msgb *msg)
{
@ -183,6 +183,56 @@ int ph_data_req_raw(struct msgb *msg, int ts_nr)
return e1inp_ts_send_raw(ts, msg);
}
#warning hacking
void ph_socket_rx_cb(ph_socket_t *s, int channel, uint8_t prim, uint8_t *data, int length)
{
struct v5x_user_port *v5up = s->priv;
switch (prim) {
case PH_PRIM_CTRL_REQ:
/* deactivate channels, if active */
if ((channel == 0 || channel == 3) && length && *data == PH_CTRL_BLOCK) {
v5up->ts_activated[0] = 0;
v5up->ts_activated[1] = 0;
}
v5x_mph_rcv_le(v5up, prim, data, length);
break;
case PH_PRIM_ACT_REQ:
if (channel == 1 || channel == 2) {
v5up->ts_activated[channel - 1] = 1;
ph_socket_tx_msg(s, channel, PH_PRIM_ACT_IND, NULL, 0);
break;
}
v5x_mph_rcv_le(v5up, prim, data, length);
break;
case PH_PRIM_DACT_REQ:
if (channel == 1 || channel == 2) {
v5up->ts_activated[channel - 1] = 0;
ph_socket_tx_msg(s, channel, PH_PRIM_DACT_IND, NULL, 0);
break;
}
v5x_mph_rcv_le(v5up, prim, data, length);
break;
case PH_PRIM_DATA_REQ:
if (v5up->type == V5X_USER_TYPE_PSTN && channel == 0) {
struct msgb *msg = msgb_alloc_headroom(length + 32, 32, "V5 PSTN MSG");
memcpy(msgb_put(msg, length), data, length);
v5x_nat_rcv_fe(v5up, msg);
} else if (v5up->type == V5X_USER_TYPE_ISDN && channel == 3) {
struct msgb *msg = msgb_alloc_headroom(length + 32, 32, "V5 EF MSG");
memcpy(msgb_put(msg, length), data, length);
lapv5ef_tx(v5up, msg);
} else if ((channel == 1 || channel == 2) && v5up->ts_nr[channel - 1]) {
struct msgb *msg = msgb_alloc_headroom(length + 32, 32, "B MSG");
memcpy(msgb_put(msg, length), data, length);
ph_data_req_raw(msg, v5up->ts_nr[channel - 1]);
}
/* always confirm */
ph_socket_tx_msg(s, channel, PH_PRIM_DATA_CNF, NULL, 0);
break;
}
}
static int e1_init(void)
{
int line_nr = 1, ts;
@ -210,12 +260,12 @@ static struct v5le_config *g_cfg;
static int daemonize = 0;
const char *v5le_copyright =
"Copyright (C) 2022 by Harald Welte\r\n"
"Copyright (C) 2022 by Harald Welte & Andreas Eversberg\r\n"
"License AGPLv3+: GNU AGPL version 3 or later <http://gnu.org/licenses/agpl-3.0.html>\r\n"
"This is free software: you are free to change and redistribute it.\r\n"
"There is NO WARRANTY, to the extent permitted by law.\r\n";
static char *config_file = "osmo-v5le.cfg";
static char *config_file = "osmo-v5-le.cfg";
static void print_help()
{
@ -309,39 +359,6 @@ static void handle_options(int argc, char **argv)
}
}
int v5le_vty_is_config_node(struct vty *vty, int node)
{
switch (node) {
case CONFIG_NODE:
return 0;
default:
return 1;
}
}
int v5le_vty_go_parent(struct vty *vty)
{
switch (vty->node) {
default:
if (v5le_vty_is_config_node(vty, vty->node))
vty->node = CONFIG_NODE;
else
vty->node = ENABLE_NODE;
vty->index = NULL;
}
return vty->node;
}
static struct vty_app_info vty_info = {
.name = "OsmoV5LE",
.version = PACKAGE_VERSION,
.go_parent_cb = v5le_vty_go_parent,
.is_config_node = v5le_vty_is_config_node,
};
int main(int argc, char **argv)
{
unsigned int flags;
@ -377,11 +394,11 @@ int main(int argc, char **argv)
osmo_stats_init(tall_v5le_ctx);
/* global inits of protocols */
v51_ctrl_init();
v51_port_ctrl_init();
v51_pstn_init();
v51_provisioning_init();
v51_mgmt_init();
v5x_le_ctrl_init();
v5x_le_port_init();
v5x_le_pstn_init();
v5x_le_provisioning_init();
v5x_le_mgmt_init();
/* create v5x instance */
v5i = v5x_instance_alloc(tall_v5le_ctx);
@ -391,20 +408,15 @@ int main(int argc, char **argv)
// FIXME: move this to VTY code
/* create v5x interface */
struct v5x_interface *v5if;
// struct v5x_user_port *v5up;
uint32_t interface_id = 1;
uint8_t interface_variant = 1;
v5if = v5x_interface_alloc(v5i, V5X_DIALECT_V51, interface_id, interface_variant, ph_data_req);
v5if = v5x_interface_alloc(v5i, V5X_DIALECT_V51, ph_data_req);
if (!v5if)
return -ENOMEM;
// v5up = v5x_user_port_create(v5if, 1001, V5X_USER_TYPE_ISDN, 1, 2);
// v5up = v5x_user_port_create(v5if, 1002, V5X_USER_TYPE_PSTN, 3, 0);
// if (!v5up)
// return -ENOMEM;
rc = vty_read_config_file(config_file, NULL);
if (rc < 0)
if (rc < 0) {
fprintf(stderr, "Failed to read config file '%s'.\n", config_file);
return rc;
}
g_gti = gsmtap_source_init("224.0.0.1", GSMTAP_UDP_PORT, 0);
OSMO_ASSERT(g_gti);