mirror of https://gerrit.osmocom.org/osmo-pcap
pcap-client: Hacks to compile with an old libosmocore
We are running a system where we do not want to upgrade libosmocore right now. Compile the osmo-pcap-client with a libosmocore from around January.
This commit is contained in:
parent
0e94548484
commit
d5cbb675a9
|
@ -15,8 +15,8 @@ AC_PROG_INSTALL
|
|||
AC_PROG_RANLIB
|
||||
|
||||
dnl checks for libraries
|
||||
PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 0.3.2)
|
||||
PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 0.3.0)
|
||||
PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore < 0.2.0)
|
||||
PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty < 0.2.0)
|
||||
|
||||
dnl checks for header files
|
||||
AC_HEADER_STDC
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#ifndef OSMO_PCAP_COMMON_H
|
||||
#define OSMO_PCAP_COMMON_H
|
||||
|
||||
#include <osmocom/core/logging.h>
|
||||
#include <osmocore/logging.h>
|
||||
|
||||
#include <osmocom/vty/vty.h>
|
||||
#include <osmocom/vty/buffer.h>
|
||||
|
|
|
@ -23,9 +23,9 @@
|
|||
#include <inttypes.h>
|
||||
#include <pcap.h>
|
||||
|
||||
#include <osmocom/core/select.h>
|
||||
#include <osmocom/core/timer.h>
|
||||
#include <osmocom/core/write_queue.h>
|
||||
#include <osmocore/select.h>
|
||||
#include <osmocore/timer.h>
|
||||
#include <osmocore/write_queue.h>
|
||||
|
||||
|
||||
struct osmo_pcap_client {
|
||||
|
@ -36,12 +36,12 @@ struct osmo_pcap_client {
|
|||
struct bpf_program bpf;
|
||||
char *filter_string;
|
||||
int filter_itself;
|
||||
struct osmo_fd fd;
|
||||
struct bsc_fd fd;
|
||||
|
||||
char *srv_ip;
|
||||
int srv_port;
|
||||
struct osmo_wqueue wqueue;
|
||||
struct osmo_timer_list timer;
|
||||
struct write_queue wqueue;
|
||||
struct timer_list timer;
|
||||
};
|
||||
|
||||
extern struct osmo_pcap_client *pcap_client;
|
||||
|
|
|
@ -2,12 +2,12 @@ INCLUDES = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)/
|
|||
AM_CFLAGS = -Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(PCAP_CFLAGS)
|
||||
AM_LDFLAGS = $(LIBOSMOCORE_LIBS) $(LIBOSMOVTY_LIBS)
|
||||
|
||||
bin_PROGRAMS = osmo_pcap_client osmo_pcap_server
|
||||
bin_PROGRAMS = osmo_pcap_client
|
||||
|
||||
osmo_pcap_client_SOURCES = osmo_client_main.c osmo_common.c \
|
||||
osmo_client_core.c osmo_client_vty.c \
|
||||
osmo_client_network.c
|
||||
osmo_pcap_client_LDADD = $(PCAP_LIBS)
|
||||
|
||||
osmo_pcap_server_SOURCES = osmo_server_main.c osmo_common.c \
|
||||
osmo_server_vty.c osmo_server_network.c
|
||||
#osmo_pcap_server_SOURCES = osmo_server_main.c osmo_common.c \
|
||||
# osmo_server_vty.c osmo_server_network.c
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#include <osmo-pcap/osmo_pcap_client.h>
|
||||
#include <osmo-pcap/common.h>
|
||||
|
||||
#include <osmocom/core/talloc.h>
|
||||
#include <osmocore/talloc.h>
|
||||
|
||||
#include <limits.h>
|
||||
|
||||
|
@ -32,7 +32,7 @@
|
|||
#endif
|
||||
|
||||
|
||||
static int pcap_read_cb(struct osmo_fd *fd, unsigned int what)
|
||||
static int pcap_read_cb(struct bsc_fd *fd, unsigned int what)
|
||||
{
|
||||
struct osmo_pcap_client *client = fd->data;
|
||||
struct pcap_pkthdr hdr;
|
||||
|
@ -86,7 +86,7 @@ static void free_all(struct osmo_pcap_client *client)
|
|||
pcap_freecode(&client->bpf);
|
||||
|
||||
if (client->fd.fd >= 0) {
|
||||
osmo_fd_unregister(&client->fd);
|
||||
bsc_unregister_fd(&client->fd);
|
||||
client->fd.fd = -1;
|
||||
}
|
||||
|
||||
|
@ -127,7 +127,7 @@ int osmo_client_capture(struct osmo_pcap_client *client, const char *device)
|
|||
client->fd.when = BSC_FD_READ;
|
||||
client->fd.cb = pcap_read_cb;
|
||||
client->fd.data = client;
|
||||
if (osmo_fd_register(&client->fd) != 0) {
|
||||
if (bsc_register_fd(&client->fd) != 0) {
|
||||
LOGP(DCLIENT, LOGL_ERROR,
|
||||
"Failed to register the fd.\n");
|
||||
client->fd.fd = -1;
|
||||
|
|
|
@ -23,11 +23,10 @@
|
|||
#include <osmo-pcap/common.h>
|
||||
#include <osmo-pcap/osmo_pcap_client.h>
|
||||
|
||||
#include <osmocom/core/application.h>
|
||||
#include <osmocom/core/process.h>
|
||||
#include <osmocom/core/rate_ctr.h>
|
||||
#include <osmocom/core/select.h>
|
||||
#include <osmocom/core/talloc.h>
|
||||
#include <osmocore/process.h>
|
||||
#include <osmocore/rate_ctr.h>
|
||||
#include <osmocore/select.h>
|
||||
#include <osmocore/talloc.h>
|
||||
|
||||
#include <osmocom/vty/logging.h>
|
||||
#include <osmocom/vty/telnet_interface.h>
|
||||
|
@ -43,14 +42,39 @@
|
|||
|
||||
#include "osmopcapconfig.h"
|
||||
|
||||
|
||||
static const char *config_file = "osmo-pcap-client.cfg";
|
||||
static int daemonize = 0;
|
||||
static struct log_target *stderr_target = NULL;
|
||||
|
||||
void *tall_bsc_ctx;
|
||||
struct osmo_pcap_client *pcap_client;
|
||||
extern void *tall_msgb_ctx;
|
||||
extern void *tall_ctr_ctx;
|
||||
|
||||
|
||||
/* drop in */
|
||||
static void osmo_init_ignore_signals(void)
|
||||
{
|
||||
/* Signals that by default would terminate */
|
||||
signal(SIGPIPE, SIG_IGN);
|
||||
signal(SIGALRM, SIG_IGN);
|
||||
signal(SIGHUP, SIG_IGN);
|
||||
signal(SIGIO, SIG_IGN);
|
||||
}
|
||||
|
||||
static int osmo_init_logging(const struct log_info *log_info)
|
||||
{
|
||||
log_init(log_info);
|
||||
stderr_target = log_target_create_stderr();
|
||||
if (!stderr_target)
|
||||
return -1;
|
||||
|
||||
log_add_target(stderr_target);
|
||||
log_set_all_filter(stderr_target, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct vty_app_info vty_info = {
|
||||
.name = "OsmoPCAPClient",
|
||||
.version = PACKAGE_VERSION,
|
||||
|
@ -104,16 +128,16 @@ static void handle_options(int argc, char **argv)
|
|||
daemonize = 1;
|
||||
break;
|
||||
case 'd':
|
||||
log_parse_category_mask(osmo_stderr_target, optarg);
|
||||
log_parse_category_mask(stderr_target, optarg);
|
||||
break;
|
||||
case 's':
|
||||
log_set_use_color(osmo_stderr_target, 0);
|
||||
log_set_use_color(stderr_target, 0);
|
||||
break;
|
||||
case 'T':
|
||||
log_set_print_timestamp(osmo_stderr_target, 1);
|
||||
log_set_print_timestamp(stderr_target, 1);
|
||||
break;
|
||||
case 'e':
|
||||
log_set_log_level(osmo_stderr_target, atoi(optarg));
|
||||
log_set_log_level(stderr_target, atoi(optarg));
|
||||
break;
|
||||
case 'c':
|
||||
config_file = strdup(optarg);
|
||||
|
@ -161,7 +185,7 @@ int main(int argc, char **argv)
|
|||
|
||||
vty_info.copyright = osmopcap_copyright;
|
||||
vty_init(&vty_info);
|
||||
logging_vty_add_cmds(&log_info);
|
||||
logging_vty_add_cmds();
|
||||
|
||||
/* parse options */
|
||||
handle_options(argc, argv);
|
||||
|
@ -188,7 +212,7 @@ int main(int argc, char **argv)
|
|||
vty_client_init(pcap_client);
|
||||
|
||||
/* initialize the queue */
|
||||
osmo_wqueue_init(&pcap_client->wqueue, 10);
|
||||
write_queue_init(&pcap_client->wqueue, 10);
|
||||
pcap_client->wqueue.bfd.fd = -1;
|
||||
|
||||
|
||||
|
@ -210,7 +234,7 @@ int main(int argc, char **argv)
|
|||
}
|
||||
|
||||
while (1) {
|
||||
osmo_select_main(0);
|
||||
bsc_select_main(0);
|
||||
}
|
||||
|
||||
return(0);
|
||||
|
|
|
@ -24,9 +24,8 @@
|
|||
#include <osmo-pcap/common.h>
|
||||
#include <osmo-pcap/wireformat.h>
|
||||
|
||||
#include <osmocom/core/msgb.h>
|
||||
#include <osmocom/core/select.h>
|
||||
#include <osmocom/core/socket.h>
|
||||
#include <osmocore/msgb.h>
|
||||
#include <osmocore/select.h>
|
||||
|
||||
#include <arpa/inet.h>
|
||||
|
||||
|
@ -37,6 +36,97 @@
|
|||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <netdb.h>
|
||||
#include <ifaddrs.h>
|
||||
|
||||
#define OSMO_SOCK_F_CONNECT (1 << 0)
|
||||
#define OSMO_SOCK_F_BIND (1 << 1)
|
||||
#define OSMO_SOCK_F_NONBLOCK (1 << 2)
|
||||
int osmo_sock_init(uint16_t family, uint16_t type, uint8_t proto,
|
||||
const char *host, uint16_t port, unsigned int flags)
|
||||
{
|
||||
struct addrinfo hints, *result, *rp;
|
||||
int sfd, rc, on = 1;
|
||||
char portbuf[16];
|
||||
|
||||
if ((flags & (OSMO_SOCK_F_BIND | OSMO_SOCK_F_CONNECT)) ==
|
||||
(OSMO_SOCK_F_BIND | OSMO_SOCK_F_CONNECT))
|
||||
return -EINVAL;
|
||||
|
||||
sprintf(portbuf, "%u", port);
|
||||
memset(&hints, 0, sizeof(struct addrinfo));
|
||||
hints.ai_family = family;
|
||||
hints.ai_socktype = type;
|
||||
hints.ai_flags = 0;
|
||||
hints.ai_protocol = proto;
|
||||
|
||||
if (flags & OSMO_SOCK_F_BIND)
|
||||
hints.ai_flags |= AI_PASSIVE;
|
||||
|
||||
rc = getaddrinfo(host, portbuf, &hints, &result);
|
||||
if (rc != 0) {
|
||||
perror("getaddrinfo returned NULL");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
for (rp = result; rp != NULL; rp = rp->ai_next) {
|
||||
sfd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);
|
||||
if (sfd == -1)
|
||||
continue;
|
||||
if (flags & OSMO_SOCK_F_NONBLOCK) {
|
||||
if (ioctl(sfd, FIONBIO, (unsigned char *)&on) < 0) {
|
||||
perror("cannot set this socket unblocking");
|
||||
close(sfd);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
if (flags & OSMO_SOCK_F_CONNECT) {
|
||||
rc = connect(sfd, rp->ai_addr, rp->ai_addrlen);
|
||||
if (rc != -1 || (rc == -1 && errno == EINPROGRESS))
|
||||
break;
|
||||
} else {
|
||||
rc = setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR,
|
||||
&on, sizeof(on));
|
||||
if (rc < 0) {
|
||||
perror("cannot setsockopt socket");
|
||||
break;
|
||||
}
|
||||
if (bind(sfd, rp->ai_addr, rp->ai_addrlen) != -1)
|
||||
break;
|
||||
}
|
||||
close(sfd);
|
||||
}
|
||||
freeaddrinfo(result);
|
||||
|
||||
if (rp == NULL) {
|
||||
perror("unable to connect/bind socket");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
|
||||
|
||||
/* Make sure to call 'listen' on a bound, connection-oriented sock */
|
||||
if (flags & OSMO_SOCK_F_BIND) {
|
||||
switch (type) {
|
||||
case SOCK_STREAM:
|
||||
case SOCK_SEQPACKET:
|
||||
listen(sfd, 10);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return sfd;
|
||||
}
|
||||
|
||||
|
||||
static void _osmo_client_connect(void *_data)
|
||||
{
|
||||
osmo_client_connect((struct osmo_pcap_client *) _data);
|
||||
|
@ -45,7 +135,7 @@ static void _osmo_client_connect(void *_data)
|
|||
static void lost_connection(struct osmo_pcap_client *client)
|
||||
{
|
||||
if (client->wqueue.bfd.fd >= 0) {
|
||||
osmo_fd_unregister(&client->wqueue.bfd);
|
||||
bsc_unregister_fd(&client->wqueue.bfd);
|
||||
close(client->wqueue.bfd.fd);
|
||||
client->wqueue.bfd.fd = -1;
|
||||
}
|
||||
|
@ -53,19 +143,19 @@ static void lost_connection(struct osmo_pcap_client *client)
|
|||
|
||||
client->timer.cb = _osmo_client_connect;
|
||||
client->timer.data = client;
|
||||
osmo_timer_schedule(&client->timer, 2, 0);
|
||||
bsc_schedule_timer(&client->timer, 2, 0);
|
||||
}
|
||||
|
||||
static void write_data(struct osmo_pcap_client *client, struct msgb *msg)
|
||||
{
|
||||
if (osmo_wqueue_enqueue(&client->wqueue, msg) != 0) {
|
||||
if (write_queue_enqueue(&client->wqueue, msg) != 0) {
|
||||
LOGP(DCLIENT, LOGL_ERROR, "Failed to enqueue.\n");
|
||||
msgb_free(msg);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static int read_cb(struct osmo_fd *fd)
|
||||
static int read_cb(struct bsc_fd *fd)
|
||||
{
|
||||
char buf[4096];
|
||||
int rc;
|
||||
|
@ -81,7 +171,7 @@ static int read_cb(struct osmo_fd *fd)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int write_cb(struct osmo_fd *fd, struct msgb *msg)
|
||||
static int write_cb(struct bsc_fd *fd, struct msgb *msg)
|
||||
{
|
||||
int rc;
|
||||
|
||||
|
@ -160,7 +250,7 @@ void osmo_client_connect(struct osmo_pcap_client *client)
|
|||
client->wqueue.write_cb = write_cb;
|
||||
client->wqueue.bfd.when = BSC_FD_READ;
|
||||
client->wqueue.bfd.data = client;
|
||||
osmo_wqueue_clear(&client->wqueue);
|
||||
write_queue_clear(&client->wqueue);
|
||||
|
||||
fd = osmo_sock_init(AF_INET, SOCK_STREAM, IPPROTO_TCP,
|
||||
client->srv_ip, client->srv_port, OSMO_SOCK_F_CONNECT);
|
||||
|
@ -173,7 +263,7 @@ void osmo_client_connect(struct osmo_pcap_client *client)
|
|||
}
|
||||
|
||||
client->wqueue.bfd.fd = fd;
|
||||
if (osmo_fd_register(&client->wqueue.bfd) != 0) {
|
||||
if (bsc_register_fd(&client->wqueue.bfd) != 0) {
|
||||
LOGP(DCLIENT, LOGL_ERROR,
|
||||
"Failed to register to BFD.\n");
|
||||
lost_connection(client);
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#include <osmo-pcap/osmo_pcap_client.h>
|
||||
#include <osmo-pcap/common.h>
|
||||
|
||||
#include <osmocom/core/talloc.h>
|
||||
#include <osmocore/talloc.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
#include <osmo-pcap/common.h>
|
||||
|
||||
#include <osmocom/core/utils.h>
|
||||
#include <osmocore/utils.h>
|
||||
|
||||
static const struct log_info_cat default_categories[] = {
|
||||
[DPCAP] = {
|
||||
|
|
Loading…
Reference in New Issue