diff options
author | David Brodski <david@brodski.eu> | 2011-05-23 23:14:47 +0000 |
---|---|---|
committer | David Brodski <david@brodski.eu> | 2011-05-23 23:14:47 +0000 |
commit | 5cdc9eb4091dfbfd1d65c4aaf1e3dfdd4b5b6316 (patch) | |
tree | a610fd026af2cde16c0140ca70be37f5913d6a43 /src/transport/gnunet-transport-wlan-helper.c | |
parent | 57e5f310b699c0b91dabac940e04ef4b152ee2a3 (diff) | |
download | gnunet-5cdc9eb4091dfbfd1d65c4aaf1e3dfdd4b5b6316.tar.gz gnunet-5cdc9eb4091dfbfd1d65c4aaf1e3dfdd4b5b6316.zip |
Some bugfixes, udp packets can now be send over wlan, unrel test added, clean up
Diffstat (limited to 'src/transport/gnunet-transport-wlan-helper.c')
-rw-r--r-- | src/transport/gnunet-transport-wlan-helper.c | 72 |
1 files changed, 36 insertions, 36 deletions
diff --git a/src/transport/gnunet-transport-wlan-helper.c b/src/transport/gnunet-transport-wlan-helper.c index 9759db532..4f2d66b13 100644 --- a/src/transport/gnunet-transport-wlan-helper.c +++ b/src/transport/gnunet-transport-wlan-helper.c | |||
@@ -378,7 +378,7 @@ openraw (struct Hardware_Infos *dev) | |||
378 | if (-1 == ioctl(dev->fd_raw, SIOCGIFINDEX, &ifr)) | 378 | if (-1 == ioctl(dev->fd_raw, SIOCGIFINDEX, &ifr)) |
379 | { | 379 | { |
380 | fprintf (stderr, | 380 | fprintf (stderr, |
381 | "ioctl(SIOCGIFINDEX) on interface `%.*s' failed: %s\n", | 381 | "Line: 381 ioctl(SIOCGIFINDEX) on interface `%.*s' failed: %s\n", |
382 | IFNAMSIZ, | 382 | IFNAMSIZ, |
383 | dev->iface, | 383 | dev->iface, |
384 | strerror (errno)); | 384 | strerror (errno)); |
@@ -428,10 +428,10 @@ openraw (struct Hardware_Infos *dev) | |||
428 | /* Bring interface up*/ | 428 | /* Bring interface up*/ |
429 | ifr.ifr_flags |= IFF_UP | IFF_BROADCAST | IFF_RUNNING; | 429 | ifr.ifr_flags |= IFF_UP | IFF_BROADCAST | IFF_RUNNING; |
430 | 430 | ||
431 | if (-1 != ioctl(dev->fd_raw, SIOCSIFFLAGS, &ifr)) | 431 | if (-1 == ioctl(dev->fd_raw, SIOCSIFFLAGS, &ifr)) |
432 | { | 432 | { |
433 | fprintf (stderr, | 433 | fprintf (stderr, |
434 | "ioctl(SIOCSIFFLAGS) on interface `%.*s' failed: %s\n", | 434 | "Line: 434 ioctl(SIOCSIFFLAGS) on interface `%.*s' failed: %s\n", |
435 | IFNAMSIZ, | 435 | IFNAMSIZ, |
436 | dev->iface, | 436 | dev->iface, |
437 | strerror (errno)); | 437 | strerror (errno)); |
@@ -451,10 +451,10 @@ openraw (struct Hardware_Infos *dev) | |||
451 | } | 451 | } |
452 | 452 | ||
453 | /* lookup the hardware type */ | 453 | /* lookup the hardware type */ |
454 | if (-1 != ioctl(dev->fd_raw, SIOCGIFHWADDR, &ifr)) | 454 | if (-1 == ioctl(dev->fd_raw, SIOCGIFHWADDR, &ifr)) |
455 | { | 455 | { |
456 | fprintf (stderr, | 456 | fprintf (stderr, |
457 | "ioctl(SIOCGIFHWADDR) on interface `%.*s' failed: %s\n", | 457 | "Line: 457 ioctl(SIOCGIFHWADDR) on interface `%.*s' failed: %s\n", |
458 | IFNAMSIZ, | 458 | IFNAMSIZ, |
459 | dev->iface, | 459 | dev->iface, |
460 | strerror (errno)); | 460 | strerror (errno)); |
@@ -588,6 +588,13 @@ mac_set (struct ieee80211_frame *u8aIeeeHeader, | |||
588 | 588 | ||
589 | } | 589 | } |
590 | 590 | ||
591 | struct RadioTapheader | ||
592 | { | ||
593 | struct ieee80211_radiotap_header header; | ||
594 | u8 rate; | ||
595 | u8 pad1; | ||
596 | u16 txflags; | ||
597 | }; | ||
591 | 598 | ||
592 | static void | 599 | static void |
593 | stdin_send_hw (void *cls, | 600 | stdin_send_hw (void *cls, |
@@ -601,14 +608,20 @@ stdin_send_hw (void *cls, | |||
601 | size_t sendsize; | 608 | size_t sendsize; |
602 | 609 | ||
603 | // struct? // FIXME: make nice... | 610 | // struct? // FIXME: make nice... |
604 | unsigned char u8aRadiotap[] = | 611 | struct RadioTapheader rtheader; |
605 | { 0x00, 0x00, // <-- radiotap version | 612 | rtheader.header.it_version = 0; |
606 | 0x0c, 0x00, // <- radiotap header length | 613 | rtheader.header.it_len = htole16(0x0c); |
607 | 0x04, 0x80, 0x00, 0x00, // <-- bitmap | 614 | rtheader.header.it_present = htole32(0x00008004); |
608 | 0x00, // <-- rate | 615 | rtheader.rate = 0x00; |
609 | 0x00, // <-- padding for natural alignment | 616 | rtheader.txflags = htole16(IEEE80211_RADIOTAP_F_TX_NOACK | IEEE80211_RADIOTAP_F_TX_NOSEQ); |
610 | 0x18, 0x00, // <-- TX flags | 617 | |
611 | }; | 618 | /* { 0x00, 0x00, <-- radiotap version |
619 | 0x0c, 0x00, <- radiotap header length | ||
620 | 0x04, 0x80, 0x00, 0x00, <-- bitmap | ||
621 | 0x00, <-- rate | ||
622 | 0x00, <-- padding for natural alignment | ||
623 | 0x18, 0x00, <-- TX flags | ||
624 | };*/ | ||
612 | 625 | ||
613 | sendsize = ntohs(hdr->size); | 626 | sendsize = ntohs(hdr->size); |
614 | if (sendsize < sizeof(struct Radiotap_Send) + sizeof(struct GNUNET_MessageHeader)) | 627 | if (sendsize < sizeof(struct Radiotap_Send) + sizeof(struct GNUNET_MessageHeader)) |
@@ -631,15 +644,15 @@ stdin_send_hw (void *cls, | |||
631 | exit(1); | 644 | exit(1); |
632 | } | 645 | } |
633 | 646 | ||
634 | u8aRadiotap[2] = htole16(sizeof(u8aRadiotap)); // WTF? | 647 | rtheader.header.it_len = htole16(sizeof(rtheader)); |
635 | u8aRadiotap[8] = header->rate; | 648 | rtheader.rate = header->rate; |
636 | memcpy(write_pout->buf, u8aRadiotap, sizeof(u8aRadiotap)); | 649 | memcpy(write_pout->buf, &rtheader, sizeof(rtheader)); |
637 | memcpy(write_pout->buf + sizeof(u8aRadiotap), &header[1], sendsize); | 650 | memcpy(write_pout->buf + sizeof(rtheader), &header[1], sendsize); |
638 | /* payload contains MAC address, but we don't trust it, so we'll | 651 | /* payload contains MAC address, but we don't trust it, so we'll |
639 | overwrite it with OUR MAC address again to prevent mischief */ | 652 | overwrite it with OUR MAC address again to prevent mischief */ |
640 | wlanheader = (struct ieee80211_frame *) (write_pout->buf + sizeof(u8aRadiotap)); | 653 | wlanheader = (struct ieee80211_frame *) (write_pout->buf + sizeof(rtheader)); |
641 | mac_set(wlanheader, dev); | 654 | mac_set(wlanheader, dev); |
642 | write_pout->size = sendsize + sizeof(u8aRadiotap); | 655 | write_pout->size = sendsize + sizeof(rtheader); |
643 | } | 656 | } |
644 | 657 | ||
645 | #if 0 | 658 | #if 0 |
@@ -757,14 +770,6 @@ hardwaremode (int argc, | |||
757 | int stdin_open; | 770 | int stdin_open; |
758 | struct GNUNET_SERVER_MessageStreamTokenizer * stdin_mst; | 771 | struct GNUNET_SERVER_MessageStreamTokenizer * stdin_mst; |
759 | 772 | ||
760 | if (2 != argc) | ||
761 | { | ||
762 | fprintf (stderr, | ||
763 | "This program must be started with the interface argument.\n"); | ||
764 | fprintf (stderr, | ||
765 | "Usage: interface-name\n"); | ||
766 | return 1; | ||
767 | } | ||
768 | if (0 != wlaninit(&dev, argv[1])) | 773 | if (0 != wlaninit(&dev, argv[1])) |
769 | return 1; | 774 | return 1; |
770 | uid = getuid(); | 775 | uid = getuid(); |
@@ -930,19 +935,14 @@ hardwaremode (int argc, | |||
930 | int | 935 | int |
931 | main(int argc, char *argv[]) | 936 | main(int argc, char *argv[]) |
932 | { | 937 | { |
933 | if (3 != argc) | 938 | if (2 != argc) |
934 | { | 939 | { |
935 | fprintf (stderr, | 940 | fprintf (stderr, |
936 | "This program must be started with the interface and the operating mode as argument.\n"); | 941 | "This program must be started with the interface as argument.\n"); |
937 | fprintf (stderr, | 942 | fprintf (stderr, |
938 | "Usage: interface-name options\n" | 943 | "Usage: interface-name\n" |
939 | "options: 0 = with hardware\n" | ||
940 | "1 = first loopback file\n" | ||
941 | "2 = second loopback file\n" | ||
942 | "\n"); | 944 | "\n"); |
943 | return 1; | 945 | return 1; |
944 | } | 946 | } |
945 | if (strstr(argv[2], "1") || strstr(argv[2], "2")) | 947 | return hardwaremode(argc , argv); |
946 | return testmode(argc, argv); | ||
947 | return hardwaremode(argc - 1, argv); | ||
948 | } | 948 | } |