2 * Copyright 2007 Luis R. Rodriguez <mcgrof@winlab.rutgers.edu>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
8 * Compatibility file for Linux wireless for kernels 2.6.32.
11 #include <linux/compat.h>
13 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32))
15 #include <linux/netdevice.h>
17 int __dev_addr_add(struct dev_addr_list **list, int *count,
18 void *addr, int alen, int glbl)
20 struct dev_addr_list *da;
22 for (da = *list; da != NULL; da = da->next) {
23 if (memcmp(da->da_addr, addr, da->da_addrlen) == 0 &&
24 da->da_addrlen == alen) {
26 int old_glbl = da->da_gusers;
36 da = kzalloc(sizeof(*da), GFP_ATOMIC);
39 memcpy(da->da_addr, addr, alen);
40 da->da_addrlen = alen;
42 da->da_gusers = glbl ? 1 : 0;
49 int __dev_addr_delete(struct dev_addr_list **list, int *count,
50 void *addr, int alen, int glbl)
52 struct dev_addr_list *da;
54 for (; (da = *list) != NULL; list = &da->next) {
55 if (memcmp(da->da_addr, addr, da->da_addrlen) == 0 &&
56 alen == da->da_addrlen) {
58 int old_glbl = da->da_gusers;
75 int __dev_addr_sync(struct dev_addr_list **to, int *to_count,
76 struct dev_addr_list **from, int *from_count)
78 struct dev_addr_list *da, *next;
85 err = __dev_addr_add(to, to_count,
86 da->da_addr, da->da_addrlen, 0);
91 } else if (da->da_users == 1) {
92 __dev_addr_delete(to, to_count,
93 da->da_addr, da->da_addrlen, 0);
94 __dev_addr_delete(from, from_count,
95 da->da_addr, da->da_addrlen, 0);
101 EXPORT_SYMBOL_GPL(__dev_addr_sync);
103 void __dev_addr_unsync(struct dev_addr_list **to, int *to_count,
104 struct dev_addr_list **from, int *from_count)
106 struct dev_addr_list *da, *next;
112 __dev_addr_delete(to, to_count,
113 da->da_addr, da->da_addrlen, 0);
115 __dev_addr_delete(from, from_count,
116 da->da_addr, da->da_addrlen, 0);
121 EXPORT_SYMBOL_GPL(__dev_addr_unsync);
123 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)) */