diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/phonet.h | 4 | ||||
-rw-r--r-- | include/net/phonet/pep.h | 114 |
2 files changed, 117 insertions, 1 deletions
diff --git a/include/linux/phonet.h b/include/linux/phonet.h index 3a027f588a4a..f92185242078 100644 --- a/include/linux/phonet.h +++ b/include/linux/phonet.h | |||
@@ -27,7 +27,9 @@ | |||
27 | #define PN_PROTO_TRANSPORT 0 | 27 | #define PN_PROTO_TRANSPORT 0 |
28 | /* Phonet datagram socket */ | 28 | /* Phonet datagram socket */ |
29 | #define PN_PROTO_PHONET 1 | 29 | #define PN_PROTO_PHONET 1 |
30 | #define PHONET_NPROTO 2 | 30 | /* Phonet pipe */ |
31 | #define PN_PROTO_PIPE 2 | ||
32 | #define PHONET_NPROTO 3 | ||
31 | 33 | ||
32 | #define PNADDR_ANY 0 | 34 | #define PNADDR_ANY 0 |
33 | #define PNPORT_RESOURCE_ROUTING 0 | 35 | #define PNPORT_RESOURCE_ROUTING 0 |
diff --git a/include/net/phonet/pep.h b/include/net/phonet/pep.h index b2f8c54c5333..fb024e186860 100644 --- a/include/net/phonet/pep.h +++ b/include/net/phonet/pep.h | |||
@@ -26,11 +26,21 @@ | |||
26 | struct pep_sock { | 26 | struct pep_sock { |
27 | struct pn_sock pn_sk; | 27 | struct pn_sock pn_sk; |
28 | 28 | ||
29 | /* XXX: union-ify listening vs connected stuff ? */ | ||
29 | /* Listening socket stuff: */ | 30 | /* Listening socket stuff: */ |
30 | struct hlist_head ackq; | 31 | struct hlist_head ackq; |
32 | struct hlist_head hlist; | ||
31 | 33 | ||
32 | /* Connected socket stuff: */ | 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 | u8 tx_credits; | 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 | static inline struct pep_sock *pep_sk(struct sock *sk) | 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 | extern const struct proto_ops phonet_stream_ops; | 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 | #endif | 157 | #endif |