xref: /openbmc/linux/net/wireless/lib80211.c (revision 2819f8ad6da1e24b5dd94a221978e61f2a9c972a)
17e272fcfSJohn W. Linville /*
27e272fcfSJohn W. Linville  * lib80211 -- common bits for IEEE802.11 drivers
37e272fcfSJohn W. Linville  *
47e272fcfSJohn W. Linville  * Copyright(c) 2008 John W. Linville <linville@tuxdriver.com>
57e272fcfSJohn W. Linville  *
67e272fcfSJohn W. Linville  */
77e272fcfSJohn W. Linville 
87e272fcfSJohn W. Linville #include <linux/module.h>
9*2819f8adSJohn W. Linville #include <linux/ctype.h>
107e272fcfSJohn W. Linville #include <linux/ieee80211.h>
117e272fcfSJohn W. Linville 
127e272fcfSJohn W. Linville #include <net/lib80211.h>
137e272fcfSJohn W. Linville 
147e272fcfSJohn W. Linville #define DRV_NAME        "lib80211"
157e272fcfSJohn W. Linville 
167e272fcfSJohn W. Linville #define DRV_DESCRIPTION	"common routines for IEEE802.11 drivers"
177e272fcfSJohn W. Linville 
187e272fcfSJohn W. Linville MODULE_DESCRIPTION(DRV_DESCRIPTION);
197e272fcfSJohn W. Linville MODULE_AUTHOR("John W. Linville <linville@tuxdriver.com>");
207e272fcfSJohn W. Linville MODULE_LICENSE("GPL");
217e272fcfSJohn W. Linville 
227e272fcfSJohn W. Linville const char *escape_ssid(const char *ssid, u8 ssid_len)
237e272fcfSJohn W. Linville {
24*2819f8adSJohn W. Linville 	static char escaped[IEEE80211_MAX_SSID_LEN * 4 + 1];
257e272fcfSJohn W. Linville 	const char *s = ssid;
267e272fcfSJohn W. Linville 	char *d = escaped;
277e272fcfSJohn W. Linville 
287e272fcfSJohn W. Linville 	ssid_len = min_t(u8, ssid_len, IEEE80211_MAX_SSID_LEN);
297e272fcfSJohn W. Linville 	while (ssid_len--) {
30*2819f8adSJohn W. Linville 		if (isprint(*s)) {
317e272fcfSJohn W. Linville 			*d++ = *s++;
32*2819f8adSJohn W. Linville 			continue;
337e272fcfSJohn W. Linville 		}
34*2819f8adSJohn W. Linville 
35*2819f8adSJohn W. Linville 		*d++ = '\\';
36*2819f8adSJohn W. Linville 		if (*s == '\0')
37*2819f8adSJohn W. Linville 			*d++ = '0';
38*2819f8adSJohn W. Linville 		else if (*s == '\n')
39*2819f8adSJohn W. Linville 			*d++ = 'n';
40*2819f8adSJohn W. Linville 		else if (*s == '\r')
41*2819f8adSJohn W. Linville 			*d++ = 'r';
42*2819f8adSJohn W. Linville 		else if (*s == '\t')
43*2819f8adSJohn W. Linville 			*d++ = 't';
44*2819f8adSJohn W. Linville 		else if (*s == '\\')
45*2819f8adSJohn W. Linville 			*d++ = '\\';
46*2819f8adSJohn W. Linville 		else
47*2819f8adSJohn W. Linville 			d += snprintf(d, 3, "%03o", *s);
48*2819f8adSJohn W. Linville 		s++;
497e272fcfSJohn W. Linville 	}
507e272fcfSJohn W. Linville 	*d = '\0';
517e272fcfSJohn W. Linville 	return escaped;
527e272fcfSJohn W. Linville }
537e272fcfSJohn W. Linville EXPORT_SYMBOL(escape_ssid);
547e272fcfSJohn W. Linville 
557e272fcfSJohn W. Linville static int __init ieee80211_init(void)
567e272fcfSJohn W. Linville {
577e272fcfSJohn W. Linville 	printk(KERN_INFO DRV_NAME ": " DRV_DESCRIPTION "\n");
587e272fcfSJohn W. Linville 	return 0;
597e272fcfSJohn W. Linville }
607e272fcfSJohn W. Linville 
617e272fcfSJohn W. Linville static void __exit ieee80211_exit(void)
627e272fcfSJohn W. Linville {
637e272fcfSJohn W. Linville }
647e272fcfSJohn W. Linville 
657e272fcfSJohn W. Linville module_init(ieee80211_init);
667e272fcfSJohn W. Linville module_exit(ieee80211_exit);
67