Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 186121
b: refs/heads/master
c: 0fb80ab
h: refs/heads/master
i:
  186119: 28c2d10
v: v3
  • Loading branch information
Sripathi Kodi authored and Eric Van Hensbergen committed Mar 5, 2010
1 parent 9562e0a commit 9fc5e66
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: dd6102fbd917889384d89bc427e98e85e8fda000
refs/heads/master: 0fb80abd911a7cb1e6548b5279568dc1e8949702
15 changes: 15 additions & 0 deletions trunk/include/net/9p/client.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,19 @@
/* Number of requests per row */
#define P9_ROW_MAXTAG 255

/** enum p9_proto_versions - 9P protocol versions
* @p9_proto_legacy: 9P Legacy mode, pre-9P2000.u
* @p9_proto_2000u: 9P2000.u extension
* @p9_proto_2010L: 9P2010.L extension
*/

enum p9_proto_versions{
p9_proto_legacy = 0,
p9_proto_2000u = 1,
p9_proto_2010L = 2,
};


/**
* enum p9_trans_status - different states of underlying transports
* @Connected: transport is connected and healthy
Expand Down Expand Up @@ -111,6 +124,7 @@ struct p9_req_t {
* @lock: protect @fidlist
* @msize: maximum data size negotiated by protocol
* @dotu: extension flags negotiated by protocol
* @proto_version: 9P protocol version to use
* @trans_mod: module API instantiated with this client
* @trans: tranport instance state and API
* @conn: connection state information used by trans_fd
Expand Down Expand Up @@ -138,6 +152,7 @@ struct p9_client {
spinlock_t lock; /* protect client structure */
int msize;
unsigned char dotu;
unsigned char proto_version;
struct p9_trans_module *trans_mod;
enum p9_trans_status status;
void *trans;
Expand Down
28 changes: 28 additions & 0 deletions trunk/net/9p/client.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,16 +46,38 @@ enum {
Opt_msize,
Opt_trans,
Opt_legacy,
Opt_version,
Opt_err,
};

static const match_table_t tokens = {
{Opt_msize, "msize=%u"},
{Opt_legacy, "noextend"},
{Opt_trans, "trans=%s"},
{Opt_version, "version=%s"},
{Opt_err, NULL},
};

/* Interpret mount option for protocol version */
static unsigned char get_protocol_version(const substring_t *name)
{
unsigned char version = -EINVAL;
if (!strncmp("9p2000", name->from, name->to-name->from)) {
version = p9_proto_legacy;
P9_DPRINTK(P9_DEBUG_9P, "Protocol version: Legacy\n");
} else if (!strncmp("9p2000.u", name->from, name->to-name->from)) {
version = p9_proto_2000u;
P9_DPRINTK(P9_DEBUG_9P, "Protocol version: 9P2000.u\n");
} else if (!strncmp("9p2010.L", name->from, name->to-name->from)) {
version = p9_proto_2010L;
P9_DPRINTK(P9_DEBUG_9P, "Protocol version: 9P2010.L\n");
} else {
P9_DPRINTK(P9_DEBUG_ERROR, "Unknown protocol version %s. ",
name->from);
}
return version;
}

static struct p9_req_t *
p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...);

Expand Down Expand Up @@ -120,6 +142,12 @@ static int parse_opts(char *opts, struct p9_client *clnt)
case Opt_legacy:
clnt->dotu = 0;
break;
case Opt_version:
ret = get_protocol_version(&args[0]);
if (ret == -EINVAL)
goto free_and_return;
clnt->proto_version = ret;
break;
default:
continue;
}
Expand Down

0 comments on commit 9fc5e66

Please sign in to comment.