summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-01-15 08:06:34 +0100
committerMarcel Holtmann <marcel@holtmann.org>2009-01-15 08:06:34 +0100
commitf213783e7d4068268187310251fedc546b9f212f (patch)
treeaac34f7fd95368dda351175784f6cb31f0cab9e1 /test
parentf9cd44bca667448d5c69477c9fd5d9df37acfff1 (diff)
Add support for fragmentation of data packets
Diffstat (limited to 'test')
-rw-r--r--test/l2test.c45
1 files changed, 29 insertions, 16 deletions
diff --git a/test/l2test.c b/test/l2test.c
index b3c450df..5c7955bc 100644
--- a/test/l2test.c
+++ b/test/l2test.c
@@ -305,8 +305,8 @@ static int do_connect(char *svr)
opts.imtu, opts.omtu, opts.flush_to, opts.mode, conn.hci_handle,
conn.dev_class[2], conn.dev_class[1], conn.dev_class[0]);
- if (data_size > opts.omtu)
- data_size = opts.omtu;
+ omtu = opts.omtu;
+ imtu = opts.imtu;
return sk;
@@ -681,7 +681,7 @@ static void recv_mode(int sk)
static void do_send(int sk)
{
uint32_t seq;
- int i, fd, len;
+ int i, fd, len, buflen, size, sent;
syslog(LOG_INFO, "Sending ...");
@@ -692,8 +692,17 @@ static void do_send(int sk)
strerror(errno), errno);
exit(1);
}
- len = read(fd, buf, data_size);
- send(sk, buf, len, 0);
+
+ sent = 0;
+ size = read(fd, buf, data_size);
+ while (size > 0) {
+ buflen = (size > omtu) ? omtu : size;
+
+ len = send(sk, buf + sent, buflen, 0);
+
+ sent += len;
+ size -= len;
+ }
return;
} else {
for (i = 6; i < data_size; i++)
@@ -706,11 +715,20 @@ static void do_send(int sk)
*(uint16_t *) (buf + 4) = htobs(data_size);
seq++;
- len = send(sk, buf, data_size, 0);
- if (len < 0 || len != data_size) {
- syslog(LOG_ERR, "Send failed: %s (%d)",
+ sent = 0;
+ size = data_size;
+ while (size > 0) {
+ buflen = (size > omtu) ? omtu : size;
+
+ len = send(sk, buf, buflen, 0);
+ if (len < 0 || len != buflen) {
+ syslog(LOG_ERR, "Send failed: %s (%d)",
strerror(errno), errno);
- exit(1);
+ exit(1);
+ }
+
+ sent += len;
+ size -= len;
}
if (num_frames && delay && count && !(seq % count))
@@ -1123,13 +1141,8 @@ int main(int argc, char *argv[])
exit(1);
}
- if (data_size < 0) {
- data_size = 48;
- if (imtu > data_size)
- data_size = imtu;
- if (omtu > data_size)
- data_size = omtu;
- }
+ if (data_size < 0)
+ data_size = (omtu > imtu) ? omtu : imtu;
if (!(buf = malloc(data_size))) {
perror("Can't allocate data buffer");