1 /********************************************************************* 2 * 3 * Filename: af_irda.c 4 * Version: 0.9 5 * Description: IrDA sockets implementation 6 * Status: Stable 7 * Author: Dag Brattli <dagb@cs.uit.no> 8 * Created at: Sun May 31 10:12:43 1998 9 * Modified at: Sat Dec 25 21:10:23 1999 10 * Modified by: Dag Brattli <dag@brattli.net> 11 * Sources: af_netroom.c, af_ax25.c, af_rose.c, af_x25.c etc. 12 * 13 * Copyright (c) 1999 Dag Brattli <dagb@cs.uit.no> 14 * Copyright (c) 1999-2003 Jean Tourrilhes <jt@hpl.hp.com> 15 * All Rights Reserved. 16 * 17 * This program is free software; you can redistribute it and/or 18 * modify it under the terms of the GNU General Public License as 19 * published by the Free Software Foundation; either version 2 of 20 * the License, or (at your option) any later version. 21 * 22 * This program is distributed in the hope that it will be useful, 23 * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 25 * GNU General Public License for more details. 26 * 27 * You should have received a copy of the GNU General Public License 28 * along with this program; if not, write to the Free Software 29 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 30 * MA 02111-1307 USA 31 * 32 * Linux-IrDA now supports four different types of IrDA sockets: 33 * 34 * o SOCK_STREAM: TinyTP connections with SAR disabled. The 35 * max SDU size is 0 for conn. of this type 36 * o SOCK_SEQPACKET: TinyTP connections with SAR enabled. TTP may 37 * fragment the messages, but will preserve 38 * the message boundaries 39 * o SOCK_DGRAM: IRDAPROTO_UNITDATA: TinyTP connections with Unitdata 40 * (unreliable) transfers 41 * IRDAPROTO_ULTRA: Connectionless and unreliable data 42 * 43 ********************************************************************/ 44 45 #include <linux/capability.h> 46 #include <linux/module.h> 47 #include <linux/types.h> 48 #include <linux/socket.h> 49 #include <linux/sockios.h> 50 #include <linux/slab.h> 51 #include <linux/init.h> 52 #include <linux/net.h> 53 #include <linux/irda.h> 54 #include <linux/poll.h> 55 56 #include <asm/ioctls.h> /* TIOCOUTQ, TIOCINQ */ 57 #include <asm/uaccess.h> 58 59 #include <net/sock.h> 60 #include <net/tcp_states.h> 61 62 #include <net/irda/af_irda.h> 63 64 static int irda_create(struct net *net, struct socket *sock, int protocol, int kern); 65 66 static const struct proto_ops irda_stream_ops; 67 static const struct proto_ops irda_seqpacket_ops; 68 static const struct proto_ops irda_dgram_ops; 69 70 #ifdef CONFIG_IRDA_ULTRA 71 static const struct proto_ops irda_ultra_ops; 72 #define ULTRA_MAX_DATA 382 73 #endif /* CONFIG_IRDA_ULTRA */ 74 75 #define IRDA_MAX_HEADER (TTP_MAX_HEADER) 76 77 /* 78 * Function irda_data_indication (instance, sap, skb) 79 * 80 * Received some data from TinyTP. Just queue it on the receive queue 81 * 82 */ 83 static int irda_data_indication(void *instance, void *sap, struct sk_buff *skb) 84 { 85 struct irda_sock *self; 86 struct sock *sk; 87 int err; 88 89 IRDA_DEBUG(3, "%s()\n", __func__); 90 91 self = instance; 92 sk = instance; 93 94 err = sock_queue_rcv_skb(sk, skb); 95 if (err) { 96 IRDA_DEBUG(1, "%s(), error: no more mem!\n", __func__); 97 self->rx_flow = FLOW_STOP; 98 99 /* When we return error, TTP will need to requeue the skb */ 100 return err; 101 } 102 103 return 0; 104 } 105 106 /* 107 * Function irda_disconnect_indication (instance, sap, reason, skb) 108 * 109 * Connection has been closed. Check reason to find out why 110 * 111 */ 112 static void irda_disconnect_indication(void *instance, void *sap, 113 LM_REASON reason, struct sk_buff *skb) 114 { 115 struct irda_sock *self; 116 struct sock *sk; 117 118 self = instance; 119 120 IRDA_DEBUG(2, "%s(%p)\n", __func__, self); 121 122 /* Don't care about it, but let's not leak it */ 123 if(skb) 124 dev_kfree_skb(skb); 125 126 sk = instance; 127 if (sk == NULL) { 128 IRDA_DEBUG(0, "%s(%p) : BUG : sk is NULL\n", 129 __func__, self); 130 return; 131 } 132 133 /* Prevent race conditions with irda_release() and irda_shutdown() */ 134 bh_lock_sock(sk); 135 if (!sock_flag(sk, SOCK_DEAD) && sk->sk_state != TCP_CLOSE) { 136 sk->sk_state = TCP_CLOSE; 137 sk->sk_shutdown |= SEND_SHUTDOWN; 138 139 sk->sk_state_change(sk); 140 141 /* Close our TSAP. 142 * If we leave it open, IrLMP put it back into the list of 143 * unconnected LSAPs. The problem is that any incoming request 144 * can then be matched to this socket (and it will be, because 145 * it is at the head of the list). This would prevent any 146 * listening socket waiting on the same TSAP to get those 147 * requests. Some apps forget to close sockets, or hang to it 148 * a bit too long, so we may stay in this dead state long 149 * enough to be noticed... 150 * Note : all socket function do check sk->sk_state, so we are 151 * safe... 152 * Jean II 153 */ 154 if (self->tsap) { 155 irttp_close_tsap(self->tsap); 156 self->tsap = NULL; 157 } 158 } 159 bh_unlock_sock(sk); 160 161 /* Note : once we are there, there is not much you want to do 162 * with the socket anymore, apart from closing it. 163 * For example, bind() and connect() won't reset sk->sk_err, 164 * sk->sk_shutdown and sk->sk_flags to valid values... 165 * Jean II 166 */ 167 } 168 169 /* 170 * Function irda_connect_confirm (instance, sap, qos, max_sdu_size, skb) 171 * 172 * Connections has been confirmed by the remote device 173 * 174 */ 175 static void irda_connect_confirm(void *instance, void *sap, 176 struct qos_info *qos, 177 __u32 max_sdu_size, __u8 max_header_size, 178 struct sk_buff *skb) 179 { 180 struct irda_sock *self; 181 struct sock *sk; 182 183 self = instance; 184 185 IRDA_DEBUG(2, "%s(%p)\n", __func__, self); 186 187 sk = instance; 188 if (sk == NULL) { 189 dev_kfree_skb(skb); 190 return; 191 } 192 193 dev_kfree_skb(skb); 194 // Should be ??? skb_queue_tail(&sk->sk_receive_queue, skb); 195 196 /* How much header space do we need to reserve */ 197 self->max_header_size = max_header_size; 198 199 /* IrTTP max SDU size in transmit direction */ 200 self->max_sdu_size_tx = max_sdu_size; 201 202 /* Find out what the largest chunk of data that we can transmit is */ 203 switch (sk->sk_type) { 204 case SOCK_STREAM: 205 if (max_sdu_size != 0) { 206 IRDA_ERROR("%s: max_sdu_size must be 0\n", 207 __func__); 208 return; 209 } 210 self->max_data_size = irttp_get_max_seg_size(self->tsap); 211 break; 212 case SOCK_SEQPACKET: 213 if (max_sdu_size == 0) { 214 IRDA_ERROR("%s: max_sdu_size cannot be 0\n", 215 __func__); 216 return; 217 } 218 self->max_data_size = max_sdu_size; 219 break; 220 default: 221 self->max_data_size = irttp_get_max_seg_size(self->tsap); 222 } 223 224 IRDA_DEBUG(2, "%s(), max_data_size=%d\n", __func__, 225 self->max_data_size); 226 227 memcpy(&self->qos_tx, qos, sizeof(struct qos_info)); 228 229 /* We are now connected! */ 230 sk->sk_state = TCP_ESTABLISHED; 231 sk->sk_state_change(sk); 232 } 233 234 /* 235 * Function irda_connect_indication(instance, sap, qos, max_sdu_size, userdata) 236 * 237 * Incoming connection 238 * 239 */ 240 static void irda_connect_indication(void *instance, void *sap, 241 struct qos_info *qos, __u32 max_sdu_size, 242 __u8 max_header_size, struct sk_buff *skb) 243 { 244 struct irda_sock *self; 245 struct sock *sk; 246 247 self = instance; 248 249 IRDA_DEBUG(2, "%s(%p)\n", __func__, self); 250 251 sk = instance; 252 if (sk == NULL) { 253 dev_kfree_skb(skb); 254 return; 255 } 256 257 /* How much header space do we need to reserve */ 258 self->max_header_size = max_header_size; 259 260 /* IrTTP max SDU size in transmit direction */ 261 self->max_sdu_size_tx = max_sdu_size; 262 263 /* Find out what the largest chunk of data that we can transmit is */ 264 switch (sk->sk_type) { 265 case SOCK_STREAM: 266 if (max_sdu_size != 0) { 267 IRDA_ERROR("%s: max_sdu_size must be 0\n", 268 __func__); 269 kfree_skb(skb); 270 return; 271 } 272 self->max_data_size = irttp_get_max_seg_size(self->tsap); 273 break; 274 case SOCK_SEQPACKET: 275 if (max_sdu_size == 0) { 276 IRDA_ERROR("%s: max_sdu_size cannot be 0\n", 277 __func__); 278 kfree_skb(skb); 279 return; 280 } 281 self->max_data_size = max_sdu_size; 282 break; 283 default: 284 self->max_data_size = irttp_get_max_seg_size(self->tsap); 285 } 286 287 IRDA_DEBUG(2, "%s(), max_data_size=%d\n", __func__, 288 self->max_data_size); 289 290 memcpy(&self->qos_tx, qos, sizeof(struct qos_info)); 291 292 skb_queue_tail(&sk->sk_receive_queue, skb); 293 sk->sk_state_change(sk); 294 } 295 296 /* 297 * Function irda_connect_response (handle) 298 * 299 * Accept incoming connection 300 * 301 */ 302 static void irda_connect_response(struct irda_sock *self) 303 { 304 struct sk_buff *skb; 305 306 IRDA_DEBUG(2, "%s()\n", __func__); 307 308 skb = alloc_skb(TTP_MAX_HEADER + TTP_SAR_HEADER, GFP_KERNEL); 309 if (skb == NULL) { 310 IRDA_DEBUG(0, "%s() Unable to allocate sk_buff!\n", 311 __func__); 312 return; 313 } 314 315 /* Reserve space for MUX_CONTROL and LAP header */ 316 skb_reserve(skb, IRDA_MAX_HEADER); 317 318 irttp_connect_response(self->tsap, self->max_sdu_size_rx, skb); 319 } 320 321 /* 322 * Function irda_flow_indication (instance, sap, flow) 323 * 324 * Used by TinyTP to tell us if it can accept more data or not 325 * 326 */ 327 static void irda_flow_indication(void *instance, void *sap, LOCAL_FLOW flow) 328 { 329 struct irda_sock *self; 330 struct sock *sk; 331 332 IRDA_DEBUG(2, "%s()\n", __func__); 333 334 self = instance; 335 sk = instance; 336 BUG_ON(sk == NULL); 337 338 switch (flow) { 339 case FLOW_STOP: 340 IRDA_DEBUG(1, "%s(), IrTTP wants us to slow down\n", 341 __func__); 342 self->tx_flow = flow; 343 break; 344 case FLOW_START: 345 self->tx_flow = flow; 346 IRDA_DEBUG(1, "%s(), IrTTP wants us to start again\n", 347 __func__); 348 wake_up_interruptible(sk_sleep(sk)); 349 break; 350 default: 351 IRDA_DEBUG(0, "%s(), Unknown flow command!\n", __func__); 352 /* Unknown flow command, better stop */ 353 self->tx_flow = flow; 354 break; 355 } 356 } 357 358 /* 359 * Function irda_getvalue_confirm (obj_id, value, priv) 360 * 361 * Got answer from remote LM-IAS, just pass object to requester... 362 * 363 * Note : duplicate from above, but we need our own version that 364 * doesn't touch the dtsap_sel and save the full value structure... 365 */ 366 static void irda_getvalue_confirm(int result, __u16 obj_id, 367 struct ias_value *value, void *priv) 368 { 369 struct irda_sock *self; 370 371 self = priv; 372 if (!self) { 373 IRDA_WARNING("%s: lost myself!\n", __func__); 374 return; 375 } 376 377 IRDA_DEBUG(2, "%s(%p)\n", __func__, self); 378 379 /* We probably don't need to make any more queries */ 380 iriap_close(self->iriap); 381 self->iriap = NULL; 382 383 /* Check if request succeeded */ 384 if (result != IAS_SUCCESS) { 385 IRDA_DEBUG(1, "%s(), IAS query failed! (%d)\n", __func__, 386 result); 387 388 self->errno = result; /* We really need it later */ 389 390 /* Wake up any processes waiting for result */ 391 wake_up_interruptible(&self->query_wait); 392 393 return; 394 } 395 396 /* Pass the object to the caller (so the caller must delete it) */ 397 self->ias_result = value; 398 self->errno = 0; 399 400 /* Wake up any processes waiting for result */ 401 wake_up_interruptible(&self->query_wait); 402 } 403 404 /* 405 * Function irda_selective_discovery_indication (discovery) 406 * 407 * Got a selective discovery indication from IrLMP. 408 * 409 * IrLMP is telling us that this node is new and matching our hint bit 410 * filter. Wake up any process waiting for answer... 411 */ 412 static void irda_selective_discovery_indication(discinfo_t *discovery, 413 DISCOVERY_MODE mode, 414 void *priv) 415 { 416 struct irda_sock *self; 417 418 IRDA_DEBUG(2, "%s()\n", __func__); 419 420 self = priv; 421 if (!self) { 422 IRDA_WARNING("%s: lost myself!\n", __func__); 423 return; 424 } 425 426 /* Pass parameter to the caller */ 427 self->cachedaddr = discovery->daddr; 428 429 /* Wake up process if its waiting for device to be discovered */ 430 wake_up_interruptible(&self->query_wait); 431 } 432 433 /* 434 * Function irda_discovery_timeout (priv) 435 * 436 * Timeout in the selective discovery process 437 * 438 * We were waiting for a node to be discovered, but nothing has come up 439 * so far. Wake up the user and tell him that we failed... 440 */ 441 static void irda_discovery_timeout(u_long priv) 442 { 443 struct irda_sock *self; 444 445 IRDA_DEBUG(2, "%s()\n", __func__); 446 447 self = (struct irda_sock *) priv; 448 BUG_ON(self == NULL); 449 450 /* Nothing for the caller */ 451 self->cachelog = NULL; 452 self->cachedaddr = 0; 453 self->errno = -ETIME; 454 455 /* Wake up process if its still waiting... */ 456 wake_up_interruptible(&self->query_wait); 457 } 458 459 /* 460 * Function irda_open_tsap (self) 461 * 462 * Open local Transport Service Access Point (TSAP) 463 * 464 */ 465 static int irda_open_tsap(struct irda_sock *self, __u8 tsap_sel, char *name) 466 { 467 notify_t notify; 468 469 if (self->tsap) { 470 IRDA_DEBUG(0, "%s: busy!\n", __func__); 471 return -EBUSY; 472 } 473 474 /* Initialize callbacks to be used by the IrDA stack */ 475 irda_notify_init(¬ify); 476 notify.connect_confirm = irda_connect_confirm; 477 notify.connect_indication = irda_connect_indication; 478 notify.disconnect_indication = irda_disconnect_indication; 479 notify.data_indication = irda_data_indication; 480 notify.udata_indication = irda_data_indication; 481 notify.flow_indication = irda_flow_indication; 482 notify.instance = self; 483 strncpy(notify.name, name, NOTIFY_MAX_NAME); 484 485 self->tsap = irttp_open_tsap(tsap_sel, DEFAULT_INITIAL_CREDIT, 486 ¬ify); 487 if (self->tsap == NULL) { 488 IRDA_DEBUG(0, "%s(), Unable to allocate TSAP!\n", 489 __func__); 490 return -ENOMEM; 491 } 492 /* Remember which TSAP selector we actually got */ 493 self->stsap_sel = self->tsap->stsap_sel; 494 495 return 0; 496 } 497 498 /* 499 * Function irda_open_lsap (self) 500 * 501 * Open local Link Service Access Point (LSAP). Used for opening Ultra 502 * sockets 503 */ 504 #ifdef CONFIG_IRDA_ULTRA 505 static int irda_open_lsap(struct irda_sock *self, int pid) 506 { 507 notify_t notify; 508 509 if (self->lsap) { 510 IRDA_WARNING("%s(), busy!\n", __func__); 511 return -EBUSY; 512 } 513 514 /* Initialize callbacks to be used by the IrDA stack */ 515 irda_notify_init(¬ify); 516 notify.udata_indication = irda_data_indication; 517 notify.instance = self; 518 strncpy(notify.name, "Ultra", NOTIFY_MAX_NAME); 519 520 self->lsap = irlmp_open_lsap(LSAP_CONNLESS, ¬ify, pid); 521 if (self->lsap == NULL) { 522 IRDA_DEBUG( 0, "%s(), Unable to allocate LSAP!\n", __func__); 523 return -ENOMEM; 524 } 525 526 return 0; 527 } 528 #endif /* CONFIG_IRDA_ULTRA */ 529 530 /* 531 * Function irda_find_lsap_sel (self, name) 532 * 533 * Try to lookup LSAP selector in remote LM-IAS 534 * 535 * Basically, we start a IAP query, and then go to sleep. When the query 536 * return, irda_getvalue_confirm will wake us up, and we can examine the 537 * result of the query... 538 * Note that in some case, the query fail even before we go to sleep, 539 * creating some races... 540 */ 541 static int irda_find_lsap_sel(struct irda_sock *self, char *name) 542 { 543 IRDA_DEBUG(2, "%s(%p, %s)\n", __func__, self, name); 544 545 if (self->iriap) { 546 IRDA_WARNING("%s(): busy with a previous query\n", 547 __func__); 548 return -EBUSY; 549 } 550 551 self->iriap = iriap_open(LSAP_ANY, IAS_CLIENT, self, 552 irda_getvalue_confirm); 553 if(self->iriap == NULL) 554 return -ENOMEM; 555 556 /* Treat unexpected wakeup as disconnect */ 557 self->errno = -EHOSTUNREACH; 558 559 /* Query remote LM-IAS */ 560 iriap_getvaluebyclass_request(self->iriap, self->saddr, self->daddr, 561 name, "IrDA:TinyTP:LsapSel"); 562 563 /* Wait for answer, if not yet finished (or failed) */ 564 if (wait_event_interruptible(self->query_wait, (self->iriap==NULL))) 565 /* Treat signals as disconnect */ 566 return -EHOSTUNREACH; 567 568 /* Check what happened */ 569 if (self->errno) 570 { 571 /* Requested object/attribute doesn't exist */ 572 if((self->errno == IAS_CLASS_UNKNOWN) || 573 (self->errno == IAS_ATTRIB_UNKNOWN)) 574 return -EADDRNOTAVAIL; 575 else 576 return -EHOSTUNREACH; 577 } 578 579 /* Get the remote TSAP selector */ 580 switch (self->ias_result->type) { 581 case IAS_INTEGER: 582 IRDA_DEBUG(4, "%s() int=%d\n", 583 __func__, self->ias_result->t.integer); 584 585 if (self->ias_result->t.integer != -1) 586 self->dtsap_sel = self->ias_result->t.integer; 587 else 588 self->dtsap_sel = 0; 589 break; 590 default: 591 self->dtsap_sel = 0; 592 IRDA_DEBUG(0, "%s(), bad type!\n", __func__); 593 break; 594 } 595 if (self->ias_result) 596 irias_delete_value(self->ias_result); 597 598 if (self->dtsap_sel) 599 return 0; 600 601 return -EADDRNOTAVAIL; 602 } 603 604 /* 605 * Function irda_discover_daddr_and_lsap_sel (self, name) 606 * 607 * This try to find a device with the requested service. 608 * 609 * It basically look into the discovery log. For each address in the list, 610 * it queries the LM-IAS of the device to find if this device offer 611 * the requested service. 612 * If there is more than one node supporting the service, we complain 613 * to the user (it should move devices around). 614 * The, we set both the destination address and the lsap selector to point 615 * on the service on the unique device we have found. 616 * 617 * Note : this function fails if there is more than one device in range, 618 * because IrLMP doesn't disconnect the LAP when the last LSAP is closed. 619 * Moreover, we would need to wait the LAP disconnection... 620 */ 621 static int irda_discover_daddr_and_lsap_sel(struct irda_sock *self, char *name) 622 { 623 discinfo_t *discoveries; /* Copy of the discovery log */ 624 int number; /* Number of nodes in the log */ 625 int i; 626 int err = -ENETUNREACH; 627 __u32 daddr = DEV_ADDR_ANY; /* Address we found the service on */ 628 __u8 dtsap_sel = 0x0; /* TSAP associated with it */ 629 630 IRDA_DEBUG(2, "%s(), name=%s\n", __func__, name); 631 632 /* Ask lmp for the current discovery log 633 * Note : we have to use irlmp_get_discoveries(), as opposed 634 * to play with the cachelog directly, because while we are 635 * making our ias query, le log might change... */ 636 discoveries = irlmp_get_discoveries(&number, self->mask.word, 637 self->nslots); 638 /* Check if the we got some results */ 639 if (discoveries == NULL) 640 return -ENETUNREACH; /* No nodes discovered */ 641 642 /* 643 * Now, check all discovered devices (if any), and connect 644 * client only about the services that the client is 645 * interested in... 646 */ 647 for(i = 0; i < number; i++) { 648 /* Try the address in the log */ 649 self->daddr = discoveries[i].daddr; 650 self->saddr = 0x0; 651 IRDA_DEBUG(1, "%s(), trying daddr = %08x\n", 652 __func__, self->daddr); 653 654 /* Query remote LM-IAS for this service */ 655 err = irda_find_lsap_sel(self, name); 656 switch (err) { 657 case 0: 658 /* We found the requested service */ 659 if(daddr != DEV_ADDR_ANY) { 660 IRDA_DEBUG(1, "%s(), discovered service ''%s'' in two different devices !!!\n", 661 __func__, name); 662 self->daddr = DEV_ADDR_ANY; 663 kfree(discoveries); 664 return -ENOTUNIQ; 665 } 666 /* First time we found that one, save it ! */ 667 daddr = self->daddr; 668 dtsap_sel = self->dtsap_sel; 669 break; 670 case -EADDRNOTAVAIL: 671 /* Requested service simply doesn't exist on this node */ 672 break; 673 default: 674 /* Something bad did happen :-( */ 675 IRDA_DEBUG(0, "%s(), unexpected IAS query failure\n", __func__); 676 self->daddr = DEV_ADDR_ANY; 677 kfree(discoveries); 678 return -EHOSTUNREACH; 679 break; 680 } 681 } 682 /* Cleanup our copy of the discovery log */ 683 kfree(discoveries); 684 685 /* Check out what we found */ 686 if(daddr == DEV_ADDR_ANY) { 687 IRDA_DEBUG(1, "%s(), cannot discover service ''%s'' in any device !!!\n", 688 __func__, name); 689 self->daddr = DEV_ADDR_ANY; 690 return -EADDRNOTAVAIL; 691 } 692 693 /* Revert back to discovered device & service */ 694 self->daddr = daddr; 695 self->saddr = 0x0; 696 self->dtsap_sel = dtsap_sel; 697 698 IRDA_DEBUG(1, "%s(), discovered requested service ''%s'' at address %08x\n", 699 __func__, name, self->daddr); 700 701 return 0; 702 } 703 704 /* 705 * Function irda_getname (sock, uaddr, uaddr_len, peer) 706 * 707 * Return the our own, or peers socket address (sockaddr_irda) 708 * 709 */ 710 static int irda_getname(struct socket *sock, struct sockaddr *uaddr, 711 int *uaddr_len, int peer) 712 { 713 struct sockaddr_irda saddr; 714 struct sock *sk = sock->sk; 715 struct irda_sock *self = irda_sk(sk); 716 717 memset(&saddr, 0, sizeof(saddr)); 718 if (peer) { 719 if (sk->sk_state != TCP_ESTABLISHED) 720 return -ENOTCONN; 721 722 saddr.sir_family = AF_IRDA; 723 saddr.sir_lsap_sel = self->dtsap_sel; 724 saddr.sir_addr = self->daddr; 725 } else { 726 saddr.sir_family = AF_IRDA; 727 saddr.sir_lsap_sel = self->stsap_sel; 728 saddr.sir_addr = self->saddr; 729 } 730 731 IRDA_DEBUG(1, "%s(), tsap_sel = %#x\n", __func__, saddr.sir_lsap_sel); 732 IRDA_DEBUG(1, "%s(), addr = %08x\n", __func__, saddr.sir_addr); 733 734 /* uaddr_len come to us uninitialised */ 735 *uaddr_len = sizeof (struct sockaddr_irda); 736 memcpy(uaddr, &saddr, *uaddr_len); 737 738 return 0; 739 } 740 741 /* 742 * Function irda_listen (sock, backlog) 743 * 744 * Just move to the listen state 745 * 746 */ 747 static int irda_listen(struct socket *sock, int backlog) 748 { 749 struct sock *sk = sock->sk; 750 int err = -EOPNOTSUPP; 751 752 IRDA_DEBUG(2, "%s()\n", __func__); 753 754 lock_sock(sk); 755 756 if ((sk->sk_type != SOCK_STREAM) && (sk->sk_type != SOCK_SEQPACKET) && 757 (sk->sk_type != SOCK_DGRAM)) 758 goto out; 759 760 if (sk->sk_state != TCP_LISTEN) { 761 sk->sk_max_ack_backlog = backlog; 762 sk->sk_state = TCP_LISTEN; 763 764 err = 0; 765 } 766 out: 767 release_sock(sk); 768 769 return err; 770 } 771 772 /* 773 * Function irda_bind (sock, uaddr, addr_len) 774 * 775 * Used by servers to register their well known TSAP 776 * 777 */ 778 static int irda_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) 779 { 780 struct sock *sk = sock->sk; 781 struct sockaddr_irda *addr = (struct sockaddr_irda *) uaddr; 782 struct irda_sock *self = irda_sk(sk); 783 int err; 784 785 IRDA_DEBUG(2, "%s(%p)\n", __func__, self); 786 787 if (addr_len != sizeof(struct sockaddr_irda)) 788 return -EINVAL; 789 790 lock_sock(sk); 791 #ifdef CONFIG_IRDA_ULTRA 792 /* Special care for Ultra sockets */ 793 if ((sk->sk_type == SOCK_DGRAM) && 794 (sk->sk_protocol == IRDAPROTO_ULTRA)) { 795 self->pid = addr->sir_lsap_sel; 796 err = -EOPNOTSUPP; 797 if (self->pid & 0x80) { 798 IRDA_DEBUG(0, "%s(), extension in PID not supp!\n", __func__); 799 goto out; 800 } 801 err = irda_open_lsap(self, self->pid); 802 if (err < 0) 803 goto out; 804 805 /* Pretend we are connected */ 806 sock->state = SS_CONNECTED; 807 sk->sk_state = TCP_ESTABLISHED; 808 err = 0; 809 810 goto out; 811 } 812 #endif /* CONFIG_IRDA_ULTRA */ 813 814 self->ias_obj = irias_new_object(addr->sir_name, jiffies); 815 err = -ENOMEM; 816 if (self->ias_obj == NULL) 817 goto out; 818 819 err = irda_open_tsap(self, addr->sir_lsap_sel, addr->sir_name); 820 if (err < 0) { 821 irias_delete_object(self->ias_obj); 822 self->ias_obj = NULL; 823 goto out; 824 } 825 826 /* Register with LM-IAS */ 827 irias_add_integer_attrib(self->ias_obj, "IrDA:TinyTP:LsapSel", 828 self->stsap_sel, IAS_KERNEL_ATTR); 829 irias_insert_object(self->ias_obj); 830 831 err = 0; 832 out: 833 release_sock(sk); 834 return err; 835 } 836 837 /* 838 * Function irda_accept (sock, newsock, flags) 839 * 840 * Wait for incoming connection 841 * 842 */ 843 static int irda_accept(struct socket *sock, struct socket *newsock, int flags) 844 { 845 struct sock *sk = sock->sk; 846 struct irda_sock *new, *self = irda_sk(sk); 847 struct sock *newsk; 848 struct sk_buff *skb; 849 int err; 850 851 IRDA_DEBUG(2, "%s()\n", __func__); 852 853 err = irda_create(sock_net(sk), newsock, sk->sk_protocol, 0); 854 if (err) 855 return err; 856 857 err = -EINVAL; 858 859 lock_sock(sk); 860 if (sock->state != SS_UNCONNECTED) 861 goto out; 862 863 if ((sk = sock->sk) == NULL) 864 goto out; 865 866 err = -EOPNOTSUPP; 867 if ((sk->sk_type != SOCK_STREAM) && (sk->sk_type != SOCK_SEQPACKET) && 868 (sk->sk_type != SOCK_DGRAM)) 869 goto out; 870 871 err = -EINVAL; 872 if (sk->sk_state != TCP_LISTEN) 873 goto out; 874 875 /* 876 * The read queue this time is holding sockets ready to use 877 * hooked into the SABM we saved 878 */ 879 880 /* 881 * We can perform the accept only if there is incoming data 882 * on the listening socket. 883 * So, we will block the caller until we receive any data. 884 * If the caller was waiting on select() or poll() before 885 * calling us, the data is waiting for us ;-) 886 * Jean II 887 */ 888 while (1) { 889 skb = skb_dequeue(&sk->sk_receive_queue); 890 if (skb) 891 break; 892 893 /* Non blocking operation */ 894 err = -EWOULDBLOCK; 895 if (flags & O_NONBLOCK) 896 goto out; 897 898 err = wait_event_interruptible(*(sk_sleep(sk)), 899 skb_peek(&sk->sk_receive_queue)); 900 if (err) 901 goto out; 902 } 903 904 newsk = newsock->sk; 905 err = -EIO; 906 if (newsk == NULL) 907 goto out; 908 909 newsk->sk_state = TCP_ESTABLISHED; 910 911 new = irda_sk(newsk); 912 913 /* Now attach up the new socket */ 914 new->tsap = irttp_dup(self->tsap, new); 915 err = -EPERM; /* value does not seem to make sense. -arnd */ 916 if (!new->tsap) { 917 IRDA_DEBUG(0, "%s(), dup failed!\n", __func__); 918 kfree_skb(skb); 919 goto out; 920 } 921 922 new->stsap_sel = new->tsap->stsap_sel; 923 new->dtsap_sel = new->tsap->dtsap_sel; 924 new->saddr = irttp_get_saddr(new->tsap); 925 new->daddr = irttp_get_daddr(new->tsap); 926 927 new->max_sdu_size_tx = self->max_sdu_size_tx; 928 new->max_sdu_size_rx = self->max_sdu_size_rx; 929 new->max_data_size = self->max_data_size; 930 new->max_header_size = self->max_header_size; 931 932 memcpy(&new->qos_tx, &self->qos_tx, sizeof(struct qos_info)); 933 934 /* Clean up the original one to keep it in listen state */ 935 irttp_listen(self->tsap); 936 937 kfree_skb(skb); 938 sk->sk_ack_backlog--; 939 940 newsock->state = SS_CONNECTED; 941 942 irda_connect_response(new); 943 err = 0; 944 out: 945 release_sock(sk); 946 return err; 947 } 948 949 /* 950 * Function irda_connect (sock, uaddr, addr_len, flags) 951 * 952 * Connect to a IrDA device 953 * 954 * The main difference with a "standard" connect is that with IrDA we need 955 * to resolve the service name into a TSAP selector (in TCP, port number 956 * doesn't have to be resolved). 957 * Because of this service name resolution, we can offer "auto-connect", 958 * where we connect to a service without specifying a destination address. 959 * 960 * Note : by consulting "errno", the user space caller may learn the cause 961 * of the failure. Most of them are visible in the function, others may come 962 * from subroutines called and are listed here : 963 * o EBUSY : already processing a connect 964 * o EHOSTUNREACH : bad addr->sir_addr argument 965 * o EADDRNOTAVAIL : bad addr->sir_name argument 966 * o ENOTUNIQ : more than one node has addr->sir_name (auto-connect) 967 * o ENETUNREACH : no node found on the network (auto-connect) 968 */ 969 static int irda_connect(struct socket *sock, struct sockaddr *uaddr, 970 int addr_len, int flags) 971 { 972 struct sock *sk = sock->sk; 973 struct sockaddr_irda *addr = (struct sockaddr_irda *) uaddr; 974 struct irda_sock *self = irda_sk(sk); 975 int err; 976 977 IRDA_DEBUG(2, "%s(%p)\n", __func__, self); 978 979 lock_sock(sk); 980 /* Don't allow connect for Ultra sockets */ 981 err = -ESOCKTNOSUPPORT; 982 if ((sk->sk_type == SOCK_DGRAM) && (sk->sk_protocol == IRDAPROTO_ULTRA)) 983 goto out; 984 985 if (sk->sk_state == TCP_ESTABLISHED && sock->state == SS_CONNECTING) { 986 sock->state = SS_CONNECTED; 987 err = 0; 988 goto out; /* Connect completed during a ERESTARTSYS event */ 989 } 990 991 if (sk->sk_state == TCP_CLOSE && sock->state == SS_CONNECTING) { 992 sock->state = SS_UNCONNECTED; 993 err = -ECONNREFUSED; 994 goto out; 995 } 996 997 err = -EISCONN; /* No reconnect on a seqpacket socket */ 998 if (sk->sk_state == TCP_ESTABLISHED) 999 goto out; 1000 1001 sk->sk_state = TCP_CLOSE; 1002 sock->state = SS_UNCONNECTED; 1003 1004 err = -EINVAL; 1005 if (addr_len != sizeof(struct sockaddr_irda)) 1006 goto out; 1007 1008 /* Check if user supplied any destination device address */ 1009 if ((!addr->sir_addr) || (addr->sir_addr == DEV_ADDR_ANY)) { 1010 /* Try to find one suitable */ 1011 err = irda_discover_daddr_and_lsap_sel(self, addr->sir_name); 1012 if (err) { 1013 IRDA_DEBUG(0, "%s(), auto-connect failed!\n", __func__); 1014 goto out; 1015 } 1016 } else { 1017 /* Use the one provided by the user */ 1018 self->daddr = addr->sir_addr; 1019 IRDA_DEBUG(1, "%s(), daddr = %08x\n", __func__, self->daddr); 1020 1021 /* If we don't have a valid service name, we assume the 1022 * user want to connect on a specific LSAP. Prevent 1023 * the use of invalid LSAPs (IrLMP 1.1 p10). Jean II */ 1024 if((addr->sir_name[0] != '\0') || 1025 (addr->sir_lsap_sel >= 0x70)) { 1026 /* Query remote LM-IAS using service name */ 1027 err = irda_find_lsap_sel(self, addr->sir_name); 1028 if (err) { 1029 IRDA_DEBUG(0, "%s(), connect failed!\n", __func__); 1030 goto out; 1031 } 1032 } else { 1033 /* Directly connect to the remote LSAP 1034 * specified by the sir_lsap field. 1035 * Please use with caution, in IrDA LSAPs are 1036 * dynamic and there is no "well-known" LSAP. */ 1037 self->dtsap_sel = addr->sir_lsap_sel; 1038 } 1039 } 1040 1041 /* Check if we have opened a local TSAP */ 1042 if (!self->tsap) { 1043 err = irda_open_tsap(self, LSAP_ANY, addr->sir_name); 1044 if (err) 1045 goto out; 1046 } 1047 1048 /* Move to connecting socket, start sending Connect Requests */ 1049 sock->state = SS_CONNECTING; 1050 sk->sk_state = TCP_SYN_SENT; 1051 1052 /* Connect to remote device */ 1053 err = irttp_connect_request(self->tsap, self->dtsap_sel, 1054 self->saddr, self->daddr, NULL, 1055 self->max_sdu_size_rx, NULL); 1056 if (err) { 1057 IRDA_DEBUG(0, "%s(), connect failed!\n", __func__); 1058 goto out; 1059 } 1060 1061 /* Now the loop */ 1062 err = -EINPROGRESS; 1063 if (sk->sk_state != TCP_ESTABLISHED && (flags & O_NONBLOCK)) 1064 goto out; 1065 1066 err = -ERESTARTSYS; 1067 if (wait_event_interruptible(*(sk_sleep(sk)), 1068 (sk->sk_state != TCP_SYN_SENT))) 1069 goto out; 1070 1071 if (sk->sk_state != TCP_ESTABLISHED) { 1072 sock->state = SS_UNCONNECTED; 1073 if (sk->sk_prot->disconnect(sk, flags)) 1074 sock->state = SS_DISCONNECTING; 1075 err = sock_error(sk); 1076 if (!err) 1077 err = -ECONNRESET; 1078 goto out; 1079 } 1080 1081 sock->state = SS_CONNECTED; 1082 1083 /* At this point, IrLMP has assigned our source address */ 1084 self->saddr = irttp_get_saddr(self->tsap); 1085 err = 0; 1086 out: 1087 release_sock(sk); 1088 return err; 1089 } 1090 1091 static struct proto irda_proto = { 1092 .name = "IRDA", 1093 .owner = THIS_MODULE, 1094 .obj_size = sizeof(struct irda_sock), 1095 }; 1096 1097 /* 1098 * Function irda_create (sock, protocol) 1099 * 1100 * Create IrDA socket 1101 * 1102 */ 1103 static int irda_create(struct net *net, struct socket *sock, int protocol, 1104 int kern) 1105 { 1106 struct sock *sk; 1107 struct irda_sock *self; 1108 1109 IRDA_DEBUG(2, "%s()\n", __func__); 1110 1111 if (protocol < 0 || protocol > SK_PROTOCOL_MAX) 1112 return -EINVAL; 1113 1114 if (net != &init_net) 1115 return -EAFNOSUPPORT; 1116 1117 /* Check for valid socket type */ 1118 switch (sock->type) { 1119 case SOCK_STREAM: /* For TTP connections with SAR disabled */ 1120 case SOCK_SEQPACKET: /* For TTP connections with SAR enabled */ 1121 case SOCK_DGRAM: /* For TTP Unitdata or LMP Ultra transfers */ 1122 break; 1123 default: 1124 return -ESOCKTNOSUPPORT; 1125 } 1126 1127 /* Allocate networking socket */ 1128 sk = sk_alloc(net, PF_IRDA, GFP_KERNEL, &irda_proto); 1129 if (sk == NULL) 1130 return -ENOMEM; 1131 1132 self = irda_sk(sk); 1133 IRDA_DEBUG(2, "%s() : self is %p\n", __func__, self); 1134 1135 init_waitqueue_head(&self->query_wait); 1136 1137 switch (sock->type) { 1138 case SOCK_STREAM: 1139 sock->ops = &irda_stream_ops; 1140 self->max_sdu_size_rx = TTP_SAR_DISABLE; 1141 break; 1142 case SOCK_SEQPACKET: 1143 sock->ops = &irda_seqpacket_ops; 1144 self->max_sdu_size_rx = TTP_SAR_UNBOUND; 1145 break; 1146 case SOCK_DGRAM: 1147 switch (protocol) { 1148 #ifdef CONFIG_IRDA_ULTRA 1149 case IRDAPROTO_ULTRA: 1150 sock->ops = &irda_ultra_ops; 1151 /* Initialise now, because we may send on unbound 1152 * sockets. Jean II */ 1153 self->max_data_size = ULTRA_MAX_DATA - LMP_PID_HEADER; 1154 self->max_header_size = IRDA_MAX_HEADER + LMP_PID_HEADER; 1155 break; 1156 #endif /* CONFIG_IRDA_ULTRA */ 1157 case IRDAPROTO_UNITDATA: 1158 sock->ops = &irda_dgram_ops; 1159 /* We let Unitdata conn. be like seqpack conn. */ 1160 self->max_sdu_size_rx = TTP_SAR_UNBOUND; 1161 break; 1162 default: 1163 sk_free(sk); 1164 return -ESOCKTNOSUPPORT; 1165 } 1166 break; 1167 default: 1168 sk_free(sk); 1169 return -ESOCKTNOSUPPORT; 1170 } 1171 1172 /* Initialise networking socket struct */ 1173 sock_init_data(sock, sk); /* Note : set sk->sk_refcnt to 1 */ 1174 sk->sk_family = PF_IRDA; 1175 sk->sk_protocol = protocol; 1176 1177 /* Register as a client with IrLMP */ 1178 self->ckey = irlmp_register_client(0, NULL, NULL, NULL); 1179 self->mask.word = 0xffff; 1180 self->rx_flow = self->tx_flow = FLOW_START; 1181 self->nslots = DISCOVERY_DEFAULT_SLOTS; 1182 self->daddr = DEV_ADDR_ANY; /* Until we get connected */ 1183 self->saddr = 0x0; /* so IrLMP assign us any link */ 1184 return 0; 1185 } 1186 1187 /* 1188 * Function irda_destroy_socket (self) 1189 * 1190 * Destroy socket 1191 * 1192 */ 1193 static void irda_destroy_socket(struct irda_sock *self) 1194 { 1195 IRDA_DEBUG(2, "%s(%p)\n", __func__, self); 1196 1197 /* Unregister with IrLMP */ 1198 irlmp_unregister_client(self->ckey); 1199 irlmp_unregister_service(self->skey); 1200 1201 /* Unregister with LM-IAS */ 1202 if (self->ias_obj) { 1203 irias_delete_object(self->ias_obj); 1204 self->ias_obj = NULL; 1205 } 1206 1207 if (self->iriap) { 1208 iriap_close(self->iriap); 1209 self->iriap = NULL; 1210 } 1211 1212 if (self->tsap) { 1213 irttp_disconnect_request(self->tsap, NULL, P_NORMAL); 1214 irttp_close_tsap(self->tsap); 1215 self->tsap = NULL; 1216 } 1217 #ifdef CONFIG_IRDA_ULTRA 1218 if (self->lsap) { 1219 irlmp_close_lsap(self->lsap); 1220 self->lsap = NULL; 1221 } 1222 #endif /* CONFIG_IRDA_ULTRA */ 1223 } 1224 1225 /* 1226 * Function irda_release (sock) 1227 */ 1228 static int irda_release(struct socket *sock) 1229 { 1230 struct sock *sk = sock->sk; 1231 1232 IRDA_DEBUG(2, "%s()\n", __func__); 1233 1234 if (sk == NULL) 1235 return 0; 1236 1237 lock_sock(sk); 1238 sk->sk_state = TCP_CLOSE; 1239 sk->sk_shutdown |= SEND_SHUTDOWN; 1240 sk->sk_state_change(sk); 1241 1242 /* Destroy IrDA socket */ 1243 irda_destroy_socket(irda_sk(sk)); 1244 1245 sock_orphan(sk); 1246 sock->sk = NULL; 1247 release_sock(sk); 1248 1249 /* Purge queues (see sock_init_data()) */ 1250 skb_queue_purge(&sk->sk_receive_queue); 1251 1252 /* Destroy networking socket if we are the last reference on it, 1253 * i.e. if(sk->sk_refcnt == 0) -> sk_free(sk) */ 1254 sock_put(sk); 1255 1256 /* Notes on socket locking and deallocation... - Jean II 1257 * In theory we should put pairs of sock_hold() / sock_put() to 1258 * prevent the socket to be destroyed whenever there is an 1259 * outstanding request or outstanding incoming packet or event. 1260 * 1261 * 1) This may include IAS request, both in connect and getsockopt. 1262 * Unfortunately, the situation is a bit more messy than it looks, 1263 * because we close iriap and kfree(self) above. 1264 * 1265 * 2) This may include selective discovery in getsockopt. 1266 * Same stuff as above, irlmp registration and self are gone. 1267 * 1268 * Probably 1 and 2 may not matter, because it's all triggered 1269 * by a process and the socket layer already prevent the 1270 * socket to go away while a process is holding it, through 1271 * sockfd_put() and fput()... 1272 * 1273 * 3) This may include deferred TSAP closure. In particular, 1274 * we may receive a late irda_disconnect_indication() 1275 * Fortunately, (tsap_cb *)->close_pend should protect us 1276 * from that. 1277 * 1278 * I did some testing on SMP, and it looks solid. And the socket 1279 * memory leak is now gone... - Jean II 1280 */ 1281 1282 return 0; 1283 } 1284 1285 /* 1286 * Function irda_sendmsg (iocb, sock, msg, len) 1287 * 1288 * Send message down to TinyTP. This function is used for both STREAM and 1289 * SEQPACK services. This is possible since it forces the client to 1290 * fragment the message if necessary 1291 */ 1292 static int irda_sendmsg(struct kiocb *iocb, struct socket *sock, 1293 struct msghdr *msg, size_t len) 1294 { 1295 struct sock *sk = sock->sk; 1296 struct irda_sock *self; 1297 struct sk_buff *skb; 1298 int err = -EPIPE; 1299 1300 IRDA_DEBUG(4, "%s(), len=%zd\n", __func__, len); 1301 1302 /* Note : socket.c set MSG_EOR on SEQPACKET sockets */ 1303 if (msg->msg_flags & ~(MSG_DONTWAIT | MSG_EOR | MSG_CMSG_COMPAT | 1304 MSG_NOSIGNAL)) { 1305 return -EINVAL; 1306 } 1307 1308 lock_sock(sk); 1309 1310 if (sk->sk_shutdown & SEND_SHUTDOWN) 1311 goto out_err; 1312 1313 if (sk->sk_state != TCP_ESTABLISHED) { 1314 err = -ENOTCONN; 1315 goto out; 1316 } 1317 1318 self = irda_sk(sk); 1319 1320 /* Check if IrTTP is wants us to slow down */ 1321 1322 if (wait_event_interruptible(*(sk_sleep(sk)), 1323 (self->tx_flow != FLOW_STOP || sk->sk_state != TCP_ESTABLISHED))) { 1324 err = -ERESTARTSYS; 1325 goto out; 1326 } 1327 1328 /* Check if we are still connected */ 1329 if (sk->sk_state != TCP_ESTABLISHED) { 1330 err = -ENOTCONN; 1331 goto out; 1332 } 1333 1334 /* Check that we don't send out too big frames */ 1335 if (len > self->max_data_size) { 1336 IRDA_DEBUG(2, "%s(), Chopping frame from %zd to %d bytes!\n", 1337 __func__, len, self->max_data_size); 1338 len = self->max_data_size; 1339 } 1340 1341 skb = sock_alloc_send_skb(sk, len + self->max_header_size + 16, 1342 msg->msg_flags & MSG_DONTWAIT, &err); 1343 if (!skb) 1344 goto out_err; 1345 1346 skb_reserve(skb, self->max_header_size + 16); 1347 skb_reset_transport_header(skb); 1348 skb_put(skb, len); 1349 err = memcpy_fromiovec(skb_transport_header(skb), msg->msg_iov, len); 1350 if (err) { 1351 kfree_skb(skb); 1352 goto out_err; 1353 } 1354 1355 /* 1356 * Just send the message to TinyTP, and let it deal with possible 1357 * errors. No need to duplicate all that here 1358 */ 1359 err = irttp_data_request(self->tsap, skb); 1360 if (err) { 1361 IRDA_DEBUG(0, "%s(), err=%d\n", __func__, err); 1362 goto out_err; 1363 } 1364 1365 release_sock(sk); 1366 /* Tell client how much data we actually sent */ 1367 return len; 1368 1369 out_err: 1370 err = sk_stream_error(sk, msg->msg_flags, err); 1371 out: 1372 release_sock(sk); 1373 return err; 1374 1375 } 1376 1377 /* 1378 * Function irda_recvmsg_dgram (iocb, sock, msg, size, flags) 1379 * 1380 * Try to receive message and copy it to user. The frame is discarded 1381 * after being read, regardless of how much the user actually read 1382 */ 1383 static int irda_recvmsg_dgram(struct kiocb *iocb, struct socket *sock, 1384 struct msghdr *msg, size_t size, int flags) 1385 { 1386 struct sock *sk = sock->sk; 1387 struct irda_sock *self = irda_sk(sk); 1388 struct sk_buff *skb; 1389 size_t copied; 1390 int err; 1391 1392 IRDA_DEBUG(4, "%s()\n", __func__); 1393 1394 skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT, 1395 flags & MSG_DONTWAIT, &err); 1396 if (!skb) 1397 return err; 1398 1399 skb_reset_transport_header(skb); 1400 copied = skb->len; 1401 1402 if (copied > size) { 1403 IRDA_DEBUG(2, "%s(), Received truncated frame (%zd < %zd)!\n", 1404 __func__, copied, size); 1405 copied = size; 1406 msg->msg_flags |= MSG_TRUNC; 1407 } 1408 skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied); 1409 1410 skb_free_datagram(sk, skb); 1411 1412 /* 1413 * Check if we have previously stopped IrTTP and we know 1414 * have more free space in our rx_queue. If so tell IrTTP 1415 * to start delivering frames again before our rx_queue gets 1416 * empty 1417 */ 1418 if (self->rx_flow == FLOW_STOP) { 1419 if ((atomic_read(&sk->sk_rmem_alloc) << 2) <= sk->sk_rcvbuf) { 1420 IRDA_DEBUG(2, "%s(), Starting IrTTP\n", __func__); 1421 self->rx_flow = FLOW_START; 1422 irttp_flow_request(self->tsap, FLOW_START); 1423 } 1424 } 1425 1426 return copied; 1427 } 1428 1429 /* 1430 * Function irda_recvmsg_stream (iocb, sock, msg, size, flags) 1431 */ 1432 static int irda_recvmsg_stream(struct kiocb *iocb, struct socket *sock, 1433 struct msghdr *msg, size_t size, int flags) 1434 { 1435 struct sock *sk = sock->sk; 1436 struct irda_sock *self = irda_sk(sk); 1437 int noblock = flags & MSG_DONTWAIT; 1438 size_t copied = 0; 1439 int target, err; 1440 long timeo; 1441 1442 IRDA_DEBUG(3, "%s()\n", __func__); 1443 1444 if ((err = sock_error(sk)) < 0) 1445 return err; 1446 1447 if (sock->flags & __SO_ACCEPTCON) 1448 return -EINVAL; 1449 1450 err =-EOPNOTSUPP; 1451 if (flags & MSG_OOB) 1452 return -EOPNOTSUPP; 1453 1454 err = 0; 1455 target = sock_rcvlowat(sk, flags & MSG_WAITALL, size); 1456 timeo = sock_rcvtimeo(sk, noblock); 1457 1458 do { 1459 int chunk; 1460 struct sk_buff *skb = skb_dequeue(&sk->sk_receive_queue); 1461 1462 if (skb == NULL) { 1463 DEFINE_WAIT(wait); 1464 err = 0; 1465 1466 if (copied >= target) 1467 break; 1468 1469 prepare_to_wait_exclusive(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); 1470 1471 /* 1472 * POSIX 1003.1g mandates this order. 1473 */ 1474 err = sock_error(sk); 1475 if (err) 1476 ; 1477 else if (sk->sk_shutdown & RCV_SHUTDOWN) 1478 ; 1479 else if (noblock) 1480 err = -EAGAIN; 1481 else if (signal_pending(current)) 1482 err = sock_intr_errno(timeo); 1483 else if (sk->sk_state != TCP_ESTABLISHED) 1484 err = -ENOTCONN; 1485 else if (skb_peek(&sk->sk_receive_queue) == NULL) 1486 /* Wait process until data arrives */ 1487 schedule(); 1488 1489 finish_wait(sk_sleep(sk), &wait); 1490 1491 if (err) 1492 return err; 1493 if (sk->sk_shutdown & RCV_SHUTDOWN) 1494 break; 1495 1496 continue; 1497 } 1498 1499 chunk = min_t(unsigned int, skb->len, size); 1500 if (memcpy_toiovec(msg->msg_iov, skb->data, chunk)) { 1501 skb_queue_head(&sk->sk_receive_queue, skb); 1502 if (copied == 0) 1503 copied = -EFAULT; 1504 break; 1505 } 1506 copied += chunk; 1507 size -= chunk; 1508 1509 /* Mark read part of skb as used */ 1510 if (!(flags & MSG_PEEK)) { 1511 skb_pull(skb, chunk); 1512 1513 /* put the skb back if we didn't use it up.. */ 1514 if (skb->len) { 1515 IRDA_DEBUG(1, "%s(), back on q!\n", 1516 __func__); 1517 skb_queue_head(&sk->sk_receive_queue, skb); 1518 break; 1519 } 1520 1521 kfree_skb(skb); 1522 } else { 1523 IRDA_DEBUG(0, "%s() questionable!?\n", __func__); 1524 1525 /* put message back and return */ 1526 skb_queue_head(&sk->sk_receive_queue, skb); 1527 break; 1528 } 1529 } while (size); 1530 1531 /* 1532 * Check if we have previously stopped IrTTP and we know 1533 * have more free space in our rx_queue. If so tell IrTTP 1534 * to start delivering frames again before our rx_queue gets 1535 * empty 1536 */ 1537 if (self->rx_flow == FLOW_STOP) { 1538 if ((atomic_read(&sk->sk_rmem_alloc) << 2) <= sk->sk_rcvbuf) { 1539 IRDA_DEBUG(2, "%s(), Starting IrTTP\n", __func__); 1540 self->rx_flow = FLOW_START; 1541 irttp_flow_request(self->tsap, FLOW_START); 1542 } 1543 } 1544 1545 return copied; 1546 } 1547 1548 /* 1549 * Function irda_sendmsg_dgram (iocb, sock, msg, len) 1550 * 1551 * Send message down to TinyTP for the unreliable sequenced 1552 * packet service... 1553 * 1554 */ 1555 static int irda_sendmsg_dgram(struct kiocb *iocb, struct socket *sock, 1556 struct msghdr *msg, size_t len) 1557 { 1558 struct sock *sk = sock->sk; 1559 struct irda_sock *self; 1560 struct sk_buff *skb; 1561 int err; 1562 1563 IRDA_DEBUG(4, "%s(), len=%zd\n", __func__, len); 1564 1565 if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_CMSG_COMPAT)) 1566 return -EINVAL; 1567 1568 lock_sock(sk); 1569 1570 if (sk->sk_shutdown & SEND_SHUTDOWN) { 1571 send_sig(SIGPIPE, current, 0); 1572 err = -EPIPE; 1573 goto out; 1574 } 1575 1576 err = -ENOTCONN; 1577 if (sk->sk_state != TCP_ESTABLISHED) 1578 goto out; 1579 1580 self = irda_sk(sk); 1581 1582 /* 1583 * Check that we don't send out too big frames. This is an unreliable 1584 * service, so we have no fragmentation and no coalescence 1585 */ 1586 if (len > self->max_data_size) { 1587 IRDA_DEBUG(0, "%s(), Warning to much data! " 1588 "Chopping frame from %zd to %d bytes!\n", 1589 __func__, len, self->max_data_size); 1590 len = self->max_data_size; 1591 } 1592 1593 skb = sock_alloc_send_skb(sk, len + self->max_header_size, 1594 msg->msg_flags & MSG_DONTWAIT, &err); 1595 err = -ENOBUFS; 1596 if (!skb) 1597 goto out; 1598 1599 skb_reserve(skb, self->max_header_size); 1600 skb_reset_transport_header(skb); 1601 1602 IRDA_DEBUG(4, "%s(), appending user data\n", __func__); 1603 skb_put(skb, len); 1604 err = memcpy_fromiovec(skb_transport_header(skb), msg->msg_iov, len); 1605 if (err) { 1606 kfree_skb(skb); 1607 goto out; 1608 } 1609 1610 /* 1611 * Just send the message to TinyTP, and let it deal with possible 1612 * errors. No need to duplicate all that here 1613 */ 1614 err = irttp_udata_request(self->tsap, skb); 1615 if (err) { 1616 IRDA_DEBUG(0, "%s(), err=%d\n", __func__, err); 1617 goto out; 1618 } 1619 1620 release_sock(sk); 1621 return len; 1622 1623 out: 1624 release_sock(sk); 1625 return err; 1626 } 1627 1628 /* 1629 * Function irda_sendmsg_ultra (iocb, sock, msg, len) 1630 * 1631 * Send message down to IrLMP for the unreliable Ultra 1632 * packet service... 1633 */ 1634 #ifdef CONFIG_IRDA_ULTRA 1635 static int irda_sendmsg_ultra(struct kiocb *iocb, struct socket *sock, 1636 struct msghdr *msg, size_t len) 1637 { 1638 struct sock *sk = sock->sk; 1639 struct irda_sock *self; 1640 __u8 pid = 0; 1641 int bound = 0; 1642 struct sk_buff *skb; 1643 int err; 1644 1645 IRDA_DEBUG(4, "%s(), len=%zd\n", __func__, len); 1646 1647 err = -EINVAL; 1648 if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_CMSG_COMPAT)) 1649 return -EINVAL; 1650 1651 lock_sock(sk); 1652 1653 err = -EPIPE; 1654 if (sk->sk_shutdown & SEND_SHUTDOWN) { 1655 send_sig(SIGPIPE, current, 0); 1656 goto out; 1657 } 1658 1659 self = irda_sk(sk); 1660 1661 /* Check if an address was specified with sendto. Jean II */ 1662 if (msg->msg_name) { 1663 struct sockaddr_irda *addr = (struct sockaddr_irda *) msg->msg_name; 1664 err = -EINVAL; 1665 /* Check address, extract pid. Jean II */ 1666 if (msg->msg_namelen < sizeof(*addr)) 1667 goto out; 1668 if (addr->sir_family != AF_IRDA) 1669 goto out; 1670 1671 pid = addr->sir_lsap_sel; 1672 if (pid & 0x80) { 1673 IRDA_DEBUG(0, "%s(), extension in PID not supp!\n", __func__); 1674 err = -EOPNOTSUPP; 1675 goto out; 1676 } 1677 } else { 1678 /* Check that the socket is properly bound to an Ultra 1679 * port. Jean II */ 1680 if ((self->lsap == NULL) || 1681 (sk->sk_state != TCP_ESTABLISHED)) { 1682 IRDA_DEBUG(0, "%s(), socket not bound to Ultra PID.\n", 1683 __func__); 1684 err = -ENOTCONN; 1685 goto out; 1686 } 1687 /* Use PID from socket */ 1688 bound = 1; 1689 } 1690 1691 /* 1692 * Check that we don't send out too big frames. This is an unreliable 1693 * service, so we have no fragmentation and no coalescence 1694 */ 1695 if (len > self->max_data_size) { 1696 IRDA_DEBUG(0, "%s(), Warning to much data! " 1697 "Chopping frame from %zd to %d bytes!\n", 1698 __func__, len, self->max_data_size); 1699 len = self->max_data_size; 1700 } 1701 1702 skb = sock_alloc_send_skb(sk, len + self->max_header_size, 1703 msg->msg_flags & MSG_DONTWAIT, &err); 1704 err = -ENOBUFS; 1705 if (!skb) 1706 goto out; 1707 1708 skb_reserve(skb, self->max_header_size); 1709 skb_reset_transport_header(skb); 1710 1711 IRDA_DEBUG(4, "%s(), appending user data\n", __func__); 1712 skb_put(skb, len); 1713 err = memcpy_fromiovec(skb_transport_header(skb), msg->msg_iov, len); 1714 if (err) { 1715 kfree_skb(skb); 1716 goto out; 1717 } 1718 1719 err = irlmp_connless_data_request((bound ? self->lsap : NULL), 1720 skb, pid); 1721 if (err) 1722 IRDA_DEBUG(0, "%s(), err=%d\n", __func__, err); 1723 out: 1724 release_sock(sk); 1725 return err ? : len; 1726 } 1727 #endif /* CONFIG_IRDA_ULTRA */ 1728 1729 /* 1730 * Function irda_shutdown (sk, how) 1731 */ 1732 static int irda_shutdown(struct socket *sock, int how) 1733 { 1734 struct sock *sk = sock->sk; 1735 struct irda_sock *self = irda_sk(sk); 1736 1737 IRDA_DEBUG(1, "%s(%p)\n", __func__, self); 1738 1739 lock_sock(sk); 1740 1741 sk->sk_state = TCP_CLOSE; 1742 sk->sk_shutdown |= SEND_SHUTDOWN; 1743 sk->sk_state_change(sk); 1744 1745 if (self->iriap) { 1746 iriap_close(self->iriap); 1747 self->iriap = NULL; 1748 } 1749 1750 if (self->tsap) { 1751 irttp_disconnect_request(self->tsap, NULL, P_NORMAL); 1752 irttp_close_tsap(self->tsap); 1753 self->tsap = NULL; 1754 } 1755 1756 /* A few cleanup so the socket look as good as new... */ 1757 self->rx_flow = self->tx_flow = FLOW_START; /* needed ??? */ 1758 self->daddr = DEV_ADDR_ANY; /* Until we get re-connected */ 1759 self->saddr = 0x0; /* so IrLMP assign us any link */ 1760 1761 release_sock(sk); 1762 1763 return 0; 1764 } 1765 1766 /* 1767 * Function irda_poll (file, sock, wait) 1768 */ 1769 static unsigned int irda_poll(struct file * file, struct socket *sock, 1770 poll_table *wait) 1771 { 1772 struct sock *sk = sock->sk; 1773 struct irda_sock *self = irda_sk(sk); 1774 unsigned int mask; 1775 1776 IRDA_DEBUG(4, "%s()\n", __func__); 1777 1778 poll_wait(file, sk_sleep(sk), wait); 1779 mask = 0; 1780 1781 /* Exceptional events? */ 1782 if (sk->sk_err) 1783 mask |= POLLERR; 1784 if (sk->sk_shutdown & RCV_SHUTDOWN) { 1785 IRDA_DEBUG(0, "%s(), POLLHUP\n", __func__); 1786 mask |= POLLHUP; 1787 } 1788 1789 /* Readable? */ 1790 if (!skb_queue_empty(&sk->sk_receive_queue)) { 1791 IRDA_DEBUG(4, "Socket is readable\n"); 1792 mask |= POLLIN | POLLRDNORM; 1793 } 1794 1795 /* Connection-based need to check for termination and startup */ 1796 switch (sk->sk_type) { 1797 case SOCK_STREAM: 1798 if (sk->sk_state == TCP_CLOSE) { 1799 IRDA_DEBUG(0, "%s(), POLLHUP\n", __func__); 1800 mask |= POLLHUP; 1801 } 1802 1803 if (sk->sk_state == TCP_ESTABLISHED) { 1804 if ((self->tx_flow == FLOW_START) && 1805 sock_writeable(sk)) 1806 { 1807 mask |= POLLOUT | POLLWRNORM | POLLWRBAND; 1808 } 1809 } 1810 break; 1811 case SOCK_SEQPACKET: 1812 if ((self->tx_flow == FLOW_START) && 1813 sock_writeable(sk)) 1814 { 1815 mask |= POLLOUT | POLLWRNORM | POLLWRBAND; 1816 } 1817 break; 1818 case SOCK_DGRAM: 1819 if (sock_writeable(sk)) 1820 mask |= POLLOUT | POLLWRNORM | POLLWRBAND; 1821 break; 1822 default: 1823 break; 1824 } 1825 1826 return mask; 1827 } 1828 1829 /* 1830 * Function irda_ioctl (sock, cmd, arg) 1831 */ 1832 static int irda_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) 1833 { 1834 struct sock *sk = sock->sk; 1835 int err; 1836 1837 IRDA_DEBUG(4, "%s(), cmd=%#x\n", __func__, cmd); 1838 1839 err = -EINVAL; 1840 switch (cmd) { 1841 case TIOCOUTQ: { 1842 long amount; 1843 1844 amount = sk->sk_sndbuf - sk_wmem_alloc_get(sk); 1845 if (amount < 0) 1846 amount = 0; 1847 err = put_user(amount, (unsigned int __user *)arg); 1848 break; 1849 } 1850 1851 case TIOCINQ: { 1852 struct sk_buff *skb; 1853 long amount = 0L; 1854 /* These two are safe on a single CPU system as only user tasks fiddle here */ 1855 if ((skb = skb_peek(&sk->sk_receive_queue)) != NULL) 1856 amount = skb->len; 1857 err = put_user(amount, (unsigned int __user *)arg); 1858 break; 1859 } 1860 1861 case SIOCGSTAMP: 1862 if (sk != NULL) 1863 err = sock_get_timestamp(sk, (struct timeval __user *)arg); 1864 break; 1865 1866 case SIOCGIFADDR: 1867 case SIOCSIFADDR: 1868 case SIOCGIFDSTADDR: 1869 case SIOCSIFDSTADDR: 1870 case SIOCGIFBRDADDR: 1871 case SIOCSIFBRDADDR: 1872 case SIOCGIFNETMASK: 1873 case SIOCSIFNETMASK: 1874 case SIOCGIFMETRIC: 1875 case SIOCSIFMETRIC: 1876 break; 1877 default: 1878 IRDA_DEBUG(1, "%s(), doing device ioctl!\n", __func__); 1879 err = -ENOIOCTLCMD; 1880 } 1881 1882 return err; 1883 } 1884 1885 #ifdef CONFIG_COMPAT 1886 /* 1887 * Function irda_ioctl (sock, cmd, arg) 1888 */ 1889 static int irda_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) 1890 { 1891 /* 1892 * All IRDA's ioctl are standard ones. 1893 */ 1894 return -ENOIOCTLCMD; 1895 } 1896 #endif 1897 1898 /* 1899 * Function irda_setsockopt (sock, level, optname, optval, optlen) 1900 * 1901 * Set some options for the socket 1902 * 1903 */ 1904 static int irda_setsockopt(struct socket *sock, int level, int optname, 1905 char __user *optval, unsigned int optlen) 1906 { 1907 struct sock *sk = sock->sk; 1908 struct irda_sock *self = irda_sk(sk); 1909 struct irda_ias_set *ias_opt; 1910 struct ias_object *ias_obj; 1911 struct ias_attrib * ias_attr; /* Attribute in IAS object */ 1912 int opt, free_ias = 0, err = 0; 1913 1914 IRDA_DEBUG(2, "%s(%p)\n", __func__, self); 1915 1916 if (level != SOL_IRLMP) 1917 return -ENOPROTOOPT; 1918 1919 lock_sock(sk); 1920 1921 switch (optname) { 1922 case IRLMP_IAS_SET: 1923 /* The user want to add an attribute to an existing IAS object 1924 * (in the IAS database) or to create a new object with this 1925 * attribute. 1926 * We first query IAS to know if the object exist, and then 1927 * create the right attribute... 1928 */ 1929 1930 if (optlen != sizeof(struct irda_ias_set)) { 1931 err = -EINVAL; 1932 goto out; 1933 } 1934 1935 ias_opt = kmalloc(sizeof(struct irda_ias_set), GFP_ATOMIC); 1936 if (ias_opt == NULL) { 1937 err = -ENOMEM; 1938 goto out; 1939 } 1940 1941 /* Copy query to the driver. */ 1942 if (copy_from_user(ias_opt, optval, optlen)) { 1943 kfree(ias_opt); 1944 err = -EFAULT; 1945 goto out; 1946 } 1947 1948 /* Find the object we target. 1949 * If the user gives us an empty string, we use the object 1950 * associated with this socket. This will workaround 1951 * duplicated class name - Jean II */ 1952 if(ias_opt->irda_class_name[0] == '\0') { 1953 if(self->ias_obj == NULL) { 1954 kfree(ias_opt); 1955 err = -EINVAL; 1956 goto out; 1957 } 1958 ias_obj = self->ias_obj; 1959 } else 1960 ias_obj = irias_find_object(ias_opt->irda_class_name); 1961 1962 /* Only ROOT can mess with the global IAS database. 1963 * Users can only add attributes to the object associated 1964 * with the socket they own - Jean II */ 1965 if((!capable(CAP_NET_ADMIN)) && 1966 ((ias_obj == NULL) || (ias_obj != self->ias_obj))) { 1967 kfree(ias_opt); 1968 err = -EPERM; 1969 goto out; 1970 } 1971 1972 /* If the object doesn't exist, create it */ 1973 if(ias_obj == (struct ias_object *) NULL) { 1974 /* Create a new object */ 1975 ias_obj = irias_new_object(ias_opt->irda_class_name, 1976 jiffies); 1977 if (ias_obj == NULL) { 1978 kfree(ias_opt); 1979 err = -ENOMEM; 1980 goto out; 1981 } 1982 free_ias = 1; 1983 } 1984 1985 /* Do we have the attribute already ? */ 1986 if(irias_find_attrib(ias_obj, ias_opt->irda_attrib_name)) { 1987 kfree(ias_opt); 1988 if (free_ias) { 1989 kfree(ias_obj->name); 1990 kfree(ias_obj); 1991 } 1992 err = -EINVAL; 1993 goto out; 1994 } 1995 1996 /* Look at the type */ 1997 switch(ias_opt->irda_attrib_type) { 1998 case IAS_INTEGER: 1999 /* Add an integer attribute */ 2000 irias_add_integer_attrib( 2001 ias_obj, 2002 ias_opt->irda_attrib_name, 2003 ias_opt->attribute.irda_attrib_int, 2004 IAS_USER_ATTR); 2005 break; 2006 case IAS_OCT_SEQ: 2007 /* Check length */ 2008 if(ias_opt->attribute.irda_attrib_octet_seq.len > 2009 IAS_MAX_OCTET_STRING) { 2010 kfree(ias_opt); 2011 if (free_ias) { 2012 kfree(ias_obj->name); 2013 kfree(ias_obj); 2014 } 2015 2016 err = -EINVAL; 2017 goto out; 2018 } 2019 /* Add an octet sequence attribute */ 2020 irias_add_octseq_attrib( 2021 ias_obj, 2022 ias_opt->irda_attrib_name, 2023 ias_opt->attribute.irda_attrib_octet_seq.octet_seq, 2024 ias_opt->attribute.irda_attrib_octet_seq.len, 2025 IAS_USER_ATTR); 2026 break; 2027 case IAS_STRING: 2028 /* Should check charset & co */ 2029 /* Check length */ 2030 /* The length is encoded in a __u8, and 2031 * IAS_MAX_STRING == 256, so there is no way 2032 * userspace can pass us a string too large. 2033 * Jean II */ 2034 /* NULL terminate the string (avoid troubles) */ 2035 ias_opt->attribute.irda_attrib_string.string[ias_opt->attribute.irda_attrib_string.len] = '\0'; 2036 /* Add a string attribute */ 2037 irias_add_string_attrib( 2038 ias_obj, 2039 ias_opt->irda_attrib_name, 2040 ias_opt->attribute.irda_attrib_string.string, 2041 IAS_USER_ATTR); 2042 break; 2043 default : 2044 kfree(ias_opt); 2045 if (free_ias) { 2046 kfree(ias_obj->name); 2047 kfree(ias_obj); 2048 } 2049 err = -EINVAL; 2050 goto out; 2051 } 2052 irias_insert_object(ias_obj); 2053 kfree(ias_opt); 2054 break; 2055 case IRLMP_IAS_DEL: 2056 /* The user want to delete an object from our local IAS 2057 * database. We just need to query the IAS, check is the 2058 * object is not owned by the kernel and delete it. 2059 */ 2060 2061 if (optlen != sizeof(struct irda_ias_set)) { 2062 err = -EINVAL; 2063 goto out; 2064 } 2065 2066 ias_opt = kmalloc(sizeof(struct irda_ias_set), GFP_ATOMIC); 2067 if (ias_opt == NULL) { 2068 err = -ENOMEM; 2069 goto out; 2070 } 2071 2072 /* Copy query to the driver. */ 2073 if (copy_from_user(ias_opt, optval, optlen)) { 2074 kfree(ias_opt); 2075 err = -EFAULT; 2076 goto out; 2077 } 2078 2079 /* Find the object we target. 2080 * If the user gives us an empty string, we use the object 2081 * associated with this socket. This will workaround 2082 * duplicated class name - Jean II */ 2083 if(ias_opt->irda_class_name[0] == '\0') 2084 ias_obj = self->ias_obj; 2085 else 2086 ias_obj = irias_find_object(ias_opt->irda_class_name); 2087 if(ias_obj == (struct ias_object *) NULL) { 2088 kfree(ias_opt); 2089 err = -EINVAL; 2090 goto out; 2091 } 2092 2093 /* Only ROOT can mess with the global IAS database. 2094 * Users can only del attributes from the object associated 2095 * with the socket they own - Jean II */ 2096 if((!capable(CAP_NET_ADMIN)) && 2097 ((ias_obj == NULL) || (ias_obj != self->ias_obj))) { 2098 kfree(ias_opt); 2099 err = -EPERM; 2100 goto out; 2101 } 2102 2103 /* Find the attribute (in the object) we target */ 2104 ias_attr = irias_find_attrib(ias_obj, 2105 ias_opt->irda_attrib_name); 2106 if(ias_attr == (struct ias_attrib *) NULL) { 2107 kfree(ias_opt); 2108 err = -EINVAL; 2109 goto out; 2110 } 2111 2112 /* Check is the user space own the object */ 2113 if(ias_attr->value->owner != IAS_USER_ATTR) { 2114 IRDA_DEBUG(1, "%s(), attempting to delete a kernel attribute\n", __func__); 2115 kfree(ias_opt); 2116 err = -EPERM; 2117 goto out; 2118 } 2119 2120 /* Remove the attribute (and maybe the object) */ 2121 irias_delete_attrib(ias_obj, ias_attr, 1); 2122 kfree(ias_opt); 2123 break; 2124 case IRLMP_MAX_SDU_SIZE: 2125 if (optlen < sizeof(int)) { 2126 err = -EINVAL; 2127 goto out; 2128 } 2129 2130 if (get_user(opt, (int __user *)optval)) { 2131 err = -EFAULT; 2132 goto out; 2133 } 2134 2135 /* Only possible for a seqpacket service (TTP with SAR) */ 2136 if (sk->sk_type != SOCK_SEQPACKET) { 2137 IRDA_DEBUG(2, "%s(), setting max_sdu_size = %d\n", 2138 __func__, opt); 2139 self->max_sdu_size_rx = opt; 2140 } else { 2141 IRDA_WARNING("%s: not allowed to set MAXSDUSIZE for this socket type!\n", 2142 __func__); 2143 err = -ENOPROTOOPT; 2144 goto out; 2145 } 2146 break; 2147 case IRLMP_HINTS_SET: 2148 if (optlen < sizeof(int)) { 2149 err = -EINVAL; 2150 goto out; 2151 } 2152 2153 /* The input is really a (__u8 hints[2]), easier as an int */ 2154 if (get_user(opt, (int __user *)optval)) { 2155 err = -EFAULT; 2156 goto out; 2157 } 2158 2159 /* Unregister any old registration */ 2160 if (self->skey) 2161 irlmp_unregister_service(self->skey); 2162 2163 self->skey = irlmp_register_service((__u16) opt); 2164 break; 2165 case IRLMP_HINT_MASK_SET: 2166 /* As opposed to the previous case which set the hint bits 2167 * that we advertise, this one set the filter we use when 2168 * making a discovery (nodes which don't match any hint 2169 * bit in the mask are not reported). 2170 */ 2171 if (optlen < sizeof(int)) { 2172 err = -EINVAL; 2173 goto out; 2174 } 2175 2176 /* The input is really a (__u8 hints[2]), easier as an int */ 2177 if (get_user(opt, (int __user *)optval)) { 2178 err = -EFAULT; 2179 goto out; 2180 } 2181 2182 /* Set the new hint mask */ 2183 self->mask.word = (__u16) opt; 2184 /* Mask out extension bits */ 2185 self->mask.word &= 0x7f7f; 2186 /* Check if no bits */ 2187 if(!self->mask.word) 2188 self->mask.word = 0xFFFF; 2189 2190 break; 2191 default: 2192 err = -ENOPROTOOPT; 2193 break; 2194 } 2195 2196 out: 2197 release_sock(sk); 2198 2199 return err; 2200 } 2201 2202 /* 2203 * Function irda_extract_ias_value(ias_opt, ias_value) 2204 * 2205 * Translate internal IAS value structure to the user space representation 2206 * 2207 * The external representation of IAS values, as we exchange them with 2208 * user space program is quite different from the internal representation, 2209 * as stored in the IAS database (because we need a flat structure for 2210 * crossing kernel boundary). 2211 * This function transform the former in the latter. We also check 2212 * that the value type is valid. 2213 */ 2214 static int irda_extract_ias_value(struct irda_ias_set *ias_opt, 2215 struct ias_value *ias_value) 2216 { 2217 /* Look at the type */ 2218 switch (ias_value->type) { 2219 case IAS_INTEGER: 2220 /* Copy the integer */ 2221 ias_opt->attribute.irda_attrib_int = ias_value->t.integer; 2222 break; 2223 case IAS_OCT_SEQ: 2224 /* Set length */ 2225 ias_opt->attribute.irda_attrib_octet_seq.len = ias_value->len; 2226 /* Copy over */ 2227 memcpy(ias_opt->attribute.irda_attrib_octet_seq.octet_seq, 2228 ias_value->t.oct_seq, ias_value->len); 2229 break; 2230 case IAS_STRING: 2231 /* Set length */ 2232 ias_opt->attribute.irda_attrib_string.len = ias_value->len; 2233 ias_opt->attribute.irda_attrib_string.charset = ias_value->charset; 2234 /* Copy over */ 2235 memcpy(ias_opt->attribute.irda_attrib_string.string, 2236 ias_value->t.string, ias_value->len); 2237 /* NULL terminate the string (avoid troubles) */ 2238 ias_opt->attribute.irda_attrib_string.string[ias_value->len] = '\0'; 2239 break; 2240 case IAS_MISSING: 2241 default : 2242 return -EINVAL; 2243 } 2244 2245 /* Copy type over */ 2246 ias_opt->irda_attrib_type = ias_value->type; 2247 2248 return 0; 2249 } 2250 2251 /* 2252 * Function irda_getsockopt (sock, level, optname, optval, optlen) 2253 */ 2254 static int irda_getsockopt(struct socket *sock, int level, int optname, 2255 char __user *optval, int __user *optlen) 2256 { 2257 struct sock *sk = sock->sk; 2258 struct irda_sock *self = irda_sk(sk); 2259 struct irda_device_list list; 2260 struct irda_device_info *discoveries; 2261 struct irda_ias_set * ias_opt; /* IAS get/query params */ 2262 struct ias_object * ias_obj; /* Object in IAS */ 2263 struct ias_attrib * ias_attr; /* Attribute in IAS object */ 2264 int daddr = DEV_ADDR_ANY; /* Dest address for IAS queries */ 2265 int val = 0; 2266 int len = 0; 2267 int err = 0; 2268 int offset, total; 2269 2270 IRDA_DEBUG(2, "%s(%p)\n", __func__, self); 2271 2272 if (level != SOL_IRLMP) 2273 return -ENOPROTOOPT; 2274 2275 if (get_user(len, optlen)) 2276 return -EFAULT; 2277 2278 if(len < 0) 2279 return -EINVAL; 2280 2281 lock_sock(sk); 2282 2283 switch (optname) { 2284 case IRLMP_ENUMDEVICES: 2285 2286 /* Offset to first device entry */ 2287 offset = sizeof(struct irda_device_list) - 2288 sizeof(struct irda_device_info); 2289 2290 if (len < offset) { 2291 err = -EINVAL; 2292 goto out; 2293 } 2294 2295 /* Ask lmp for the current discovery log */ 2296 discoveries = irlmp_get_discoveries(&list.len, self->mask.word, 2297 self->nslots); 2298 /* Check if the we got some results */ 2299 if (discoveries == NULL) { 2300 err = -EAGAIN; 2301 goto out; /* Didn't find any devices */ 2302 } 2303 2304 /* Write total list length back to client */ 2305 if (copy_to_user(optval, &list, offset)) 2306 err = -EFAULT; 2307 2308 /* Copy the list itself - watch for overflow */ 2309 if (list.len > 2048) { 2310 err = -EINVAL; 2311 goto bed; 2312 } 2313 total = offset + (list.len * sizeof(struct irda_device_info)); 2314 if (total > len) 2315 total = len; 2316 if (copy_to_user(optval+offset, discoveries, total - offset)) 2317 err = -EFAULT; 2318 2319 /* Write total number of bytes used back to client */ 2320 if (put_user(total, optlen)) 2321 err = -EFAULT; 2322 bed: 2323 /* Free up our buffer */ 2324 kfree(discoveries); 2325 break; 2326 case IRLMP_MAX_SDU_SIZE: 2327 val = self->max_data_size; 2328 len = sizeof(int); 2329 if (put_user(len, optlen)) { 2330 err = -EFAULT; 2331 goto out; 2332 } 2333 2334 if (copy_to_user(optval, &val, len)) { 2335 err = -EFAULT; 2336 goto out; 2337 } 2338 2339 break; 2340 case IRLMP_IAS_GET: 2341 /* The user want an object from our local IAS database. 2342 * We just need to query the IAS and return the value 2343 * that we found */ 2344 2345 /* Check that the user has allocated the right space for us */ 2346 if (len != sizeof(struct irda_ias_set)) { 2347 err = -EINVAL; 2348 goto out; 2349 } 2350 2351 ias_opt = kmalloc(sizeof(struct irda_ias_set), GFP_ATOMIC); 2352 if (ias_opt == NULL) { 2353 err = -ENOMEM; 2354 goto out; 2355 } 2356 2357 /* Copy query to the driver. */ 2358 if (copy_from_user(ias_opt, optval, len)) { 2359 kfree(ias_opt); 2360 err = -EFAULT; 2361 goto out; 2362 } 2363 2364 /* Find the object we target. 2365 * If the user gives us an empty string, we use the object 2366 * associated with this socket. This will workaround 2367 * duplicated class name - Jean II */ 2368 if(ias_opt->irda_class_name[0] == '\0') 2369 ias_obj = self->ias_obj; 2370 else 2371 ias_obj = irias_find_object(ias_opt->irda_class_name); 2372 if(ias_obj == (struct ias_object *) NULL) { 2373 kfree(ias_opt); 2374 err = -EINVAL; 2375 goto out; 2376 } 2377 2378 /* Find the attribute (in the object) we target */ 2379 ias_attr = irias_find_attrib(ias_obj, 2380 ias_opt->irda_attrib_name); 2381 if(ias_attr == (struct ias_attrib *) NULL) { 2382 kfree(ias_opt); 2383 err = -EINVAL; 2384 goto out; 2385 } 2386 2387 /* Translate from internal to user structure */ 2388 err = irda_extract_ias_value(ias_opt, ias_attr->value); 2389 if(err) { 2390 kfree(ias_opt); 2391 goto out; 2392 } 2393 2394 /* Copy reply to the user */ 2395 if (copy_to_user(optval, ias_opt, 2396 sizeof(struct irda_ias_set))) { 2397 kfree(ias_opt); 2398 err = -EFAULT; 2399 goto out; 2400 } 2401 /* Note : don't need to put optlen, we checked it */ 2402 kfree(ias_opt); 2403 break; 2404 case IRLMP_IAS_QUERY: 2405 /* The user want an object from a remote IAS database. 2406 * We need to use IAP to query the remote database and 2407 * then wait for the answer to come back. */ 2408 2409 /* Check that the user has allocated the right space for us */ 2410 if (len != sizeof(struct irda_ias_set)) { 2411 err = -EINVAL; 2412 goto out; 2413 } 2414 2415 ias_opt = kmalloc(sizeof(struct irda_ias_set), GFP_ATOMIC); 2416 if (ias_opt == NULL) { 2417 err = -ENOMEM; 2418 goto out; 2419 } 2420 2421 /* Copy query to the driver. */ 2422 if (copy_from_user(ias_opt, optval, len)) { 2423 kfree(ias_opt); 2424 err = -EFAULT; 2425 goto out; 2426 } 2427 2428 /* At this point, there are two cases... 2429 * 1) the socket is connected - that's the easy case, we 2430 * just query the device we are connected to... 2431 * 2) the socket is not connected - the user doesn't want 2432 * to connect and/or may not have a valid service name 2433 * (so can't create a fake connection). In this case, 2434 * we assume that the user pass us a valid destination 2435 * address in the requesting structure... 2436 */ 2437 if(self->daddr != DEV_ADDR_ANY) { 2438 /* We are connected - reuse known daddr */ 2439 daddr = self->daddr; 2440 } else { 2441 /* We are not connected, we must specify a valid 2442 * destination address */ 2443 daddr = ias_opt->daddr; 2444 if((!daddr) || (daddr == DEV_ADDR_ANY)) { 2445 kfree(ias_opt); 2446 err = -EINVAL; 2447 goto out; 2448 } 2449 } 2450 2451 /* Check that we can proceed with IAP */ 2452 if (self->iriap) { 2453 IRDA_WARNING("%s: busy with a previous query\n", 2454 __func__); 2455 kfree(ias_opt); 2456 err = -EBUSY; 2457 goto out; 2458 } 2459 2460 self->iriap = iriap_open(LSAP_ANY, IAS_CLIENT, self, 2461 irda_getvalue_confirm); 2462 2463 if (self->iriap == NULL) { 2464 kfree(ias_opt); 2465 err = -ENOMEM; 2466 goto out; 2467 } 2468 2469 /* Treat unexpected wakeup as disconnect */ 2470 self->errno = -EHOSTUNREACH; 2471 2472 /* Query remote LM-IAS */ 2473 iriap_getvaluebyclass_request(self->iriap, 2474 self->saddr, daddr, 2475 ias_opt->irda_class_name, 2476 ias_opt->irda_attrib_name); 2477 2478 /* Wait for answer, if not yet finished (or failed) */ 2479 if (wait_event_interruptible(self->query_wait, 2480 (self->iriap == NULL))) { 2481 /* pending request uses copy of ias_opt-content 2482 * we can free it regardless! */ 2483 kfree(ias_opt); 2484 /* Treat signals as disconnect */ 2485 err = -EHOSTUNREACH; 2486 goto out; 2487 } 2488 2489 /* Check what happened */ 2490 if (self->errno) 2491 { 2492 kfree(ias_opt); 2493 /* Requested object/attribute doesn't exist */ 2494 if((self->errno == IAS_CLASS_UNKNOWN) || 2495 (self->errno == IAS_ATTRIB_UNKNOWN)) 2496 err = -EADDRNOTAVAIL; 2497 else 2498 err = -EHOSTUNREACH; 2499 2500 goto out; 2501 } 2502 2503 /* Translate from internal to user structure */ 2504 err = irda_extract_ias_value(ias_opt, self->ias_result); 2505 if (self->ias_result) 2506 irias_delete_value(self->ias_result); 2507 if (err) { 2508 kfree(ias_opt); 2509 goto out; 2510 } 2511 2512 /* Copy reply to the user */ 2513 if (copy_to_user(optval, ias_opt, 2514 sizeof(struct irda_ias_set))) { 2515 kfree(ias_opt); 2516 err = -EFAULT; 2517 goto out; 2518 } 2519 /* Note : don't need to put optlen, we checked it */ 2520 kfree(ias_opt); 2521 break; 2522 case IRLMP_WAITDEVICE: 2523 /* This function is just another way of seeing life ;-) 2524 * IRLMP_ENUMDEVICES assumes that you have a static network, 2525 * and that you just want to pick one of the devices present. 2526 * On the other hand, in here we assume that no device is 2527 * present and that at some point in the future a device will 2528 * come into range. When this device arrive, we just wake 2529 * up the caller, so that he has time to connect to it before 2530 * the device goes away... 2531 * Note : once the node has been discovered for more than a 2532 * few second, it won't trigger this function, unless it 2533 * goes away and come back changes its hint bits (so we 2534 * might call it IRLMP_WAITNEWDEVICE). 2535 */ 2536 2537 /* Check that the user is passing us an int */ 2538 if (len != sizeof(int)) { 2539 err = -EINVAL; 2540 goto out; 2541 } 2542 /* Get timeout in ms (max time we block the caller) */ 2543 if (get_user(val, (int __user *)optval)) { 2544 err = -EFAULT; 2545 goto out; 2546 } 2547 2548 /* Tell IrLMP we want to be notified */ 2549 irlmp_update_client(self->ckey, self->mask.word, 2550 irda_selective_discovery_indication, 2551 NULL, (void *) self); 2552 2553 /* Do some discovery (and also return cached results) */ 2554 irlmp_discovery_request(self->nslots); 2555 2556 /* Wait until a node is discovered */ 2557 if (!self->cachedaddr) { 2558 IRDA_DEBUG(1, "%s(), nothing discovered yet, going to sleep...\n", __func__); 2559 2560 /* Set watchdog timer to expire in <val> ms. */ 2561 self->errno = 0; 2562 setup_timer(&self->watchdog, irda_discovery_timeout, 2563 (unsigned long)self); 2564 mod_timer(&self->watchdog, 2565 jiffies + msecs_to_jiffies(val)); 2566 2567 /* Wait for IR-LMP to call us back */ 2568 __wait_event_interruptible(self->query_wait, 2569 (self->cachedaddr != 0 || self->errno == -ETIME), 2570 err); 2571 2572 /* If watchdog is still activated, kill it! */ 2573 del_timer(&(self->watchdog)); 2574 2575 IRDA_DEBUG(1, "%s(), ...waking up !\n", __func__); 2576 2577 if (err != 0) 2578 goto out; 2579 } 2580 else 2581 IRDA_DEBUG(1, "%s(), found immediately !\n", 2582 __func__); 2583 2584 /* Tell IrLMP that we have been notified */ 2585 irlmp_update_client(self->ckey, self->mask.word, 2586 NULL, NULL, NULL); 2587 2588 /* Check if the we got some results */ 2589 if (!self->cachedaddr) { 2590 err = -EAGAIN; /* Didn't find any devices */ 2591 goto out; 2592 } 2593 daddr = self->cachedaddr; 2594 /* Cleanup */ 2595 self->cachedaddr = 0; 2596 2597 /* We return the daddr of the device that trigger the 2598 * wakeup. As irlmp pass us only the new devices, we 2599 * are sure that it's not an old device. 2600 * If the user want more details, he should query 2601 * the whole discovery log and pick one device... 2602 */ 2603 if (put_user(daddr, (int __user *)optval)) { 2604 err = -EFAULT; 2605 goto out; 2606 } 2607 2608 break; 2609 default: 2610 err = -ENOPROTOOPT; 2611 } 2612 2613 out: 2614 2615 release_sock(sk); 2616 2617 return err; 2618 } 2619 2620 static const struct net_proto_family irda_family_ops = { 2621 .family = PF_IRDA, 2622 .create = irda_create, 2623 .owner = THIS_MODULE, 2624 }; 2625 2626 static const struct proto_ops irda_stream_ops = { 2627 .family = PF_IRDA, 2628 .owner = THIS_MODULE, 2629 .release = irda_release, 2630 .bind = irda_bind, 2631 .connect = irda_connect, 2632 .socketpair = sock_no_socketpair, 2633 .accept = irda_accept, 2634 .getname = irda_getname, 2635 .poll = irda_poll, 2636 .ioctl = irda_ioctl, 2637 #ifdef CONFIG_COMPAT 2638 .compat_ioctl = irda_compat_ioctl, 2639 #endif 2640 .listen = irda_listen, 2641 .shutdown = irda_shutdown, 2642 .setsockopt = irda_setsockopt, 2643 .getsockopt = irda_getsockopt, 2644 .sendmsg = irda_sendmsg, 2645 .recvmsg = irda_recvmsg_stream, 2646 .mmap = sock_no_mmap, 2647 .sendpage = sock_no_sendpage, 2648 }; 2649 2650 static const struct proto_ops irda_seqpacket_ops = { 2651 .family = PF_IRDA, 2652 .owner = THIS_MODULE, 2653 .release = irda_release, 2654 .bind = irda_bind, 2655 .connect = irda_connect, 2656 .socketpair = sock_no_socketpair, 2657 .accept = irda_accept, 2658 .getname = irda_getname, 2659 .poll = datagram_poll, 2660 .ioctl = irda_ioctl, 2661 #ifdef CONFIG_COMPAT 2662 .compat_ioctl = irda_compat_ioctl, 2663 #endif 2664 .listen = irda_listen, 2665 .shutdown = irda_shutdown, 2666 .setsockopt = irda_setsockopt, 2667 .getsockopt = irda_getsockopt, 2668 .sendmsg = irda_sendmsg, 2669 .recvmsg = irda_recvmsg_dgram, 2670 .mmap = sock_no_mmap, 2671 .sendpage = sock_no_sendpage, 2672 }; 2673 2674 static const struct proto_ops irda_dgram_ops = { 2675 .family = PF_IRDA, 2676 .owner = THIS_MODULE, 2677 .release = irda_release, 2678 .bind = irda_bind, 2679 .connect = irda_connect, 2680 .socketpair = sock_no_socketpair, 2681 .accept = irda_accept, 2682 .getname = irda_getname, 2683 .poll = datagram_poll, 2684 .ioctl = irda_ioctl, 2685 #ifdef CONFIG_COMPAT 2686 .compat_ioctl = irda_compat_ioctl, 2687 #endif 2688 .listen = irda_listen, 2689 .shutdown = irda_shutdown, 2690 .setsockopt = irda_setsockopt, 2691 .getsockopt = irda_getsockopt, 2692 .sendmsg = irda_sendmsg_dgram, 2693 .recvmsg = irda_recvmsg_dgram, 2694 .mmap = sock_no_mmap, 2695 .sendpage = sock_no_sendpage, 2696 }; 2697 2698 #ifdef CONFIG_IRDA_ULTRA 2699 static const struct proto_ops irda_ultra_ops = { 2700 .family = PF_IRDA, 2701 .owner = THIS_MODULE, 2702 .release = irda_release, 2703 .bind = irda_bind, 2704 .connect = sock_no_connect, 2705 .socketpair = sock_no_socketpair, 2706 .accept = sock_no_accept, 2707 .getname = irda_getname, 2708 .poll = datagram_poll, 2709 .ioctl = irda_ioctl, 2710 #ifdef CONFIG_COMPAT 2711 .compat_ioctl = irda_compat_ioctl, 2712 #endif 2713 .listen = sock_no_listen, 2714 .shutdown = irda_shutdown, 2715 .setsockopt = irda_setsockopt, 2716 .getsockopt = irda_getsockopt, 2717 .sendmsg = irda_sendmsg_ultra, 2718 .recvmsg = irda_recvmsg_dgram, 2719 .mmap = sock_no_mmap, 2720 .sendpage = sock_no_sendpage, 2721 }; 2722 #endif /* CONFIG_IRDA_ULTRA */ 2723 2724 /* 2725 * Function irsock_init (pro) 2726 * 2727 * Initialize IrDA protocol 2728 * 2729 */ 2730 int __init irsock_init(void) 2731 { 2732 int rc = proto_register(&irda_proto, 0); 2733 2734 if (rc == 0) 2735 rc = sock_register(&irda_family_ops); 2736 2737 return rc; 2738 } 2739 2740 /* 2741 * Function irsock_cleanup (void) 2742 * 2743 * Remove IrDA protocol 2744 * 2745 */ 2746 void irsock_cleanup(void) 2747 { 2748 sock_unregister(PF_IRDA); 2749 proto_unregister(&irda_proto); 2750 } 2751
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.