transport.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Transport Definition
  4. *
  5. * Copyright (C) 2005 by Latchesar Ionkov <[email protected]>
  6. * Copyright (C) 2004-2008 by Eric Van Hensbergen <[email protected]>
  7. */
  8. #ifndef NET_9P_TRANSPORT_H
  9. #define NET_9P_TRANSPORT_H
  10. #include <linux/module.h>
  11. #define P9_DEF_MIN_RESVPORT (665U)
  12. #define P9_DEF_MAX_RESVPORT (1023U)
  13. /**
  14. * struct p9_trans_module - transport module interface
  15. * @list: used to maintain a list of currently available transports
  16. * @name: the human-readable name of the transport
  17. * @maxsize: transport provided maximum packet size
  18. * @pooled_rbuffers: currently only set for RDMA transport which pulls the
  19. * response buffers from a shared pool, and accordingly
  20. * we're less flexible when choosing the response message
  21. * size in this case
  22. * @def: set if this transport should be considered the default
  23. * @create: member function to create a new connection on this transport
  24. * @close: member function to discard a connection on this transport
  25. * @request: member function to issue a request to the transport
  26. * @cancel: member function to cancel a request (if it hasn't been sent)
  27. * @cancelled: member function to notify that a cancelled request will not
  28. * receive a reply
  29. *
  30. * This is the basic API for a transport module which is registered by the
  31. * transport module with the 9P core network module and used by the client
  32. * to instantiate a new connection on a transport.
  33. *
  34. * The transport module list is protected by v9fs_trans_lock.
  35. */
  36. struct p9_trans_module {
  37. struct list_head list;
  38. char *name; /* name of transport */
  39. int maxsize; /* max message size of transport */
  40. bool pooled_rbuffers;
  41. int def; /* this transport should be default */
  42. struct module *owner;
  43. int (*create)(struct p9_client *client,
  44. const char *devname, char *args);
  45. void (*close)(struct p9_client *client);
  46. int (*request)(struct p9_client *client, struct p9_req_t *req);
  47. int (*cancel)(struct p9_client *client, struct p9_req_t *req);
  48. int (*cancelled)(struct p9_client *client, struct p9_req_t *req);
  49. int (*zc_request)(struct p9_client *client, struct p9_req_t *req,
  50. struct iov_iter *uidata, struct iov_iter *uodata,
  51. int inlen, int outlen, int in_hdr_len);
  52. int (*show_options)(struct seq_file *m, struct p9_client *client);
  53. };
  54. void v9fs_register_trans(struct p9_trans_module *m);
  55. void v9fs_unregister_trans(struct p9_trans_module *m);
  56. struct p9_trans_module *v9fs_get_trans_by_name(const char *s);
  57. struct p9_trans_module *v9fs_get_default_trans(void);
  58. void v9fs_put_trans(struct p9_trans_module *m);
  59. #define MODULE_ALIAS_9P(transport) \
  60. MODULE_ALIAS("9p-" transport)
  61. #endif /* NET_9P_TRANSPORT_H */