0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef NET_PHONET_PEP_H
0011 #define NET_PHONET_PEP_H
0012
0013 #include <linux/skbuff.h>
0014 #include <net/phonet/phonet.h>
0015
0016 struct pep_sock {
0017 struct pn_sock pn_sk;
0018
0019
0020
0021 struct hlist_head hlist;
0022
0023
0024 struct sock *listener;
0025 struct sk_buff_head ctrlreq_queue;
0026 #define PNPIPE_CTRLREQ_MAX 10
0027 atomic_t tx_credits;
0028 int ifindex;
0029 u16 peer_type;
0030 u8 pipe_handle;
0031
0032 u8 rx_credits;
0033 u8 rx_fc;
0034 u8 tx_fc;
0035 u8 init_enable;
0036 u8 aligned;
0037 };
0038
0039 static inline struct pep_sock *pep_sk(struct sock *sk)
0040 {
0041 return (struct pep_sock *)sk;
0042 }
0043
0044 extern const struct proto_ops phonet_stream_ops;
0045
0046
0047 struct pnpipehdr {
0048 u8 utid;
0049 u8 message_id;
0050 u8 pipe_handle;
0051 union {
0052 u8 state_after_connect;
0053 u8 state_after_reset;
0054 u8 error_code;
0055 u8 pep_type;
0056 u8 data0;
0057 };
0058 u8 data[];
0059 };
0060 #define other_pep_type data[0]
0061
0062 static inline struct pnpipehdr *pnp_hdr(struct sk_buff *skb)
0063 {
0064 return (struct pnpipehdr *)skb_transport_header(skb);
0065 }
0066
0067 #define MAX_PNPIPE_HEADER (MAX_PHONET_HEADER + 4)
0068
0069 enum {
0070 PNS_PIPE_CREATE_REQ = 0x00,
0071 PNS_PIPE_CREATE_RESP,
0072 PNS_PIPE_REMOVE_REQ,
0073 PNS_PIPE_REMOVE_RESP,
0074
0075 PNS_PIPE_DATA = 0x20,
0076 PNS_PIPE_ALIGNED_DATA,
0077
0078 PNS_PEP_CONNECT_REQ = 0x40,
0079 PNS_PEP_CONNECT_RESP,
0080 PNS_PEP_DISCONNECT_REQ,
0081 PNS_PEP_DISCONNECT_RESP,
0082 PNS_PEP_RESET_REQ,
0083 PNS_PEP_RESET_RESP,
0084 PNS_PEP_ENABLE_REQ,
0085 PNS_PEP_ENABLE_RESP,
0086 PNS_PEP_CTRL_REQ,
0087 PNS_PEP_CTRL_RESP,
0088 PNS_PEP_DISABLE_REQ = 0x4C,
0089 PNS_PEP_DISABLE_RESP,
0090
0091 PNS_PEP_STATUS_IND = 0x60,
0092 PNS_PIPE_CREATED_IND,
0093 PNS_PIPE_RESET_IND = 0x63,
0094 PNS_PIPE_ENABLED_IND,
0095 PNS_PIPE_REDIRECTED_IND,
0096 PNS_PIPE_DISABLED_IND = 0x66,
0097 };
0098
0099 #define PN_PIPE_INVALID_HANDLE 0xff
0100 #define PN_PEP_TYPE_COMMON 0x00
0101
0102
0103 enum {
0104 PN_PEP_IND_FLOW_CONTROL,
0105 PN_PEP_IND_ID_MCFC_GRANT_CREDITS,
0106 };
0107
0108
0109 enum {
0110 PN_PIPE_NO_ERROR,
0111 PN_PIPE_ERR_INVALID_PARAM,
0112 PN_PIPE_ERR_INVALID_HANDLE,
0113 PN_PIPE_ERR_INVALID_CTRL_ID,
0114 PN_PIPE_ERR_NOT_ALLOWED,
0115 PN_PIPE_ERR_PEP_IN_USE,
0116 PN_PIPE_ERR_OVERLOAD,
0117 PN_PIPE_ERR_DEV_DISCONNECTED,
0118 PN_PIPE_ERR_TIMEOUT,
0119 PN_PIPE_ERR_ALL_PIPES_IN_USE,
0120 PN_PIPE_ERR_GENERAL,
0121 PN_PIPE_ERR_NOT_SUPPORTED,
0122 };
0123
0124
0125 enum {
0126 PN_PIPE_DISABLE,
0127 PN_PIPE_ENABLE,
0128 };
0129
0130
0131 enum {
0132 PN_PIPE_SB_CREATE_REQ_PEP_SUB_TYPE,
0133 PN_PIPE_SB_CONNECT_REQ_PEP_SUB_TYPE,
0134 PN_PIPE_SB_REDIRECT_REQ_PEP_SUB_TYPE,
0135 PN_PIPE_SB_NEGOTIATED_FC,
0136 PN_PIPE_SB_REQUIRED_FC_TX,
0137 PN_PIPE_SB_PREFERRED_FC_RX,
0138 PN_PIPE_SB_ALIGNED_DATA,
0139 };
0140
0141
0142 enum {
0143 PN_NO_FLOW_CONTROL,
0144 PN_LEGACY_FLOW_CONTROL,
0145 PN_ONE_CREDIT_FLOW_CONTROL,
0146 PN_MULTI_CREDIT_FLOW_CONTROL,
0147 PN_MAX_FLOW_CONTROL,
0148 };
0149
0150 #define pn_flow_safe(fc) ((fc) >> 1)
0151
0152
0153 enum {
0154 PEP_IND_EMPTY,
0155 PEP_IND_BUSY,
0156 PEP_IND_READY,
0157 };
0158
0159 #endif