home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / net / x25.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  8.7 KB  |  288 lines

  1. /*
  2.  *    Declarations of X.25 Packet Layer type objects.
  3.  *
  4.  *     History
  5.  *    nov/17/96    Jonathan Naylor      Initial version.        
  6.  *    mar/20/00    Daniela Squassoni Disabling/enabling of facilities 
  7.  *                      negotiation.
  8.  */
  9.  
  10. #ifndef _X25_H
  11. #define _X25_H 
  12. #include <linux/x25.h>
  13. #include <net/sock.h>
  14.  
  15. #define    X25_ADDR_LEN            16
  16.  
  17. #define    X25_MAX_L2_LEN            18    /* 802.2 LLC */
  18.  
  19. #define    X25_STD_MIN_LEN            3
  20. #define    X25_EXT_MIN_LEN            4
  21.  
  22. #define    X25_GFI_SEQ_MASK        0x30
  23. #define    X25_GFI_STDSEQ            0x10
  24. #define    X25_GFI_EXTSEQ            0x20
  25.  
  26. #define    X25_Q_BIT            0x80
  27. #define    X25_D_BIT            0x40
  28. #define    X25_STD_M_BIT            0x10
  29. #define    X25_EXT_M_BIT            0x01
  30.  
  31. #define    X25_CALL_REQUEST        0x0B
  32. #define    X25_CALL_ACCEPTED        0x0F
  33. #define    X25_CLEAR_REQUEST        0x13
  34. #define    X25_CLEAR_CONFIRMATION        0x17
  35. #define    X25_DATA            0x00
  36. #define    X25_INTERRUPT            0x23
  37. #define    X25_INTERRUPT_CONFIRMATION    0x27
  38. #define    X25_RR                0x01
  39. #define    X25_RNR                0x05
  40. #define    X25_REJ                0x09
  41. #define    X25_RESET_REQUEST        0x1B
  42. #define    X25_RESET_CONFIRMATION        0x1F
  43. #define    X25_REGISTRATION_REQUEST    0xF3
  44. #define    X25_REGISTRATION_CONFIRMATION    0xF7
  45. #define    X25_RESTART_REQUEST        0xFB
  46. #define    X25_RESTART_CONFIRMATION    0xFF
  47. #define    X25_DIAGNOSTIC            0xF1
  48. #define    X25_ILLEGAL            0xFD
  49.  
  50. /* Define the various conditions that may exist */
  51.  
  52. #define    X25_COND_ACK_PENDING    0x01
  53. #define    X25_COND_OWN_RX_BUSY    0x02
  54. #define    X25_COND_PEER_RX_BUSY    0x04
  55.  
  56. /* Define Link State constants. */
  57. enum {
  58.     X25_STATE_0,        /* Ready */
  59.     X25_STATE_1,        /* Awaiting Call Accepted */
  60.     X25_STATE_2,        /* Awaiting Clear Confirmation */
  61.     X25_STATE_3,        /* Data Transfer */
  62.     X25_STATE_4        /* Awaiting Reset Confirmation */
  63. };
  64.  
  65. enum {
  66.     X25_LINK_STATE_0,
  67.     X25_LINK_STATE_1,
  68.     X25_LINK_STATE_2,
  69.     X25_LINK_STATE_3
  70. };
  71.  
  72. #define X25_DEFAULT_T20        (180 * HZ)        /* Default T20 value */
  73. #define X25_DEFAULT_T21        (200 * HZ)        /* Default T21 value */
  74. #define X25_DEFAULT_T22        (180 * HZ)        /* Default T22 value */
  75. #define    X25_DEFAULT_T23        (180 * HZ)        /* Default T23 value */
  76. #define    X25_DEFAULT_T2        (3   * HZ)        /* Default ack holdback value */
  77.  
  78. #define    X25_DEFAULT_WINDOW_SIZE    2            /* Default Window Size    */
  79. #define    X25_DEFAULT_PACKET_SIZE    X25_PS128        /* Default Packet Size */
  80. #define    X25_DEFAULT_THROUGHPUT    0x0A            /* Deafult Throughput */
  81. #define    X25_DEFAULT_REVERSE    0x00            /* Default Reverse Charging */
  82. #define X25_DENY_ACCPT_APPRV   0x01            /* Default value */
  83. #define X25_ALLOW_ACCPT_APPRV  0x00            /* Control enabled */
  84.  
  85. #define X25_SMODULUS         8
  86. #define    X25_EMODULUS        128
  87.  
  88. /*
  89.  *    X.25 Facilities constants.
  90.  */
  91.  
  92. #define    X25_FAC_CLASS_MASK    0xC0
  93.  
  94. #define    X25_FAC_CLASS_A        0x00
  95. #define    X25_FAC_CLASS_B        0x40
  96. #define    X25_FAC_CLASS_C        0x80
  97. #define    X25_FAC_CLASS_D        0xC0
  98.  
  99. #define    X25_FAC_REVERSE        0x01            /* also fast select */
  100. #define    X25_FAC_THROUGHPUT    0x02
  101. #define    X25_FAC_PACKET_SIZE    0x42
  102. #define    X25_FAC_WINDOW_SIZE    0x43
  103.  
  104. #define X25_MAX_FAC_LEN     60
  105. #define    X25_MAX_CUD_LEN        128
  106.  
  107. #define X25_FAC_CALLING_AE     0xCB
  108. #define X25_FAC_CALLED_AE     0xC9
  109.  
  110. #define X25_MARKER         0x00
  111. #define X25_DTE_SERVICES     0x0F
  112. #define X25_MAX_AE_LEN         40            /* Max num of semi-octets in AE - OSI Nw */
  113. #define X25_MAX_DTE_FACIL_LEN    21            /* Max length of DTE facility params */
  114.  
  115. /**
  116.  *    struct x25_route - x25 routing entry
  117.  *    @node - entry in x25_list_lock
  118.  *    @address - Start of address range
  119.  *    @sigdigits - Number of sig digits
  120.  *    @dev - More than one for MLP
  121.  *    @refcnt - reference counter
  122.  */
  123. struct x25_route {
  124.     struct list_head    node;        
  125.     struct x25_address    address;
  126.     unsigned int        sigdigits;
  127.     struct net_device    *dev;
  128.     atomic_t        refcnt;
  129. };
  130.  
  131. struct x25_neigh {
  132.     struct list_head    node;
  133.     struct net_device    *dev;
  134.     unsigned int        state;
  135.     unsigned int        extended;
  136.     struct sk_buff_head    queue;
  137.     unsigned long        t20;
  138.     struct timer_list    t20timer;
  139.     unsigned long        global_facil_mask;
  140.     atomic_t        refcnt;
  141. };
  142.  
  143. struct x25_sock {
  144.     struct sock        sk;
  145.     struct x25_address    source_addr, dest_addr;
  146.     struct x25_neigh    *neighbour;
  147.     unsigned int        lci, cudmatchlength;
  148.     unsigned char        state, condition, qbitincl, intflag, accptapprv;
  149.     unsigned short        vs, vr, va, vl;
  150.     unsigned long        t2, t21, t22, t23;
  151.     unsigned short        fraglen;
  152.     struct sk_buff_head    ack_queue;
  153.     struct sk_buff_head    fragment_queue;
  154.     struct sk_buff_head    interrupt_in_queue;
  155.     struct sk_buff_head    interrupt_out_queue;
  156.     struct timer_list    timer;
  157.     struct x25_causediag    causediag;
  158.     struct x25_facilities    facilities;
  159.     struct x25_dte_facilities dte_facilities;
  160.     struct x25_calluserdata    calluserdata;
  161.     unsigned long         vc_facil_mask;    /* inc_call facilities mask */
  162. };
  163.  
  164. static inline struct x25_sock *x25_sk(const struct sock *sk)
  165. {
  166.     return (struct x25_sock *)sk;
  167. }
  168.  
  169. /* af_x25.c */
  170. extern int  sysctl_x25_restart_request_timeout;
  171. extern int  sysctl_x25_call_request_timeout;
  172. extern int  sysctl_x25_reset_request_timeout;
  173. extern int  sysctl_x25_clear_request_timeout;
  174. extern int  sysctl_x25_ack_holdback_timeout;
  175.  
  176. extern int  x25_addr_ntoa(unsigned char *, struct x25_address *,
  177.               struct x25_address *);
  178. extern int  x25_addr_aton(unsigned char *, struct x25_address *,
  179.               struct x25_address *);
  180. extern struct sock *x25_find_socket(unsigned int, struct x25_neigh *);
  181. extern void x25_destroy_socket(struct sock *);
  182. extern int  x25_rx_call_request(struct sk_buff *, struct x25_neigh *, unsigned int);
  183. extern void x25_kill_by_neigh(struct x25_neigh *);
  184.  
  185. /* x25_dev.c */
  186. extern void x25_send_frame(struct sk_buff *, struct x25_neigh *);
  187. extern int  x25_lapb_receive_frame(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);
  188. extern void x25_establish_link(struct x25_neigh *);
  189. extern void x25_terminate_link(struct x25_neigh *);
  190.  
  191. /* x25_facilities.c */
  192. extern int x25_parse_facilities(struct sk_buff *, struct x25_facilities *,
  193.                 struct x25_dte_facilities *, unsigned long *);
  194. extern int x25_create_facilities(unsigned char *, struct x25_facilities *,
  195.                 struct x25_dte_facilities *, unsigned long);
  196. extern int x25_negotiate_facilities(struct sk_buff *, struct sock *,
  197.                 struct x25_facilities *,
  198.                 struct x25_dte_facilities *);
  199. extern void x25_limit_facilities(struct x25_facilities *, struct x25_neigh *);
  200.  
  201. /* x25_in.c */
  202. extern int  x25_process_rx_frame(struct sock *, struct sk_buff *);
  203. extern int  x25_backlog_rcv(struct sock *, struct sk_buff *);
  204.  
  205. /* x25_link.c */
  206. extern void x25_link_control(struct sk_buff *, struct x25_neigh *, unsigned short);
  207. extern void x25_link_device_up(struct net_device *);
  208. extern void x25_link_device_down(struct net_device *);
  209. extern void x25_link_established(struct x25_neigh *);
  210. extern void x25_link_terminated(struct x25_neigh *);
  211. extern void x25_transmit_clear_request(struct x25_neigh *, unsigned int, unsigned char);
  212. extern void x25_transmit_link(struct sk_buff *, struct x25_neigh *);
  213. extern int  x25_subscr_ioctl(unsigned int, void __user *);
  214. extern struct x25_neigh *x25_get_neigh(struct net_device *);
  215. extern void x25_link_free(void);
  216.  
  217. /* x25_neigh.c */
  218. static __inline__ void x25_neigh_hold(struct x25_neigh *nb)
  219. {
  220.     atomic_inc(&nb->refcnt);
  221. }
  222.  
  223. static __inline__ void x25_neigh_put(struct x25_neigh *nb)
  224. {
  225.     if (atomic_dec_and_test(&nb->refcnt))
  226.         kfree(nb);
  227. }
  228.  
  229. /* x25_out.c */
  230. extern  int x25_output(struct sock *, struct sk_buff *);
  231. extern void x25_kick(struct sock *);
  232. extern void x25_enquiry_response(struct sock *);
  233.  
  234. /* x25_route.c */
  235. extern struct x25_route *x25_get_route(struct x25_address *addr);
  236. extern struct net_device *x25_dev_get(char *);
  237. extern void x25_route_device_down(struct net_device *dev);
  238. extern int  x25_route_ioctl(unsigned int, void __user *);
  239. extern void x25_route_free(void);
  240.  
  241. static __inline__ void x25_route_hold(struct x25_route *rt)
  242. {
  243.     atomic_inc(&rt->refcnt);
  244. }
  245.  
  246. static __inline__ void x25_route_put(struct x25_route *rt)
  247. {
  248.     if (atomic_dec_and_test(&rt->refcnt))
  249.         kfree(rt);
  250. }
  251.  
  252. /* x25_subr.c */
  253. extern void x25_clear_queues(struct sock *);
  254. extern void x25_frames_acked(struct sock *, unsigned short);
  255. extern void x25_requeue_frames(struct sock *);
  256. extern int  x25_validate_nr(struct sock *, unsigned short);
  257. extern void x25_write_internal(struct sock *, int);
  258. extern int  x25_decode(struct sock *, struct sk_buff *, int *, int *, int *, int *, int *);
  259. extern void x25_disconnect(struct sock *, int, unsigned char, unsigned char);
  260.  
  261. /* x25_timer.c */
  262. extern void x25_start_heartbeat(struct sock *);
  263. extern void x25_start_t2timer(struct sock *);
  264. extern void x25_start_t21timer(struct sock *);
  265. extern void x25_start_t22timer(struct sock *);
  266. extern void x25_start_t23timer(struct sock *);
  267. extern void x25_stop_heartbeat(struct sock *);
  268. extern void x25_stop_timer(struct sock *);
  269. extern unsigned long x25_display_timer(struct sock *);
  270. extern void x25_check_rbuf(struct sock *);
  271.  
  272. /* sysctl_net_x25.c */
  273. extern void x25_register_sysctl(void);
  274. extern void x25_unregister_sysctl(void);
  275. struct x25_skb_cb {
  276.     unsigned flags;
  277. };
  278. #define X25_SKB_CB(s) ((struct x25_skb_cb *) ((s)->cb))
  279.  
  280. extern struct hlist_head x25_list;
  281. extern rwlock_t x25_list_lock;
  282. extern struct list_head x25_route_list;
  283. extern rwlock_t x25_route_list_lock;
  284.  
  285. extern int x25_proc_init(void);
  286. extern void x25_proc_exit(void);
  287. #endif
  288.