diff options
author | David Brodski <david@brodski.eu> | 2011-04-06 00:47:00 +0000 |
---|---|---|
committer | David Brodski <david@brodski.eu> | 2011-04-06 00:47:00 +0000 |
commit | d99bd9118c9e6328f4a476457d3f86e7b8cd11b0 (patch) | |
tree | 2bdce97b2e0f15af26c82e546cac67f6a73baa68 /src/transport/plugin_transport_wlan.c | |
parent | 8de8a462ddd6c327f7134763a8e89b523e8ffa6b (diff) | |
download | gnunet-d99bd9118c9e6328f4a476457d3f86e7b8cd11b0.tar.gz gnunet-d99bd9118c9e6328f4a476457d3f86e7b8cd11b0.zip |
reliability test and fragmentation are working now
Diffstat (limited to 'src/transport/plugin_transport_wlan.c')
-rw-r--r-- | src/transport/plugin_transport_wlan.c | 173 |
1 files changed, 94 insertions, 79 deletions
diff --git a/src/transport/plugin_transport_wlan.c b/src/transport/plugin_transport_wlan.c index a2e9bbe60..9d79e2d01 100644 --- a/src/transport/plugin_transport_wlan.c +++ b/src/transport/plugin_transport_wlan.c | |||
@@ -60,7 +60,7 @@ | |||
60 | 60 | ||
61 | #define HALLO_BEACON_SCALING_FACTOR 900 | 61 | #define HALLO_BEACON_SCALING_FACTOR 900 |
62 | 62 | ||
63 | #define DEBUG_wlan GNUNET_YES | 63 | #define DEBUG_wlan GNUNET_NO |
64 | 64 | ||
65 | #define MESSAGE_LENGHT_UNKNOWN -1 | 65 | #define MESSAGE_LENGHT_UNKNOWN -1 |
66 | //#define NO_MESSAGE_OR_MESSAGE_FINISHED -2 | 66 | //#define NO_MESSAGE_OR_MESSAGE_FINISHED -2 |
@@ -1175,12 +1175,12 @@ check_finished_fragment(struct Plugin * plugin, struct FragmentMessage * fm) | |||
1175 | uint64_t tmpfield = UINT64_MAX; | 1175 | uint64_t tmpfield = UINT64_MAX; |
1176 | tmpfield = tmpfield >> maxack; | 1176 | tmpfield = tmpfield >> maxack; |
1177 | 1177 | ||
1178 | //#if DEBUG_wlan | 1178 | #if DEBUG_wlan |
1179 | if (maxack != 63) | 1179 | if (maxack != 63) |
1180 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, | 1180 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |
1181 | "Test bitfields %X and %X, maxack is %u, fm size %u\n", | 1181 | "Test bitfields %X and %X, maxack is %u, fm size %u\n", |
1182 | fm->ack_bitfield, tmpfield, maxack, fm->message_size); | 1182 | fm->ack_bitfield, tmpfield, maxack, fm->message_size); |
1183 | //#endif | 1183 | #endif |
1184 | 1184 | ||
1185 | if (fm->ack_bitfield == tmpfield) | 1185 | if (fm->ack_bitfield == tmpfield) |
1186 | { | 1186 | { |
@@ -1294,14 +1294,16 @@ send_ack(struct Plugin * plugin, struct AckSendQueue * ack) | |||
1294 | 1294 | ||
1295 | GNUNET_assert(sizeof(struct FragmentationAckHeader) <= WLAN_MTU); | 1295 | GNUNET_assert(sizeof(struct FragmentationAckHeader) <= WLAN_MTU); |
1296 | 1296 | ||
1297 | size = sizeof(struct GNUNET_MessageHeader) + sizeof(struct Radiotap_Send) | ||
1298 | + sizeof(struct ieee80211_frame) + sizeof(struct FragmentationAckHeader); | ||
1299 | |||
1297 | #if DEBUG_wlan | 1300 | #if DEBUG_wlan |
1298 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, | 1301 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |
1299 | "Sending ack for message_id %u with fragment field %u\n", | 1302 | "Sending ack for message_id %u with fragment field %u, size %u\n", |
1300 | ack->message_id, ack->fragments_field); | 1303 | ack->message_id, ack->fragments_field, size |
1304 | - sizeof(struct Radiotap_Send)); | ||
1301 | #endif | 1305 | #endif |
1302 | 1306 | ||
1303 | size = sizeof(struct GNUNET_MessageHeader) + sizeof(struct Radiotap_Send) | ||
1304 | + sizeof(struct ieee80211_frame) + sizeof(struct FragmentationAckHeader); | ||
1305 | msgheader = GNUNET_malloc(size); | 1307 | msgheader = GNUNET_malloc(size); |
1306 | msgheader->size = htons(size); | 1308 | msgheader->size = htons(size); |
1307 | msgheader->type = htons(GNUNET_MESSAGE_TYPE_WLAN_HELPER_DATA); | 1309 | msgheader->type = htons(GNUNET_MESSAGE_TYPE_WLAN_HELPER_DATA); |
@@ -1405,13 +1407,21 @@ do_transmit(void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
1405 | 1407 | ||
1406 | //if (fm->message_size > WLAN_MTU) | 1408 | //if (fm->message_size > WLAN_MTU) |
1407 | // { | 1409 | // { |
1408 | size += sizeof(struct FragmentationHeader); | 1410 | size = sizeof(struct FragmentationHeader); |
1409 | 1411 | ||
1410 | set_next_message_fragment_pos(fm); | 1412 | set_next_message_fragment_pos(fm); |
1411 | 1413 | ||
1412 | copyoffset = (WLAN_MTU - sizeof(struct FragmentationHeader)) | 1414 | copyoffset = (WLAN_MTU - sizeof(struct FragmentationHeader)) |
1413 | * fm->message_pos; | 1415 | * fm->message_pos; |
1414 | 1416 | ||
1417 | |||
1418 | |||
1419 | fragheader.fragment_off_or_num = htons(fm->message_pos); | ||
1420 | fragheader.message_id = htonl(fm->message_id_out); | ||
1421 | copystart = fm->msg + copyoffset; | ||
1422 | copysize = GNUNET_MIN(fm->message_size - copyoffset, | ||
1423 | WLAN_MTU - sizeof(struct FragmentationHeader)); | ||
1424 | |||
1415 | #if DEBUG_wlan | 1425 | #if DEBUG_wlan |
1416 | GNUNET_log( | 1426 | GNUNET_log( |
1417 | GNUNET_ERROR_TYPE_DEBUG, | 1427 | GNUNET_ERROR_TYPE_DEBUG, |
@@ -1421,12 +1431,6 @@ do_transmit(void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
1421 | GNUNET_TIME_absolute_get_remaining(fm->timeout)); | 1431 | GNUNET_TIME_absolute_get_remaining(fm->timeout)); |
1422 | #endif | 1432 | #endif |
1423 | 1433 | ||
1424 | fragheader.fragment_off_or_num = htons(fm->message_pos); | ||
1425 | fragheader.message_id = htonl(fm->message_id_out); | ||
1426 | copystart = fm->msg + copyoffset; | ||
1427 | copysize = GNUNET_MIN(fm->message_size - copyoffset, | ||
1428 | WLAN_MTU - sizeof(struct FragmentationHeader)); | ||
1429 | |||
1430 | if (copyoffset >= fm->message_size) | 1434 | if (copyoffset >= fm->message_size) |
1431 | { | 1435 | { |
1432 | GNUNET_log( | 1436 | GNUNET_log( |
@@ -2044,38 +2048,40 @@ is_double_msg(struct Receive_Message_Queue * rec_message, | |||
2044 | */ | 2048 | */ |
2045 | 2049 | ||
2046 | static void | 2050 | static void |
2047 | insert_fragment_in_queue(struct Receive_Message_Queue * rec_message, | 2051 | insert_fragment_in_queue(struct Receive_Message_Queue * rx_message, |
2048 | struct Receive_Fragment_Queue * rec_queue) | 2052 | struct Receive_Fragment_Queue * rx_frag) |
2049 | { | 2053 | { |
2050 | GNUNET_assert(rec_message != NULL); | 2054 | GNUNET_assert(rx_message != NULL); |
2051 | GNUNET_assert(rec_queue != NULL); | 2055 | GNUNET_assert(rx_frag != NULL); |
2052 | 2056 | ||
2053 | struct Receive_Fragment_Queue * rec_queue2 = rec_message->frag_head; | 2057 | struct Receive_Fragment_Queue * rx_frag2 = rx_message->frag_head; |
2054 | struct WlanHeader * wlanheader = NULL; | 2058 | struct WlanHeader * wlanheader = NULL; |
2055 | 2059 | ||
2060 | |||
2056 | //this is the first fragment of the message (fragment id 0) | 2061 | //this is the first fragment of the message (fragment id 0) |
2057 | if (rec_queue->num == 0) | 2062 | if (rx_frag->num == 0) |
2058 | { | 2063 | { |
2059 | wlanheader = (struct WlanHeader *) rec_queue->msg; | 2064 | wlanheader = (struct WlanHeader *) rx_frag->msg; |
2060 | rec_message->rec_size = ntohs(wlanheader->header.size); | 2065 | rx_message->rec_size = ntohs(wlanheader->header.size); |
2061 | } | 2066 | } |
2062 | 2067 | ||
2063 | //sort into list | 2068 | //sort into list |
2064 | while (rec_queue2 != NULL) | 2069 | while (rx_frag2 != NULL) |
2065 | { | 2070 | { |
2066 | if (rec_queue2->num > rec_queue->num) | 2071 | if (rx_frag2->num > rx_frag->num) |
2067 | { | 2072 | { |
2068 | //next element number is grater than the current num | 2073 | //next element number is grater than the current num |
2069 | GNUNET_CONTAINER_DLL_insert_before(rec_message->frag_head, rec_message->frag_tail, rec_queue2, rec_queue); | 2074 | GNUNET_CONTAINER_DLL_insert_before(rx_message->frag_head, rx_message->frag_tail, rx_frag2, rx_frag); |
2070 | setBit((char *) &rec_message->received_fragments, rec_queue->num); | 2075 | setBit((char *) &rx_message->received_fragments, rx_frag->num); |
2071 | return; | 2076 | return; |
2072 | } | 2077 | } |
2073 | rec_queue = rec_queue->next; | 2078 | rx_frag2 = rx_frag2->next; |
2074 | } | 2079 | } |
2080 | |||
2075 | //no element has a grater number | 2081 | //no element has a grater number |
2076 | GNUNET_CONTAINER_DLL_insert_tail(rec_message->frag_head, rec_message->frag_tail, rec_queue); | 2082 | GNUNET_CONTAINER_DLL_insert_tail(rx_message->frag_head, rx_message->frag_tail, rx_frag); |
2077 | 2083 | ||
2078 | setBit((char *) &rec_message->received_fragments, rec_queue->num); | 2084 | setBit((char *) &rx_message->received_fragments, rx_frag->num); |
2079 | } | 2085 | } |
2080 | 2086 | ||
2081 | /** | 2087 | /** |
@@ -2151,52 +2157,51 @@ check_rec_finished_msg(struct Plugin* plugin, | |||
2151 | check_message_fragment_bitfield(rx_message); | 2157 | check_message_fragment_bitfield(rx_message); |
2152 | #endif | 2158 | #endif |
2153 | 2159 | ||
2154 | if (rx_message->frag_tail->num == ffsl(rx_message->received_fragments)) | 2160 | // if (rx_message->frag_tail->num == ffsl(rx_message->received_fragments)) |
2161 | // { | ||
2162 | bitfield = ~bitfield; | ||
2163 | bitfield = bitfield >> (63 - rx_message->frag_tail->num); | ||
2164 | if (rx_message->received_fragments == bitfield) | ||
2155 | { | 2165 | { |
2156 | bitfield = ~bitfield; | 2166 | |
2157 | bitfield = bitfield << (63 - ffsl(rx_message->received_fragments)); | 2167 | while (rx_frag != NULL) |
2158 | if (rx_message->received_fragments == bitfield) | 2168 | { |
2169 | sum += rx_frag->size; | ||
2170 | rx_frag = rx_frag->next; | ||
2171 | } | ||
2172 | //sum should always be smaller or equal of | ||
2173 | GNUNET_assert(sum <= packetsize); | ||
2174 | if (sum == packetsize) | ||
2159 | { | 2175 | { |
2160 | 2176 | ||
2177 | #if DEBUG_wlan | ||
2178 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, | ||
2179 | "check_rec_finished_msg: A message for %p is complete\n", session); | ||
2180 | #endif | ||
2181 | |||
2182 | //TODO use mst | ||
2183 | //copy fragments together | ||
2184 | msg = GNUNET_malloc(packetsize); | ||
2185 | rx_frag = rx_message->frag_head; | ||
2186 | aktnum = 0; | ||
2161 | while (rx_frag != NULL) | 2187 | while (rx_frag != NULL) |
2162 | { | 2188 | { |
2163 | sum += rx_frag->size; | 2189 | //TODO SAVE SOME COPY OPS AND CHECK CRC WITHOUT COPY |
2190 | memcpy(msg + aktnum, rx_frag->msg, rx_frag->size); | ||
2191 | aktnum += rx_frag->size; | ||
2164 | rx_frag = rx_frag->next; | 2192 | rx_frag = rx_frag->next; |
2165 | } | 2193 | } |
2166 | //sum should always be smaller or equal of | ||
2167 | GNUNET_assert(sum <= packetsize); | ||
2168 | if (sum == packetsize) | ||
2169 | { | ||
2170 | |||
2171 | #if DEBUG_wlan | ||
2172 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, | ||
2173 | "check_rec_finished_msg: A message for %p is complete\n", | ||
2174 | session); | ||
2175 | #endif | ||
2176 | 2194 | ||
2177 | //TODO use mst | 2195 | free_receive_message(plugin, rx_message); |
2178 | //copy fragments together | 2196 | //call wlan_process_helper to process the message |
2179 | msg = GNUNET_malloc(packetsize); | 2197 | wlan_data_massage_handler(plugin, session_light, |
2180 | rx_frag = rx_message->frag_head; | 2198 | (struct GNUNET_MessageHeader*) msg); |
2181 | aktnum = 0; | 2199 | //wlan_data_helper (plugin, session_light, (struct GNUNET_MessageHeader*) msg); |
2182 | while (rx_frag != NULL) | ||
2183 | { | ||
2184 | //TODO SAVE SOME COPY OPS AND CHECK CRC WITHOUT COPY | ||
2185 | memcpy(msg + aktnum, rx_frag->msg, rx_frag->size); | ||
2186 | aktnum += rx_frag->size; | ||
2187 | rx_frag = rx_frag->next; | ||
2188 | } | ||
2189 | |||
2190 | free_receive_message(plugin, rx_message); | ||
2191 | //call wlan_process_helper to process the message | ||
2192 | wlan_data_massage_handler(plugin, session_light, | ||
2193 | (struct GNUNET_MessageHeader*) msg); | ||
2194 | //wlan_data_helper (plugin, session_light, (struct GNUNET_MessageHeader*) msg); | ||
2195 | 2200 | ||
2196 | GNUNET_free(msg); | 2201 | GNUNET_free(msg); |
2197 | } | ||
2198 | } | 2202 | } |
2199 | } | 2203 | } |
2204 | // } | ||
2200 | } | 2205 | } |
2201 | 2206 | ||
2202 | static void | 2207 | static void |
@@ -2216,8 +2221,8 @@ process_data(void *cls, void *client, const struct GNUNET_MessageHeader *hdr) | |||
2216 | 2221 | ||
2217 | #if DEBUG_wlan | 2222 | #if DEBUG_wlan |
2218 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, | 2223 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |
2219 | "Calling plugin->env->receive for session %p; %s\n", session, | 2224 | "Calling plugin->env->receive for session %p; %s; size: %u\n", session, |
2220 | wlan_plugin_address_to_string(NULL, session->addr, 6)); | 2225 | wlan_plugin_address_to_string(NULL, session->addr, 6), htons(hdr->size)); |
2221 | #endif | 2226 | #endif |
2222 | 2227 | ||
2223 | plugin->env->receive(plugin->env->cls, &(session->target), hdr, | 2228 | plugin->env->receive(plugin->env->cls, &(session->target), hdr, |
@@ -2444,7 +2449,7 @@ insert_fragment_in_in_message_queue(struct Plugin * plugin, | |||
2444 | //check if message_id is right or it is a new msg | 2449 | //check if message_id is right or it is a new msg |
2445 | GNUNET_assert(fh != NULL); | 2450 | GNUNET_assert(fh != NULL); |
2446 | 2451 | ||
2447 | rx_message = get_receive_message(plugin, session, ntohs(fh->message_id)); | 2452 | rx_message = get_receive_message(plugin, session, ntohl(fh->message_id)); |
2448 | 2453 | ||
2449 | if (rx_message == NULL) | 2454 | if (rx_message == NULL) |
2450 | { | 2455 | { |
@@ -2453,7 +2458,7 @@ insert_fragment_in_in_message_queue(struct Plugin * plugin, | |||
2453 | 2458 | ||
2454 | //new message incoming | 2459 | //new message incoming |
2455 | rx_message = GNUNET_malloc(sizeof (struct Receive_Message_Queue)); | 2460 | rx_message = GNUNET_malloc(sizeof (struct Receive_Message_Queue)); |
2456 | rx_message->message_id_in = ntohs(fh->message_id); | 2461 | rx_message->message_id_in = ntohl(fh->message_id); |
2457 | rx_message->rec_size = MESSAGE_LENGHT_UNKNOWN; | 2462 | rx_message->rec_size = MESSAGE_LENGHT_UNKNOWN; |
2458 | rx_message->session = session; | 2463 | rx_message->session = session; |
2459 | rx_message->timeout = GNUNET_TIME_absolute_add( | 2464 | rx_message->timeout = GNUNET_TIME_absolute_add( |
@@ -2487,6 +2492,7 @@ insert_fragment_in_in_message_queue(struct Plugin * plugin, | |||
2487 | if (is_double_msg(rx_message, fh) != GNUNET_YES) | 2492 | if (is_double_msg(rx_message, fh) != GNUNET_YES) |
2488 | { | 2493 | { |
2489 | 2494 | ||
2495 | |||
2490 | //report size | 2496 | //report size |
2491 | rx_frag = GNUNET_malloc(sizeof (struct Receive_Fragment_Queue) + | 2497 | rx_frag = GNUNET_malloc(sizeof (struct Receive_Fragment_Queue) + |
2492 | ntohs(fh->header.size) - sizeof(struct FragmentationHeader)); | 2498 | ntohs(fh->header.size) - sizeof(struct FragmentationHeader)); |
@@ -2505,8 +2511,8 @@ insert_fragment_in_in_message_queue(struct Plugin * plugin, | |||
2505 | GNUNET_log( | 2511 | GNUNET_log( |
2506 | GNUNET_ERROR_TYPE_DEBUG, | 2512 | GNUNET_ERROR_TYPE_DEBUG, |
2507 | "New fragment: size %u, fragsize %u, message id %u, bitfield %X, session %u\n", | 2513 | "New fragment: size %u, fragsize %u, message id %u, bitfield %X, session %u\n", |
2508 | rx_message->rec_size, rx_frag->size, rx_message->received_fragments, | 2514 | rx_message->rec_size, rx_frag->size, rx_message->message_id_in, |
2509 | rx_message->message_id_in, session); | 2515 | rx_message->received_fragments, session); |
2510 | #endif | 2516 | #endif |
2511 | 2517 | ||
2512 | check_rec_finished_msg(plugin, session_light, session, rx_message); | 2518 | check_rec_finished_msg(plugin, session_light, session, rx_message); |
@@ -2611,7 +2617,7 @@ wlan_data_helper(void *cls, struct Session_light * session_light, | |||
2611 | GNUNET_log( | 2617 | GNUNET_log( |
2612 | GNUNET_ERROR_TYPE_INFO, | 2618 | GNUNET_ERROR_TYPE_INFO, |
2613 | "WLAN client not in session list, fragment num %u, message id %u\n", | 2619 | "WLAN client not in session list, fragment num %u, message id %u\n", |
2614 | ntohs(fh->fragment_off_or_num), ntohs(fh->message_id)); | 2620 | ntohs(fh->fragment_off_or_num), ntohl(fh->message_id)); |
2615 | wlan_data_massage_handler(plugin, session_light, | 2621 | wlan_data_massage_handler(plugin, session_light, |
2616 | (struct GNUNET_MessageHeader *) tempmsg); | 2622 | (struct GNUNET_MessageHeader *) tempmsg); |
2617 | session = session_light->session; | 2623 | session = session_light->session; |
@@ -2668,8 +2674,11 @@ wlan_data_helper(void *cls, struct Session_light * session_light, | |||
2668 | else | 2674 | else |
2669 | { | 2675 | { |
2670 | // TODO Wrong data? | 2676 | // TODO Wrong data? |
2671 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, | 2677 | GNUNET_log( |
2672 | "WLAN packet inside the WLAN helper packet has not the right type\n"); | 2678 | GNUNET_ERROR_TYPE_INFO, |
2679 | "WLAN packet inside the WLAN helper packet has not the right type: %u size: %u\n", | ||
2680 | ntohs(hdr->type), ntohs(hdr->size)); | ||
2681 | GNUNET_assert(0); | ||
2673 | return; | 2682 | return; |
2674 | } | 2683 | } |
2675 | 2684 | ||
@@ -2724,6 +2733,12 @@ wlan_process_helper(void *cls, void *client, | |||
2724 | if (ntohs(hdr->size) < sizeof(struct ieee80211_frame) | 2733 | if (ntohs(hdr->size) < sizeof(struct ieee80211_frame) |
2725 | + sizeof(struct GNUNET_MessageHeader) + sizeof(struct Radiotap_rx)) | 2734 | + sizeof(struct GNUNET_MessageHeader) + sizeof(struct Radiotap_rx)) |
2726 | { | 2735 | { |
2736 | #if DEBUG_wlan | ||
2737 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, | ||
2738 | "Size of packet is too small; size: %u min size: %u\n", ntohs( | ||
2739 | hdr->size), sizeof(struct ieee80211_frame) | ||
2740 | + sizeof(struct GNUNET_MessageHeader)); | ||
2741 | #endif | ||
2727 | GNUNET_break (0); | 2742 | GNUNET_break (0); |
2728 | /* FIXME: restart SUID process */ | 2743 | /* FIXME: restart SUID process */ |
2729 | return; | 2744 | return; |
@@ -2748,7 +2763,8 @@ wlan_process_helper(void *cls, void *client, | |||
2748 | 2763 | ||
2749 | 2764 | ||
2750 | datasize = ntohs(hdr->size) - sizeof(struct ieee80211_frame) | 2765 | datasize = ntohs(hdr->size) - sizeof(struct ieee80211_frame) |
2751 | - sizeof(struct GNUNET_MessageHeader); | 2766 | - sizeof(struct GNUNET_MessageHeader) |
2767 | - sizeof(struct Radiotap_rx); | ||
2752 | 2768 | ||
2753 | session_light = GNUNET_malloc(sizeof(struct Session_light)); | 2769 | session_light = GNUNET_malloc(sizeof(struct Session_light)); |
2754 | memcpy(session_light->addr, &(wlanIeeeHeader->i_addr2), | 2770 | memcpy(session_light->addr, &(wlanIeeeHeader->i_addr2), |
@@ -2798,12 +2814,11 @@ wlan_process_helper(void *cls, void *client, | |||
2798 | return; | 2814 | return; |
2799 | } | 2815 | } |
2800 | memcpy(&plugin->mac_address, &hdr[1], sizeof(struct MacAddress)); | 2816 | memcpy(&plugin->mac_address, &hdr[1], sizeof(struct MacAddress)); |
2801 | #if DEBUG_WLAN | 2817 | #if DEBUG_wlan |
2802 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 2818 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |
2803 | "Received WLAN_HELPER_CONTROL message with transport of address %s\n", | 2819 | "Received WLAN_HELPER_CONTROL message with transport of address %s\n", |
2804 | wlan_plugin_address_to_string (cls, | 2820 | wlan_plugin_address_to_string(cls, &plugin->mac_address, |
2805 | &plugin->mac_address, | 2821 | sizeof(struct MacAddress))); |
2806 | sizeof (struct MacAddress))); | ||
2807 | #endif | 2822 | #endif |
2808 | plugin->env->notify_address(plugin->env->cls, "wlan", &plugin->mac_address, | 2823 | plugin->env->notify_address(plugin->env->cls, "wlan", &plugin->mac_address, |
2809 | sizeof(struct MacAddress), GNUNET_TIME_UNIT_FOREVER_REL); | 2824 | sizeof(struct MacAddress), GNUNET_TIME_UNIT_FOREVER_REL); |