testlayer1: polling sockets faster, sleep after bind, etc

This commit is contained in:
Martin Bachem 2016-06-30 14:29:43 +02:00
parent 1bade6d562
commit a29326031e
1 changed files with 16 additions and 23 deletions

View File

@ -551,21 +551,13 @@ int main_data_loop(devinfo_t *di) {
unsigned long rx_delta;
unsigned int running_since = 0;
printf("\nwaiting for data (use CTRL-C to cancel) stop(%i) sleep(%i)...\n", stop, usleep_val);
t1 = get_tick_count();
tout.tv_usec = 0;
tout.tv_sec = 1;
tout.tv_usec = 4000;
tout.tv_sec = 0;
for (ch_idx = 0; ch_idx < MAX_CHAN; ch_idx++) {
// start timer tick for first TX packet
if (!di->ch[ch_idx].t_start) {
di->ch[ch_idx].t_start = t1;
di->ch[ch_idx].seq_num = di->ch[ch_idx].tx.pkt_cnt;
}
}
printf("\nwaiting for data (use CTRL-C to cancel) stop(%i) sleep(%i)...\n", stop, usleep_val);
while (1) {
for (ch_idx = 0; ch_idx < MAX_CHAN; ch_idx++) {
if (!di->ch[ch_idx].activated) {
@ -592,6 +584,9 @@ int main_data_loop(devinfo_t *di) {
sizeof (di->laddr[ch_idx]));
di->ch[ch_idx].tx_ack--;
if (!di->ch[ch_idx].t_start) {
di->ch[ch_idx].t_start = get_tick_count();
}
}
/* read data */
@ -651,6 +646,10 @@ int main_data_loop(devinfo_t *di) {
control_channel(di, ch_idx, CHAN_DEACTIVATE);
}
} else if (hhrx->prim == PH_DATA_CNF) {
if (debug > 2) {
fprintf(stdout, "<-- %s - PH_DATA_CNF (toggle:%i)\n",
CHAN_NAMES[ch_idx], di->ch[ch_idx].toggle);
}
if (!di->ch[ch_idx].toggle) {
// ready to send next TX package in next mainloop
di->ch[ch_idx].tx_ack++;
@ -664,9 +663,6 @@ int main_data_loop(devinfo_t *di) {
}
}
/* relax cpu usage */
usleep(usleep_val);
// print out data rate stats:
t2 = get_tick_count();
if ((t2 - t1) > (TICKS_PER_SEC / 1) || exit_app) {
@ -726,6 +722,8 @@ int main_data_loop(devinfo_t *di) {
return 0;
}
}
usleep(usleep_val);
}
}
@ -793,7 +791,9 @@ connect_layer1_d(devinfo_t *di) {
di->laddr[CHAN_D].family = AF_ISDN;
di->laddr[CHAN_D].dev = di->cardnr;
di->laddr[CHAN_D].channel = 0;
ret = bind(di->layerid[CHAN_D], (struct sockaddr *) &di->laddr[CHAN_D], sizeof (di->laddr[CHAN_D]));
sleep(1);
if (ret < 0) {
fprintf(stdout, "could not bind l1 socket %s\n", strerror(errno));
@ -926,20 +926,13 @@ int main(int argc, char *argv[]) {
mISDN.ch[ch_idx].hdlc = (!(((ch_idx == CHAN_B1) || (ch_idx == CHAN_B2)) && btrans));
mISDN.ch[ch_idx].tx_ack = 1;
mISDN.ch[ch_idx].seq_num = 0;
fprintf(stdout, "chan %s stream enabled with packet sz %d bytes\n",
CHAN_NAMES[ch_idx], di->ch[ch_idx].tx_size);
}
}
err = socket(PF_ISDN, SOCK_RAW, ISDN_P_BASE);
if (err < 0) {
fprintf(stderr, "cannot open mISDN due to %s\n",
strerror(errno));
return 1;
}
close(err);
err = connect_layer1_d(&mISDN);
if (err) {
fprintf(stdout, "error(%d) connecting layer1\n", err);