ip_conntrack_pptp.h
上传用户:szlgq88
上传日期:2009-04-28
资源大小:48287k
文件大小:8k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* PPTP constants and structs */
  2. #ifndef _CONNTRACK_PPTP_H
  3. #define _CONNTRACK_PPTP_H
  4. /* state of the control session */
  5. enum pptp_ctrlsess_state {
  6. PPTP_SESSION_NONE, /* no session present */
  7. PPTP_SESSION_ERROR, /* some session error */
  8. PPTP_SESSION_STOPREQ, /* stop_sess request seen */
  9. PPTP_SESSION_REQUESTED, /* start_sess request seen */
  10. PPTP_SESSION_CONFIRMED, /* session established */
  11. };
  12. /* state of the call inside the control session */
  13. enum pptp_ctrlcall_state {
  14. PPTP_CALL_NONE,
  15. PPTP_CALL_ERROR,
  16. PPTP_CALL_OUT_REQ,
  17. PPTP_CALL_OUT_CONF,
  18. PPTP_CALL_IN_REQ,
  19. PPTP_CALL_IN_REP,
  20. PPTP_CALL_IN_CONF,
  21. PPTP_CALL_CLEAR_REQ,
  22. };
  23. /* conntrack private data */
  24. struct ip_ct_pptp_master {
  25. enum pptp_ctrlsess_state sstate; /* session state */
  26. /* everything below is going to be per-expectation in newnat,
  27.  * since there could be more than one call within one session */
  28. enum pptp_ctrlcall_state cstate; /* call state */
  29. u_int16_t pac_call_id; /* call id of PAC, host byte order */
  30. u_int16_t pns_call_id; /* call id of PNS, host byte order */
  31. /* in pre-2.6.11 this used to be per-expect. Now it is per-conntrack
  32.  * and therefore imposes a fixed limit on the number of maps */
  33. struct ip_ct_gre_keymap *keymap_orig, *keymap_reply;
  34. };
  35. /* conntrack_expect private member */
  36. struct ip_ct_pptp_expect {
  37. enum pptp_ctrlcall_state cstate;  /* call state */
  38. u_int16_t pac_call_id; /* call id of PAC */
  39. u_int16_t pns_call_id; /* call id of PNS */
  40. };
  41. #ifdef __KERNEL__
  42. #define IP_CONNTR_PPTP PPTP_CONTROL_PORT
  43. #define PPTP_CONTROL_PORT 1723
  44. #define PPTP_PACKET_CONTROL 1
  45. #define PPTP_PACKET_MGMT 2
  46. #define PPTP_MAGIC_COOKIE 0x1a2b3c4d
  47. struct pptp_pkt_hdr {
  48. __u16 packetLength;
  49. __be16 packetType;
  50. __be32 magicCookie;
  51. };
  52. /* PptpControlMessageType values */
  53. #define PPTP_START_SESSION_REQUEST 1
  54. #define PPTP_START_SESSION_REPLY 2
  55. #define PPTP_STOP_SESSION_REQUEST 3
  56. #define PPTP_STOP_SESSION_REPLY 4
  57. #define PPTP_ECHO_REQUEST 5
  58. #define PPTP_ECHO_REPLY 6
  59. #define PPTP_OUT_CALL_REQUEST 7
  60. #define PPTP_OUT_CALL_REPLY 8
  61. #define PPTP_IN_CALL_REQUEST 9
  62. #define PPTP_IN_CALL_REPLY 10
  63. #define PPTP_IN_CALL_CONNECT 11
  64. #define PPTP_CALL_CLEAR_REQUEST 12
  65. #define PPTP_CALL_DISCONNECT_NOTIFY 13
  66. #define PPTP_WAN_ERROR_NOTIFY 14
  67. #define PPTP_SET_LINK_INFO 15
  68. #define PPTP_MSG_MAX 15
  69. /* PptpGeneralError values */
  70. #define PPTP_ERROR_CODE_NONE 0
  71. #define PPTP_NOT_CONNECTED 1
  72. #define PPTP_BAD_FORMAT 2
  73. #define PPTP_BAD_VALUE 3
  74. #define PPTP_NO_RESOURCE 4
  75. #define PPTP_BAD_CALLID 5
  76. #define PPTP_REMOVE_DEVICE_ERROR 6
  77. struct PptpControlHeader {
  78. __be16 messageType;
  79. __u16 reserved;
  80. };
  81. /* FramingCapability Bitmap Values */
  82. #define PPTP_FRAME_CAP_ASYNC 0x1
  83. #define PPTP_FRAME_CAP_SYNC 0x2
  84. /* BearerCapability Bitmap Values */
  85. #define PPTP_BEARER_CAP_ANALOG 0x1
  86. #define PPTP_BEARER_CAP_DIGITAL 0x2
  87. struct PptpStartSessionRequest {
  88. __be16 protocolVersion;
  89. __u8 reserved1;
  90. __u8 reserved2;
  91. __be32 framingCapability;
  92. __be32 bearerCapability;
  93. __be16 maxChannels;
  94. __be16 firmwareRevision;
  95. __u8 hostName[64];
  96. __u8 vendorString[64];
  97. };
  98. /* PptpStartSessionResultCode Values */
  99. #define PPTP_START_OK 1
  100. #define PPTP_START_GENERAL_ERROR 2
  101. #define PPTP_START_ALREADY_CONNECTED 3
  102. #define PPTP_START_NOT_AUTHORIZED 4
  103. #define PPTP_START_UNKNOWN_PROTOCOL 5
  104. struct PptpStartSessionReply {
  105. __be16 protocolVersion;
  106. __u8 resultCode;
  107. __u8 generalErrorCode;
  108. __be32 framingCapability;
  109. __be32 bearerCapability;
  110. __be16 maxChannels;
  111. __be16 firmwareRevision;
  112. __u8 hostName[64];
  113. __u8 vendorString[64];
  114. };
  115. /* PptpStopReasons */
  116. #define PPTP_STOP_NONE 1
  117. #define PPTP_STOP_PROTOCOL 2
  118. #define PPTP_STOP_LOCAL_SHUTDOWN 3
  119. struct PptpStopSessionRequest {
  120. __u8 reason;
  121. };
  122. /* PptpStopSessionResultCode */
  123. #define PPTP_STOP_OK 1
  124. #define PPTP_STOP_GENERAL_ERROR 2
  125. struct PptpStopSessionReply {
  126. __u8 resultCode;
  127. __u8 generalErrorCode;
  128. };
  129. struct PptpEchoRequest {
  130. __be32 identNumber;
  131. };
  132. /* PptpEchoReplyResultCode */
  133. #define PPTP_ECHO_OK 1
  134. #define PPTP_ECHO_GENERAL_ERROR 2
  135. struct PptpEchoReply {
  136. __be32 identNumber;
  137. __u8 resultCode;
  138. __u8 generalErrorCode;
  139. __u16 reserved;
  140. };
  141. /* PptpFramingType */
  142. #define PPTP_ASYNC_FRAMING 1
  143. #define PPTP_SYNC_FRAMING 2
  144. #define PPTP_DONT_CARE_FRAMING 3
  145. /* PptpCallBearerType */
  146. #define PPTP_ANALOG_TYPE 1
  147. #define PPTP_DIGITAL_TYPE 2
  148. #define PPTP_DONT_CARE_BEARER_TYPE 3
  149. struct PptpOutCallRequest {
  150. __be16 callID;
  151. __be16 callSerialNumber;
  152. __be32 minBPS;
  153. __be32 maxBPS;
  154. __be32 bearerType;
  155. __be32 framingType;
  156. __be16 packetWindow;
  157. __be16 packetProcDelay;
  158. __u16 reserved1;
  159. __be16 phoneNumberLength;
  160. __u16 reserved2;
  161. __u8 phoneNumber[64];
  162. __u8 subAddress[64];
  163. };
  164. /* PptpCallResultCode */
  165. #define PPTP_OUTCALL_CONNECT 1
  166. #define PPTP_OUTCALL_GENERAL_ERROR 2
  167. #define PPTP_OUTCALL_NO_CARRIER 3
  168. #define PPTP_OUTCALL_BUSY 4
  169. #define PPTP_OUTCALL_NO_DIAL_TONE 5
  170. #define PPTP_OUTCALL_TIMEOUT 6
  171. #define PPTP_OUTCALL_DONT_ACCEPT 7
  172. struct PptpOutCallReply {
  173. __be16 callID;
  174. __be16 peersCallID;
  175. __u8 resultCode;
  176. __u8 generalErrorCode;
  177. __be16 causeCode;
  178. __be32 connectSpeed;
  179. __be16 packetWindow;
  180. __be16 packetProcDelay;
  181. __be32 physChannelID;
  182. };
  183. struct PptpInCallRequest {
  184. __be16 callID;
  185. __be16 callSerialNumber;
  186. __be32 callBearerType;
  187. __be32 physChannelID;
  188. __be16 dialedNumberLength;
  189. __be16 dialingNumberLength;
  190. __u8 dialedNumber[64];
  191. __u8 dialingNumber[64];
  192. __u8 subAddress[64];
  193. };
  194. /* PptpInCallResultCode */
  195. #define PPTP_INCALL_ACCEPT 1
  196. #define PPTP_INCALL_GENERAL_ERROR 2
  197. #define PPTP_INCALL_DONT_ACCEPT 3
  198. struct PptpInCallReply {
  199. __be16 callID;
  200. __be16 peersCallID;
  201. __u8 resultCode;
  202. __u8 generalErrorCode;
  203. __be16 packetWindow;
  204. __be16 packetProcDelay;
  205. __u16 reserved;
  206. };
  207. struct PptpInCallConnected {
  208. __be16 peersCallID;
  209. __u16 reserved;
  210. __be32 connectSpeed;
  211. __be16 packetWindow;
  212. __be16 packetProcDelay;
  213. __be32 callFramingType;
  214. };
  215. struct PptpClearCallRequest {
  216. __be16 callID;
  217. __u16 reserved;
  218. };
  219. struct PptpCallDisconnectNotify {
  220. __be16 callID;
  221. __u8 resultCode;
  222. __u8 generalErrorCode;
  223. __be16 causeCode;
  224. __u16 reserved;
  225. __u8 callStatistics[128];
  226. };
  227. struct PptpWanErrorNotify {
  228. __be16 peersCallID;
  229. __u16 reserved;
  230. __be32 crcErrors;
  231. __be32 framingErrors;
  232. __be32 hardwareOverRuns;
  233. __be32 bufferOverRuns;
  234. __be32 timeoutErrors;
  235. __be32 alignmentErrors;
  236. };
  237. struct PptpSetLinkInfo {
  238. __be16 peersCallID;
  239. __u16 reserved;
  240. __be32 sendAccm;
  241. __be32 recvAccm;
  242. };
  243. union pptp_ctrl_union {
  244. struct PptpStartSessionRequest sreq;
  245. struct PptpStartSessionReply srep;
  246. struct PptpStopSessionRequest streq;
  247. struct PptpStopSessionReply strep;
  248.                 struct PptpOutCallRequest       ocreq;
  249.                 struct PptpOutCallReply         ocack;
  250.                 struct PptpInCallRequest        icreq;
  251.                 struct PptpInCallReply          icack;
  252.                 struct PptpInCallConnected      iccon;
  253. struct PptpClearCallRequest clrreq;
  254.                 struct PptpCallDisconnectNotify disc;
  255.                 struct PptpWanErrorNotify       wanerr;
  256.                 struct PptpSetLinkInfo          setlink;
  257. };
  258. extern int
  259. (*ip_nat_pptp_hook_outbound)(struct sk_buff **pskb,
  260.   struct ip_conntrack *ct,
  261.   enum ip_conntrack_info ctinfo,
  262.   struct PptpControlHeader *ctlh,
  263.   union pptp_ctrl_union *pptpReq);
  264. extern int
  265. (*ip_nat_pptp_hook_inbound)(struct sk_buff **pskb,
  266.   struct ip_conntrack *ct,
  267.   enum ip_conntrack_info ctinfo,
  268.   struct PptpControlHeader *ctlh,
  269.   union pptp_ctrl_union *pptpReq);
  270. extern int
  271. (*ip_nat_pptp_hook_exp_gre)(struct ip_conntrack_expect *exp_orig,
  272.     struct ip_conntrack_expect *exp_reply);
  273. extern void
  274. (*ip_nat_pptp_hook_expectfn)(struct ip_conntrack *ct,
  275.      struct ip_conntrack_expect *exp);
  276. #endif /* __KERNEL__ */
  277. #endif /* _CONNTRACK_PPTP_H */