summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormazzoo <mazzoo@8d8ab74c-27aa-4a3d-9bde-523a2bc1f624>2008-12-30 12:49:26 +0000
committermazzoo <mazzoo@8d8ab74c-27aa-4a3d-9bde-523a2bc1f624>2008-12-30 12:49:26 +0000
commit11521c89e3d43f88825251f5cbc54b9706be9f63 (patch)
treee9fb33e6837236490b9825e7fe875d8e0412445c
parente994341809e6860a87452aebacd7c3ac344e2e4a (diff)
improve pcapstein and autorec
I am about to leave 25c3 - it was lots of fun, have a nice time and I hope to see you next year. git-svn-id: https://dedected.org/svn/trunk@7 8d8ab74c-27aa-4a3d-9bde-523a2bc1f624
-rw-r--r--com-on-air_cs-linux/tools/dect_cli.c31
-rw-r--r--com-on-air_cs-linux/tools/pcapstein.c25
2 files changed, 44 insertions, 12 deletions
diff --git a/com-on-air_cs-linux/tools/dect_cli.c b/com-on-air_cs-linux/tools/dect_cli.c
index 1b317f5..84e2fd8 100644
--- a/com-on-air_cs-linux/tools/dect_cli.c
+++ b/com-on-air_cs-linux/tools/dect_cli.c
@@ -353,20 +353,25 @@ void do_autorec(void)
LOG("### autorec turned %s\n", cli.autorec ? "ON":"OFF");
}
+void do_stop_keep_autorec(void)
+{
+ LOG("### stopping DIP\n");
+ uint16_t val;
+ val = COA_MODE_IDLE;
+ if (ioctl(cli.fd, COA_IOCTL_MODE, &val)){
+ LOG("couldn't ioctl()\n");
+ exit(1);
+ }
+ cli.mode = MODE_STOP;
+}
+
void do_stop(void)
{
if (!(cli.mode & MODE_STOP))
{
- LOG("### stopping DIP\n");
- uint16_t val;
- val = COA_MODE_IDLE;
- if (ioctl(cli.fd, COA_IOCTL_MODE, &val)){
- LOG("couldn't ioctl()\n");
- exit(1);
- }
- cli.mode = MODE_STOP;
- cli.autorec = 0;
+ do_stop_keep_autorec();
}
+ cli.autorec = 0;
}
void process_cli_data()
@@ -465,6 +470,10 @@ void process_dect_data()
while ( sizeof(cli.packet) ==
read(cli.fd, &cli.packet, sizeof(cli.packet)))
{
+
+ /* stop hopping one we synchronized */
+ cli.hop = 0;
+
if (!cli.pcap)
{
LOG("### got sync\n");
@@ -625,6 +634,7 @@ void mainloop(void)
if( (cli.hop) &&
( (cli.mode & MODE_FPSCAN) ||
+ (cli.mode & MODE_PPSCAN) ||
(cli.mode & MODE_CALLSCAN) ||
(cli.mode & MODE_JAM ) ))
{
@@ -644,7 +654,7 @@ void mainloop(void)
(cli.mode != MODE_CALLSCAN)
)
{
- do_stop();
+ do_stop_keep_autorec();
do_callscan();
if (cli.pcap)
{
@@ -652,6 +662,7 @@ void mainloop(void)
pcap_close(cli.pcap);
cli.pcap_d = NULL;
cli.pcap = NULL;
+ cli.hop = 1;
}
}
}
diff --git a/com-on-air_cs-linux/tools/pcapstein.c b/com-on-air_cs-linux/tools/pcapstein.c
index a4e97f6..8caf957 100644
--- a/com-on-air_cs-linux/tools/pcapstein.c
+++ b/com-on-air_cs-linux/tools/pcapstein.c
@@ -26,6 +26,9 @@
struct file_info fi;
+int pp_slot = -1;
+int fp_slot = -1;
+
void usage(void)
{
fprintf(stderr, "usage: pcapstein <dect-pcap-file>\n");
@@ -90,10 +93,28 @@ void init(char * fname)
void process_b_field(const struct pcap_pkthdr *h, const u_char *pkt)
{
+
+
if ( (pkt[0x17] == 0x16) && (pkt[0x18] == 0x75) )
- write(fi.fpp, &pkt[0x21], 40);
+ {
+ if (pp_slot < 0)
+ {
+ pp_slot = pkt[0x11];
+ }else{
+ if (pp_slot == pkt[0x11])
+ write(fi.fpp, &pkt[0x21], 40);
+ }
+ }
else
- write(fi.ffp, &pkt[0x21], 40);
+ {
+ if (fp_slot < 0)
+ {
+ fp_slot = pkt[0x11];
+ }else{
+ if (fp_slot == pkt[0x11])
+ write(fi.ffp, &pkt[0x21], 40);
+ }
+ }
}
void process_pcap_packet(