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>
12
#include <linux/netdevice.h>
14
int __dev_addr_add(struct dev_addr_list **list, int *count,
15
void *addr, int alen, int glbl)
17
struct dev_addr_list *da;
19
for (da = *list; da != NULL; da = da->next) {
20
if (memcmp(da->da_addr, addr, da->da_addrlen) == 0 &&
21
da->da_addrlen == alen) {
23
int old_glbl = da->da_gusers;
33
da = kzalloc(sizeof(*da), GFP_ATOMIC);
36
memcpy(da->da_addr, addr, alen);
37
da->da_addrlen = alen;
39
da->da_gusers = glbl ? 1 : 0;
46
int __dev_addr_delete(struct dev_addr_list **list, int *count,
47
void *addr, int alen, int glbl)
49
struct dev_addr_list *da;
51
for (; (da = *list) != NULL; list = &da->next) {
52
if (memcmp(da->da_addr, addr, da->da_addrlen) == 0 &&
53
alen == da->da_addrlen) {
55
int old_glbl = da->da_gusers;
72
int __dev_addr_sync(struct dev_addr_list **to, int *to_count,
73
struct dev_addr_list **from, int *from_count)
75
struct dev_addr_list *da, *next;
82
err = __dev_addr_add(to, to_count,
83
da->da_addr, da->da_addrlen, 0);
88
} else if (da->da_users == 1) {
89
__dev_addr_delete(to, to_count,
90
da->da_addr, da->da_addrlen, 0);
91
__dev_addr_delete(from, from_count,
92
da->da_addr, da->da_addrlen, 0);
98
EXPORT_SYMBOL_GPL(__dev_addr_sync);
100
void __dev_addr_unsync(struct dev_addr_list **to, int *to_count,
101
struct dev_addr_list **from, int *from_count)
103
struct dev_addr_list *da, *next;
109
__dev_addr_delete(to, to_count,
110
da->da_addr, da->da_addrlen, 0);
112
__dev_addr_delete(from, from_count,
113
da->da_addr, da->da_addrlen, 0);
118
EXPORT_SYMBOL_GPL(__dev_addr_unsync);