26
26
struct pep_sock {
27
27
struct pn_sock pn_sk ;
28
28
29
+ /* XXX: union-ify listening vs connected stuff ? */
29
30
/* Listening socket stuff: */
30
31
struct hlist_head ackq ;
32
+ struct hlist_head hlist ;
31
33
32
34
/* Connected socket stuff: */
35
+ struct sock * listener ;
36
+ u16 peer_type ; /* peer type/subtype */
37
+ u8 pipe_handle ;
38
+
39
+ u8 rx_credits ;
33
40
u8 tx_credits ;
41
+ u8 rx_fc ; /* RX flow control */
42
+ u8 tx_fc ; /* TX flow control */
43
+ u8 init_enable ; /* auto-enable at creation */
34
44
};
35
45
36
46
static inline struct pep_sock * pep_sk (struct sock * sk )
@@ -40,4 +50,108 @@ static inline struct pep_sock *pep_sk(struct sock *sk)
40
50
41
51
extern const struct proto_ops phonet_stream_ops ;
42
52
53
+ /* Pipe protocol definitions */
54
+ struct pnpipehdr {
55
+ u8 utid ; /* transaction ID */
56
+ u8 message_id ;
57
+ u8 pipe_handle ;
58
+ union {
59
+ u8 state_after_connect ; /* connect request */
60
+ u8 state_after_reset ; /* reset request */
61
+ u8 error_code ; /* any response */
62
+ u8 pep_type ; /* status indication */
63
+ u8 data [1 ];
64
+ };
65
+ };
66
+ #define other_pep_type data[1]
67
+
68
+ static inline struct pnpipehdr * pnp_hdr (struct sk_buff * skb )
69
+ {
70
+ return (struct pnpipehdr * )skb_transport_header (skb );
71
+ }
72
+
73
+ #define MAX_PNPIPE_HEADER (MAX_PHONET_HEADER + 4)
74
+
75
+ enum {
76
+ PNS_PIPE_DATA = 0x20 ,
77
+
78
+ PNS_PEP_CONNECT_REQ = 0x40 ,
79
+ PNS_PEP_CONNECT_RESP ,
80
+ PNS_PEP_DISCONNECT_REQ ,
81
+ PNS_PEP_DISCONNECT_RESP ,
82
+ PNS_PEP_RESET_REQ ,
83
+ PNS_PEP_RESET_RESP ,
84
+ PNS_PEP_ENABLE_REQ ,
85
+ PNS_PEP_ENABLE_RESP ,
86
+ PNS_PEP_CTRL_REQ ,
87
+ PNS_PEP_CTRL_RESP ,
88
+ PNS_PEP_DISABLE_REQ = 0x4C ,
89
+ PNS_PEP_DISABLE_RESP ,
90
+
91
+ PNS_PEP_STATUS_IND = 0x60 ,
92
+ PNS_PIPE_CREATED_IND ,
93
+ PNS_PIPE_RESET_IND = 0x63 ,
94
+ PNS_PIPE_ENABLED_IND ,
95
+ PNS_PIPE_REDIRECTED_IND ,
96
+ PNS_PIPE_DISABLED_IND = 0x66 ,
97
+ };
98
+
99
+ #define PN_PIPE_INVALID_HANDLE 0xff
100
+ #define PN_PEP_TYPE_COMMON 0x00
101
+
102
+ /* Phonet pipe status indication */
103
+ enum {
104
+ PN_PEP_IND_FLOW_CONTROL ,
105
+ PN_PEP_IND_ID_MCFC_GRANT_CREDITS ,
106
+ };
107
+
108
+ /* Phonet pipe error codes */
109
+ enum {
110
+ PN_PIPE_NO_ERROR ,
111
+ PN_PIPE_ERR_INVALID_PARAM ,
112
+ PN_PIPE_ERR_INVALID_HANDLE ,
113
+ PN_PIPE_ERR_INVALID_CTRL_ID ,
114
+ PN_PIPE_ERR_NOT_ALLOWED ,
115
+ PN_PIPE_ERR_PEP_IN_USE ,
116
+ PN_PIPE_ERR_OVERLOAD ,
117
+ PN_PIPE_ERR_DEV_DISCONNECTED ,
118
+ PN_PIPE_ERR_TIMEOUT ,
119
+ PN_PIPE_ERR_ALL_PIPES_IN_USE ,
120
+ PN_PIPE_ERR_GENERAL ,
121
+ PN_PIPE_ERR_NOT_SUPPORTED ,
122
+ };
123
+
124
+ /* Phonet pipe states */
125
+ enum {
126
+ PN_PIPE_DISABLE ,
127
+ PN_PIPE_ENABLE ,
128
+ };
129
+
130
+ /* Phonet pipe sub-block types */
131
+ enum {
132
+ PN_PIPE_SB_CREATE_REQ_PEP_SUB_TYPE ,
133
+ PN_PIPE_SB_CONNECT_REQ_PEP_SUB_TYPE ,
134
+ PN_PIPE_SB_REDIRECT_REQ_PEP_SUB_TYPE ,
135
+ PN_PIPE_SB_NEGOTIATED_FC ,
136
+ PN_PIPE_SB_REQUIRED_FC_TX ,
137
+ PN_PIPE_SB_PREFERRED_FC_RX ,
138
+ };
139
+
140
+ /* Phonet pipe flow control models */
141
+ enum {
142
+ PN_NO_FLOW_CONTROL ,
143
+ PN_LEGACY_FLOW_CONTROL ,
144
+ PN_ONE_CREDIT_FLOW_CONTROL ,
145
+ PN_MULTI_CREDIT_FLOW_CONTROL ,
146
+ };
147
+
148
+ #define pn_flow_safe (fc ) ((fc) >> 1)
149
+
150
+ /* Phonet pipe flow control states */
151
+ enum {
152
+ PEP_IND_EMPTY ,
153
+ PEP_IND_BUSY ,
154
+ PEP_IND_READY ,
155
+ };
156
+
43
157
#endif
0 commit comments