Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
fs
afs
netdevices.c
Go to the documentation of this file.
1
/* AFS network device helpers
2
*
3
* Copyright (c) 2007 Patrick McHardy <
[email protected]
>
4
*/
5
6
#include <linux/string.h>
7
#include <linux/rtnetlink.h>
8
#include <
linux/inetdevice.h
>
9
#include <linux/netdevice.h>
10
#include <linux/if_arp.h>
11
#include <
net/net_namespace.h
>
12
#include "
internal.h
"
13
14
/*
15
* get a MAC address from a random ethernet interface that has a real one
16
* - the buffer will normally be 6 bytes in size
17
*/
18
int
afs_get_MAC_address
(
u8
*
mac
,
size_t
maclen)
19
{
20
struct
net_device
*
dev
;
21
int
ret
= -
ENODEV
;
22
23
BUG_ON
(maclen !=
ETH_ALEN
);
24
25
rtnl_lock
();
26
dev =
__dev_getfirstbyhwtype
(&
init_net
,
ARPHRD_ETHER
);
27
if
(dev) {
28
memcpy
(mac, dev->
dev_addr
, maclen);
29
ret = 0;
30
}
31
rtnl_unlock
();
32
return
ret
;
33
}
34
35
/*
36
* get a list of this system's interface IPv4 addresses, netmasks and MTUs
37
* - maxbufs must be at least 1
38
* - returns the number of interface records in the buffer
39
*/
40
int
afs_get_ipv4_interfaces
(
struct
afs_interface
*
bufs
,
size_t
maxbufs,
41
bool
wantloopback)
42
{
43
struct
net_device
*
dev
;
44
struct
in_device *
idev
;
45
int
n
= 0;
46
47
ASSERT
(maxbufs > 0);
48
49
rtnl_lock
();
50
for_each_netdev
(&
init_net
, dev) {
51
if
(dev->
type
==
ARPHRD_LOOPBACK
&& !wantloopback)
52
continue
;
53
idev = __in_dev_get_rtnl(dev);
54
if
(!idev)
55
continue
;
56
for_primary_ifa(idev) {
57
bufs[
n
].
address
.s_addr = ifa->ifa_address;
58
bufs[
n
].
netmask
.s_addr = ifa->ifa_mask;
59
bufs[
n
].
mtu
= dev->
mtu
;
60
n++;
61
if
(n >= maxbufs)
62
goto
out
;
63
} endfor_ifa(idev);
64
}
65
out
:
66
rtnl_unlock
();
67
return
n
;
68
}
Generated on Thu Jan 10 2013 14:44:52 for Linux Kernel by
1.8.2