Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
uapi
linux
phonet.h
Go to the documentation of this file.
1
23
#ifndef _UAPILINUX_PHONET_H
24
#define _UAPILINUX_PHONET_H
25
26
#include <linux/types.h>
27
#include <linux/socket.h>
28
29
/* Automatic protocol selection */
30
#define PN_PROTO_TRANSPORT 0
31
/* Phonet datagram socket */
32
#define PN_PROTO_PHONET 1
33
/* Phonet pipe */
34
#define PN_PROTO_PIPE 2
35
#define PHONET_NPROTO 3
36
37
/* Socket options for SOL_PNPIPE level */
38
#define PNPIPE_ENCAP 1
39
#define PNPIPE_IFINDEX 2
40
#define PNPIPE_HANDLE 3
41
#define PNPIPE_INITSTATE 4
42
43
#define PNADDR_ANY 0
44
#define PNADDR_BROADCAST 0xFC
45
#define PNPORT_RESOURCE_ROUTING 0
46
47
/* Values for PNPIPE_ENCAP option */
48
#define PNPIPE_ENCAP_NONE 0
49
#define PNPIPE_ENCAP_IP 1
50
51
/* ioctls */
52
#define SIOCPNGETOBJECT (SIOCPROTOPRIVATE + 0)
53
#define SIOCPNENABLEPIPE (SIOCPROTOPRIVATE + 13)
54
#define SIOCPNADDRESOURCE (SIOCPROTOPRIVATE + 14)
55
#define SIOCPNDELRESOURCE (SIOCPROTOPRIVATE + 15)
56
57
/* Phonet protocol header */
58
struct
phonethdr
{
59
__u8
pn_rdev
;
60
__u8
pn_sdev
;
61
__u8
pn_res
;
62
__be16
pn_length
;
63
__u8
pn_robj
;
64
__u8
pn_sobj
;
65
}
__attribute__
((packed));
66
67
/* Common Phonet payload header */
68
struct
phonetmsg
{
69
__u8
pn_trans_id
;
/* transaction ID */
70
__u8
pn_msg_id
;
/* message type */
71
union
{
72
struct
{
73
__u8
pn_submsg_id
;
/* message subtype */
74
__u8
pn_data
[5];
75
}
base
;
76
struct
{
77
__u16
pn_e_res_id
;
/* extended resource ID */
78
__u8
pn_e_submsg_id
;
/* message subtype */
79
__u8
pn_e_data
[3];
80
}
ext
;
81
}
pn_msg_u
;
82
};
83
#define PN_COMMON_MESSAGE 0xF0
84
#define PN_COMMGR 0x10
85
#define PN_PREFIX 0xE0
/* resource for extended messages */
86
#define pn_submsg_id pn_msg_u.base.pn_submsg_id
87
#define pn_e_submsg_id pn_msg_u.ext.pn_e_submsg_id
88
#define pn_e_res_id pn_msg_u.ext.pn_e_res_id
89
#define pn_data pn_msg_u.base.pn_data
90
#define pn_e_data pn_msg_u.ext.pn_e_data
91
92
/* data for unreachable errors */
93
#define PN_COMM_SERVICE_NOT_IDENTIFIED_RESP 0x01
94
#define PN_COMM_ISA_ENTITY_NOT_REACHABLE_RESP 0x14
95
#define pn_orig_msg_id pn_data[0]
96
#define pn_status pn_data[1]
97
#define pn_e_orig_msg_id pn_e_data[0]
98
#define pn_e_status pn_e_data[1]
99
100
/* Phonet socket address structure */
101
struct
sockaddr_pn
{
102
__kernel_sa_family_t
spn_family
;
103
__u8
spn_obj
;
104
__u8
spn_dev
;
105
__u8
spn_resource
;
106
__u8
spn_zero
[
sizeof
(
struct
sockaddr
) -
sizeof
(
__kernel_sa_family_t
) - 3];
107
}
__attribute__
((packed));
108
109
/* Well known address */
110
#define PN_DEV_PC 0x10
111
112
static
inline
__u16
pn_object(
__u8
addr
,
__u16
port
)
113
{
114
return
(addr << 8) | (port & 0x3ff);
115
}
116
117
static
inline
__u8
pn_obj(
__u16
handle
)
118
{
119
return
handle & 0xff;
120
}
121
122
static
inline
__u8
pn_dev(
__u16
handle
)
123
{
124
return
handle >> 8;
125
}
126
127
static
inline
__u16
pn_port(
__u16
handle
)
128
{
129
return
handle & 0x3ff;
130
}
131
132
static
inline
__u8
pn_addr(
__u16
handle
)
133
{
134
return
(handle >> 8) & 0xfc;
135
}
136
137
static
inline
void
pn_sockaddr_set_addr(
struct
sockaddr_pn
*spn,
__u8
addr
)
138
{
139
spn->
spn_dev
&= 0x03;
140
spn->
spn_dev
|= addr & 0xfc;
141
}
142
143
static
inline
void
pn_sockaddr_set_port(
struct
sockaddr_pn
*spn,
__u16
port
)
144
{
145
spn->
spn_dev
&= 0xfc;
146
spn->
spn_dev
|= (port >> 8) & 0x03;
147
spn->
spn_obj
= port & 0xff;
148
}
149
150
static
inline
void
pn_sockaddr_set_object(
struct
sockaddr_pn
*spn,
151
__u16
handle)
152
{
153
spn->
spn_dev
= pn_dev(handle);
154
spn->
spn_obj
= pn_obj(handle);
155
}
156
157
static
inline
void
pn_sockaddr_set_resource(
struct
sockaddr_pn
*spn,
158
__u8
resource
)
159
{
160
spn->
spn_resource
=
resource
;
161
}
162
163
static
inline
__u8
pn_sockaddr_get_addr(
const
struct
sockaddr_pn
*spn)
164
{
165
return
spn->
spn_dev
& 0xfc;
166
}
167
168
static
inline
__u16
pn_sockaddr_get_port(
const
struct
sockaddr_pn
*spn)
169
{
170
return
((spn->
spn_dev
& 0x03) << 8) | spn->
spn_obj
;
171
}
172
173
static
inline
__u16
pn_sockaddr_get_object(
const
struct
sockaddr_pn
*spn)
174
{
175
return
pn_object(spn->
spn_dev
, spn->
spn_obj
);
176
}
177
178
static
inline
__u8
pn_sockaddr_get_resource(
const
struct
sockaddr_pn
*spn)
179
{
180
return
spn->
spn_resource
;
181
}
182
183
/* Phonet device ioctl requests */
184
185
#endif
/* _UAPILINUX_PHONET_H */
Generated on Thu Jan 10 2013 14:52:18 for Linux Kernel by
1.8.2