aboutsummaryrefslogtreecommitdiff
path: root/src/transport/gnunet-transport-wlan-helper.c
diff options
context:
space:
mode:
authorDavid Brodski <david@brodski.eu>2011-05-23 23:14:47 +0000
committerDavid Brodski <david@brodski.eu>2011-05-23 23:14:47 +0000
commit5cdc9eb4091dfbfd1d65c4aaf1e3dfdd4b5b6316 (patch)
treea610fd026af2cde16c0140ca70be37f5913d6a43 /src/transport/gnunet-transport-wlan-helper.c
parent57e5f310b699c0b91dabac940e04ef4b152ee2a3 (diff)
downloadgnunet-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.c72
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
591struct RadioTapheader
592{
593 struct ieee80211_radiotap_header header;
594 u8 rate;
595 u8 pad1;
596 u16 txflags;
597};
591 598
592static void 599static void
593stdin_send_hw (void *cls, 600stdin_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,
930int 935int
931main(int argc, char *argv[]) 936main(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}