Changeset View
Changeset View
Standalone View
Standalone View
head/sys/rpc/rpcsec_gss/svc_rpcsec_gss.c
Show First 20 Lines • Show All 165 Lines • ▼ Show 20 Lines | |||||
struct svc_rpc_gss_cookedcred { | struct svc_rpc_gss_cookedcred { | ||||
struct svc_rpc_gss_client *cc_client; | struct svc_rpc_gss_client *cc_client; | ||||
rpc_gss_service_t cc_service; | rpc_gss_service_t cc_service; | ||||
uint32_t cc_seq; | uint32_t cc_seq; | ||||
}; | }; | ||||
#define CLIENT_HASH_SIZE 256 | #define CLIENT_HASH_SIZE 256 | ||||
#define CLIENT_MAX 128 | #define CLIENT_MAX 128 | ||||
u_int svc_rpc_gss_client_max = CLIENT_MAX; | |||||
SYSCTL_NODE(_kern, OID_AUTO, rpc, CTLFLAG_RW, 0, "RPC"); | |||||
SYSCTL_NODE(_kern_rpc, OID_AUTO, gss, CTLFLAG_RW, 0, "GSS"); | |||||
SYSCTL_UINT(_kern_rpc_gss, OID_AUTO, client_max, CTLFLAG_RW, | |||||
&svc_rpc_gss_client_max, 0, | |||||
"Max number of rpc-gss clients"); | |||||
static u_int svc_rpc_gss_client_count; | |||||
SYSCTL_UINT(_kern_rpc_gss, OID_AUTO, client_count, CTLFLAG_RD, | |||||
&svc_rpc_gss_client_count, 0, | |||||
"Number of rpc-gss clients"); | |||||
struct svc_rpc_gss_client_list svc_rpc_gss_client_hash[CLIENT_HASH_SIZE]; | struct svc_rpc_gss_client_list svc_rpc_gss_client_hash[CLIENT_HASH_SIZE]; | ||||
struct svc_rpc_gss_client_list svc_rpc_gss_clients; | struct svc_rpc_gss_client_list svc_rpc_gss_clients; | ||||
static size_t svc_rpc_gss_client_count; | |||||
static uint32_t svc_rpc_gss_next_clientid = 1; | static uint32_t svc_rpc_gss_next_clientid = 1; | ||||
static void | static void | ||||
svc_rpc_gss_init(void *arg) | svc_rpc_gss_init(void *arg) | ||||
{ | { | ||||
int i; | int i; | ||||
for (i = 0; i < CLIENT_HASH_SIZE; i++) | for (i = 0; i < CLIENT_HASH_SIZE; i++) | ||||
▲ Show 20 Lines • Show All 479 Lines • ▼ Show 20 Lines | svc_rpc_gss_timeout_clients(void) | ||||
rpc_gss_log_debug("in svc_rpc_gss_timeout_clients()"); | rpc_gss_log_debug("in svc_rpc_gss_timeout_clients()"); | ||||
/* | /* | ||||
* First enforce the max client limit. We keep | * First enforce the max client limit. We keep | ||||
* svc_rpc_gss_clients in LRU order. | * svc_rpc_gss_clients in LRU order. | ||||
*/ | */ | ||||
sx_xlock(&svc_rpc_gss_lock); | sx_xlock(&svc_rpc_gss_lock); | ||||
client = TAILQ_LAST(&svc_rpc_gss_clients, svc_rpc_gss_client_list); | client = TAILQ_LAST(&svc_rpc_gss_clients, svc_rpc_gss_client_list); | ||||
while (svc_rpc_gss_client_count > CLIENT_MAX && client != NULL) { | while (svc_rpc_gss_client_count > svc_rpc_gss_client_max && client != NULL) { | ||||
svc_rpc_gss_forget_client_locked(client); | svc_rpc_gss_forget_client_locked(client); | ||||
sx_xunlock(&svc_rpc_gss_lock); | sx_xunlock(&svc_rpc_gss_lock); | ||||
svc_rpc_gss_release_client(client); | svc_rpc_gss_release_client(client); | ||||
sx_xlock(&svc_rpc_gss_lock); | sx_xlock(&svc_rpc_gss_lock); | ||||
client = TAILQ_LAST(&svc_rpc_gss_clients, | client = TAILQ_LAST(&svc_rpc_gss_clients, | ||||
svc_rpc_gss_client_list); | svc_rpc_gss_client_list); | ||||
} | } | ||||
again: | again: | ||||
▲ Show 20 Lines • Show All 862 Lines • Show Last 20 Lines |