00001
00028 #include "top_defs.h"
00029 #include "util.h"
00030 #include "wl_util.h"
00031 #include <stdio.h>
00032 #include <errno.h>
00033 #include <string.h>
00034
00035 const char* ip2str(struct ip_addr addr)
00036 {
00037 static char buf[16];
00038 sniprintf(buf, sizeof(buf), "%lu.%lu.%lu.%lu",
00039 (addr.addr >> 24) & 0xff,
00040 (addr.addr >> 16) & 0xff,
00041 (addr.addr >> 8) & 0xff,
00042 (addr.addr) & 0xff);
00043 return buf;
00044 }
00045
00046 struct ip_addr str2ip(const char* str)
00047 {
00048 int a,b,c,d;
00049 uint32_t ip = 0;
00050
00051 if (siscanf(str,"%d.%d.%d.%d",&a,&b,&c,&d) != 4)
00052 goto out;
00053
00054 if (a < 0 || a > 255 || b < 0 || b > 255 ||
00055 c < 0 || c > 255 || d < 0 || d > 255)
00056 goto out;
00057
00058 ip = (a << 24) | (b << 16) | (c << 8) | d;
00059
00060 out:
00061 return *(struct ip_addr*) &ip;
00062 }
00063
00064
00065
00066 void print_network(struct wl_network_t* wl_network)
00067 {
00068 printk("%s ", mac2str(wl_network->bssid.octet));
00069 printk("\"%s\"", ssid2str(&wl_network->ssid));
00070 printk(" RSSI %d dBm ", wl_network->rssi);
00071 switch (wl_network->enc_type) {
00072 case ENC_TYPE_WEP :
00073 printk(" (WEP encryption)");
00074 break;
00075 case ENC_TYPE_TKIP :
00076 printk(" (TKIP encryption)");
00077 break;
00078 case ENC_TYPE_CCMP :
00079 printk(" (CCMP encryption)");
00080 break;
00081 case ENC_TYPE_NONE :
00082 break;
00083 }
00084 printk("\n");
00085 }
00086
00087 void print_network_list(void)
00088 {
00089 struct wl_network_t* wl_network_list;
00090 uint8_t wl_network_cnt, i;
00091
00092 wl_get_network_list(&wl_network_list, &wl_network_cnt);
00093 if (wl_network_cnt == 0)
00094 printk("no nets found\n");
00095
00096 for (i = 0; i < wl_network_cnt; i++)
00097 print_network(&wl_network_list[i]);
00098 }
00099
00100 int join_argv(char *dst, size_t dst_len, int argc, char* argv[]) {
00101 char *p = dst;
00102 int i;
00103 int len = 0;
00104
00105
00106
00107
00108 for (i = 0; i < argc; i++) {
00109 len += strlen(argv[i]);
00110 if (len > dst_len) {
00111 printk("ssid too long (max %d)\n", dst_len);
00112 return 0;
00113 }
00114 p += sniprintf(p,
00115 dst_len - (p - dst),
00116 "%s ",
00117 argv[i]);
00118 }
00119 p--;
00120 *p = '\0';
00121
00122 return p - dst;
00123 }