afs: Provide a way to configure address priorities
authorDavid Howells <dhowells@redhat.com>
Fri, 27 Oct 2023 10:42:57 +0000 (11:42 +0100)
committerDavid Howells <dhowells@redhat.com>
Mon, 1 Jan 2024 16:37:26 +0000 (16:37 +0000)
commitf94f70d39cc2d54079ebae934862198516315db2
tree52929e344b7cc368a5a31fd71fd37e53eaafdb8b
parentb605ee421fa0425950fda2dce64fd359e1361dec
afs: Provide a way to configure address priorities

AFS servers may have multiple addresses, but the client can't easily judge
between them as to which one is best.  For instance, an address that has a
larger RTT might actually have a better bandwidth because it goes through a
switch rather than being directly connected - but we can't work this out
dynamically unless we push through sufficient data that we can measure it.

To allow the administrator to configure this, add a list of preference
weightings for server addresses by IPv4/IPv6 address or subnet and allow
this to be viewed through a procfile and altered by writing text commands
to that same file.  Preference rules can be added/updated by:

echo "add <proto> <addr>[/<subnet>] <prior>" >/proc/fs/afs/addr_prefs
echo "add udp 1.2.3.4 1000" >/proc/fs/afs/addr_prefs
echo "add udp 192.168.0.0/16 3000" >/proc/fs/afs/addr_prefs
echo "add udp 1001:2002:0:6::/64 4000" >/proc/fs/afs/addr_prefs

and removed by:

echo "del <proto> <addr>[/<subnet>]" >/proc/fs/afs/addr_prefs
echo "del udp 1.2.3.4" >/proc/fs/afs/addr_prefs

where the priority is a number between 0 and 65535.

The list is split between IPv4 and IPv6 addresses and each sublist is kept
in numerical order, with rules that would otherwise match but have
different subnet masking being ordered with the most specific submatch
first.

A subsequent patch will apply these rules.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: linux-afs@lists.infradead.org
fs/afs/Makefile
fs/afs/addr_prefs.c [new file with mode: 0644]
fs/afs/internal.h
fs/afs/main.c
fs/afs/proc.c