mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 07:12:09 +00:00
RxRPC: Handle VERSION Rx protocol packets
Handle VERSION Rx protocol packets. We should respond to a VERSION packet with a string indicating the Rx version. This is a maximum of 64 characters and is padded out to 65 chars with NUL bytes. Note that other AFS clients use the version request as a NAT keepalive so we need to handle it rather than returning an abort. The standard formulation seems to be: <project> <version> built <yyyy>-<mm>-<dd> for example: " OpenAFS 1.6.2 built 2013-05-07 " (note the three extra spaces) as obtained with: rxdebug grand.mit.edu -version from the openafs package. Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
parent
bfd4e9562c
commit
44ba06987c
4 changed files with 124 additions and 2 deletions
|
@ -28,7 +28,7 @@
|
|||
const char *rxrpc_pkts[] = {
|
||||
"?00",
|
||||
"DATA", "ACK", "BUSY", "ABORT", "ACKALL", "CHALL", "RESP", "DEBUG",
|
||||
"?09", "?10", "?11", "?12", "?13", "?14", "?15"
|
||||
"?09", "?10", "?11", "?12", "VERSION", "?14", "?15"
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -593,6 +593,20 @@ static void rxrpc_post_packet_to_conn(struct rxrpc_connection *conn,
|
|||
rxrpc_queue_conn(conn);
|
||||
}
|
||||
|
||||
/*
|
||||
* post endpoint-level events to the local endpoint
|
||||
* - this includes debug and version messages
|
||||
*/
|
||||
static void rxrpc_post_packet_to_local(struct rxrpc_local *local,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
_enter("%p,%p", local, skb);
|
||||
|
||||
atomic_inc(&local->usage);
|
||||
skb_queue_tail(&local->event_queue, skb);
|
||||
rxrpc_queue_work(&local->event_processor);
|
||||
}
|
||||
|
||||
static struct rxrpc_connection *rxrpc_conn_from_local(struct rxrpc_local *local,
|
||||
struct sk_buff *skb,
|
||||
struct rxrpc_skb_priv *sp)
|
||||
|
@ -699,6 +713,11 @@ void rxrpc_data_ready(struct sock *sk)
|
|||
goto bad_message;
|
||||
}
|
||||
|
||||
if (sp->hdr.type == RXRPC_PACKET_TYPE_VERSION) {
|
||||
rxrpc_post_packet_to_local(local, skb);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (sp->hdr.type == RXRPC_PACKET_TYPE_DATA &&
|
||||
(sp->hdr.callNumber == 0 || sp->hdr.seq == 0))
|
||||
goto bad_message;
|
||||
|
@ -731,6 +750,8 @@ void rxrpc_data_ready(struct sock *sk)
|
|||
else
|
||||
goto cant_route_call;
|
||||
}
|
||||
|
||||
out:
|
||||
rxrpc_put_local(local);
|
||||
return;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue