aboutsummaryrefslogtreecommitdiffstats
path: root/src/e1_input.c
diff options
context:
space:
mode:
authorHolger Freyther <zecke@selfish.org>2009-03-31 12:14:16 +0000
committerHolger Freyther <zecke@selfish.org>2009-03-31 12:14:16 +0000
commit0469cf608b55003666359eeb0b9376540bcae7dd (patch)
tree45fa2a130195c5f48bc1299eee3cd1bfd65bd813 /src/e1_input.c
parent66e092bbd6fae0bdace7921af5fbd92c7562614d (diff)
[e1] Enable dumping of LAPD frames again
Kill mi_set_pcap_fd from the header, introduce e1_set_pcap_fd and call it from bsc_hack.c. Hook into abis_rsl_sendmsg and _abis_nm_sendmsg for sending and e1inp_rx_ts for reading. It compiles and should not cause a regression.
Diffstat (limited to 'src/e1_input.c')
-rw-r--r--src/e1_input.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/e1_input.c b/src/e1_input.c
index 153a4137c..14352d03e 100644
--- a/src/e1_input.c
+++ b/src/e1_input.c
@@ -62,7 +62,6 @@ LLIST_HEAD(e1inp_line_list);
/* to be implemented, e.g. by bsc_hack.c */
void input_event(int event, enum e1inp_sign_type type, struct gsm_bts_trx *trx);
-#if 0
/*
* pcap writing of the misdn load
* pcap format is from http://wiki.wireshark.org/Development/LibpcapFileFormat
@@ -114,7 +113,7 @@ static_assert(sizeof(struct fake_linux_lapd_header) == 16, lapd_header_size);
static int pcap_fd = -1;
-void mi_set_pcap_fd(int fd)
+void e1_set_pcap_fd(int fd)
{
int ret;
struct pcap_hdr header = {
@@ -132,7 +131,7 @@ void mi_set_pcap_fd(int fd)
}
/* This currently only works for the D-Channel */
-static void write_pcap_packet(int direction, struct sockaddr_mISDN* addr,
+static void write_pcap_packet(int direction, int sapi, int tei,
struct msgb *msg) {
if (pcap_fd < 0)
return;
@@ -152,9 +151,9 @@ static void write_pcap_packet(int direction, struct sockaddr_mISDN* addr,
struct lapd_header lapd_header = {
.ea1 = 0,
.cr = direction == PCAP_OUTPUT ? 1 : 0,
- .sapi = addr->sapi & 0x3F,
+ .sapi = sapi & 0x3F,
.ea2 = 1,
- .tei = addr->tei & 0x7F,
+ .tei = tei & 0x7F,
.control_foo = 0x03 /* UI */,
};
@@ -180,7 +179,6 @@ static void write_pcap_packet(int direction, struct sockaddr_mISDN* addr,
ret = write(pcap_fd, msg->data + MISDN_HEADER_LEN,
msg->len - MISDN_HEADER_LEN);
}
-#endif
static const char *sign_types[] = {
[E1INP_SIGN_NONE] = "None",
@@ -236,6 +234,9 @@ int abis_rsl_sendmsg(struct msgb *msg)
sign_link = msg->trx->rsl_link;
msgb_enqueue(&sign_link->tx_list, msg);
+ /* dump it */
+ write_pcap_packet(PCAP_OUTPUT, sign_link->sapi, sign_link->tei, msg);
+
/* notify the driver we have something to write */
e1inp_driver = sign_link->ts->line->driver;
e1inp_driver->want_write(sign_link->ts);
@@ -258,6 +259,9 @@ int _abis_nm_sendmsg(struct msgb *msg)
sign_link = msg->trx->bts->oml_link;
msgb_enqueue(&sign_link->tx_list, msg);
+ /* dump it */
+ write_pcap_packet(PCAP_OUTPUT, sign_link->sapi, sign_link->tei, msg);
+
/* notify the driver we have something to write */
e1inp_driver = sign_link->ts->line->driver;
e1inp_driver->want_write(sign_link->ts);
@@ -379,8 +383,8 @@ int e1inp_rx_ts(struct e1inp_ts *ts, struct msgb *msg,
switch (ts->type) {
case E1INP_TS_TYPE_SIGN:
- /* FIXME: write pcap packet */
/* consult the list of signalling links */
+ write_pcap_packet(PCAP_INPUT, sapi, tei, msg);
link = e1inp_lookup_sign_link(ts, tei, sapi);
if (!link) {
fprintf(stderr, "didn't find singalling link for "