af_wanpipe.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:69k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2. * af_wanpipe.c WANPIPE(tm) Secure Socket Layer.
  3. *
  4. * Author: Nenad Corbic <ncorbic@sangoma.com>
  5. *
  6. * Copyright: (c) 2000 Sangoma Technologies Inc.
  7. *
  8. * This program is free software; you can redistribute it and/or
  9. * modify it under the terms of the GNU General Public License
  10. * as published by the Free Software Foundation; either version
  11. * 2 of the License, or (at your option) any later version.
  12. * ============================================================================
  13. * Due Credit:
  14. *               Wanpipe socket layer is based on Packet and 
  15. *               the X25 socket layers. The above sockets were 
  16. *               used for the specific use of Sangoma Technoloiges 
  17. *               API programs. 
  18. *               Packet socket Authors: Ross Biro, Fred N. van Kempen and 
  19. *                                      Alan Cox.
  20. *               X25 socket Author: Jonathan Naylor.
  21. * ============================================================================
  22. * Apr 25, 2000  Nenad Corbic     o Added the ability to send zero length packets.
  23. * Mar 13, 2000  Nenad Corbic  o Added a tx buffer check via ioctl call.
  24. * Mar 06, 2000  Nenad Corbic     o Fixed the corrupt sock lcn problem.
  25. *                                  Server and client applicaton can run
  26. *                                  simultaneously without conflicts.
  27. * Feb 29, 2000  Nenad Corbic     o Added support for PVC protocols, such as
  28. *                                  CHDLC, Frame Relay and HDLC API.
  29. * Jan 17, 2000  Nenad Corbic  o Initial version, based on AF_PACKET socket.
  30. *            X25API support only. 
  31. *
  32. ******************************************************************************/
  33. #include <linux/version.h>
  34. #include <linux/config.h>
  35. #include <linux/types.h>
  36. #include <linux/sched.h>
  37. #include <linux/mm.h>
  38. #include <linux/fcntl.h>
  39. #include <linux/socket.h>
  40. #include <linux/in.h>
  41. #include <linux/inet.h>
  42. #include <linux/netdevice.h>
  43. #include <linux/poll.h>
  44. #include <linux/wireless.h>
  45. #include <linux/kmod.h>
  46. #include <net/ip.h>
  47. #include <net/protocol.h>
  48. #include <linux/skbuff.h>
  49. #include <net/sock.h>
  50. #include <linux/errno.h>
  51. #include <linux/timer.h>
  52. #include <asm/system.h>
  53. #include <asm/uaccess.h>
  54. #include <linux/module.h>
  55. #include <linux/init.h>
  56. #include <linux/wanpipe.h>
  57. #include <linux/if_wanpipe.h>
  58. #include <linux/pkt_sched.h>
  59. #include <linux/tcp.h>
  60. #include <linux/if_wanpipe_common.h>
  61. #include <linux/sdla_x25.h>
  62. #ifdef CONFIG_INET
  63. #include <net/inet_common.h>
  64. #endif
  65. #define SLOW_BACKOFF 0.1*HZ
  66. #define FAST_BACKOFF 0.01*HZ
  67. //#define PRINT_DEBUG
  68. #ifdef PRINT_DEBUG
  69. #define DBG_PRINTK(format, a...) printk(format, ## a)
  70. #else
  71. #define DBG_PRINTK(format, a...)
  72. #endif      
  73. #if defined(LINUX_2_1)
  74.  #define dev_put(a)
  75.  #define __sock_put(a)
  76.  #define sock_hold(a)
  77.  #define DECLARE_WAITQUEUE(a,b) 
  78. struct wait_queue a = { b, NULL }
  79. #endif
  80. /* SECURE SOCKET IMPLEMENTATION 
  81.  * 
  82.  *   TRANSMIT:
  83.  *
  84.  *      When the user sends a packet via send() system call
  85.  *      the wanpipe_sendmsg() function is executed.  
  86.  *      
  87.  *      Each packet is enqueud into sk->write_queue transmit
  88.  *      queue. When the packet is enqueued, a delayed transmit
  89.  *      timer is triggerd which acts as a Bottom Half hander. 
  90.  *
  91.  *      wanpipe_delay_transmit() function (BH), dequeues packets
  92.  *      from the sk->write_queue transmit queue and sends it 
  93.  *      to the deriver via dev->hard_start_xmit(skb, dev) function.  
  94.  *      Note, this function is actual a function pointer of if_send()
  95.  *      routine in the wanpipe driver.
  96.  *
  97.  *      X25API GUARANTEED DELIVERY:
  98.  *
  99.  *         In order to provide 100% guaranteed packet delivery, 
  100.  *         an atomic 'packet_sent' counter is implemented.  Counter 
  101.  *         is incremented for each packet enqueued 
  102.  *         into sk->write_queue.  Counter is decremented each
  103.  *         time wanpipe_delayed_transmit() function successfuly 
  104.  *         passes the packet to the driver. Before each send(), a poll
  105.  *         routine checks the sock resources The maximum value of
  106.  *         packet sent counter is 1, thus if one packet is queued, the
  107.  *         application will block untill that packet is passed to the
  108.  *         driver.
  109.  *
  110.  *   RECEIVE:
  111.  *
  112.  *      Wanpipe device drivers call the socket bottom half
  113.  *      function, wanpipe_rcv() to queue the incoming packets
  114.  *      into an AF_WANPIPE socket queue.  Based on wanpipe_rcv()
  115.  *      return code, the driver knows whether the packet was
  116.  *      sucessfully queued.  If the socket queue is full, 
  117.  *      protocol flow control is used by the driver, if any, 
  118.  *      to slow down the traffic untill the sock queue is free.
  119.  *
  120.  *      Every time a packet arrives into a socket queue the 
  121.  *      socket wakes up processes which are waiting to receive
  122.  *      data.
  123.  *
  124.  *      If the socket queue is full, the driver sets a block
  125.  *      bit which signals the socket to kick the wanpipe driver
  126.  *      bottom half hander when the socket queue is partialy
  127.  *      empty. wanpipe_recvmsg() function performs this action.
  128.  * 
  129.  *      In case of x25api, packets will never be dropped, since
  130.  *      flow control is available. 
  131.  *      
  132.  *      In case of streaming protocols like CHDLC, packets will 
  133.  *      be dropped but the statistics will be generated. 
  134.  */
  135. /* The code below is used to test memory leaks. It prints out
  136.  * a message every time kmalloc and kfree system calls get executed.
  137.  * If the calls match there is no leak :)
  138.  */
  139. /***********FOR DEBUGGING PURPOSES*********************************************
  140. #define KMEM_SAFETYZONE 8
  141. static void * dbg_kmalloc(unsigned int size, int prio, int line) {
  142. void * v = kmalloc(size,prio);
  143. printk(KERN_INFO "line %d  kmalloc(%d,%d) = %pn",line,size,prio,v);
  144. return v;
  145. }
  146. static void dbg_kfree(void * v, int line) {
  147. printk(KERN_INFO "line %d  kfree(%p)n",line,v);
  148. kfree(v);
  149. }
  150. #define kmalloc(x,y) dbg_kmalloc(x,y,__LINE__)
  151. #define kfree(x) dbg_kfree(x,__LINE__)
  152. ******************************************************************************/
  153. /* List of all wanpipe sockets. */
  154. struct sock * wanpipe_sklist = NULL;
  155. static rwlock_t wanpipe_sklist_lock = RW_LOCK_UNLOCKED;
  156. atomic_t wanpipe_socks_nr;
  157. static unsigned long wanpipe_tx_critical=0;
  158. #if 0
  159. /* Private wanpipe socket structures. */
  160. struct wanpipe_opt
  161. {
  162. void   *mbox; /* Mail box  */
  163. void   *card;  /* Card bouded to */
  164. netdevice_t *dev; /* Bounded device */
  165. unsigned short lcn; /* Binded LCN */
  166. unsigned char  svc; /* 0=pvc, 1=svc */
  167. unsigned char  timer;   /* flag for delayed transmit*/
  168. struct timer_list tx_timer;
  169. unsigned poll_cnt;
  170. unsigned char force; /* Used to force sock release */
  171. atomic_t packet_sent;   
  172. };
  173. #endif
  174. static int sk_count=0;
  175. extern struct proto_ops wanpipe_ops;
  176. static unsigned long find_free_critical=0;
  177. static void wanpipe_unlink_driver (struct sock *);
  178. static void wanpipe_link_driver (netdevice_t *,struct sock *sk);
  179. static void wanpipe_wakeup_driver(struct sock *sk);
  180. static int execute_command(struct sock *, unsigned char, unsigned int);
  181. static int check_dev (netdevice_t *, sdla_t *);
  182. netdevice_t * wanpipe_find_free_dev (sdla_t *);
  183. static void wanpipe_unlink_card (struct sock *);
  184. static int wanpipe_link_card (struct sock *);
  185. static struct sock *wanpipe_make_new(struct sock *);
  186. static struct sock *wanpipe_alloc_socket(void);
  187. static inline int get_atomic_device (netdevice_t *);
  188. static int wanpipe_exec_cmd(struct sock *, int, unsigned int);
  189. static int get_ioctl_cmd (struct sock *, void *);
  190. static int set_ioctl_cmd (struct sock *, void *);
  191. static void release_device (netdevice_t *);
  192. static void wanpipe_kill_sock_timer (unsigned long data);
  193. static void wanpipe_kill_sock_irq (struct sock *);
  194. static void wanpipe_kill_sock_accept (struct sock *);
  195. static int wanpipe_do_bind(struct sock *, netdevice_t *, int);
  196. struct sock * get_newsk_from_skb (struct sk_buff *);
  197. static int wanpipe_debug (struct sock *, void *);
  198. static void wanpipe_delayed_transmit (unsigned long data);
  199. static void release_driver(struct sock *);
  200. static void start_cleanup_timer (struct sock *);
  201. static void check_write_queue(struct sock *);
  202. static int check_driver_busy (struct sock *);
  203. /*============================================================
  204.  * wanpipe_rcv
  205.  *
  206.  * Wanpipe socket bottom half handler.  This function
  207.  *      is called by the WANPIPE device drivers to queue a
  208.  *      incomming packet into the socket receive queue. 
  209.  *      Once the packet is queued, all processes waiting to 
  210.  *      read are woken up.
  211.  *
  212.  *      During socket bind, this function is bounded into
  213.  *      WANPIPE driver private.
  214.  *===========================================================*/
  215. static int wanpipe_rcv(struct sk_buff *skb, netdevice_t *dev,  struct sock *sk)
  216. {
  217. struct wan_sockaddr_ll *sll = (struct wan_sockaddr_ll*)skb->cb;
  218. wanpipe_common_t *chan = dev->priv;
  219. /*
  220.  * When we registered the protocol we saved the socket in the data
  221.  * field for just this event.
  222.  */
  223. skb->dev = dev;
  224. sll->sll_family = AF_WANPIPE;
  225. sll->sll_hatype = dev->type;
  226. sll->sll_protocol = skb->protocol;
  227. sll->sll_pkttype = skb->pkt_type;
  228. sll->sll_ifindex = dev->ifindex;
  229. sll->sll_halen = 0;
  230. if (dev->hard_header_parse)
  231. sll->sll_halen = dev->hard_header_parse(skb, sll->sll_addr);
  232. /* 
  233.  * WAN_PACKET_DATA : Data which should be passed up the receive queue.
  234.          * WAN_PACKET_ASYC : Asynchronous data like place call, which should
  235.          *                   be passed up the listening sock.
  236.          * WAN_PACKET_ERR  : Asynchronous data like clear call or restart 
  237.          *                   which should go into an error queue.
  238.          */
  239. switch (skb->pkt_type){
  240. case WAN_PACKET_DATA:
  241. if (sock_queue_rcv_skb(sk,skb)<0){
  242. return -ENOMEM;
  243. }
  244. break;
  245. case WAN_PACKET_CMD:
  246. sk->state = chan->state;
  247. /* Bug fix: update Mar6. 
  248.                          * Do not set the sock lcn number here, since
  249.            * cmd is not guaranteed to be executed on the
  250.                          * board, thus Lcn could be wrong */
  251. sk->data_ready(sk,skb->len);
  252. kfree_skb(skb);
  253. break;
  254. case WAN_PACKET_ERR:
  255. sk->state = chan->state;
  256. if (sock_queue_err_skb(sk,skb)<0){
  257. return -ENOMEM;
  258. }
  259. break;
  260. default:
  261. printk(KERN_INFO "wansock: BH Illegal Packet Type Droppingn");
  262. kfree_skb(skb); 
  263. break;
  264. }
  265. //??????????????????????
  266. // if (sk->state == WANSOCK_DISCONNECTED){
  267. // if (sk->zapped){
  268. // //printk(KERN_INFO "wansock: Disconnected, killing earlyn");
  269. // wanpipe_unlink_driver(sk);
  270. // sk->bound_dev_if = 0;
  271. // }
  272. // }
  273. return 0;
  274. }
  275. /*============================================================
  276.  * wanpipe_listen_rcv
  277.  *
  278.  * Wanpipe LISTEN socket bottom half handler.  This function
  279.  *      is called by the WANPIPE device drivers to queue an
  280.  *      incomming call into the socket listening queue. 
  281.  *      Once the packet is queued, the waiting accept() process 
  282.  *      is woken up.
  283.  *
  284.  *      During socket bind, this function is bounded into
  285.  *      WANPIPE driver private. 
  286.  * 
  287.  *      IMPORTANT NOTE:
  288.  *          The accept call() is waiting for an skb packet
  289.  *          which contains a pointer to a device structure.
  290.  *
  291.  *          When we do a bind to a device structre, we 
  292.  *          bind a newly created socket into "chan->sk".  Thus, 
  293.  *          when accept receives the skb packet, it will know 
  294.  *          from which dev it came form, and in turn it will know
  295.  *          the address of the new sock.
  296.  *
  297.  *   NOTE: This function gets called from driver ISR.
  298.  *===========================================================*/
  299. static int wanpipe_listen_rcv (struct sk_buff *skb,  struct sock *sk)
  300. {
  301. struct wan_sockaddr_ll *sll = (struct wan_sockaddr_ll*)skb->cb;
  302. struct sock *newsk;
  303. netdevice_t *dev; 
  304. sdla_t *card;
  305. mbox_cmd_t *mbox_ptr;
  306. wanpipe_common_t *chan;
  307. /* Find a free device, if none found, all svc's are busy 
  308.          */
  309. card = (sdla_t*)sk->protinfo.af_wanpipe->card;
  310. if (!card){
  311. printk(KERN_INFO "wansock: LISTEN ERROR, No Cardn");
  312. return -ENODEV;
  313. }
  314. dev = wanpipe_find_free_dev(card);
  315. if (!dev){
  316. printk(KERN_INFO "wansock: LISTEN ERROR, No Free Devicen");
  317. return -ENODEV;
  318. }
  319. chan=dev->priv;
  320. chan->state = WANSOCK_CONNECTING;
  321. /* Allocate a new sock, which accept will bind
  322.          * and pass up to the user 
  323.  */
  324. if ((newsk = wanpipe_make_new(sk)) == NULL){
  325. release_device(dev);
  326. return -ENOMEM;
  327. }
  328. /* Initialize the new sock structure 
  329.  */
  330. newsk->bound_dev_if = dev->ifindex;
  331. newsk->protinfo.af_wanpipe->card = sk->protinfo.af_wanpipe->card;
  332. /* Insert the sock into the main wanpipe
  333.          * sock list.
  334.          */
  335. atomic_inc(&wanpipe_socks_nr);
  336. /* Allocate and fill in the new Mail Box. Then
  337.          * bind the mail box to the sock. It will be 
  338.          * used by the ioctl call to read call information
  339.          * and to execute commands. 
  340.          */
  341. if ((mbox_ptr = kmalloc(sizeof(mbox_cmd_t), GFP_ATOMIC)) == NULL) {
  342. wanpipe_kill_sock_irq (newsk);
  343. release_device(dev);
  344. return -ENOMEM;
  345. }
  346. memset(mbox_ptr, 0, sizeof(mbox_cmd_t));
  347. memcpy(mbox_ptr,skb->data,skb->len);
  348. /* Register the lcn on which incoming call came
  349.          * from. Thus, if we have to clear it, we know
  350.          * whic lcn to clear 
  351.  */ 
  352. newsk->protinfo.af_wanpipe->lcn = mbox_ptr->cmd.lcn;
  353. newsk->protinfo.af_wanpipe->mbox = (void *)mbox_ptr;
  354. DBG_PRINTK(KERN_INFO "NEWSOCK : Device %s, bind to lcn %in",
  355. dev->name,mbox_ptr->cmd.lcn);
  356. chan->lcn = mbox_ptr->cmd.lcn;
  357. card->u.x.svc_to_dev_map[(chan->lcn%MAX_X25_LCN)] = dev;
  358. newsk->zapped=0;
  359. newsk->num = htons(X25_PROT);
  360. if (wanpipe_do_bind(newsk,dev,newsk->num)){
  361. wanpipe_kill_sock_irq (newsk);
  362. release_device(dev);
  363. return -EINVAL;
  364. }
  365. newsk->state = WANSOCK_CONNECTING;
  366. /* Fill in the standard sock address info */
  367. sll->sll_family = AF_WANPIPE;
  368. sll->sll_hatype = dev->type;
  369. sll->sll_protocol = skb->protocol;
  370. sll->sll_pkttype = skb->pkt_type;
  371. sll->sll_ifindex = dev->ifindex;
  372. sll->sll_halen = 0;
  373. skb->dev = dev;
  374. sk->ack_backlog++;
  375. /* We must do this manually, since the sock_queue_rcv_skb()
  376.  * function sets the skb->dev to NULL.  However, we use
  377.  * the dev field in the accept function.*/ 
  378. if (atomic_read(&sk->rmem_alloc) + skb->truesize >= 
  379. (unsigned)sk->rcvbuf){
  380.           wanpipe_unlink_driver(newsk);
  381. wanpipe_kill_sock_irq (newsk);
  382. --sk->ack_backlog;
  383. return -ENOMEM;
  384. }
  385. skb_set_owner_r(skb, sk);
  386. skb_queue_tail(&sk->receive_queue, skb);
  387. sk->data_ready(sk,skb->len);
  388. return 0;
  389. }
  390. /*============================================================
  391.  * wanpipe_make_new
  392.  *
  393.  * Create a new sock, and allocate a wanpipe private
  394.  *      structure to it. Also, copy the important data
  395.  *      from the original sock to the new sock.
  396.  *
  397.  *      This function is used by wanpipe_listen_rcv() listen
  398.  *      bottom half handler.  A copy of the listening sock
  399.  *      is created using this function.
  400.  *
  401.  *===========================================================*/
  402. static struct sock *wanpipe_make_new(struct sock *osk)
  403. {
  404. struct sock *sk;
  405. if (osk->type != SOCK_RAW)
  406. return NULL;
  407. if ((sk = wanpipe_alloc_socket()) == NULL)
  408. return NULL;
  409. sk->type        = osk->type;
  410. sk->socket      = osk->socket;
  411. sk->priority    = osk->priority;
  412. sk->protocol    = osk->protocol;
  413. sk->num = osk->num;
  414. sk->rcvbuf      = osk->rcvbuf;
  415. sk->sndbuf      = osk->sndbuf;
  416. sk->debug       = osk->debug;
  417. sk->state       = WANSOCK_CONNECTING;
  418. sk->sleep       = osk->sleep;
  419. return sk;
  420. }
  421. /*============================================================
  422.  * wanpipe_make_new
  423.  *
  424.  * Allocate memory for the a new sock, and sock
  425.  *      private data.  
  426.  *
  427.  * Increment the module use count.
  428.  *       
  429.  *      This function is used by wanpipe_create() and 
  430.  *      wanpipe_make_new() functions. 
  431.  *
  432.  *===========================================================*/
  433. static struct sock *wanpipe_alloc_socket(void)
  434. {
  435. struct sock *sk;
  436. struct wanpipe_opt *wan_opt;
  437. if ((sk = sk_alloc(PF_WANPIPE, GFP_ATOMIC, 1)) == NULL)
  438. return NULL;
  439. if ((wan_opt = kmalloc(sizeof(struct wanpipe_opt), GFP_ATOMIC)) == NULL) {
  440. sk_free(sk);
  441. return NULL;
  442. }
  443. memset(wan_opt, 0x00, sizeof(struct wanpipe_opt));
  444. sk->protinfo.af_wanpipe = wan_opt;
  445. sk->protinfo.destruct_hook = wan_opt;
  446. /* Use timer to send data to the driver. This will act
  447.          * as a BH handler for sendmsg functions */
  448. sk->protinfo.af_wanpipe->tx_timer.data=(unsigned long)sk;
  449. sk->protinfo.af_wanpipe->tx_timer.function=wanpipe_delayed_transmit;
  450. MOD_INC_USE_COUNT;
  451. sock_init_data(NULL, sk);
  452. return sk;
  453. }
  454. /*============================================================
  455.  * wanpipe_sendmsg
  456.  *
  457.  * This function implements a sendto() system call,
  458.  *      for AF_WANPIPE socket family. 
  459.  *      During socket bind() sk->bound_dev_if is initialized
  460.  *      to a correct network device. This number is used
  461.  *      to find a network device to which the packet should
  462.  *      be passed to.
  463.  *
  464.  *      Each packet is queued into sk->write_queue and 
  465.  *      delayed transmit bottom half handler is marked for 
  466.  *      execution.
  467.  *
  468.  *      A socket must be in WANSOCK_CONNECTED state before
  469.  *      a packet is queued into sk->write_queue.
  470.  *===========================================================*/
  471. static int wanpipe_sendmsg(struct socket *sock, struct msghdr *msg, int len,
  472.   struct scm_cookie *scm)
  473. {
  474. struct sock *sk = sock->sk;
  475. struct wan_sockaddr_ll *saddr=(struct wan_sockaddr_ll *)msg->msg_name;
  476. struct sk_buff *skb;
  477. netdevice_t *dev;
  478. unsigned short proto;
  479. unsigned char *addr;
  480. int ifindex, err, reserve = 0;
  481. if (!sk->zapped)
  482. return -ENETDOWN;
  483. if (sk->state != WANSOCK_CONNECTED)
  484. return -ENOTCONN;
  485. if (msg->msg_flags&~MSG_DONTWAIT) 
  486. return(-EINVAL);
  487. /* it was <=, now one can send
  488.          * zero length packets */
  489. if (len < sizeof(x25api_hdr_t))
  490. return -EINVAL;
  491. if (saddr == NULL) {
  492. ifindex = sk->bound_dev_if;
  493. proto = sk->num;
  494. addr = NULL;
  495. }else{
  496. if (msg->msg_namelen < sizeof(struct wan_sockaddr_ll)){ 
  497. return -EINVAL;
  498. }
  499. ifindex = sk->bound_dev_if;
  500. proto = saddr->sll_protocol;
  501. addr = saddr->sll_addr;
  502. }
  503. dev = dev_get_by_index(ifindex);
  504. if (dev == NULL){
  505. printk(KERN_INFO "wansock: Send failed, dev index: %in",ifindex);
  506. return -ENXIO;
  507. }
  508. dev_put(dev);
  509. if (sock->type == SOCK_RAW)
  510. reserve = dev->hard_header_len;
  511. if (len > dev->mtu+reserve){
  512.    return -EMSGSIZE;
  513. }
  514.       #ifndef LINUX_2_4
  515. dev_lock_list();
  516.       #endif
  517.       
  518.       #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,3)
  519. skb = sock_alloc_send_skb(sk, len+dev->hard_header_len+15, 
  520. msg->msg_flags & MSG_DONTWAIT, &err);
  521.       #else
  522. skb = sock_alloc_send_skb(sk, len+dev->hard_header_len+15, 0, 
  523. msg->msg_flags & MSG_DONTWAIT, &err);
  524.       #endif
  525. if (skb==NULL){
  526. goto out_unlock;
  527. }
  528. skb_reserve(skb, (dev->hard_header_len+15)&~15);
  529. skb->nh.raw = skb->data;
  530. /* Returns -EFAULT on error */
  531. err = memcpy_fromiovec(skb_put(skb,len), msg->msg_iov, len);
  532. if (err){
  533. goto out_free;
  534. }
  535. if (dev->hard_header) {
  536. int res;
  537. err = -EINVAL;
  538. res = dev->hard_header(skb, dev, ntohs(proto), addr, NULL, len);
  539. if (res<0){
  540. goto out_free;
  541. }
  542. }
  543. skb->protocol = proto;
  544. skb->dev = dev;
  545. skb->priority = sk->priority;
  546. skb->pkt_type = WAN_PACKET_DATA;
  547. err = -ENETDOWN;
  548. if (!(dev->flags & IFF_UP))
  549. goto out_free;
  550.       #ifndef LINUX_2_4
  551. dev_unlock_list();
  552.       #endif
  553. if (atomic_read(&sk->wmem_alloc) + skb->truesize > (unsigned int)sk->sndbuf){
  554. kfree_skb(skb);
  555. return -ENOBUFS;
  556. }
  557. skb_queue_tail(&sk->write_queue,skb);
  558. atomic_inc(&sk->protinfo.af_wanpipe->packet_sent);
  559. if (!(test_and_set_bit(0,&sk->protinfo.af_wanpipe->timer))){
  560. del_timer(&sk->protinfo.af_wanpipe->tx_timer);
  561. sk->protinfo.af_wanpipe->tx_timer.expires=jiffies+1;
  562. add_timer(&sk->protinfo.af_wanpipe->tx_timer);
  563. }
  564. return(len);
  565. out_free:
  566. kfree_skb(skb);
  567. out_unlock:
  568. #ifndef LINUX_2_4
  569. dev_unlock_list();
  570. #endif
  571. return err;
  572. }
  573. /*============================================================
  574.  * wanpipe_delayed_tarnsmit
  575.  *
  576.  * Transmit bottom half handeler. It dequeues packets
  577.  *      from sk->write_queue and passes them to the 
  578.  *      driver.  If the driver is busy, the packet is 
  579.  *      re-enqueued.  
  580.  *
  581.  *      Packet Sent counter is decremented on successful
  582.  *      transmission. 
  583.  *===========================================================*/
  584. static void wanpipe_delayed_transmit (unsigned long data)
  585. {
  586. struct sock *sk=(struct sock *)data;
  587. struct sk_buff *skb;
  588. netdevice_t *dev = sk->protinfo.af_wanpipe->dev;
  589. sdla_t *card = (sdla_t*)sk->protinfo.af_wanpipe->card;
  590. if (!card || !dev){
  591. clear_bit (0,&sk->protinfo.af_wanpipe->timer);
  592. DBG_PRINTK(KERN_INFO "wansock: Transmit delay, no dev or cardn");
  593. return;
  594. }
  595. if (sk->state != WANSOCK_CONNECTED || !sk->zapped){
  596. clear_bit (0,&sk->protinfo.af_wanpipe->timer);
  597. DBG_PRINTK(KERN_INFO "wansock: Tx Timer, State not CONNECTEDn");
  598. return;
  599. }
  600. /* If driver is executing command, we must offload
  601.          * the board by not sending data. Otherwise a 
  602.          * pending command will never get a free buffer
  603.          * to execute */ 
  604. if (atomic_read(&card->u.x.command_busy)){
  605. sk->protinfo.af_wanpipe->tx_timer.expires=jiffies+SLOW_BACKOFF;
  606. add_timer(&sk->protinfo.af_wanpipe->tx_timer);
  607. DBG_PRINTK(KERN_INFO "wansock: Tx Timer, command bys BACKOFFn");
  608. return;
  609. }
  610. if (test_and_set_bit(0,&wanpipe_tx_critical)){
  611. printk(KERN_INFO "WanSock: Tx timer critical %sn",dev->name);
  612. sk->protinfo.af_wanpipe->tx_timer.expires=jiffies+SLOW_BACKOFF;
  613. add_timer(&sk->protinfo.af_wanpipe->tx_timer);
  614. return;
  615. }
  616. /* Check for a packet in the fifo and send */
  617. if ((skb=skb_dequeue(&sk->write_queue)) != NULL){
  618. if (dev->hard_start_xmit(skb, dev) != 0){
  619. /* Driver failed to transmit, re-enqueue
  620.                          * the packet and retry again later */
  621. skb_queue_head(&sk->write_queue,skb);
  622. clear_bit(0,&wanpipe_tx_critical);
  623. return;
  624. }else{
  625. /* Packet Sent successful. Check for more packets
  626.                          * if more packets, re-trigger the transmit routine 
  627.                          * other wise exit
  628.                          */
  629. atomic_dec(&sk->protinfo.af_wanpipe->packet_sent);
  630. if (skb_peek(&sk->write_queue) == NULL){
  631. /* If there is nothing to send, kick
  632.  * the poll routine, which will trigger
  633.  * the application to send more data */
  634. sk->data_ready(sk,0);
  635. clear_bit (0,&sk->protinfo.af_wanpipe->timer);
  636. }else{
  637. /* Reschedule as fast as possible */
  638. sk->protinfo.af_wanpipe->tx_timer.expires=jiffies+1;
  639. add_timer(&sk->protinfo.af_wanpipe->tx_timer);
  640. }
  641. }
  642. }
  643. clear_bit(0,&wanpipe_tx_critical);
  644. }
  645. /*============================================================
  646.  * execute_command 
  647.  *
  648.  * Execute x25api commands.  The atomic variable
  649.  *      chan->command is used to indicate to the driver that
  650.  *      command is pending for exection.  The acutal command
  651.  *      structure is placed into a sock mbox structure 
  652.  *      (sk->protinfo.af_wanpipe->mbox).
  653.  *
  654.  *      The sock private structure, mbox is
  655.  *      used as shared memory between sock and the driver.
  656.  *      Driver uses the sock mbox to execute the command
  657.  *      and return the result.  
  658.  *
  659.  *      For all command except PLACE CALL, the function
  660.  *      waits for the result.  PLACE CALL can be ether
  661.  *      blocking or nonblocking. The user sets this option
  662.  *      via ioctl call.
  663.  *===========================================================*/
  664. static int execute_command(struct sock *sk,  unsigned char cmd, unsigned int flags)
  665. {
  666. netdevice_t *dev;
  667. wanpipe_common_t *chan=NULL;
  668. int err=0;
  669. DECLARE_WAITQUEUE(wait, current);
  670. dev = dev_get_by_index(sk->bound_dev_if);
  671. if (dev == NULL){
  672. printk(KERN_INFO "wansock: Exec failed no dev %in",
  673. sk->bound_dev_if);
  674. return -ENODEV;
  675. }
  676. dev_put(dev);
  677. if ((chan=dev->priv) == NULL){
  678. printk(KERN_INFO "wansock: Exec cmd failed no priv arean");
  679. return -ENODEV;
  680. }
  681. if (atomic_read(&chan->command)){
  682. printk(KERN_INFO "wansock: ERROR: Command already running %x, %sn",
  683. atomic_read(&chan->command),dev->name);
  684. return -EINVAL;
  685. }
  686. if (!sk->protinfo.af_wanpipe->mbox){
  687. printk(KERN_INFO "wansock: In execute without MBOXn");
  688. return -EINVAL;
  689. }
  690. ((mbox_cmd_t*)sk->protinfo.af_wanpipe->mbox)->cmd.command=cmd;
  691. ((mbox_cmd_t*)sk->protinfo.af_wanpipe->mbox)->cmd.lcn = 
  692. sk->protinfo.af_wanpipe->lcn;
  693. ((mbox_cmd_t*)sk->protinfo.af_wanpipe->mbox)->cmd.result=0x7F;
  694. if (flags & O_NONBLOCK){
  695. cmd |= 0x80;
  696. atomic_set(&chan->command, cmd);
  697. }else{
  698. atomic_set(&chan->command, cmd);
  699. }
  700. add_wait_queue(sk->sleep,&wait);
  701. current->state = TASK_INTERRUPTIBLE;
  702. for (;;){
  703. if (((mbox_cmd_t*)sk->protinfo.af_wanpipe->mbox)->cmd.result != 0x7F) {
  704. err = 0;
  705. break;
  706. }
  707. if (signal_pending(current)) {
  708. err = -ERESTARTSYS;
  709. break;
  710. }
  711. schedule();
  712. }
  713. current->state = TASK_RUNNING;
  714. remove_wait_queue(sk->sleep,&wait);
  715. return err;
  716. }
  717. /*============================================================
  718.  * wanpipe_destroy_timer 
  719.  *
  720.  * Used by wanpipe_release, to delay release of
  721.  *      the socket.
  722.  *===========================================================*/
  723. static void wanpipe_destroy_timer(unsigned long data)
  724. {
  725. struct sock *sk=(struct sock *)data;
  726. if ((!atomic_read(&sk->wmem_alloc) && !atomic_read(&sk->rmem_alloc)) ||
  727.     (++sk->protinfo.af_wanpipe->force == 5)) {
  728. if (atomic_read(&sk->wmem_alloc) || atomic_read(&sk->rmem_alloc))
  729. printk(KERN_INFO "wansock: Warning, Packet Discarded due to sock shutdown!n");
  730. if (sk->protinfo.af_wanpipe){
  731. kfree(sk->protinfo.af_wanpipe);
  732. sk->protinfo.af_wanpipe=NULL;
  733. }
  734.               #ifdef LINUX_2_4
  735. if (atomic_read(&sk->refcnt) != 1){
  736. atomic_set(&sk->refcnt,1);
  737. DBG_PRINTK(KERN_INFO "wansock: Error, wrong reference count: %i ! :delay.n",
  738. atomic_read(&sk->refcnt));
  739. }
  740. sock_put(sk);
  741.               #else
  742. sk_free(sk);
  743.               #endif
  744. atomic_dec(&wanpipe_socks_nr);
  745. MOD_DEC_USE_COUNT;
  746. return;
  747. }
  748. sk->timer.expires=jiffies+5*HZ;
  749. add_timer(&sk->timer);
  750. printk(KERN_INFO "wansock: packet sk destroy delayedn");
  751. }
  752. /*============================================================
  753.  * wanpipe_unlink_driver
  754.  *
  755.  *  When the socket is released, this function is 
  756.  *      used to remove links that bind the sock and the
  757.  *      driver together.  
  758.  *===========================================================*/
  759. static void wanpipe_unlink_driver (struct sock *sk)
  760. {
  761. netdevice_t *dev;
  762. wanpipe_common_t *chan=NULL;
  763. sk->zapped=0;
  764. sk->state = WANSOCK_DISCONNECTED;
  765. sk->protinfo.af_wanpipe->dev = NULL;
  766. dev = dev_get_by_index(sk->bound_dev_if);
  767. if (!dev){
  768. printk(KERN_INFO "wansock: No dev on releasen");
  769. return;
  770. }
  771. dev_put(dev);
  772. if ((chan = dev->priv) == NULL){
  773. printk(KERN_INFO "wansock: No Priv Area on releasen");
  774. return;
  775. }
  776. set_bit(0,&chan->common_critical);
  777. chan->sk=NULL;
  778. chan->func=NULL;
  779. chan->mbox=NULL;
  780. chan->tx_timer=NULL;
  781. clear_bit(0,&chan->common_critical);
  782. release_device(dev);
  783. return;
  784. }
  785. /*============================================================
  786.  * wanpipe_link_driver
  787.  *
  788.  *  Upon successful bind(), sock is linked to a driver
  789.  *      by binding in the wanpipe_rcv() bottom half handler
  790.  *      to the driver function pointer, as well as sock and
  791.  *      sock mailbox addresses.  This way driver can pass
  792.  *      data up the socket.
  793.  *===========================================================*/
  794. static void wanpipe_link_driver (netdevice_t *dev, struct sock *sk)
  795. {
  796. wanpipe_common_t *chan = dev->priv;
  797. if (!chan)
  798. return;
  799. set_bit(0,&chan->common_critical);
  800. chan->sk=sk;
  801. chan->func=wanpipe_rcv;
  802. chan->mbox=sk->protinfo.af_wanpipe->mbox;
  803. chan->tx_timer = &sk->protinfo.af_wanpipe->tx_timer;
  804. sk->protinfo.af_wanpipe->dev=dev;
  805. sk->zapped = 1;
  806. clear_bit(0,&chan->common_critical);
  807. }
  808. /*============================================================
  809.  * release_device
  810.  *
  811.  *    During sock release, clear a critical bit, which 
  812.  *      marks the device a being taken.
  813.  *===========================================================*/
  814. static void release_device (netdevice_t *dev)
  815. {
  816. wanpipe_common_t *chan=dev->priv;
  817. clear_bit(0,(void*)&chan->rw_bind);
  818. }
  819. /*============================================================
  820.  * wanpipe_release
  821.  *
  822.  * Close a PACKET socket. This is fairly simple. We 
  823.  *      immediately go to 'closed' state and remove our 
  824.  *      protocol entry in the device list.
  825.  *===========================================================*/
  826. #ifdef LINUX_2_4
  827. static int wanpipe_release(struct socket *sock)
  828. #else
  829. static int wanpipe_release(struct socket *sock, struct socket *peersock)
  830. #endif
  831. {
  832. #ifndef LINUX_2_4
  833. struct sk_buff *skb;
  834. #endif
  835. struct sock *sk = sock->sk;
  836. struct sock **skp;
  837. if (!sk)
  838. return 0;
  839. check_write_queue(sk);
  840. /* Kill the tx timer, if we don't kill it now, the timer
  841.          * will run after we kill the sock.  Timer code will 
  842.          * try to access the sock which has been killed and cause
  843.          * kernel panic */
  844. del_timer(&sk->protinfo.af_wanpipe->tx_timer);
  845. /*
  846.  * Unhook packet receive handler.
  847.  */
  848. if (sk->num == htons(X25_PROT) && sk->state != WANSOCK_DISCONNECTED && sk->zapped){
  849. netdevice_t *dev = dev_get_by_index(sk->bound_dev_if);
  850. wanpipe_common_t *chan;
  851. if (dev){
  852. chan=dev->priv;
  853. atomic_set(&chan->disconnect,1);
  854. DBG_PRINTK(KERN_INFO "wansock: Sending Clear Indication %in",
  855. sk->state);
  856. dev_put(dev);
  857. }
  858. }
  859. set_bit(1,&wanpipe_tx_critical);
  860. write_lock(&wanpipe_sklist_lock);
  861. for (skp = &wanpipe_sklist; *skp; skp = &(*skp)->next) {
  862. if (*skp == sk) {
  863. *skp = sk->next;
  864. __sock_put(sk);
  865. break;
  866. }
  867. }
  868. write_unlock(&wanpipe_sklist_lock);
  869. clear_bit(1,&wanpipe_tx_critical);
  870. release_driver(sk);
  871. /*
  872.  * Now the socket is dead. No more input will appear.
  873.  */
  874. sk->state_change(sk); /* It is useless. Just for sanity. */
  875. sock->sk = NULL;
  876. sk->socket = NULL;
  877. sk->dead = 1;
  878. /* Purge queues */
  879. #ifdef LINUX_2_4
  880. skb_queue_purge(&sk->receive_queue);
  881. skb_queue_purge(&sk->write_queue);
  882. skb_queue_purge(&sk->error_queue);
  883. #else
  884. while ((skb=skb_dequeue(&sk->receive_queue))!=NULL){
  885. kfree_skb(skb);
  886. }
  887. while ((skb=skb_dequeue(&sk->error_queue))!=NULL){
  888. kfree_skb(skb);
  889. }
  890. while ((skb=skb_dequeue(&sk->write_queue))!=NULL){
  891. kfree_skb(skb);
  892. }
  893. #endif
  894. if (atomic_read(&sk->rmem_alloc) || atomic_read(&sk->wmem_alloc)) {
  895. del_timer(&sk->timer);
  896. printk(KERN_INFO "wansock: Killing in Timer R %i , W %in",
  897. atomic_read(&sk->rmem_alloc),atomic_read(&sk->wmem_alloc));
  898. sk->timer.data=(unsigned long)sk;
  899. sk->timer.expires=jiffies+HZ;
  900. sk->timer.function=wanpipe_destroy_timer;
  901. add_timer(&sk->timer);
  902. return 0;
  903. }
  904. if (sk->protinfo.af_wanpipe){
  905. kfree(sk->protinfo.af_wanpipe);
  906. sk->protinfo.af_wanpipe=NULL;
  907. }
  908.       #ifdef LINUX_2_4
  909. if (atomic_read(&sk->refcnt) != 1){
  910. DBG_PRINTK(KERN_INFO "wansock: Error, wrong reference count: %i !:release.n",
  911. atomic_read(&sk->refcnt));
  912. atomic_set(&sk->refcnt,1);
  913. }
  914. sock_put(sk);
  915.       #else
  916. sk_free(sk);
  917.       #endif
  918. atomic_dec(&wanpipe_socks_nr);
  919. MOD_DEC_USE_COUNT;
  920. return 0;
  921. }
  922. /*============================================================
  923.  * check_write_queue
  924.  *
  925.  *   During sock shutdown, if the sock state is 
  926.  *      WANSOCK_CONNECTED and there is transmit data 
  927.  *      pending. Wait until data is released 
  928.  *      before proceeding.
  929.  *===========================================================*/
  930. static void check_write_queue(struct sock *sk)
  931. {
  932. if (sk->state != WANSOCK_CONNECTED)
  933. return;
  934. if (!atomic_read(&sk->wmem_alloc))
  935. return;
  936. printk(KERN_INFO "wansock: MAJOR ERROR, Data lost on sock release !!!n");
  937. }
  938. /*============================================================
  939.  * release_driver
  940.  *
  941.  * This function is called during sock shutdown, to 
  942.  *      release any resources and links that bind the sock
  943.  *      to the driver.  It also changes the state of the
  944.  *      sock to WANSOCK_DISCONNECTED
  945.  *===========================================================*/
  946. static void release_driver(struct sock *sk)
  947. {
  948. struct sk_buff *skb=NULL;
  949. struct sock *deadsk=NULL;
  950. if (sk->state == WANSOCK_LISTEN || sk->state == WANSOCK_BIND_LISTEN){
  951. while ((skb=skb_dequeue(&sk->receive_queue))!=NULL){
  952. if ((deadsk = get_newsk_from_skb(skb))){
  953. DBG_PRINTK (KERN_INFO "wansock: RELEASE: FOUND DEAD SOCKn");
  954. deadsk->dead=1;
  955. start_cleanup_timer(deadsk);
  956. }
  957. kfree_skb(skb);
  958. }
  959. if (sk->zapped)
  960. wanpipe_unlink_card(sk);
  961. }else{
  962. if (sk->zapped)
  963. wanpipe_unlink_driver(sk);
  964. }
  965. sk->state = WANSOCK_DISCONNECTED;
  966. sk->bound_dev_if = 0;
  967. sk->zapped=0;
  968. if (sk->protinfo.af_wanpipe){
  969. if (sk->protinfo.af_wanpipe->mbox){
  970. kfree(sk->protinfo.af_wanpipe->mbox);
  971. sk->protinfo.af_wanpipe->mbox=NULL;
  972. }
  973. }
  974. }
  975. /*============================================================
  976.  *  start_cleanup_timer
  977.  *
  978.  *   If new incoming call's are pending but the socket
  979.  *      is being released, start the timer which will 
  980.  *      envoke the kill routines for pending socks.
  981.  *===========================================================*/
  982. static void start_cleanup_timer (struct sock *sk)
  983. {
  984. del_timer(&sk->timer);
  985. sk->timer.data = (unsigned long)sk;
  986. sk->timer.expires = jiffies + HZ;
  987. sk->timer.function = wanpipe_kill_sock_timer;
  988. add_timer(&sk->timer);
  989. }
  990. /*============================================================
  991.  *  wanpipe_kill_sock
  992.  *
  993.  * This is a function which performs actual killing
  994.  *      of the sock.  It releases socket resources,
  995.  *      and unlinks the sock from the driver. 
  996.  *===========================================================*/
  997. static void wanpipe_kill_sock_timer (unsigned long data)
  998. {
  999. struct sock *sk = (struct sock *)data;
  1000. #ifndef LINUX_2_4
  1001. struct sk_buff *skb;
  1002. #endif
  1003. struct sock **skp;
  1004. if (!sk)
  1005. return;
  1006. /* This functin can be called from interrupt. We must use
  1007.  * appropriate locks */
  1008. if (test_bit(1,&wanpipe_tx_critical)){
  1009. sk->timer.expires=jiffies+10;
  1010. add_timer(&sk->timer);
  1011. return;
  1012. }
  1013. write_lock(&wanpipe_sklist_lock);
  1014. for (skp = &wanpipe_sklist; *skp; skp = &(*skp)->next) {
  1015. if (*skp == sk) {
  1016. *skp = sk->next;
  1017. __sock_put(sk);
  1018. break;
  1019. }
  1020. }
  1021. write_unlock(&wanpipe_sklist_lock);
  1022. if (sk->num == htons(X25_PROT) && sk->state != WANSOCK_DISCONNECTED){
  1023. netdevice_t *dev = dev_get_by_index(sk->bound_dev_if);
  1024. wanpipe_common_t *chan;
  1025. if (dev){
  1026. chan=dev->priv;
  1027. atomic_set(&chan->disconnect,1);
  1028. dev_put(dev);
  1029. }
  1030. }
  1031. release_driver(sk);
  1032. sk->socket = NULL;
  1033. /* Purge queues */
  1034. #ifdef LINUX_2_4
  1035. skb_queue_purge(&sk->receive_queue);
  1036. skb_queue_purge(&sk->write_queue);
  1037. skb_queue_purge(&sk->error_queue);
  1038. #else
  1039. while ((skb=skb_dequeue(&sk->receive_queue)) != NULL){
  1040. kfree_skb(skb);
  1041. }
  1042. while ((skb=skb_dequeue(&sk->write_queue)) != NULL) {
  1043. kfree_skb(skb);
  1044. }
  1045. while ((skb=skb_dequeue(&sk->error_queue)) != NULL){
  1046. kfree_skb(skb);
  1047. }
  1048. #endif
  1049. if (atomic_read(&sk->rmem_alloc) || atomic_read(&sk->wmem_alloc)) {
  1050. del_timer(&sk->timer);
  1051. printk(KERN_INFO "wansock: Killing SOCK in Timern");
  1052. sk->timer.data=(unsigned long)sk;
  1053. sk->timer.expires=jiffies+HZ;
  1054. sk->timer.function=wanpipe_destroy_timer;
  1055. add_timer(&sk->timer);
  1056. return;
  1057. }
  1058. if (sk->protinfo.af_wanpipe){
  1059. kfree(sk->protinfo.af_wanpipe);
  1060. sk->protinfo.af_wanpipe=NULL;
  1061. }
  1062.       #ifdef LINUX_2_4
  1063. if (atomic_read(&sk->refcnt) != 1){
  1064. atomic_set(&sk->refcnt,1);
  1065. DBG_PRINTK(KERN_INFO "wansock: Error, wrong reference count: %i ! :timer.n",
  1066. atomic_read(&sk->refcnt));
  1067. }
  1068. sock_put(sk);
  1069.       #else
  1070. sk_free(sk);
  1071.       #endif
  1072. atomic_dec(&wanpipe_socks_nr);
  1073. MOD_DEC_USE_COUNT;
  1074. return;
  1075. }
  1076. static void wanpipe_kill_sock_accept (struct sock *sk)
  1077. {
  1078. struct sock **skp;
  1079. if (!sk)
  1080. return;
  1081. /* This functin can be called from interrupt. We must use
  1082.  * appropriate locks */
  1083. write_lock(&wanpipe_sklist_lock);
  1084. for (skp = &wanpipe_sklist; *skp; skp = &(*skp)->next) {
  1085. if (*skp == sk) {
  1086. *skp = sk->next;
  1087. __sock_put(sk);
  1088. break;
  1089. }
  1090. }
  1091. write_unlock(&wanpipe_sklist_lock);
  1092. sk->socket = NULL;
  1093. if (sk->protinfo.af_wanpipe){
  1094. kfree(sk->protinfo.af_wanpipe);
  1095. sk->protinfo.af_wanpipe=NULL;
  1096. }
  1097.       #ifdef LINUX_2_4
  1098. if (atomic_read(&sk->refcnt) != 1){
  1099. atomic_set(&sk->refcnt,1);
  1100. DBG_PRINTK(KERN_INFO "wansock: Error, wrong reference count: %i ! :timer.n",
  1101. atomic_read(&sk->refcnt));
  1102. }
  1103. sock_put(sk);
  1104.       #else
  1105. sk_free(sk);
  1106.       #endif
  1107. atomic_dec(&wanpipe_socks_nr);
  1108. MOD_DEC_USE_COUNT;
  1109. return;
  1110. }
  1111. static void wanpipe_kill_sock_irq (struct sock *sk)
  1112. {
  1113. if (!sk)
  1114. return;
  1115. sk->socket = NULL;
  1116. if (sk->protinfo.af_wanpipe){
  1117. kfree(sk->protinfo.af_wanpipe);
  1118. sk->protinfo.af_wanpipe=NULL;
  1119. }
  1120.       #ifdef LINUX_2_4
  1121. if (atomic_read(&sk->refcnt) != 1){
  1122. atomic_set(&sk->refcnt,1);
  1123. DBG_PRINTK(KERN_INFO "wansock: Error, wrong reference count: %i !:listen.n",
  1124. atomic_read(&sk->refcnt));
  1125. }
  1126. sock_put(sk);
  1127.       #else
  1128. sk_free(sk);
  1129.       #endif
  1130. atomic_dec(&wanpipe_socks_nr);
  1131. MOD_DEC_USE_COUNT;
  1132. return;
  1133. }
  1134. /*============================================================
  1135.  *  wanpipe_do_bind
  1136.  *
  1137.  *  Bottom half of the binding system call.
  1138.  *      Once the wanpipe_bind() function checks  the
  1139.  *      legality of the call, this function binds the
  1140.  *      sock to the driver.
  1141.  *===========================================================*/
  1142. static int wanpipe_do_bind(struct sock *sk, netdevice_t *dev, int protocol)
  1143. {
  1144. wanpipe_common_t *chan=NULL;
  1145. int err=0;
  1146. if (sk->zapped){
  1147. err = -EALREADY;
  1148. goto bind_unlock_exit;
  1149. }
  1150. sk->num = protocol;
  1151. if (protocol == 0){
  1152. release_device(dev);
  1153. err = -EINVAL;
  1154. goto bind_unlock_exit;
  1155. }
  1156. if (dev) {
  1157. if (dev->flags&IFF_UP) {
  1158. chan=dev->priv;
  1159. sk->state = chan->state;
  1160. if (sk->num == htons(X25_PROT) && 
  1161.     sk->state != WANSOCK_DISCONNECTED && 
  1162.     sk->state != WANSOCK_CONNECTING){
  1163. DBG_PRINTK(KERN_INFO 
  1164. "wansock: Binding to Device not DISCONNECTED %in",
  1165. sk->state);
  1166. release_device(dev);
  1167. err = -EAGAIN;
  1168. goto bind_unlock_exit;
  1169. }
  1170. wanpipe_link_driver(dev,sk);
  1171. sk->bound_dev_if = dev->ifindex;
  1172. /* X25 Specific option */
  1173. if (sk->num == htons(X25_PROT))
  1174. sk->protinfo.af_wanpipe->svc = chan->svc;
  1175. } else {
  1176. sk->err = ENETDOWN;
  1177. sk->error_report(sk);
  1178. release_device(dev);
  1179. err = -EINVAL;
  1180. }
  1181. } else {
  1182. err = -ENODEV;
  1183. }
  1184. bind_unlock_exit:
  1185. /* FIXME where is this lock */
  1186. return err;
  1187. }
  1188. /*============================================================
  1189.  *  wanpipe_bind
  1190.  *
  1191.  *      BIND() System call, which is bound to the AF_WANPIPE
  1192.  *      operations structure.  It checks for correct wanpipe
  1193.  *      card name, and cross references interface names with
  1194.  *      the card names.  Thus, interface name must belong to
  1195.  *      the actual card.
  1196.  *===========================================================*/
  1197. static int wanpipe_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
  1198. {
  1199. struct wan_sockaddr_ll *sll = (struct wan_sockaddr_ll*)uaddr;
  1200. struct sock *sk=sock->sk;
  1201. netdevice_t *dev = NULL;
  1202. sdla_t *card=NULL;
  1203. char name[15];
  1204. /*
  1205.  * Check legality
  1206.  */
  1207.  
  1208. if (addr_len < sizeof(struct wan_sockaddr_ll)){
  1209. printk(KERN_INFO "wansock: Address length errorn");
  1210. return -EINVAL;
  1211. }
  1212. if (sll->sll_family != AF_WANPIPE){
  1213. printk(KERN_INFO "wansock: Illegal family name specified.n");
  1214. return -EINVAL;
  1215. }
  1216. card = wanpipe_find_card (sll->sll_card);
  1217. if (!card){
  1218. printk(KERN_INFO "wansock: Wanpipe card not found: %sn",sll->sll_card);
  1219. return -ENODEV;
  1220. }else{
  1221. sk->protinfo.af_wanpipe->card = (void *)card;
  1222. }
  1223. if (!strcmp(sll->sll_device,"svc_listen")){
  1224. /* Bind a sock to a card structure for listening 
  1225.  */
  1226. int err=0; 
  1227. /* This is x25 specific area if protocol doesn't
  1228.                  * match, return error */
  1229. if (sll->sll_protocol != htons(X25_PROT))
  1230. return -EINVAL;
  1231. err= wanpipe_link_card (sk);
  1232. if (err < 0)
  1233. return err;
  1234. if (sll->sll_protocol)
  1235. sk->num = sll->sll_protocol;
  1236. sk->state = WANSOCK_BIND_LISTEN;
  1237. return 0;
  1238. }else if (!strcmp(sll->sll_device,"svc_connect")){ 
  1239. /* This is x25 specific area if protocol doesn't
  1240.                  * match, return error */
  1241. if (sll->sll_protocol != htons(X25_PROT))
  1242. return -EINVAL;
  1243. /* Find a free device 
  1244.  */
  1245. dev = wanpipe_find_free_dev(card);
  1246. if (dev == NULL){
  1247. DBG_PRINTK(KERN_INFO "wansock: No free network devices for card %sn",
  1248. card->devname);
  1249. return -EINVAL;
  1250. }
  1251. }else{
  1252. /* Bind a socket to a interface name 
  1253.                  * This is used by PVC mostly
  1254.                  */
  1255. strncpy(name,sll->sll_device,14);
  1256. name[14]=0;
  1257. #ifdef LINUX_2_4
  1258. dev = dev_get_by_name(name);
  1259. #else
  1260. dev = dev_get(name);
  1261. #endif
  1262. if (dev == NULL){
  1263. printk(KERN_INFO "wansock: Failed to get Dev from name: %s,n",
  1264. name);
  1265. return -ENODEV;
  1266. }
  1267. dev_put(dev);
  1268. if (check_dev(dev, card)){
  1269. printk(KERN_INFO "wansock: Device %s, doesn't belong to card %sn",
  1270. dev->name, card->devname);
  1271. return -EINVAL;
  1272. }
  1273. if (get_atomic_device (dev))
  1274. return -EINVAL;
  1275. }
  1276. return wanpipe_do_bind(sk, dev, sll->sll_protocol ? : sk->num);
  1277. }
  1278. /*============================================================
  1279.  * get_atomic_device
  1280.  *
  1281.  * Sets a bit atomically which indicates that 
  1282.  *      the interface is taken. This avoids race conditions.
  1283.  *===========================================================*/
  1284. static inline int get_atomic_device (netdevice_t *dev)
  1285. {
  1286. wanpipe_common_t *chan = dev->priv;
  1287. if (!test_and_set_bit(0,(void *)&chan->rw_bind)){
  1288. return 0;
  1289. }
  1290. return 1;
  1291. }
  1292. /*============================================================
  1293.  * check_dev
  1294.  *
  1295.  *   Check that device name belongs to a particular card.
  1296.  *===========================================================*/
  1297. static int check_dev (netdevice_t *dev, sdla_t *card)
  1298. {
  1299. netdevice_t* tmp_dev;
  1300. for (tmp_dev = card->wandev.dev; tmp_dev; tmp_dev=*((netdevice_t**)tmp_dev->priv)){
  1301. if (tmp_dev->ifindex == dev->ifindex){ 
  1302. return 0;
  1303. }
  1304. }
  1305. return 1;
  1306. }
  1307. /*============================================================
  1308.  *  wanpipe_find_free_dev
  1309.  *
  1310.  * Find a free network interface. If found set atomic
  1311.  *      bit indicating that the interface is taken.
  1312.  *      X25API Specific.
  1313.  *===========================================================*/
  1314. netdevice_t * wanpipe_find_free_dev (sdla_t *card)
  1315. {
  1316. netdevice_t* dev;
  1317. volatile wanpipe_common_t *chan;
  1318. if (test_and_set_bit(0,&find_free_critical)){
  1319. printk(KERN_INFO "CRITICAL in Find Freen");
  1320. }
  1321. for (dev = card->wandev.dev; dev; dev=*((netdevice_t**)dev->priv)){
  1322. chan = dev->priv;
  1323. if (!chan) 
  1324. continue;
  1325. if (chan->usedby == API && chan->svc){
  1326. if (!get_atomic_device (dev)){
  1327. if (chan->state != WANSOCK_DISCONNECTED){
  1328. release_device(dev);
  1329. }else{
  1330. clear_bit(0,&find_free_critical);
  1331. return dev;
  1332. }
  1333. }
  1334. }
  1335. }
  1336. clear_bit(0,&find_free_critical);
  1337. return NULL;
  1338. }
  1339. /*============================================================
  1340.  *  wanpipe_create
  1341.  *
  1342.  *  SOCKET() System call.  It allocates a sock structure
  1343.  *      and adds the socket to the wanpipe_sk_list. 
  1344.  *      Crates AF_WANPIPE socket.
  1345.  *===========================================================*/
  1346. static int wanpipe_create(struct socket *sock, int protocol)
  1347. {
  1348. struct sock *sk;
  1349. //FIXME: This checks for root user, SECURITY ?
  1350. //if (!capable(CAP_NET_RAW))
  1351. // return -EPERM;
  1352. if (sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
  1353. return -ESOCKTNOSUPPORT;
  1354. sock->state = SS_UNCONNECTED;
  1355. if ((sk = wanpipe_alloc_socket()) == NULL)
  1356. return -ENOBUFS;
  1357. sk->reuse = 1;
  1358. sock->ops = &wanpipe_ops;
  1359. sock_init_data(sock,sk);
  1360. sk->zapped=0;
  1361. sk->family = PF_WANPIPE;
  1362. sk->num = protocol;
  1363. sk->state = WANSOCK_DISCONNECTED;
  1364. sk->ack_backlog = 0;
  1365. sk->bound_dev_if=0;
  1366. atomic_inc(&wanpipe_socks_nr);
  1367. /* We must disable interrupts because the ISR
  1368.  * can also change the list */
  1369. set_bit(1,&wanpipe_tx_critical);
  1370. write_lock(&wanpipe_sklist_lock);
  1371. sk->next = wanpipe_sklist;
  1372. wanpipe_sklist = sk;
  1373. sock_hold(sk);
  1374. write_unlock(&wanpipe_sklist_lock);
  1375. clear_bit(1,&wanpipe_tx_critical);
  1376. return(0);
  1377. }
  1378. /*============================================================
  1379.  *  wanpipe_recvmsg
  1380.  *
  1381.  * Pull a packet from our receive queue and hand it 
  1382.  *      to the user. If necessary we block.
  1383.  *===========================================================*/
  1384. static int wanpipe_recvmsg(struct socket *sock, struct msghdr *msg, int len,
  1385.   int flags, struct scm_cookie *scm)
  1386. {
  1387. struct sock *sk = sock->sk;
  1388. struct sk_buff *skb;
  1389. int copied, err=-ENOBUFS;
  1390. /*
  1391.  * If the address length field is there to be filled in, we fill
  1392.  * it in now.
  1393.  */
  1394. msg->msg_namelen = sizeof(struct wan_sockaddr_ll);
  1395. /*
  1396.  * Call the generic datagram receiver. This handles all sorts
  1397.  * of horrible races and re-entrancy so we can forget about it
  1398.  * in the protocol layers.
  1399.  *
  1400.  * Now it will return ENETDOWN, if device have just gone down,
  1401.  * but then it will block.
  1402.  */
  1403. if (flags & MSG_OOB){
  1404. skb=skb_dequeue(&sk->error_queue);
  1405. }else{
  1406. skb=skb_recv_datagram(sk,flags,1,&err);
  1407. }
  1408. /*
  1409.  * An error occurred so return it. Because skb_recv_datagram() 
  1410.  * handles the blocking we don't see and worry about blocking
  1411.  * retries.
  1412.  */
  1413. if(skb==NULL)
  1414. goto out;
  1415. /*
  1416.  * You lose any data beyond the buffer you gave. If it worries a
  1417.  * user program they can ask the device for its MTU anyway.
  1418.  */
  1419. copied = skb->len;
  1420. if (copied > len)
  1421. {
  1422. copied=len;
  1423. msg->msg_flags|=MSG_TRUNC;
  1424. }
  1425. wanpipe_wakeup_driver(sk);
  1426. /* We can't use skb_copy_datagram here */
  1427. err = memcpy_toiovec(msg->msg_iov, skb->data, copied);
  1428. if (err)
  1429. goto out_free;
  1430. #ifdef LINUX_2_1
  1431. sk->stamp=skb->stamp;
  1432. #else
  1433. sock_recv_timestamp(msg, sk, skb);
  1434. #endif
  1435. if (msg->msg_name)
  1436. memcpy(msg->msg_name, skb->cb, msg->msg_namelen);
  1437. /*
  1438.  * Free or return the buffer as appropriate. Again this
  1439.  * hides all the races and re-entrancy issues from us.
  1440.  */
  1441. err = (flags&MSG_TRUNC) ? skb->len : copied;
  1442. out_free:
  1443. skb_free_datagram(sk, skb);
  1444. out:
  1445. return err;
  1446. }
  1447. /*============================================================
  1448.  *  wanpipe_wakeup_driver
  1449.  *
  1450.  *  If socket receive buffer is full and driver cannot
  1451.  *      pass data up the sock, it sets a packet_block flag.
  1452.  *      This function check that flag and if sock receive 
  1453.  *      queue has room it kicks the driver BH handler. 
  1454.  *
  1455.  *  This way, driver doesn't have to poll the sock 
  1456.  *      receive queue.
  1457.  *===========================================================*/
  1458. static void wanpipe_wakeup_driver(struct sock *sk)
  1459. {
  1460. netdevice_t *dev=NULL;
  1461. wanpipe_common_t *chan=NULL;
  1462. dev = dev_get_by_index(sk->bound_dev_if);
  1463. if (!dev)
  1464. return;
  1465. dev_put(dev);
  1466. if ((chan = dev->priv) == NULL)
  1467. return;
  1468. if (atomic_read(&chan->receive_block)){  
  1469. if (atomic_read(&sk->rmem_alloc) < ((unsigned)sk->rcvbuf*0.9) ){
  1470. printk(KERN_INFO "wansock: Queuing task for wanpipen");
  1471. atomic_set(&chan->receive_block,0);
  1472. wanpipe_queue_tq(&chan->wanpipe_task);
  1473. wanpipe_mark_bh();
  1474. }
  1475. }
  1476. }
  1477. /*============================================================
  1478.  *  wanpipe_getname
  1479.  *
  1480.  *  I don't know what to do with this yet. 
  1481.  *      User can use this function to get sock address
  1482.  *      information. Not very useful for Sangoma's purposes.
  1483.  *===========================================================*/
  1484. static int wanpipe_getname(struct socket *sock, struct sockaddr *uaddr,
  1485.   int *uaddr_len, int peer)
  1486. {
  1487. netdevice_t *dev;
  1488. struct sock *sk = sock->sk;
  1489. struct wan_sockaddr_ll *sll = (struct wan_sockaddr_ll*)uaddr;
  1490. sll->sll_family = AF_WANPIPE;
  1491. sll->sll_ifindex = sk->bound_dev_if;
  1492. sll->sll_protocol = sk->num;
  1493. dev = dev_get_by_index(sk->bound_dev_if);
  1494. if (dev) {
  1495. sll->sll_hatype = dev->type;
  1496. sll->sll_halen = dev->addr_len;
  1497. memcpy(sll->sll_addr, dev->dev_addr, dev->addr_len);
  1498. } else {
  1499. sll->sll_hatype = 0; /* Bad: we have no ARPHRD_UNSPEC */
  1500. sll->sll_halen = 0;
  1501. }
  1502. *uaddr_len = sizeof(*sll);
  1503. dev_put(dev);
  1504. return 0;
  1505. }
  1506. /*============================================================
  1507.  *  wanpipe_notifier
  1508.  *
  1509.  * If driver turns off network interface, this function
  1510.  *      will be envoked. Currently I treate it as a 
  1511.  *      call disconnect. More thought should go into this
  1512.  *      function.
  1513.  *
  1514.  * FIXME: More thought should go into this function.
  1515.  *
  1516.  *===========================================================*/
  1517. static int wanpipe_notifier(struct notifier_block *this, unsigned long msg, void *data)
  1518. {
  1519. struct sock *sk;
  1520. netdevice_t *dev = (netdevice_t*)data;
  1521. struct wanpipe_opt *po;
  1522. for (sk = wanpipe_sklist; sk; sk = sk->next) {
  1523. if ((po = sk->protinfo.af_wanpipe)==NULL)
  1524. continue;
  1525. if (dev == NULL)
  1526. continue;
  1527. switch (msg) {
  1528. case NETDEV_DOWN:
  1529. case NETDEV_UNREGISTER:
  1530. if (dev->ifindex == sk->bound_dev_if) {
  1531. printk(KERN_INFO "wansock: Device down %sn",dev->name);
  1532. if (sk->zapped){
  1533. wanpipe_unlink_driver(sk);
  1534. sk->err = ENETDOWN;
  1535. sk->error_report(sk);
  1536. }
  1537. if (msg == NETDEV_UNREGISTER) {
  1538. printk(KERN_INFO "wansock: Unregistering Device: %sn",
  1539.     dev->name);
  1540. wanpipe_unlink_driver(sk);
  1541. sk->bound_dev_if = 0;
  1542. }
  1543. }
  1544. break;
  1545. case NETDEV_UP:
  1546. if (dev->ifindex == sk->bound_dev_if && sk->num && !sk->zapped) {
  1547. printk(KERN_INFO "wansock: Registering Device: %sn",
  1548. dev->name);
  1549. wanpipe_link_driver(dev,sk);
  1550. }
  1551. break;
  1552. }
  1553. }
  1554. return NOTIFY_DONE;
  1555. }
  1556. /*============================================================
  1557.  *  wanpipe_ioctl
  1558.  *
  1559.  *  Execute a user commands, and set socket options.
  1560.  *
  1561.  * FIXME: More thought should go into this function.
  1562.  *
  1563.  *===========================================================*/
  1564. static int wanpipe_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
  1565. {
  1566. struct sock *sk = sock->sk;
  1567. int err;
  1568. int pid;
  1569. switch(cmd) 
  1570. {
  1571. case FIOSETOWN:
  1572. case SIOCSPGRP:
  1573. err = get_user(pid, (int *) arg);
  1574. if (err)
  1575. return err; 
  1576. if (current->pid != pid && current->pgrp != -pid && 
  1577.     !capable(CAP_NET_ADMIN))
  1578. return -EPERM;
  1579. sk->proc = pid;
  1580. return(0);
  1581. case FIOGETOWN:
  1582. case SIOCGPGRP:
  1583. return put_user(sk->proc, (int *)arg);
  1584. case SIOCGSTAMP:
  1585. if(sk->stamp.tv_sec==0)
  1586. return -ENOENT;
  1587. err = -EFAULT;
  1588. if (!copy_to_user((void *)arg, &sk->stamp, sizeof(struct timeval)))
  1589. err = 0;
  1590. return err;
  1591. case SIOC_WANPIPE_CHECK_TX:
  1592. return atomic_read(&sk->wmem_alloc);
  1593. case SIOC_WANPIPE_SOCK_STATE:
  1594. if (sk->state == WANSOCK_CONNECTED)
  1595. return 0;
  1596. return 1;
  1597. case SIOC_WANPIPE_GET_CALL_DATA:
  1598. return get_ioctl_cmd (sk,(void*)arg);
  1599. case SIOC_WANPIPE_SET_CALL_DATA:
  1600. return set_ioctl_cmd (sk,(void*)arg);
  1601. case SIOC_WANPIPE_ACCEPT_CALL:
  1602. case SIOC_WANPIPE_CLEAR_CALL:
  1603. case SIOC_WANPIPE_RESET_CALL:
  1604. if ((err=set_ioctl_cmd(sk,(void*)arg)) < 0)
  1605. return err;
  1606. err=wanpipe_exec_cmd(sk,cmd,0);
  1607. get_ioctl_cmd(sk,(void*)arg);
  1608. return err;
  1609. case SIOC_WANPIPE_DEBUG:
  1610. return wanpipe_debug(sk,(void*)arg);
  1611. case SIOC_WANPIPE_SET_NONBLOCK:
  1612. if (sk->state != WANSOCK_DISCONNECTED)
  1613. return -EINVAL;
  1614. sock->file->f_flags |= O_NONBLOCK;
  1615. return 0;
  1616. case SIOCGIFFLAGS:
  1617. #ifndef CONFIG_INET
  1618. case SIOCSIFFLAGS:
  1619. #endif
  1620. case SIOCGIFCONF:
  1621. case SIOCGIFMETRIC:
  1622. case SIOCSIFMETRIC:
  1623. case SIOCGIFMEM:
  1624. case SIOCSIFMEM:
  1625. case SIOCGIFMTU:
  1626. case SIOCSIFMTU:
  1627. case SIOCSIFLINK:
  1628. case SIOCGIFHWADDR:
  1629. case SIOCSIFHWADDR:
  1630. case SIOCSIFMAP:
  1631. case SIOCGIFMAP:
  1632. case SIOCSIFSLAVE:
  1633. case SIOCGIFSLAVE:
  1634. case SIOCGIFINDEX:
  1635. case SIOCGIFNAME:
  1636. case SIOCGIFCOUNT:
  1637. case SIOCSIFHWBROADCAST:
  1638. return(dev_ioctl(cmd,(void *) arg));
  1639. #ifdef CONFIG_INET
  1640. case SIOCADDRT:
  1641. case SIOCDELRT:
  1642. case SIOCDARP:
  1643. case SIOCGARP:
  1644. case SIOCSARP:
  1645. case SIOCDRARP:
  1646. case SIOCGRARP:
  1647. case SIOCSRARP:
  1648. case SIOCGIFADDR:
  1649. case SIOCSIFADDR:
  1650. case SIOCGIFBRDADDR:
  1651. case SIOCSIFBRDADDR:
  1652. case SIOCGIFNETMASK:
  1653. case SIOCSIFNETMASK:
  1654. case SIOCGIFDSTADDR:
  1655. case SIOCSIFDSTADDR:
  1656. case SIOCSIFFLAGS:
  1657. case SIOCADDDLCI:
  1658. case SIOCDELDLCI:
  1659. return inet_dgram_ops.ioctl(sock, cmd, arg);
  1660. #endif
  1661. default:
  1662. if ((cmd >= SIOCDEVPRIVATE) &&
  1663.     (cmd <= (SIOCDEVPRIVATE + 15)))
  1664. return(dev_ioctl(cmd,(void *) arg));
  1665. #ifdef CONFIG_NET_RADIO
  1666. if((cmd >= SIOCIWFIRST) && (cmd <= SIOCIWLAST))
  1667. return(dev_ioctl(cmd,(void *) arg));
  1668. #endif
  1669. return -EOPNOTSUPP;
  1670. }
  1671. /*NOTREACHED*/
  1672. }
  1673. /*============================================================
  1674.  *  wanpipe_debug
  1675.  *
  1676.  * This function will pass up information about all
  1677.  *      active sockets.
  1678.  *
  1679.  * FIXME: More thought should go into this function.
  1680.  *
  1681.  *===========================================================*/
  1682. static int wanpipe_debug (struct sock *origsk, void *arg)
  1683. {
  1684. struct sock *sk=NULL;
  1685. netdevice_t *dev=NULL;
  1686. wanpipe_common_t *chan=NULL;
  1687. int cnt=0, err=0;
  1688. wan_debug_t *dbg_data = (wan_debug_t *)arg;
  1689. for (sk = wanpipe_sklist; sk; sk = sk->next){
  1690. if (sk == origsk){
  1691. continue;
  1692. }
  1693. if ((err=put_user(1, &dbg_data->debug[cnt].free)))
  1694. return err;
  1695. if ((err=put_user(sk->state, &dbg_data->debug[cnt].sk_state)))
  1696. return err;
  1697. if ((err=put_user(sk->rcvbuf, &dbg_data->debug[cnt].rcvbuf)))
  1698. return err;
  1699. if ((err=put_user(atomic_read(&sk->rmem_alloc), &dbg_data->debug[cnt].rmem)))
  1700. return err;
  1701. if ((err=put_user(atomic_read(&sk->wmem_alloc), &dbg_data->debug[cnt].wmem)))
  1702. return err;
  1703. if ((err=put_user(sk->sndbuf, &dbg_data->debug[cnt].sndbuf)))
  1704. return err;
  1705. if ((err=put_user(sk_count, &dbg_data->debug[cnt].sk_count)))
  1706. return err;
  1707. if ((err=put_user(sk->protinfo.af_wanpipe->poll_cnt, 
  1708. &dbg_data->debug[cnt].poll_cnt)))
  1709. return err;
  1710. if ((err=put_user(sk->bound_dev_if, &dbg_data->debug[cnt].bound)))
  1711. return err;
  1712. if (sk->bound_dev_if){
  1713. dev = dev_get_by_index(sk->bound_dev_if);
  1714. if (!dev)
  1715. continue;
  1716. chan=dev->priv;
  1717. dev_put(dev);
  1718. if ((err=put_user(chan->state, &dbg_data->debug[cnt].d_state)))
  1719. return err;
  1720. if ((err=put_user(chan->svc, &dbg_data->debug[cnt].svc)))
  1721. return err;
  1722. if ((err=put_user(atomic_read(&chan->command), 
  1723. &dbg_data->debug[cnt].command)))
  1724. return err;
  1725. if (sk->protinfo.af_wanpipe){
  1726. sdla_t *card = (sdla_t*)sk->protinfo.af_wanpipe->card;
  1727. if (card){
  1728. if ((err=put_user(atomic_read(&card->u.x.command_busy), 
  1729. &dbg_data->debug[cnt].cmd_busy)))
  1730. return err;
  1731. }
  1732. if ((err=put_user(sk->protinfo.af_wanpipe->lcn, 
  1733. &dbg_data->debug[cnt].lcn)))
  1734. return err;
  1735. if (sk->protinfo.af_wanpipe->mbox){
  1736. if ((err=put_user(1, &dbg_data->debug[cnt].mbox)))
  1737. return err;
  1738. }
  1739. }
  1740. if ((err=put_user(atomic_read(&chan->receive_block), 
  1741. &dbg_data->debug[cnt].rblock)))
  1742. return err;
  1743. if (copy_to_user(dbg_data->debug[cnt].name, dev->name, strlen(dev->name)))
  1744. return -EFAULT;
  1745. }
  1746. if (++cnt == MAX_NUM_DEBUG)
  1747. break;
  1748. }
  1749. return 0;
  1750. }
  1751. /*============================================================
  1752.  *  get_ioctl_cmd
  1753.  *
  1754.  * Pass up the contents of socket MBOX to the user.
  1755.  *===========================================================*/
  1756. static int get_ioctl_cmd (struct sock *sk, void *arg)
  1757. {
  1758. x25api_t *usr_data = (x25api_t *)arg;
  1759. mbox_cmd_t *mbox_ptr;
  1760. int err;
  1761. if (usr_data == NULL)
  1762. return -EINVAL;
  1763. if (!sk->protinfo.af_wanpipe->mbox){
  1764. return -EINVAL;
  1765. }
  1766. mbox_ptr = (mbox_cmd_t *)sk->protinfo.af_wanpipe->mbox;
  1767. if ((err=put_user(mbox_ptr->cmd.qdm, &usr_data->hdr.qdm)))
  1768. return err;
  1769. if ((err=put_user(mbox_ptr->cmd.cause, &usr_data->hdr.cause)))
  1770. return err;
  1771. if ((err=put_user(mbox_ptr->cmd.diagn, &usr_data->hdr.diagn)))
  1772. return err;
  1773. if ((err=put_user(mbox_ptr->cmd.length, &usr_data->hdr.length)))
  1774. return err;
  1775. if ((err=put_user(mbox_ptr->cmd.result, &usr_data->hdr.result)))
  1776. return err;
  1777. if ((err=put_user(mbox_ptr->cmd.lcn, &usr_data->hdr.lcn)))
  1778. return err;
  1779. if (mbox_ptr->cmd.length > 0){
  1780. if (mbox_ptr->cmd.length > X25_MAX_DATA)
  1781. return -EINVAL;
  1782. if (copy_to_user(usr_data->data, mbox_ptr->data, mbox_ptr->cmd.length)){
  1783. printk(KERN_INFO "wansock: Copy failed !!!n");
  1784. return -EFAULT;
  1785. }
  1786. }
  1787. return 0;
  1788. /*============================================================
  1789.  *  set_ioctl_cmd
  1790.  *
  1791.  * Before command can be execute, socket MBOX must
  1792.  *      be created, and initialized with user data.
  1793.  *===========================================================*/
  1794. static int set_ioctl_cmd (struct sock *sk, void *arg)
  1795. {
  1796. x25api_t *usr_data = (x25api_t *)arg;
  1797. mbox_cmd_t *mbox_ptr;
  1798. int err;
  1799. if (!sk->protinfo.af_wanpipe->mbox){
  1800. void *mbox_ptr;
  1801. netdevice_t *dev = dev_get_by_index(sk->bound_dev_if);
  1802. if (!dev)
  1803. return -ENODEV;
  1804. dev_put(dev);
  1805. if ((mbox_ptr = kmalloc(sizeof(mbox_cmd_t), GFP_ATOMIC)) == NULL)
  1806. return -ENOMEM;
  1807. memset(mbox_ptr, 0, sizeof(mbox_cmd_t));
  1808. sk->protinfo.af_wanpipe->mbox = mbox_ptr;
  1809. wanpipe_link_driver(dev,sk);
  1810. }
  1811. mbox_ptr = (mbox_cmd_t*)sk->protinfo.af_wanpipe->mbox;
  1812. memset(mbox_ptr, 0, sizeof(mbox_cmd_t));
  1813. if (usr_data == NULL){
  1814. return 0;
  1815. }
  1816. if ((err=get_user(mbox_ptr->cmd.qdm, &usr_data->hdr.qdm)))
  1817. return err;
  1818. if ((err=get_user(mbox_ptr->cmd.cause, &usr_data->hdr.cause)))
  1819. return err;
  1820. if ((err=get_user(mbox_ptr->cmd.diagn, &usr_data->hdr.diagn)))
  1821. return err;
  1822. if ((err=get_user(mbox_ptr->cmd.length, &usr_data->hdr.length)))
  1823. return err;
  1824. if ((err=get_user(mbox_ptr->cmd.result, &usr_data->hdr.result)))
  1825. return err;
  1826. if (mbox_ptr->cmd.length > 0){
  1827. if (mbox_ptr->cmd.length > X25_MAX_DATA)
  1828. return -EINVAL;
  1829. if (copy_from_user(mbox_ptr->data, usr_data->data, mbox_ptr->cmd.length)){
  1830. printk(KERN_INFO "Copy failedn");
  1831. return -EFAULT;
  1832. }
  1833. }
  1834. return 0;
  1835. }
  1836. /*======================================================================
  1837.  * wanpipe_poll
  1838.  *
  1839.  * Datagram poll: Again totally generic. This also handles
  1840.  * sequenced packet sockets providing the socket receive queue
  1841.  * is only ever holding data ready to receive.
  1842.  *
  1843.  * Note: when you _don't_ use this routine for this protocol,
  1844.  * and you use a different write policy from sock_writeable()
  1845.  * then please supply your own write_space callback.
  1846.  *=====================================================================*/
  1847. unsigned int wanpipe_poll(struct file * file, struct socket *sock, poll_table *wait)
  1848. {
  1849. struct sock *sk = sock->sk;
  1850. unsigned int mask;
  1851. ++sk->protinfo.af_wanpipe->poll_cnt;
  1852. poll_wait(file, sk->sleep, wait);
  1853. mask = 0;
  1854. /* exceptional events? */
  1855. if (sk->err || !skb_queue_empty(&sk->error_queue)){
  1856. mask |= POLLPRI;
  1857. return mask;
  1858. }
  1859. if (sk->shutdown & RCV_SHUTDOWN)
  1860. mask |= POLLHUP;
  1861. /* readable? */
  1862. if (!skb_queue_empty(&sk->receive_queue)){
  1863. mask |= POLLIN | POLLRDNORM;
  1864. }
  1865. /* connection hasn't started yet */
  1866. if (sk->state == WANSOCK_CONNECTING){
  1867. return mask;
  1868. }
  1869. if (sk->state == WANSOCK_DISCONNECTED){
  1870. mask = POLLPRI;
  1871. return mask;
  1872. }
  1873. /* This check blocks the user process if there is   
  1874.  * a packet already queued in the socket write queue.
  1875.          * This option is only for X25API protocol, for other
  1876.          * protocol like chdlc enable streaming mode, 
  1877.          * where multiple packets can be pending in the socket 
  1878.          * transmit queue */
  1879. if (sk->num == htons(X25_PROT)){
  1880. if (atomic_read(&sk->protinfo.af_wanpipe->packet_sent))
  1881. return mask;
  1882. }
  1883. /* writable? */
  1884. if (sock_writeable(sk)){
  1885. mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
  1886. }else{
  1887.       #ifdef LINUX_2_4
  1888. set_bit(SOCK_ASYNC_NOSPACE, &sk->socket->flags);
  1889.       #else
  1890.   sk->socket->flags |= SO_NOSPACE;
  1891.       #endif
  1892. }
  1893. return mask;
  1894. }
  1895. /*======================================================================
  1896.  * wanpipe_listen
  1897.  *
  1898.  * X25API Specific function. Set a socket into LISTENING  MODE.
  1899.  *=====================================================================*/
  1900. static int wanpipe_listen(struct socket *sock, int backlog)
  1901. {
  1902. struct sock *sk = sock->sk;
  1903.   /* This is x25 specific area if protocol doesn't
  1904.          * match, return error */
  1905. if (sk->num != htons(X25_PROT))
  1906. return -EINVAL;
  1907. if (sk->state == WANSOCK_BIND_LISTEN) {
  1908. sk->max_ack_backlog = backlog;
  1909. sk->state           = WANSOCK_LISTEN;
  1910. return 0;
  1911. }else{
  1912. printk(KERN_INFO "wansock: Listening sock was not bindedn");
  1913. }
  1914. return -EINVAL;
  1915. }
  1916. /*======================================================================
  1917.  * wanpipe_link_card
  1918.  *
  1919.  * Connects the listening socket to the driver
  1920.  *=====================================================================*/
  1921. static int wanpipe_link_card (struct sock *sk)
  1922. {
  1923. sdla_t *card;
  1924. card = (sdla_t*)sk->protinfo.af_wanpipe->card;
  1925. if (!card)
  1926. return -ENOMEM;
  1927. if ((card->sk != NULL) || (card->func != NULL)){
  1928. printk(KERN_INFO "wansock: Listening queue is already establishedn");
  1929. return -EINVAL;
  1930. }
  1931. card->sk=sk;
  1932. card->func=wanpipe_listen_rcv;
  1933. sk->zapped=1;
  1934.  
  1935. return 0;
  1936. }
  1937. /*======================================================================
  1938.  * wanpipe_listen
  1939.  *
  1940.  * X25API Specific function. Disconnect listening socket from
  1941.  *      the driver.
  1942.  *=====================================================================*/
  1943. static void wanpipe_unlink_card (struct sock *sk)
  1944. {
  1945. sdla_t *card; 
  1946. card = (sdla_t*)sk->protinfo.af_wanpipe->card; 
  1947. if (card){
  1948. card->sk=NULL;
  1949. card->func=NULL;
  1950. }
  1951. }
  1952. /*======================================================================
  1953.  * wanpipe_exec_cmd
  1954.  *
  1955.  * Ioctl function calls this function to execute user command.
  1956.  *      Connect() sytem call also calls this function to execute
  1957.  *      place call.  This function blocks until command is executed.
  1958.  *=====================================================================*/
  1959. static int wanpipe_exec_cmd(struct sock *sk, int cmd, unsigned int flags)
  1960. {
  1961. int err = -EINVAL;
  1962. mbox_cmd_t *mbox_ptr = (mbox_cmd_t*)sk->protinfo.af_wanpipe->mbox;
  1963. if (!mbox_ptr){
  1964. printk(KERN_INFO "NO MBOX PTR !!!!!n");
  1965. return -EINVAL;
  1966. }
  1967. /* This is x25 specific area if protocol doesn't
  1968.          * match, return error */
  1969. if (sk->num != htons(X25_PROT))
  1970. return -EINVAL;
  1971. switch (cmd){
  1972. case SIOC_WANPIPE_ACCEPT_CALL:
  1973. if (sk->state != WANSOCK_CONNECTING){
  1974. err = -EHOSTDOWN;
  1975. break;
  1976. }
  1977. err = execute_command(sk,X25_ACCEPT_CALL,0);
  1978. if (err < 0)
  1979. break;
  1980. /* Update. Mar6 2000. 
  1981.                          * Do not set the sock lcn number here, since
  1982.                          * it is done in wanpipe_listen_rcv(). 
  1983.                          */ 
  1984.   if (sk->state == WANSOCK_CONNECTED){
  1985. sk->protinfo.af_wanpipe->lcn =
  1986. ((mbox_cmd_t*)sk->protinfo.af_wanpipe->mbox)->cmd.lcn;
  1987. DBG_PRINTK(KERN_INFO "nwansock: Accept OK %in",
  1988. sk->protinfo.af_wanpipe->lcn );
  1989. err = 0;
  1990. }else{
  1991. DBG_PRINTK (KERN_INFO "nwansock: Accept Failed %in",
  1992. sk->protinfo.af_wanpipe->lcn);
  1993. sk->protinfo.af_wanpipe->lcn = 0;
  1994. err = -ECONNREFUSED;
  1995. }
  1996. break;
  1997. case SIOC_WANPIPE_CLEAR_CALL:
  1998. if (sk->state == WANSOCK_DISCONNECTED){
  1999. err = -EINVAL;
  2000. break;
  2001. }
  2002. /* Check if data buffers are pending for transmission,
  2003.                          * if so, check wheter user wants to wait untill data
  2004.                          * is transmitted, or clear a call and drop packets */
  2005.                           
  2006. if (atomic_read(&sk->wmem_alloc) || check_driver_busy(sk)){
  2007.    mbox_cmd_t *mbox = sk->protinfo.af_wanpipe->mbox;
  2008. if (mbox->cmd.qdm & 0x80){
  2009. mbox->cmd.result = 0x35;
  2010. err = -EAGAIN;
  2011. break;
  2012. }
  2013. }
  2014. sk->state = WANSOCK_DISCONNECTING;
  2015. err = execute_command(sk,X25_CLEAR_CALL,0);
  2016. if (err < 0)
  2017. break;
  2018. err = -ECONNREFUSED;
  2019. if (sk->state == WANSOCK_DISCONNECTED){
  2020. DBG_PRINTK(KERN_INFO "nwansock: CLEAR OK %in",
  2021. sk->protinfo.af_wanpipe->lcn);
  2022. sk->protinfo.af_wanpipe->lcn=0;
  2023. err = 0;
  2024. }
  2025. break;
  2026. case SIOC_WANPIPE_RESET_CALL:
  2027. if (sk->state != WANSOCK_CONNECTED){
  2028. err = -EINVAL;
  2029. break;
  2030. }
  2031. /* Check if data buffers are pending for transmission,
  2032.                          * if so, check wheter user wants to wait untill data
  2033.                          * is transmitted, or reset a call and drop packets */
  2034.                           
  2035. if (atomic_read(&sk->wmem_alloc) || check_driver_busy(sk)){
  2036.    mbox_cmd_t *mbox = sk->protinfo.af_wanpipe->mbox;
  2037. if (mbox->cmd.qdm & 0x80){
  2038. mbox->cmd.result = 0x35;
  2039. err = -EAGAIN;
  2040. break;
  2041. }
  2042. }
  2043. err = execute_command(sk, X25_RESET,0);
  2044. if (err < 0)
  2045. break;
  2046. err = mbox_ptr->cmd.result;
  2047. break;
  2048. case X25_PLACE_CALL:
  2049. err=execute_command(sk,X25_PLACE_CALL,flags);
  2050. if (err < 0)
  2051. break;
  2052. if (sk->state == WANSOCK_CONNECTED){
  2053. sk->protinfo.af_wanpipe->lcn =
  2054. ((mbox_cmd_t*)sk->protinfo.af_wanpipe->mbox)->cmd.lcn;
  2055. DBG_PRINTK(KERN_INFO "nwansock: PLACE CALL OK %in",
  2056. sk->protinfo.af_wanpipe->lcn);
  2057. err = 0;
  2058. }else if (sk->state == WANSOCK_CONNECTING && (flags & O_NONBLOCK)){
  2059. sk->protinfo.af_wanpipe->lcn = 
  2060. ((mbox_cmd_t*)sk->protinfo.af_wanpipe->mbox)->cmd.lcn;
  2061. DBG_PRINTK(KERN_INFO "nwansock: Place Call OK: Waiting %in",
  2062. sk->protinfo.af_wanpipe->lcn);
  2063. err = 0;
  2064. }else{
  2065. DBG_PRINTK(KERN_INFO "nwansock: Place call Failedn");
  2066. err = -ECONNREFUSED;
  2067. }
  2068. break;
  2069. default: 
  2070. return -EINVAL;
  2071. }
  2072. return err;
  2073. }
  2074. static int check_driver_busy (struct sock *sk)
  2075. {
  2076. netdevice_t *dev = dev_get_by_index(sk->bound_dev_if);
  2077. wanpipe_common_t *chan;
  2078. if (!dev)
  2079. return 0;
  2080. dev_put(dev);
  2081. if ((chan=dev->priv) == NULL)
  2082. return 0;
  2083. return atomic_read(&chan->driver_busy);
  2084. }
  2085. /*======================================================================
  2086.  * wanpipe_accept
  2087.  *
  2088.  * ACCEPT() System call. X25API Specific function. 
  2089.  * For each incoming call, create a new socket and 
  2090.  *      return it to the user.
  2091.  *=====================================================================*/
  2092. static int wanpipe_accept(struct socket *sock, struct socket *newsock, int flags)
  2093. {
  2094. struct sock *sk;
  2095. struct sock *newsk;
  2096. struct sk_buff *skb;
  2097. DECLARE_WAITQUEUE(wait, current);
  2098. int err=0;
  2099. if (newsock->sk != NULL){
  2100. wanpipe_kill_sock_accept(newsock->sk);
  2101. newsock->sk=NULL;
  2102. }
  2103. if ((sk = sock->sk) == NULL)
  2104. return -EINVAL;
  2105. if (sk->type != SOCK_RAW)
  2106. return -EOPNOTSUPP;
  2107. if (sk->state != WANSOCK_LISTEN)
  2108. return -EINVAL;
  2109. if (sk->num != htons(X25_PROT))
  2110. return -EINVAL;
  2111. add_wait_queue(sk->sleep,&wait);
  2112. current->state = TASK_INTERRUPTIBLE;
  2113. for (;;){
  2114. skb = skb_dequeue(&sk->receive_queue);
  2115. if (skb){
  2116. err=0;
  2117. break;
  2118. }
  2119. if (signal_pending(current)) {
  2120. err = -ERESTARTSYS;
  2121. break;
  2122. }
  2123. schedule();
  2124. }
  2125. current->state = TASK_RUNNING;
  2126. remove_wait_queue(sk->sleep,&wait);
  2127. if (err != 0)
  2128. return err;
  2129. newsk = get_newsk_from_skb(skb);
  2130. if (!newsk){
  2131. return -EINVAL;
  2132. }
  2133. set_bit(1,&wanpipe_tx_critical);
  2134. write_lock(&wanpipe_sklist_lock);
  2135. newsk->next = wanpipe_sklist;
  2136. wanpipe_sklist = newsk;
  2137. sock_hold(sk);
  2138. write_unlock(&wanpipe_sklist_lock);
  2139. clear_bit(1,&wanpipe_tx_critical);
  2140. newsk->pair = NULL;
  2141. newsk->socket = newsock;
  2142. newsk->sleep = &newsock->wait;
  2143. /* Now attach up the new socket */
  2144. sk->ack_backlog--;
  2145. newsock->sk = newsk;
  2146. kfree_skb(skb);
  2147. DBG_PRINTK(KERN_INFO "nwansock: ACCEPT Got LCN %in",newsk->protinfo.af_wanpipe->lcn);
  2148. return 0;
  2149. }
  2150. /*======================================================================
  2151.  *  get_newsk_from_skb
  2152.  *
  2153.  * Accept() uses this function to get the address of the new
  2154.  *      socket structure.
  2155.  *=====================================================================*/
  2156. struct sock * get_newsk_from_skb (struct sk_buff *skb)
  2157. {
  2158. netdevice_t *dev = skb->dev;
  2159. wanpipe_common_t *chan;
  2160. if (!dev){
  2161. return NULL;
  2162. }
  2163. if ((chan = dev->priv) == NULL){
  2164. return NULL;
  2165. }
  2166. if (!chan->sk){
  2167. return NULL;
  2168. }
  2169. return (struct sock *)chan->sk;
  2170. }
  2171. /*======================================================================
  2172.  *  wanpipe_connect
  2173.  *
  2174.  *   CONNECT() System Call. X25API specific function
  2175.  *  Check the state of the sock, and execute PLACE_CALL command.
  2176.  *      Connect can ether block or return without waiting for connection, 
  2177.  *      if specified by user.
  2178.  *=====================================================================*/
  2179. static int wanpipe_connect(struct socket *sock, struct sockaddr *uaddr, int addr_len, int flags)
  2180. {
  2181. struct sock *sk = sock->sk;
  2182. struct wan_sockaddr_ll *addr = (struct wan_sockaddr_ll*)uaddr;
  2183. netdevice_t *dev;
  2184. int err;
  2185. if (sk->num != htons(X25_PROT))
  2186. return -EINVAL;
  2187. if (sk->state == WANSOCK_CONNECTED)
  2188. return -EISCONN; /* No reconnect on a seqpacket socket */
  2189. if (sk->state != WAN_DISCONNECTED){
  2190. printk(KERN_INFO "wansock: Trying to connect on channel NON DISCONNECTn");
  2191. return -ECONNREFUSED;
  2192. }
  2193. sk->state   = WANSOCK_DISCONNECTED;
  2194. sock->state = SS_UNCONNECTED;
  2195. if (addr_len != sizeof(struct wan_sockaddr_ll))
  2196. return -EINVAL;
  2197. if (addr->sll_family != AF_WANPIPE)
  2198. return -EINVAL;
  2199. if ((dev = dev_get_by_index(sk->bound_dev_if)) == NULL)
  2200. return -ENETUNREACH;
  2201. dev_put(dev);
  2202. if (!sk->zapped) /* Must bind first - autobinding does not work */
  2203. return -EINVAL;
  2204. sock->state   = SS_CONNECTING;
  2205. sk->state     = WANSOCK_CONNECTING;
  2206. if (!sk->protinfo.af_wanpipe->mbox){
  2207. if (sk->protinfo.af_wanpipe->svc){
  2208. return -EINVAL;
  2209. }else{
  2210. int err;
  2211. if ((err=set_ioctl_cmd(sk,NULL)) < 0)
  2212. return err;
  2213. }
  2214. }
  2215. if ((err=wanpipe_exec_cmd(sk, X25_PLACE_CALL,flags)) != 0){
  2216. sock->state = SS_UNCONNECTED;
  2217. sk->state = WANSOCK_CONNECTED;
  2218. return err;
  2219. }
  2220. if (sk->state != WANSOCK_CONNECTED && (flags & O_NONBLOCK)){
  2221. return 0;
  2222. }
  2223. if (sk->state != WANSOCK_CONNECTED) {
  2224. sock->state = SS_UNCONNECTED;
  2225. return -ECONNREFUSED; 
  2226. }
  2227. sock->state = SS_CONNECTED;
  2228. return 0;
  2229. }
  2230. #ifdef LINUX_2_4
  2231. struct proto_ops wanpipe_ops = {
  2232. family:  PF_WANPIPE,
  2233. release:  wanpipe_release,
  2234. bind:  wanpipe_bind,
  2235. connect:  wanpipe_connect,
  2236. socketpair:  sock_no_socketpair,
  2237. accept:  wanpipe_accept,
  2238. getname:  wanpipe_getname, 
  2239. poll:  wanpipe_poll,
  2240. ioctl:  wanpipe_ioctl,
  2241. listen:  wanpipe_listen, 
  2242. shutdown:  sock_no_shutdown,
  2243. setsockopt:  sock_no_setsockopt,
  2244. getsockopt:  sock_no_getsockopt,
  2245. sendmsg:  wanpipe_sendmsg,
  2246. recvmsg:  wanpipe_recvmsg
  2247. };
  2248. #else
  2249. struct proto_ops wanpipe_ops = {
  2250. PF_WANPIPE,
  2251. sock_no_dup,
  2252. wanpipe_release,
  2253. wanpipe_bind,
  2254. wanpipe_connect,
  2255. sock_no_socketpair,
  2256. wanpipe_accept,
  2257. wanpipe_getname, 
  2258. wanpipe_poll,
  2259. wanpipe_ioctl,
  2260. wanpipe_listen, 
  2261. sock_no_shutdown,
  2262. sock_no_setsockopt,
  2263. sock_no_getsockopt,
  2264. sock_no_fcntl,
  2265. wanpipe_sendmsg,
  2266. wanpipe_recvmsg
  2267. };
  2268. #endif
  2269. static struct net_proto_family wanpipe_family_ops = {
  2270. PF_WANPIPE,
  2271. wanpipe_create
  2272. };
  2273. struct notifier_block wanpipe_netdev_notifier={
  2274. wanpipe_notifier,
  2275. NULL,
  2276. 0
  2277. };
  2278. #ifdef MODULE
  2279. void cleanup_module(void)
  2280. {
  2281. printk(KERN_INFO "wansock: Cleaning up n");
  2282. unregister_netdevice_notifier(&wanpipe_netdev_notifier);
  2283. sock_unregister(PF_WANPIPE);
  2284. return;
  2285. }
  2286. int init_module(void)
  2287. {
  2288. printk(KERN_INFO "wansock: Registering Socket n");
  2289. sock_register(&wanpipe_family_ops);
  2290. register_netdevice_notifier(&wanpipe_netdev_notifier);
  2291. return 0;
  2292. }
  2293. #endif
  2294. MODULE_LICENSE("GPL");