aboutsummaryrefslogtreecommitdiffstats
path: root/fs/afs/internal.h
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2007-04-26 18:58:17 -0400
committerDavid S. Miller <davem@davemloft.net>2007-04-26 18:58:17 -0400
commitb908fe6b2d1294d93b0d0badf6bf4f9a2cd7d729 (patch)
treea0ccc4a21752f69991f762faea7c1b40510dbb4c /fs/afs/internal.h
parent0795e7c031c4bda46fbdde678adf29de19bef7f4 (diff)
[AFS]: Add support for the CB.GetCapabilities operation.
Add support for the CB.GetCapabilities operation with which the fileserver can ask the client for the following information: (1) The list of network interfaces it has available as IPv4 address + netmask plus the MTUs. (2) The client's UUID. (3) The extended capabilities of the client, for which the only current one is unified error mapping (abort code interpretation). To support this, the patch adds the following routines to AFS: (1) A function to iterate through all the network interfaces using RTNETLINK to extract IPv4 addresses and MTUs. (2) A function to iterate through all the network interfaces using RTNETLINK to pull out the MAC address of the lowest index interface to use in UUID construction. Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'fs/afs/internal.h')
-rw-r--r--fs/afs/internal.h42
1 files changed, 42 insertions, 0 deletions
diff --git a/fs/afs/internal.h b/fs/afs/internal.h
index 8bed2429d01f..6120d4bd19e0 100644
--- a/fs/afs/internal.h
+++ b/fs/afs/internal.h
@@ -346,6 +346,40 @@ struct afs_permits {
346 struct afs_permit permits[0]; /* the permits so far examined */ 346 struct afs_permit permits[0]; /* the permits so far examined */
347}; 347};
348 348
349/*
350 * record of one of a system's set of network interfaces
351 */
352struct afs_interface {
353 unsigned index; /* interface index */
354 struct in_addr address; /* IPv4 address bound to interface */
355 struct in_addr netmask; /* netmask applied to address */
356 unsigned mtu; /* MTU of interface */
357};
358
359/*
360 * UUID definition [internet draft]
361 * - the timestamp is a 60-bit value, split 32/16/12, and goes in 100ns
362 * increments since midnight 15th October 1582
363 * - add AFS_UUID_TO_UNIX_TIME to convert unix time in 100ns units to UUID
364 * time
365 * - the clock sequence is a 14-bit counter to avoid duplicate times
366 */
367struct afs_uuid {
368 u32 time_low; /* low part of timestamp */
369 u16 time_mid; /* mid part of timestamp */
370 u16 time_hi_and_version; /* high part of timestamp and version */
371#define AFS_UUID_TO_UNIX_TIME 0x01b21dd213814000
372#define AFS_UUID_TIMEHI_MASK 0x0fff
373#define AFS_UUID_VERSION_TIME 0x1000 /* time-based UUID */
374#define AFS_UUID_VERSION_NAME 0x3000 /* name-based UUID */
375#define AFS_UUID_VERSION_RANDOM 0x4000 /* (pseudo-)random generated UUID */
376 u8 clock_seq_hi_and_reserved; /* clock seq hi and variant */
377#define AFS_UUID_CLOCKHI_MASK 0x3f
378#define AFS_UUID_VARIANT_STD 0x80
379 u8 clock_seq_low; /* clock seq low */
380 u8 node[6]; /* spatially unique node ID (MAC addr) */
381};
382
349/*****************************************************************************/ 383/*****************************************************************************/
350/* 384/*
351 * callback.c 385 * callback.c
@@ -430,6 +464,7 @@ extern void afs_clear_inode(struct inode *);
430/* 464/*
431 * main.c 465 * main.c
432 */ 466 */
467extern struct afs_uuid afs_uuid;
433#ifdef AFS_CACHING_SUPPORT 468#ifdef AFS_CACHING_SUPPORT
434extern struct cachefs_netfs afs_cache_netfs; 469extern struct cachefs_netfs afs_cache_netfs;
435#endif 470#endif
@@ -470,6 +505,7 @@ extern struct afs_call *afs_alloc_flat_call(const struct afs_call_type *,
470extern void afs_flat_call_destructor(struct afs_call *); 505extern void afs_flat_call_destructor(struct afs_call *);
471extern void afs_transfer_reply(struct afs_call *, struct sk_buff *); 506extern void afs_transfer_reply(struct afs_call *, struct sk_buff *);
472extern void afs_send_empty_reply(struct afs_call *); 507extern void afs_send_empty_reply(struct afs_call *);
508extern void afs_send_simple_reply(struct afs_call *, const void *, size_t);
473extern int afs_extract_data(struct afs_call *, struct sk_buff *, bool, void *, 509extern int afs_extract_data(struct afs_call *, struct sk_buff *, bool, void *,
474 size_t); 510 size_t);
475 511
@@ -501,6 +537,12 @@ extern int afs_fs_init(void);
501extern void afs_fs_exit(void); 537extern void afs_fs_exit(void);
502 538
503/* 539/*
540 * use-rtnetlink.c
541 */
542extern int afs_get_ipv4_interfaces(struct afs_interface *, size_t, bool);
543extern int afs_get_MAC_address(u8 [6]);
544
545/*
504 * vlclient.c 546 * vlclient.c
505 */ 547 */
506#ifdef AFS_CACHING_SUPPORT 548#ifdef AFS_CACHING_SUPPORT