mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-14 08:13:56 +08:00
afs: Use core kernel UUID generation
AFS uses a time based UUID to identify the host itself. This requires getting a timestamp which is currently done through the getnstimeofday() interface that we want to eventually get rid of. Instead of replacing it with a ktime-based interface, simply remove the entire function and use generate_random_uuid() instead, which has a v4 ("completely random") UUID instead of the time-based one. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
parent
ff54877310
commit
b4db2b35fc
@ -560,6 +560,11 @@ extern struct vfsmount *afs_d_automount(struct path *);
|
|||||||
extern int afs_mntpt_check_symlink(struct afs_vnode *, struct key *);
|
extern int afs_mntpt_check_symlink(struct afs_vnode *, struct key *);
|
||||||
extern void afs_mntpt_kill_timer(void);
|
extern void afs_mntpt_kill_timer(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* netdevices.c
|
||||||
|
*/
|
||||||
|
extern int afs_get_ipv4_interfaces(struct afs_interface *, size_t, bool);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* proc.c
|
* proc.c
|
||||||
*/
|
*/
|
||||||
@ -623,12 +628,6 @@ extern void __exit afs_purge_servers(void);
|
|||||||
extern int afs_fs_init(void);
|
extern int afs_fs_init(void);
|
||||||
extern void afs_fs_exit(void);
|
extern void afs_fs_exit(void);
|
||||||
|
|
||||||
/*
|
|
||||||
* use-rtnetlink.c
|
|
||||||
*/
|
|
||||||
extern int afs_get_ipv4_interfaces(struct afs_interface *, size_t, bool);
|
|
||||||
extern int afs_get_MAC_address(u8 *, size_t);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* vlclient.c
|
* vlclient.c
|
||||||
*/
|
*/
|
||||||
|
@ -34,50 +34,6 @@ MODULE_PARM_DESC(rootcell, "root AFS cell name and VL server IP addr list");
|
|||||||
struct uuid_v1 afs_uuid;
|
struct uuid_v1 afs_uuid;
|
||||||
struct workqueue_struct *afs_wq;
|
struct workqueue_struct *afs_wq;
|
||||||
|
|
||||||
/*
|
|
||||||
* get a client UUID
|
|
||||||
*/
|
|
||||||
static int __init afs_get_client_UUID(void)
|
|
||||||
{
|
|
||||||
struct timespec ts;
|
|
||||||
u64 uuidtime;
|
|
||||||
u16 clockseq, hi_v;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
/* read the MAC address of one of the external interfaces and construct
|
|
||||||
* a UUID from it */
|
|
||||||
ret = afs_get_MAC_address(afs_uuid.node, sizeof(afs_uuid.node));
|
|
||||||
if (ret < 0)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
getnstimeofday(&ts);
|
|
||||||
uuidtime = (u64) ts.tv_sec * 1000 * 1000 * 10;
|
|
||||||
uuidtime += ts.tv_nsec / 100;
|
|
||||||
uuidtime += UUID_TO_UNIX_TIME;
|
|
||||||
afs_uuid.time_low = htonl(uuidtime);
|
|
||||||
afs_uuid.time_mid = htons(uuidtime >> 32);
|
|
||||||
hi_v = (uuidtime >> 48) & UUID_TIMEHI_MASK;
|
|
||||||
hi_v |= UUID_VERSION_TIME;
|
|
||||||
afs_uuid.time_hi_and_version = htons(hi_v);
|
|
||||||
|
|
||||||
get_random_bytes(&clockseq, 2);
|
|
||||||
afs_uuid.clock_seq_low = clockseq;
|
|
||||||
afs_uuid.clock_seq_hi_and_reserved =
|
|
||||||
(clockseq >> 8) & UUID_CLOCKHI_MASK;
|
|
||||||
afs_uuid.clock_seq_hi_and_reserved |= UUID_VARIANT_STD;
|
|
||||||
|
|
||||||
_debug("AFS UUID: %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
|
|
||||||
ntohl(afs_uuid.time_low),
|
|
||||||
ntohs(afs_uuid.time_mid),
|
|
||||||
ntohs(afs_uuid.time_hi_and_version),
|
|
||||||
afs_uuid.clock_seq_hi_and_reserved,
|
|
||||||
afs_uuid.clock_seq_low,
|
|
||||||
afs_uuid.node[0], afs_uuid.node[1], afs_uuid.node[2],
|
|
||||||
afs_uuid.node[3], afs_uuid.node[4], afs_uuid.node[5]);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* initialise the AFS client FS module
|
* initialise the AFS client FS module
|
||||||
*/
|
*/
|
||||||
@ -87,9 +43,7 @@ static int __init afs_init(void)
|
|||||||
|
|
||||||
printk(KERN_INFO "kAFS: Red Hat AFS client v0.1 registering.\n");
|
printk(KERN_INFO "kAFS: Red Hat AFS client v0.1 registering.\n");
|
||||||
|
|
||||||
ret = afs_get_client_UUID();
|
generate_random_uuid((unsigned char *)&afs_uuid);
|
||||||
if (ret < 0)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
/* create workqueue */
|
/* create workqueue */
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
|
@ -11,27 +11,6 @@
|
|||||||
#include <net/net_namespace.h>
|
#include <net/net_namespace.h>
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
/*
|
|
||||||
* get a MAC address from a random ethernet interface that has a real one
|
|
||||||
* - the buffer will normally be 6 bytes in size
|
|
||||||
*/
|
|
||||||
int afs_get_MAC_address(u8 *mac, size_t maclen)
|
|
||||||
{
|
|
||||||
struct net_device *dev;
|
|
||||||
int ret = -ENODEV;
|
|
||||||
|
|
||||||
BUG_ON(maclen != ETH_ALEN);
|
|
||||||
|
|
||||||
rtnl_lock();
|
|
||||||
dev = __dev_getfirstbyhwtype(&init_net, ARPHRD_ETHER);
|
|
||||||
if (dev) {
|
|
||||||
memcpy(mac, dev->dev_addr, maclen);
|
|
||||||
ret = 0;
|
|
||||||
}
|
|
||||||
rtnl_unlock();
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* get a list of this system's interface IPv4 addresses, netmasks and MTUs
|
* get a list of this system's interface IPv4 addresses, netmasks and MTUs
|
||||||
* - maxbufs must be at least 1
|
* - maxbufs must be at least 1
|
||||||
|
Loading…
Reference in New Issue
Block a user