1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * IUCV network driver 4 * 5 * Copyright IBM Corp. 2001, 2009 6 * 7 * Author(s): 8 * Original netiucv driver: 9 * Fritz Elfert (elfert@de.ibm.com, felfert@millenux.com) 10 * Sysfs integration and all bugs therein: 11 * Cornelia Huck (cornelia.huck@de.ibm.com) 12 * PM functions: 13 * Ursula Braun (ursula.braun@de.ibm.com) 14 * 15 * Documentation used: 16 * the source of the original IUCV driver by: 17 * Stefan Hegewald <hegewald@de.ibm.com> 18 * Hartmut Penner <hpenner@de.ibm.com> 19 * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) 20 * Martin Schwidefsky (schwidefsky@de.ibm.com) 21 * Alan Altmark (Alan_Altmark@us.ibm.com) Sept. 2000 22 */ 23 24 #define KMSG_COMPONENT "netiucv" 25 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt 26 27 #undef DEBUG 28 29 #include <linux/module.h> 30 #include <linux/init.h> 31 #include <linux/kernel.h> 32 #include <linux/slab.h> 33 #include <linux/errno.h> 34 #include <linux/types.h> 35 #include <linux/interrupt.h> 36 #include <linux/timer.h> 37 #include <linux/bitops.h> 38 39 #include <linux/signal.h> 40 #include <linux/string.h> 41 #include <linux/device.h> 42 43 #include <linux/ip.h> 44 #include <linux/if_arp.h> 45 #include <linux/tcp.h> 46 #include <linux/skbuff.h> 47 #include <linux/ctype.h> 48 #include <net/dst.h> 49 50 #include <asm/io.h> 51 #include <linux/uaccess.h> 52 #include <asm/ebcdic.h> 53 54 #include <net/iucv/iucv.h> 55 #include "fsm.h" 56 57 MODULE_AUTHOR 58 ("(C) 2001 IBM Corporation by Fritz Elfert (felfert@millenux.com)"); 59 MODULE_DESCRIPTION ("Linux for S/390 IUCV network driver"); 60 61 /* 62 * Debug Facility stuff 63 */ 64 #define IUCV_DBF_SETUP_NAME "iucv_setup" 65 #define IUCV_DBF_SETUP_LEN 64 66 #define IUCV_DBF_SETUP_PAGES 2 67 #define IUCV_DBF_SETUP_NR_AREAS 1 68 #define IUCV_DBF_SETUP_LEVEL 3 69 70 #define IUCV_DBF_DATA_NAME "iucv_data" 71 #define IUCV_DBF_DATA_LEN 128 72 #define IUCV_DBF_DATA_PAGES 2 73 #define IUCV_DBF_DATA_NR_AREAS 1 74 #define IUCV_DBF_DATA_LEVEL 2 75 76 #define IUCV_DBF_TRACE_NAME "iucv_trace" 77 #define IUCV_DBF_TRACE_LEN 16 78 #define IUCV_DBF_TRACE_PAGES 4 79 #define IUCV_DBF_TRACE_NR_AREAS 1 80 #define IUCV_DBF_TRACE_LEVEL 3 81 82 #define IUCV_DBF_TEXT(name,level,text) \ 83 do { \ 84 debug_text_event(iucv_dbf_##name,level,text); \ 85 } while (0) 86 87 #define IUCV_DBF_HEX(name,level,addr,len) \ 88 do { \ 89 debug_event(iucv_dbf_##name,level,(void*)(addr),len); \ 90 } while (0) 91 92 DECLARE_PER_CPU(char[256], iucv_dbf_txt_buf); 93 94 #define IUCV_DBF_TEXT_(name, level, text...) \ 95 do { \ 96 if (debug_level_enabled(iucv_dbf_##name, level)) { \ 97 char* __buf = get_cpu_var(iucv_dbf_txt_buf); \ 98 sprintf(__buf, text); \ 99 debug_text_event(iucv_dbf_##name, level, __buf); \ 100 put_cpu_var(iucv_dbf_txt_buf); \ 101 } \ 102 } while (0) 103 104 #define IUCV_DBF_SPRINTF(name,level,text...) \ 105 do { \ 106 debug_sprintf_event(iucv_dbf_trace, level, ##text ); \ 107 debug_sprintf_event(iucv_dbf_trace, level, text ); \ 108 } while (0) 109 110 /* 111 * some more debug stuff 112 */ 113 #define PRINTK_HEADER " iucv: " /* for debugging */ 114 115 static struct device_driver netiucv_driver = { 116 .owner = THIS_MODULE, 117 .name = "netiucv", 118 .bus = &iucv_bus, 119 }; 120 121 /* 122 * Per connection profiling data 123 */ 124 struct connection_profile { 125 unsigned long maxmulti; 126 unsigned long maxcqueue; 127 unsigned long doios_single; 128 unsigned long doios_multi; 129 unsigned long txlen; 130 unsigned long tx_time; 131 unsigned long send_stamp; 132 unsigned long tx_pending; 133 unsigned long tx_max_pending; 134 }; 135 136 /* 137 * Representation of one iucv connection 138 */ 139 struct iucv_connection { 140 struct list_head list; 141 struct iucv_path *path; 142 struct sk_buff *rx_buff; 143 struct sk_buff *tx_buff; 144 struct sk_buff_head collect_queue; 145 struct sk_buff_head commit_queue; 146 spinlock_t collect_lock; 147 int collect_len; 148 int max_buffsize; 149 fsm_timer timer; 150 fsm_instance *fsm; 151 struct net_device *netdev; 152 struct connection_profile prof; 153 char userid[9]; 154 char userdata[17]; 155 }; 156 157 /* 158 * Linked list of all connection structs. 159 */ 160 static LIST_HEAD(iucv_connection_list); 161 static DEFINE_RWLOCK(iucv_connection_rwlock); 162 163 /* 164 * Representation of event-data for the 165 * connection state machine. 166 */ 167 struct iucv_event { 168 struct iucv_connection *conn; 169 void *data; 170 }; 171 172 /* 173 * Private part of the network device structure 174 */ 175 struct netiucv_priv { 176 struct net_device_stats stats; 177 unsigned long tbusy; 178 fsm_instance *fsm; 179 struct iucv_connection *conn; 180 struct device *dev; 181 }; 182 183 /* 184 * Link level header for a packet. 185 */ 186 struct ll_header { 187 u16 next; 188 }; 189 190 #define NETIUCV_HDRLEN (sizeof(struct ll_header)) 191 #define NETIUCV_BUFSIZE_MAX 65537 192 #define NETIUCV_BUFSIZE_DEFAULT NETIUCV_BUFSIZE_MAX 193 #define NETIUCV_MTU_MAX (NETIUCV_BUFSIZE_MAX - NETIUCV_HDRLEN) 194 #define NETIUCV_MTU_DEFAULT 9216 195 #define NETIUCV_QUEUELEN_DEFAULT 50 196 #define NETIUCV_TIMEOUT_5SEC 5000 197 198 /* 199 * Compatibility macros for busy handling 200 * of network devices. 201 */ 202 static void netiucv_clear_busy(struct net_device *dev) 203 { 204 struct netiucv_priv *priv = netdev_priv(dev); 205 clear_bit(0, &priv->tbusy); 206 netif_wake_queue(dev); 207 } 208 209 static int netiucv_test_and_set_busy(struct net_device *dev) 210 { 211 struct netiucv_priv *priv = netdev_priv(dev); 212 netif_stop_queue(dev); 213 return test_and_set_bit(0, &priv->tbusy); 214 } 215 216 static u8 iucvMagic_ascii[16] = { 217 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 218 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 219 }; 220 221 static u8 iucvMagic_ebcdic[16] = { 222 0xF0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 223 0xF0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40 224 }; 225 226 /* 227 * Convert an iucv userId to its printable 228 * form (strip whitespace at end). 229 * 230 * @param An iucv userId 231 * 232 * @returns The printable string (static data!!) 233 */ 234 static char *netiucv_printname(char *name, int len) 235 { 236 static char tmp[17]; 237 char *p = tmp; 238 memcpy(tmp, name, len); 239 tmp[len] = '\0'; 240 while (*p && ((p - tmp) < len) && (!isspace(*p))) 241 p++; 242 *p = '\0'; 243 return tmp; 244 } 245 246 static char *netiucv_printuser(struct iucv_connection *conn) 247 { 248 static char tmp_uid[9]; 249 static char tmp_udat[17]; 250 static char buf[100]; 251 252 if (memcmp(conn->userdata, iucvMagic_ebcdic, 16)) { 253 tmp_uid[8] = '\0'; 254 tmp_udat[16] = '\0'; 255 memcpy(tmp_uid, netiucv_printname(conn->userid, 8), 8); 256 memcpy(tmp_udat, conn->userdata, 16); 257 EBCASC(tmp_udat, 16); 258 memcpy(tmp_udat, netiucv_printname(tmp_udat, 16), 16); 259 sprintf(buf, "%s.%s", tmp_uid, tmp_udat); 260 return buf; 261 } else 262 return netiucv_printname(conn->userid, 8); 263 } 264 265 /* 266 * States of the interface statemachine. 267 */ 268 enum dev_states { 269 DEV_STATE_STOPPED, 270 DEV_STATE_STARTWAIT, 271 DEV_STATE_STOPWAIT, 272 DEV_STATE_RUNNING, 273 /* 274 * MUST be always the last element!! 275 */ 276 NR_DEV_STATES 277 }; 278 279 static const char *dev_state_names[] = { 280 "Stopped", 281 "StartWait", 282 "StopWait", 283 "Running", 284 }; 285 286 /* 287 * Events of the interface statemachine. 288 */ 289 enum dev_events { 290 DEV_EVENT_START, 291 DEV_EVENT_STOP, 292 DEV_EVENT_CONUP, 293 DEV_EVENT_CONDOWN, 294 /* 295 * MUST be always the last element!! 296 */ 297 NR_DEV_EVENTS 298 }; 299 300 static const char *dev_event_names[] = { 301 "Start", 302 "Stop", 303 "Connection up", 304 "Connection down", 305 }; 306 307 /* 308 * Events of the connection statemachine 309 */ 310 enum conn_events { 311 /* 312 * Events, representing callbacks from 313 * lowlevel iucv layer) 314 */ 315 CONN_EVENT_CONN_REQ, 316 CONN_EVENT_CONN_ACK, 317 CONN_EVENT_CONN_REJ, 318 CONN_EVENT_CONN_SUS, 319 CONN_EVENT_CONN_RES, 320 CONN_EVENT_RX, 321 CONN_EVENT_TXDONE, 322 323 /* 324 * Events, representing errors return codes from 325 * calls to lowlevel iucv layer 326 */ 327 328 /* 329 * Event, representing timer expiry. 330 */ 331 CONN_EVENT_TIMER, 332 333 /* 334 * Events, representing commands from upper levels. 335 */ 336 CONN_EVENT_START, 337 CONN_EVENT_STOP, 338 339 /* 340 * MUST be always the last element!! 341 */ 342 NR_CONN_EVENTS, 343 }; 344 345 static const char *conn_event_names[] = { 346 "Remote connection request", 347 "Remote connection acknowledge", 348 "Remote connection reject", 349 "Connection suspended", 350 "Connection resumed", 351 "Data received", 352 "Data sent", 353 354 "Timer", 355 356 "Start", 357 "Stop", 358 }; 359 360 /* 361 * States of the connection statemachine. 362 */ 363 enum conn_states { 364 /* 365 * Connection not assigned to any device, 366 * initial state, invalid 367 */ 368 CONN_STATE_INVALID, 369 370 /* 371 * Userid assigned but not operating 372 */ 373 CONN_STATE_STOPPED, 374 375 /* 376 * Connection registered, 377 * no connection request sent yet, 378 * no connection request received 379 */ 380 CONN_STATE_STARTWAIT, 381 382 /* 383 * Connection registered and connection request sent, 384 * no acknowledge and no connection request received yet. 385 */ 386 CONN_STATE_SETUPWAIT, 387 388 /* 389 * Connection up and running idle 390 */ 391 CONN_STATE_IDLE, 392 393 /* 394 * Data sent, awaiting CONN_EVENT_TXDONE 395 */ 396 CONN_STATE_TX, 397 398 /* 399 * Error during registration. 400 */ 401 CONN_STATE_REGERR, 402 403 /* 404 * Error during registration. 405 */ 406 CONN_STATE_CONNERR, 407 408 /* 409 * MUST be always the last element!! 410 */ 411 NR_CONN_STATES, 412 }; 413 414 static const char *conn_state_names[] = { 415 "Invalid", 416 "Stopped", 417 "StartWait", 418 "SetupWait", 419 "Idle", 420 "TX", 421 "Terminating", 422 "Registration error", 423 "Connect error", 424 }; 425 426 427 /* 428 * Debug Facility Stuff 429 */ 430 static debug_info_t *iucv_dbf_setup = NULL; 431 static debug_info_t *iucv_dbf_data = NULL; 432 static debug_info_t *iucv_dbf_trace = NULL; 433 434 DEFINE_PER_CPU(char[256], iucv_dbf_txt_buf); 435 436 static void iucv_unregister_dbf_views(void) 437 { 438 debug_unregister(iucv_dbf_setup); 439 debug_unregister(iucv_dbf_data); 440 debug_unregister(iucv_dbf_trace); 441 } 442 static int iucv_register_dbf_views(void) 443 { 444 iucv_dbf_setup = debug_register(IUCV_DBF_SETUP_NAME, 445 IUCV_DBF_SETUP_PAGES, 446 IUCV_DBF_SETUP_NR_AREAS, 447 IUCV_DBF_SETUP_LEN); 448 iucv_dbf_data = debug_register(IUCV_DBF_DATA_NAME, 449 IUCV_DBF_DATA_PAGES, 450 IUCV_DBF_DATA_NR_AREAS, 451 IUCV_DBF_DATA_LEN); 452 iucv_dbf_trace = debug_register(IUCV_DBF_TRACE_NAME, 453 IUCV_DBF_TRACE_PAGES, 454 IUCV_DBF_TRACE_NR_AREAS, 455 IUCV_DBF_TRACE_LEN); 456 457 if ((iucv_dbf_setup == NULL) || (iucv_dbf_data == NULL) || 458 (iucv_dbf_trace == NULL)) { 459 iucv_unregister_dbf_views(); 460 return -ENOMEM; 461 } 462 debug_register_view(iucv_dbf_setup, &debug_hex_ascii_view); 463 debug_set_level(iucv_dbf_setup, IUCV_DBF_SETUP_LEVEL); 464 465 debug_register_view(iucv_dbf_data, &debug_hex_ascii_view); 466 debug_set_level(iucv_dbf_data, IUCV_DBF_DATA_LEVEL); 467 468 debug_register_view(iucv_dbf_trace, &debug_hex_ascii_view); 469 debug_set_level(iucv_dbf_trace, IUCV_DBF_TRACE_LEVEL); 470 471 return 0; 472 } 473 474 /* 475 * Callback-wrappers, called from lowlevel iucv layer. 476 */ 477 478 static void netiucv_callback_rx(struct iucv_path *path, 479 struct iucv_message *msg) 480 { 481 struct iucv_connection *conn = path->private; 482 struct iucv_event ev; 483 484 ev.conn = conn; 485 ev.data = msg; 486 fsm_event(conn->fsm, CONN_EVENT_RX, &ev); 487 } 488 489 static void netiucv_callback_txdone(struct iucv_path *path, 490 struct iucv_message *msg) 491 { 492 struct iucv_connection *conn = path->private; 493 struct iucv_event ev; 494 495 ev.conn = conn; 496 ev.data = msg; 497 fsm_event(conn->fsm, CONN_EVENT_TXDONE, &ev); 498 } 499 500 static void netiucv_callback_connack(struct iucv_path *path, u8 ipuser[16]) 501 { 502 struct iucv_connection *conn = path->private; 503 504 fsm_event(conn->fsm, CONN_EVENT_CONN_ACK, conn); 505 } 506 507 static int netiucv_callback_connreq(struct iucv_path *path, u8 *ipvmid, 508 u8 *ipuser) 509 { 510 struct iucv_connection *conn = path->private; 511 struct iucv_event ev; 512 static char tmp_user[9]; 513 static char tmp_udat[17]; 514 int rc; 515 516 rc = -EINVAL; 517 memcpy(tmp_user, netiucv_printname(ipvmid, 8), 8); 518 memcpy(tmp_udat, ipuser, 16); 519 EBCASC(tmp_udat, 16); 520 read_lock_bh(&iucv_connection_rwlock); 521 list_for_each_entry(conn, &iucv_connection_list, list) { 522 if (strncmp(ipvmid, conn->userid, 8) || 523 strncmp(ipuser, conn->userdata, 16)) 524 continue; 525 /* Found a matching connection for this path. */ 526 conn->path = path; 527 ev.conn = conn; 528 ev.data = path; 529 fsm_event(conn->fsm, CONN_EVENT_CONN_REQ, &ev); 530 rc = 0; 531 } 532 IUCV_DBF_TEXT_(setup, 2, "Connection requested for %s.%s\n", 533 tmp_user, netiucv_printname(tmp_udat, 16)); 534 read_unlock_bh(&iucv_connection_rwlock); 535 return rc; 536 } 537 538 static void netiucv_callback_connrej(struct iucv_path *path, u8 *ipuser) 539 { 540 struct iucv_connection *conn = path->private; 541 542 fsm_event(conn->fsm, CONN_EVENT_CONN_REJ, conn); 543 } 544 545 static void netiucv_callback_connsusp(struct iucv_path *path, u8 *ipuser) 546 { 547 struct iucv_connection *conn = path->private; 548 549 fsm_event(conn->fsm, CONN_EVENT_CONN_SUS, conn); 550 } 551 552 static void netiucv_callback_connres(struct iucv_path *path, u8 *ipuser) 553 { 554 struct iucv_connection *conn = path->private; 555 556 fsm_event(conn->fsm, CONN_EVENT_CONN_RES, conn); 557 } 558 559 /* 560 * NOP action for statemachines 561 */ 562 static void netiucv_action_nop(fsm_instance *fi, int event, void *arg) 563 { 564 } 565 566 /* 567 * Actions of the connection statemachine 568 */ 569 570 /* 571 * netiucv_unpack_skb 572 * @conn: The connection where this skb has been received. 573 * @pskb: The received skb. 574 * 575 * Unpack a just received skb and hand it over to upper layers. 576 * Helper function for conn_action_rx. 577 */ 578 static void netiucv_unpack_skb(struct iucv_connection *conn, 579 struct sk_buff *pskb) 580 { 581 struct net_device *dev = conn->netdev; 582 struct netiucv_priv *privptr = netdev_priv(dev); 583 u16 offset = 0; 584 585 skb_put(pskb, NETIUCV_HDRLEN); 586 pskb->dev = dev; 587 pskb->ip_summed = CHECKSUM_NONE; 588 pskb->protocol = cpu_to_be16(ETH_P_IP); 589 590 while (1) { 591 struct sk_buff *skb; 592 struct ll_header *header = (struct ll_header *) pskb->data; 593 594 if (!header->next) 595 break; 596 597 skb_pull(pskb, NETIUCV_HDRLEN); 598 header->next -= offset; 599 offset += header->next; 600 header->next -= NETIUCV_HDRLEN; 601 if (skb_tailroom(pskb) < header->next) { 602 IUCV_DBF_TEXT_(data, 2, "Illegal next field: %d > %d\n", 603 header->next, skb_tailroom(pskb)); 604 return; 605 } 606 skb_put(pskb, header->next); 607 skb_reset_mac_header(pskb); 608 skb = dev_alloc_skb(pskb->len); 609 if (!skb) { 610 IUCV_DBF_TEXT(data, 2, 611 "Out of memory in netiucv_unpack_skb\n"); 612 privptr->stats.rx_dropped++; 613 return; 614 } 615 skb_copy_from_linear_data(pskb, skb_put(skb, pskb->len), 616 pskb->len); 617 skb_reset_mac_header(skb); 618 skb->dev = pskb->dev; 619 skb->protocol = pskb->protocol; 620 pskb->ip_summed = CHECKSUM_UNNECESSARY; 621 privptr->stats.rx_packets++; 622 privptr->stats.rx_bytes += skb->len; 623 /* 624 * Since receiving is always initiated from a tasklet (in iucv.c), 625 * we must use netif_rx_ni() instead of netif_rx() 626 */ 627 netif_rx_ni(skb); 628 skb_pull(pskb, header->next); 629 skb_put(pskb, NETIUCV_HDRLEN); 630 } 631 } 632 633 static void conn_action_rx(fsm_instance *fi, int event, void *arg) 634 { 635 struct iucv_event *ev = arg; 636 struct iucv_connection *conn = ev->conn; 637 struct iucv_message *msg = ev->data; 638 struct netiucv_priv *privptr = netdev_priv(conn->netdev); 639 int rc; 640 641 IUCV_DBF_TEXT(trace, 4, __func__); 642 643 if (!conn->netdev) { 644 iucv_message_reject(conn->path, msg); 645 IUCV_DBF_TEXT(data, 2, 646 "Received data for unlinked connection\n"); 647 return; 648 } 649 if (msg->length > conn->max_buffsize) { 650 iucv_message_reject(conn->path, msg); 651 privptr->stats.rx_dropped++; 652 IUCV_DBF_TEXT_(data, 2, "msglen %d > max_buffsize %d\n", 653 msg->length, conn->max_buffsize); 654 return; 655 } 656 conn->rx_buff->data = conn->rx_buff->head; 657 skb_reset_tail_pointer(conn->rx_buff); 658 conn->rx_buff->len = 0; 659 rc = iucv_message_receive(conn->path, msg, 0, conn->rx_buff->data, 660 msg->length, NULL); 661 if (rc || msg->length < 5) { 662 privptr->stats.rx_errors++; 663 IUCV_DBF_TEXT_(data, 2, "rc %d from iucv_receive\n", rc); 664 return; 665 } 666 netiucv_unpack_skb(conn, conn->rx_buff); 667 } 668 669 static void conn_action_txdone(fsm_instance *fi, int event, void *arg) 670 { 671 struct iucv_event *ev = arg; 672 struct iucv_connection *conn = ev->conn; 673 struct iucv_message *msg = ev->data; 674 struct iucv_message txmsg; 675 struct netiucv_priv *privptr = NULL; 676 u32 single_flag = msg->tag; 677 u32 txbytes = 0; 678 u32 txpackets = 0; 679 u32 stat_maxcq = 0; 680 struct sk_buff *skb; 681 unsigned long saveflags; 682 struct ll_header header; 683 int rc; 684 685 IUCV_DBF_TEXT(trace, 4, __func__); 686 687 if (!conn || !conn->netdev) { 688 IUCV_DBF_TEXT(data, 2, 689 "Send confirmation for unlinked connection\n"); 690 return; 691 } 692 privptr = netdev_priv(conn->netdev); 693 conn->prof.tx_pending--; 694 if (single_flag) { 695 if ((skb = skb_dequeue(&conn->commit_queue))) { 696 refcount_dec(&skb->users); 697 if (privptr) { 698 privptr->stats.tx_packets++; 699 privptr->stats.tx_bytes += 700 (skb->len - NETIUCV_HDRLEN 701 - NETIUCV_HDRLEN); 702 } 703 dev_kfree_skb_any(skb); 704 } 705 } 706 conn->tx_buff->data = conn->tx_buff->head; 707 skb_reset_tail_pointer(conn->tx_buff); 708 conn->tx_buff->len = 0; 709 spin_lock_irqsave(&conn->collect_lock, saveflags); 710 while ((skb = skb_dequeue(&conn->collect_queue))) { 711 header.next = conn->tx_buff->len + skb->len + NETIUCV_HDRLEN; 712 skb_put_data(conn->tx_buff, &header, NETIUCV_HDRLEN); 713 skb_copy_from_linear_data(skb, 714 skb_put(conn->tx_buff, skb->len), 715 skb->len); 716 txbytes += skb->len; 717 txpackets++; 718 stat_maxcq++; 719 refcount_dec(&skb->users); 720 dev_kfree_skb_any(skb); 721 } 722 if (conn->collect_len > conn->prof.maxmulti) 723 conn->prof.maxmulti = conn->collect_len; 724 conn->collect_len = 0; 725 spin_unlock_irqrestore(&conn->collect_lock, saveflags); 726 if (conn->tx_buff->len == 0) { 727 fsm_newstate(fi, CONN_STATE_IDLE); 728 return; 729 } 730 731 header.next = 0; 732 skb_put_data(conn->tx_buff, &header, NETIUCV_HDRLEN); 733 conn->prof.send_stamp = jiffies; 734 txmsg.class = 0; 735 txmsg.tag = 0; 736 rc = iucv_message_send(conn->path, &txmsg, 0, 0, 737 conn->tx_buff->data, conn->tx_buff->len); 738 conn->prof.doios_multi++; 739 conn->prof.txlen += conn->tx_buff->len; 740 conn->prof.tx_pending++; 741 if (conn->prof.tx_pending > conn->prof.tx_max_pending) 742 conn->prof.tx_max_pending = conn->prof.tx_pending; 743 if (rc) { 744 conn->prof.tx_pending--; 745 fsm_newstate(fi, CONN_STATE_IDLE); 746 if (privptr) 747 privptr->stats.tx_errors += txpackets; 748 IUCV_DBF_TEXT_(data, 2, "rc %d from iucv_send\n", rc); 749 } else { 750 if (privptr) { 751 privptr->stats.tx_packets += txpackets; 752 privptr->stats.tx_bytes += txbytes; 753 } 754 if (stat_maxcq > conn->prof.maxcqueue) 755 conn->prof.maxcqueue = stat_maxcq; 756 } 757 } 758 759 static struct iucv_handler netiucv_handler = { 760 .path_pending = netiucv_callback_connreq, 761 .path_complete = netiucv_callback_connack, 762 .path_severed = netiucv_callback_connrej, 763 .path_quiesced = netiucv_callback_connsusp, 764 .path_resumed = netiucv_callback_connres, 765 .message_pending = netiucv_callback_rx, 766 .message_complete = netiucv_callback_txdone, 767 }; 768 769 static void conn_action_connaccept(fsm_instance *fi, int event, void *arg) 770 { 771 struct iucv_event *ev = arg; 772 struct iucv_connection *conn = ev->conn; 773 struct iucv_path *path = ev->data; 774 struct net_device *netdev = conn->netdev; 775 struct netiucv_priv *privptr = netdev_priv(netdev); 776 int rc; 777 778 IUCV_DBF_TEXT(trace, 3, __func__); 779 780 conn->path = path; 781 path->msglim = NETIUCV_QUEUELEN_DEFAULT; 782 path->flags = 0; 783 rc = iucv_path_accept(path, &netiucv_handler, conn->userdata , conn); 784 if (rc) { 785 IUCV_DBF_TEXT_(setup, 2, "rc %d from iucv_accept", rc); 786 return; 787 } 788 fsm_newstate(fi, CONN_STATE_IDLE); 789 netdev->tx_queue_len = conn->path->msglim; 790 fsm_event(privptr->fsm, DEV_EVENT_CONUP, netdev); 791 } 792 793 static void conn_action_connreject(fsm_instance *fi, int event, void *arg) 794 { 795 struct iucv_event *ev = arg; 796 struct iucv_path *path = ev->data; 797 798 IUCV_DBF_TEXT(trace, 3, __func__); 799 iucv_path_sever(path, NULL); 800 } 801 802 static void conn_action_connack(fsm_instance *fi, int event, void *arg) 803 { 804 struct iucv_connection *conn = arg; 805 struct net_device *netdev = conn->netdev; 806 struct netiucv_priv *privptr = netdev_priv(netdev); 807 808 IUCV_DBF_TEXT(trace, 3, __func__); 809 fsm_deltimer(&conn->timer); 810 fsm_newstate(fi, CONN_STATE_IDLE); 811 netdev->tx_queue_len = conn->path->msglim; 812 fsm_event(privptr->fsm, DEV_EVENT_CONUP, netdev); 813 } 814 815 static void conn_action_conntimsev(fsm_instance *fi, int event, void *arg) 816 { 817 struct iucv_connection *conn = arg; 818 819 IUCV_DBF_TEXT(trace, 3, __func__); 820 fsm_deltimer(&conn->timer); 821 iucv_path_sever(conn->path, conn->userdata); 822 fsm_newstate(fi, CONN_STATE_STARTWAIT); 823 } 824 825 static void conn_action_connsever(fsm_instance *fi, int event, void *arg) 826 { 827 struct iucv_connection *conn = arg; 828 struct net_device *netdev = conn->netdev; 829 struct netiucv_priv *privptr = netdev_priv(netdev); 830 831 IUCV_DBF_TEXT(trace, 3, __func__); 832 833 fsm_deltimer(&conn->timer); 834 iucv_path_sever(conn->path, conn->userdata); 835 dev_info(privptr->dev, "The peer z/VM guest %s has closed the " 836 "connection\n", netiucv_printuser(conn)); 837 IUCV_DBF_TEXT(data, 2, 838 "conn_action_connsever: Remote dropped connection\n"); 839 fsm_newstate(fi, CONN_STATE_STARTWAIT); 840 fsm_event(privptr->fsm, DEV_EVENT_CONDOWN, netdev); 841 } 842 843 static void conn_action_start(fsm_instance *fi, int event, void *arg) 844 { 845 struct iucv_connection *conn = arg; 846 struct net_device *netdev = conn->netdev; 847 struct netiucv_priv *privptr = netdev_priv(netdev); 848 int rc; 849 850 IUCV_DBF_TEXT(trace, 3, __func__); 851 852 fsm_newstate(fi, CONN_STATE_STARTWAIT); 853 854 /* 855 * We must set the state before calling iucv_connect because the 856 * callback handler could be called at any point after the connection 857 * request is sent 858 */ 859 860 fsm_newstate(fi, CONN_STATE_SETUPWAIT); 861 conn->path = iucv_path_alloc(NETIUCV_QUEUELEN_DEFAULT, 0, GFP_KERNEL); 862 IUCV_DBF_TEXT_(setup, 2, "%s: connecting to %s ...\n", 863 netdev->name, netiucv_printuser(conn)); 864 865 rc = iucv_path_connect(conn->path, &netiucv_handler, conn->userid, 866 NULL, conn->userdata, conn); 867 switch (rc) { 868 case 0: 869 netdev->tx_queue_len = conn->path->msglim; 870 fsm_addtimer(&conn->timer, NETIUCV_TIMEOUT_5SEC, 871 CONN_EVENT_TIMER, conn); 872 return; 873 case 11: 874 dev_warn(privptr->dev, 875 "The IUCV device failed to connect to z/VM guest %s\n", 876 netiucv_printname(conn->userid, 8)); 877 fsm_newstate(fi, CONN_STATE_STARTWAIT); 878 break; 879 case 12: 880 dev_warn(privptr->dev, 881 "The IUCV device failed to connect to the peer on z/VM" 882 " guest %s\n", netiucv_printname(conn->userid, 8)); 883 fsm_newstate(fi, CONN_STATE_STARTWAIT); 884 break; 885 case 13: 886 dev_err(privptr->dev, 887 "Connecting the IUCV device would exceed the maximum" 888 " number of IUCV connections\n"); 889 fsm_newstate(fi, CONN_STATE_CONNERR); 890 break; 891 case 14: 892 dev_err(privptr->dev, 893 "z/VM guest %s has too many IUCV connections" 894 " to connect with the IUCV device\n", 895 netiucv_printname(conn->userid, 8)); 896 fsm_newstate(fi, CONN_STATE_CONNERR); 897 break; 898 case 15: 899 dev_err(privptr->dev, 900 "The IUCV device cannot connect to a z/VM guest with no" 901 " IUCV authorization\n"); 902 fsm_newstate(fi, CONN_STATE_CONNERR); 903 break; 904 default: 905 dev_err(privptr->dev, 906 "Connecting the IUCV device failed with error %d\n", 907 rc); 908 fsm_newstate(fi, CONN_STATE_CONNERR); 909 break; 910 } 911 IUCV_DBF_TEXT_(setup, 5, "iucv_connect rc is %d\n", rc); 912 kfree(conn->path); 913 conn->path = NULL; 914 } 915 916 static void netiucv_purge_skb_queue(struct sk_buff_head *q) 917 { 918 struct sk_buff *skb; 919 920 while ((skb = skb_dequeue(q))) { 921 refcount_dec(&skb->users); 922 dev_kfree_skb_any(skb); 923 } 924 } 925 926 static void conn_action_stop(fsm_instance *fi, int event, void *arg) 927 { 928 struct iucv_event *ev = arg; 929 struct iucv_connection *conn = ev->conn; 930 struct net_device *netdev = conn->netdev; 931 struct netiucv_priv *privptr = netdev_priv(netdev); 932 933 IUCV_DBF_TEXT(trace, 3, __func__); 934 935 fsm_deltimer(&conn->timer); 936 fsm_newstate(fi, CONN_STATE_STOPPED); 937 netiucv_purge_skb_queue(&conn->collect_queue); 938 if (conn->path) { 939 IUCV_DBF_TEXT(trace, 5, "calling iucv_path_sever\n"); 940 iucv_path_sever(conn->path, conn->userdata); 941 kfree(conn->path); 942 conn->path = NULL; 943 } 944 netiucv_purge_skb_queue(&conn->commit_queue); 945 fsm_event(privptr->fsm, DEV_EVENT_CONDOWN, netdev); 946 } 947 948 static void conn_action_inval(fsm_instance *fi, int event, void *arg) 949 { 950 struct iucv_connection *conn = arg; 951 struct net_device *netdev = conn->netdev; 952 953 IUCV_DBF_TEXT_(data, 2, "%s('%s'): conn_action_inval called\n", 954 netdev->name, conn->userid); 955 } 956 957 static const fsm_node conn_fsm[] = { 958 { CONN_STATE_INVALID, CONN_EVENT_START, conn_action_inval }, 959 { CONN_STATE_STOPPED, CONN_EVENT_START, conn_action_start }, 960 961 { CONN_STATE_STOPPED, CONN_EVENT_STOP, conn_action_stop }, 962 { CONN_STATE_STARTWAIT, CONN_EVENT_STOP, conn_action_stop }, 963 { CONN_STATE_SETUPWAIT, CONN_EVENT_STOP, conn_action_stop }, 964 { CONN_STATE_IDLE, CONN_EVENT_STOP, conn_action_stop }, 965 { CONN_STATE_TX, CONN_EVENT_STOP, conn_action_stop }, 966 { CONN_STATE_REGERR, CONN_EVENT_STOP, conn_action_stop }, 967 { CONN_STATE_CONNERR, CONN_EVENT_STOP, conn_action_stop }, 968 969 { CONN_STATE_STOPPED, CONN_EVENT_CONN_REQ, conn_action_connreject }, 970 { CONN_STATE_STARTWAIT, CONN_EVENT_CONN_REQ, conn_action_connaccept }, 971 { CONN_STATE_SETUPWAIT, CONN_EVENT_CONN_REQ, conn_action_connaccept }, 972 { CONN_STATE_IDLE, CONN_EVENT_CONN_REQ, conn_action_connreject }, 973 { CONN_STATE_TX, CONN_EVENT_CONN_REQ, conn_action_connreject }, 974 975 { CONN_STATE_SETUPWAIT, CONN_EVENT_CONN_ACK, conn_action_connack }, 976 { CONN_STATE_SETUPWAIT, CONN_EVENT_TIMER, conn_action_conntimsev }, 977 978 { CONN_STATE_SETUPWAIT, CONN_EVENT_CONN_REJ, conn_action_connsever }, 979 { CONN_STATE_IDLE, CONN_EVENT_CONN_REJ, conn_action_connsever }, 980 { CONN_STATE_TX, CONN_EVENT_CONN_REJ, conn_action_connsever }, 981 982 { CONN_STATE_IDLE, CONN_EVENT_RX, conn_action_rx }, 983 { CONN_STATE_TX, CONN_EVENT_RX, conn_action_rx }, 984 985 { CONN_STATE_TX, CONN_EVENT_TXDONE, conn_action_txdone }, 986 { CONN_STATE_IDLE, CONN_EVENT_TXDONE, conn_action_txdone }, 987 }; 988 989 static const int CONN_FSM_LEN = sizeof(conn_fsm) / sizeof(fsm_node); 990 991 992 /* 993 * Actions for interface - statemachine. 994 */ 995 996 /* 997 * dev_action_start 998 * @fi: An instance of an interface statemachine. 999 * @event: The event, just happened. 1000 * @arg: Generic pointer, casted from struct net_device * upon call. 1001 * 1002 * Startup connection by sending CONN_EVENT_START to it. 1003 */ 1004 static void dev_action_start(fsm_instance *fi, int event, void *arg) 1005 { 1006 struct net_device *dev = arg; 1007 struct netiucv_priv *privptr = netdev_priv(dev); 1008 1009 IUCV_DBF_TEXT(trace, 3, __func__); 1010 1011 fsm_newstate(fi, DEV_STATE_STARTWAIT); 1012 fsm_event(privptr->conn->fsm, CONN_EVENT_START, privptr->conn); 1013 } 1014 1015 /* 1016 * Shutdown connection by sending CONN_EVENT_STOP to it. 1017 * 1018 * @param fi An instance of an interface statemachine. 1019 * @param event The event, just happened. 1020 * @param arg Generic pointer, casted from struct net_device * upon call. 1021 */ 1022 static void 1023 dev_action_stop(fsm_instance *fi, int event, void *arg) 1024 { 1025 struct net_device *dev = arg; 1026 struct netiucv_priv *privptr = netdev_priv(dev); 1027 struct iucv_event ev; 1028 1029 IUCV_DBF_TEXT(trace, 3, __func__); 1030 1031 ev.conn = privptr->conn; 1032 1033 fsm_newstate(fi, DEV_STATE_STOPWAIT); 1034 fsm_event(privptr->conn->fsm, CONN_EVENT_STOP, &ev); 1035 } 1036 1037 /* 1038 * Called from connection statemachine 1039 * when a connection is up and running. 1040 * 1041 * @param fi An instance of an interface statemachine. 1042 * @param event The event, just happened. 1043 * @param arg Generic pointer, casted from struct net_device * upon call. 1044 */ 1045 static void 1046 dev_action_connup(fsm_instance *fi, int event, void *arg) 1047 { 1048 struct net_device *dev = arg; 1049 struct netiucv_priv *privptr = netdev_priv(dev); 1050 1051 IUCV_DBF_TEXT(trace, 3, __func__); 1052 1053 switch (fsm_getstate(fi)) { 1054 case DEV_STATE_STARTWAIT: 1055 fsm_newstate(fi, DEV_STATE_RUNNING); 1056 dev_info(privptr->dev, 1057 "The IUCV device has been connected" 1058 " successfully to %s\n", 1059 netiucv_printuser(privptr->conn)); 1060 IUCV_DBF_TEXT(setup, 3, 1061 "connection is up and running\n"); 1062 break; 1063 case DEV_STATE_STOPWAIT: 1064 IUCV_DBF_TEXT(data, 2, 1065 "dev_action_connup: in DEV_STATE_STOPWAIT\n"); 1066 break; 1067 } 1068 } 1069 1070 /* 1071 * Called from connection statemachine 1072 * when a connection has been shutdown. 1073 * 1074 * @param fi An instance of an interface statemachine. 1075 * @param event The event, just happened. 1076 * @param arg Generic pointer, casted from struct net_device * upon call. 1077 */ 1078 static void 1079 dev_action_conndown(fsm_instance *fi, int event, void *arg) 1080 { 1081 IUCV_DBF_TEXT(trace, 3, __func__); 1082 1083 switch (fsm_getstate(fi)) { 1084 case DEV_STATE_RUNNING: 1085 fsm_newstate(fi, DEV_STATE_STARTWAIT); 1086 break; 1087 case DEV_STATE_STOPWAIT: 1088 fsm_newstate(fi, DEV_STATE_STOPPED); 1089 IUCV_DBF_TEXT(setup, 3, "connection is down\n"); 1090 break; 1091 } 1092 } 1093 1094 static const fsm_node dev_fsm[] = { 1095 { DEV_STATE_STOPPED, DEV_EVENT_START, dev_action_start }, 1096 1097 { DEV_STATE_STOPWAIT, DEV_EVENT_START, dev_action_start }, 1098 { DEV_STATE_STOPWAIT, DEV_EVENT_CONDOWN, dev_action_conndown }, 1099 1100 { DEV_STATE_STARTWAIT, DEV_EVENT_STOP, dev_action_stop }, 1101 { DEV_STATE_STARTWAIT, DEV_EVENT_CONUP, dev_action_connup }, 1102 1103 { DEV_STATE_RUNNING, DEV_EVENT_STOP, dev_action_stop }, 1104 { DEV_STATE_RUNNING, DEV_EVENT_CONDOWN, dev_action_conndown }, 1105 { DEV_STATE_RUNNING, DEV_EVENT_CONUP, netiucv_action_nop }, 1106 }; 1107 1108 static const int DEV_FSM_LEN = sizeof(dev_fsm) / sizeof(fsm_node); 1109 1110 /* 1111 * Transmit a packet. 1112 * This is a helper function for netiucv_tx(). 1113 * 1114 * @param conn Connection to be used for sending. 1115 * @param skb Pointer to struct sk_buff of packet to send. 1116 * The linklevel header has already been set up 1117 * by netiucv_tx(). 1118 * 1119 * @return 0 on success, -ERRNO on failure. (Never fails.) 1120 */ 1121 static int netiucv_transmit_skb(struct iucv_connection *conn, 1122 struct sk_buff *skb) 1123 { 1124 struct iucv_message msg; 1125 unsigned long saveflags; 1126 struct ll_header header; 1127 int rc; 1128 1129 if (fsm_getstate(conn->fsm) != CONN_STATE_IDLE) { 1130 int l = skb->len + NETIUCV_HDRLEN; 1131 1132 spin_lock_irqsave(&conn->collect_lock, saveflags); 1133 if (conn->collect_len + l > 1134 (conn->max_buffsize - NETIUCV_HDRLEN)) { 1135 rc = -EBUSY; 1136 IUCV_DBF_TEXT(data, 2, 1137 "EBUSY from netiucv_transmit_skb\n"); 1138 } else { 1139 refcount_inc(&skb->users); 1140 skb_queue_tail(&conn->collect_queue, skb); 1141 conn->collect_len += l; 1142 rc = 0; 1143 } 1144 spin_unlock_irqrestore(&conn->collect_lock, saveflags); 1145 } else { 1146 struct sk_buff *nskb = skb; 1147 /* 1148 * Copy the skb to a new allocated skb in lowmem only if the 1149 * data is located above 2G in memory or tailroom is < 2. 1150 */ 1151 unsigned long hi = ((unsigned long)(skb_tail_pointer(skb) + 1152 NETIUCV_HDRLEN)) >> 31; 1153 int copied = 0; 1154 if (hi || (skb_tailroom(skb) < 2)) { 1155 nskb = alloc_skb(skb->len + NETIUCV_HDRLEN + 1156 NETIUCV_HDRLEN, GFP_ATOMIC | GFP_DMA); 1157 if (!nskb) { 1158 IUCV_DBF_TEXT(data, 2, "alloc_skb failed\n"); 1159 rc = -ENOMEM; 1160 return rc; 1161 } else { 1162 skb_reserve(nskb, NETIUCV_HDRLEN); 1163 skb_put_data(nskb, skb->data, skb->len); 1164 } 1165 copied = 1; 1166 } 1167 /* 1168 * skb now is below 2G and has enough room. Add headers. 1169 */ 1170 header.next = nskb->len + NETIUCV_HDRLEN; 1171 memcpy(skb_push(nskb, NETIUCV_HDRLEN), &header, NETIUCV_HDRLEN); 1172 header.next = 0; 1173 skb_put_data(nskb, &header, NETIUCV_HDRLEN); 1174 1175 fsm_newstate(conn->fsm, CONN_STATE_TX); 1176 conn->prof.send_stamp = jiffies; 1177 1178 msg.tag = 1; 1179 msg.class = 0; 1180 rc = iucv_message_send(conn->path, &msg, 0, 0, 1181 nskb->data, nskb->len); 1182 conn->prof.doios_single++; 1183 conn->prof.txlen += skb->len; 1184 conn->prof.tx_pending++; 1185 if (conn->prof.tx_pending > conn->prof.tx_max_pending) 1186 conn->prof.tx_max_pending = conn->prof.tx_pending; 1187 if (rc) { 1188 struct netiucv_priv *privptr; 1189 fsm_newstate(conn->fsm, CONN_STATE_IDLE); 1190 conn->prof.tx_pending--; 1191 privptr = netdev_priv(conn->netdev); 1192 if (privptr) 1193 privptr->stats.tx_errors++; 1194 if (copied) 1195 dev_kfree_skb(nskb); 1196 else { 1197 /* 1198 * Remove our headers. They get added 1199 * again on retransmit. 1200 */ 1201 skb_pull(skb, NETIUCV_HDRLEN); 1202 skb_trim(skb, skb->len - NETIUCV_HDRLEN); 1203 } 1204 IUCV_DBF_TEXT_(data, 2, "rc %d from iucv_send\n", rc); 1205 } else { 1206 if (copied) 1207 dev_kfree_skb(skb); 1208 refcount_inc(&nskb->users); 1209 skb_queue_tail(&conn->commit_queue, nskb); 1210 } 1211 } 1212 1213 return rc; 1214 } 1215 1216 /* 1217 * Interface API for upper network layers 1218 */ 1219 1220 /* 1221 * Open an interface. 1222 * Called from generic network layer when ifconfig up is run. 1223 * 1224 * @param dev Pointer to interface struct. 1225 * 1226 * @return 0 on success, -ERRNO on failure. (Never fails.) 1227 */ 1228 static int netiucv_open(struct net_device *dev) 1229 { 1230 struct netiucv_priv *priv = netdev_priv(dev); 1231 1232 fsm_event(priv->fsm, DEV_EVENT_START, dev); 1233 return 0; 1234 } 1235 1236 /* 1237 * Close an interface. 1238 * Called from generic network layer when ifconfig down is run. 1239 * 1240 * @param dev Pointer to interface struct. 1241 * 1242 * @return 0 on success, -ERRNO on failure. (Never fails.) 1243 */ 1244 static int netiucv_close(struct net_device *dev) 1245 { 1246 struct netiucv_priv *priv = netdev_priv(dev); 1247 1248 fsm_event(priv->fsm, DEV_EVENT_STOP, dev); 1249 return 0; 1250 } 1251 1252 /* 1253 * Start transmission of a packet. 1254 * Called from generic network device layer. 1255 * 1256 * @param skb Pointer to buffer containing the packet. 1257 * @param dev Pointer to interface struct. 1258 * 1259 * @return 0 if packet consumed, !0 if packet rejected. 1260 * Note: If we return !0, then the packet is free'd by 1261 * the generic network layer. 1262 */ 1263 static int netiucv_tx(struct sk_buff *skb, struct net_device *dev) 1264 { 1265 struct netiucv_priv *privptr = netdev_priv(dev); 1266 int rc; 1267 1268 IUCV_DBF_TEXT(trace, 4, __func__); 1269 /* 1270 * Some sanity checks ... 1271 */ 1272 if (skb == NULL) { 1273 IUCV_DBF_TEXT(data, 2, "netiucv_tx: skb is NULL\n"); 1274 privptr->stats.tx_dropped++; 1275 return NETDEV_TX_OK; 1276 } 1277 if (skb_headroom(skb) < NETIUCV_HDRLEN) { 1278 IUCV_DBF_TEXT(data, 2, 1279 "netiucv_tx: skb_headroom < NETIUCV_HDRLEN\n"); 1280 dev_kfree_skb(skb); 1281 privptr->stats.tx_dropped++; 1282 return NETDEV_TX_OK; 1283 } 1284 1285 /* 1286 * If connection is not running, try to restart it 1287 * and throw away packet. 1288 */ 1289 if (fsm_getstate(privptr->fsm) != DEV_STATE_RUNNING) { 1290 dev_kfree_skb(skb); 1291 privptr->stats.tx_dropped++; 1292 privptr->stats.tx_errors++; 1293 privptr->stats.tx_carrier_errors++; 1294 return NETDEV_TX_OK; 1295 } 1296 1297 if (netiucv_test_and_set_busy(dev)) { 1298 IUCV_DBF_TEXT(data, 2, "EBUSY from netiucv_tx\n"); 1299 return NETDEV_TX_BUSY; 1300 } 1301 netif_trans_update(dev); 1302 rc = netiucv_transmit_skb(privptr->conn, skb); 1303 netiucv_clear_busy(dev); 1304 return rc ? NETDEV_TX_BUSY : NETDEV_TX_OK; 1305 } 1306 1307 /* 1308 * netiucv_stats 1309 * @dev: Pointer to interface struct. 1310 * 1311 * Returns interface statistics of a device. 1312 * 1313 * Returns pointer to stats struct of this interface. 1314 */ 1315 static struct net_device_stats *netiucv_stats (struct net_device * dev) 1316 { 1317 struct netiucv_priv *priv = netdev_priv(dev); 1318 1319 IUCV_DBF_TEXT(trace, 5, __func__); 1320 return &priv->stats; 1321 } 1322 1323 /* 1324 * attributes in sysfs 1325 */ 1326 1327 static ssize_t user_show(struct device *dev, struct device_attribute *attr, 1328 char *buf) 1329 { 1330 struct netiucv_priv *priv = dev_get_drvdata(dev); 1331 1332 IUCV_DBF_TEXT(trace, 5, __func__); 1333 return sprintf(buf, "%s\n", netiucv_printuser(priv->conn)); 1334 } 1335 1336 static int netiucv_check_user(const char *buf, size_t count, char *username, 1337 char *userdata) 1338 { 1339 const char *p; 1340 int i; 1341 1342 p = strchr(buf, '.'); 1343 if ((p && ((count > 26) || 1344 ((p - buf) > 8) || 1345 (buf + count - p > 18))) || 1346 (!p && (count > 9))) { 1347 IUCV_DBF_TEXT(setup, 2, "conn_write: too long\n"); 1348 return -EINVAL; 1349 } 1350 1351 for (i = 0, p = buf; i < 8 && *p && *p != '.'; i++, p++) { 1352 if (isalnum(*p) || *p == '$') { 1353 username[i] = toupper(*p); 1354 continue; 1355 } 1356 if (*p == '\n') 1357 /* trailing lf, grr */ 1358 break; 1359 IUCV_DBF_TEXT_(setup, 2, 1360 "conn_write: invalid character %02x\n", *p); 1361 return -EINVAL; 1362 } 1363 while (i < 8) 1364 username[i++] = ' '; 1365 username[8] = '\0'; 1366 1367 if (*p == '.') { 1368 p++; 1369 for (i = 0; i < 16 && *p; i++, p++) { 1370 if (*p == '\n') 1371 break; 1372 userdata[i] = toupper(*p); 1373 } 1374 while (i > 0 && i < 16) 1375 userdata[i++] = ' '; 1376 } else 1377 memcpy(userdata, iucvMagic_ascii, 16); 1378 userdata[16] = '\0'; 1379 ASCEBC(userdata, 16); 1380 1381 return 0; 1382 } 1383 1384 static ssize_t user_write(struct device *dev, struct device_attribute *attr, 1385 const char *buf, size_t count) 1386 { 1387 struct netiucv_priv *priv = dev_get_drvdata(dev); 1388 struct net_device *ndev = priv->conn->netdev; 1389 char username[9]; 1390 char userdata[17]; 1391 int rc; 1392 struct iucv_connection *cp; 1393 1394 IUCV_DBF_TEXT(trace, 3, __func__); 1395 rc = netiucv_check_user(buf, count, username, userdata); 1396 if (rc) 1397 return rc; 1398 1399 if (memcmp(username, priv->conn->userid, 9) && 1400 (ndev->flags & (IFF_UP | IFF_RUNNING))) { 1401 /* username changed while the interface is active. */ 1402 IUCV_DBF_TEXT(setup, 2, "user_write: device active\n"); 1403 return -EPERM; 1404 } 1405 read_lock_bh(&iucv_connection_rwlock); 1406 list_for_each_entry(cp, &iucv_connection_list, list) { 1407 if (!strncmp(username, cp->userid, 9) && 1408 !strncmp(userdata, cp->userdata, 17) && cp->netdev != ndev) { 1409 read_unlock_bh(&iucv_connection_rwlock); 1410 IUCV_DBF_TEXT_(setup, 2, "user_write: Connection to %s " 1411 "already exists\n", netiucv_printuser(cp)); 1412 return -EEXIST; 1413 } 1414 } 1415 read_unlock_bh(&iucv_connection_rwlock); 1416 memcpy(priv->conn->userid, username, 9); 1417 memcpy(priv->conn->userdata, userdata, 17); 1418 return count; 1419 } 1420 1421 static DEVICE_ATTR(user, 0644, user_show, user_write); 1422 1423 static ssize_t buffer_show (struct device *dev, struct device_attribute *attr, 1424 char *buf) 1425 { 1426 struct netiucv_priv *priv = dev_get_drvdata(dev); 1427 1428 IUCV_DBF_TEXT(trace, 5, __func__); 1429 return sprintf(buf, "%d\n", priv->conn->max_buffsize); 1430 } 1431 1432 static ssize_t buffer_write (struct device *dev, struct device_attribute *attr, 1433 const char *buf, size_t count) 1434 { 1435 struct netiucv_priv *priv = dev_get_drvdata(dev); 1436 struct net_device *ndev = priv->conn->netdev; 1437 unsigned int bs1; 1438 int rc; 1439 1440 IUCV_DBF_TEXT(trace, 3, __func__); 1441 if (count >= 39) 1442 return -EINVAL; 1443 1444 rc = kstrtouint(buf, 0, &bs1); 1445 1446 if (rc == -EINVAL) { 1447 IUCV_DBF_TEXT_(setup, 2, "buffer_write: invalid char %s\n", 1448 buf); 1449 return -EINVAL; 1450 } 1451 if ((rc == -ERANGE) || (bs1 > NETIUCV_BUFSIZE_MAX)) { 1452 IUCV_DBF_TEXT_(setup, 2, 1453 "buffer_write: buffer size %d too large\n", 1454 bs1); 1455 return -EINVAL; 1456 } 1457 if ((ndev->flags & IFF_RUNNING) && 1458 (bs1 < (ndev->mtu + NETIUCV_HDRLEN + 2))) { 1459 IUCV_DBF_TEXT_(setup, 2, 1460 "buffer_write: buffer size %d too small\n", 1461 bs1); 1462 return -EINVAL; 1463 } 1464 if (bs1 < (576 + NETIUCV_HDRLEN + NETIUCV_HDRLEN)) { 1465 IUCV_DBF_TEXT_(setup, 2, 1466 "buffer_write: buffer size %d too small\n", 1467 bs1); 1468 return -EINVAL; 1469 } 1470 1471 priv->conn->max_buffsize = bs1; 1472 if (!(ndev->flags & IFF_RUNNING)) 1473 ndev->mtu = bs1 - NETIUCV_HDRLEN - NETIUCV_HDRLEN; 1474 1475 return count; 1476 1477 } 1478 1479 static DEVICE_ATTR(buffer, 0644, buffer_show, buffer_write); 1480 1481 static ssize_t dev_fsm_show (struct device *dev, struct device_attribute *attr, 1482 char *buf) 1483 { 1484 struct netiucv_priv *priv = dev_get_drvdata(dev); 1485 1486 IUCV_DBF_TEXT(trace, 5, __func__); 1487 return sprintf(buf, "%s\n", fsm_getstate_str(priv->fsm)); 1488 } 1489 1490 static DEVICE_ATTR(device_fsm_state, 0444, dev_fsm_show, NULL); 1491 1492 static ssize_t conn_fsm_show (struct device *dev, 1493 struct device_attribute *attr, char *buf) 1494 { 1495 struct netiucv_priv *priv = dev_get_drvdata(dev); 1496 1497 IUCV_DBF_TEXT(trace, 5, __func__); 1498 return sprintf(buf, "%s\n", fsm_getstate_str(priv->conn->fsm)); 1499 } 1500 1501 static DEVICE_ATTR(connection_fsm_state, 0444, conn_fsm_show, NULL); 1502 1503 static ssize_t maxmulti_show (struct device *dev, 1504 struct device_attribute *attr, char *buf) 1505 { 1506 struct netiucv_priv *priv = dev_get_drvdata(dev); 1507 1508 IUCV_DBF_TEXT(trace, 5, __func__); 1509 return sprintf(buf, "%ld\n", priv->conn->prof.maxmulti); 1510 } 1511 1512 static ssize_t maxmulti_write (struct device *dev, 1513 struct device_attribute *attr, 1514 const char *buf, size_t count) 1515 { 1516 struct netiucv_priv *priv = dev_get_drvdata(dev); 1517 1518 IUCV_DBF_TEXT(trace, 4, __func__); 1519 priv->conn->prof.maxmulti = 0; 1520 return count; 1521 } 1522 1523 static DEVICE_ATTR(max_tx_buffer_used, 0644, maxmulti_show, maxmulti_write); 1524 1525 static ssize_t maxcq_show (struct device *dev, struct device_attribute *attr, 1526 char *buf) 1527 { 1528 struct netiucv_priv *priv = dev_get_drvdata(dev); 1529 1530 IUCV_DBF_TEXT(trace, 5, __func__); 1531 return sprintf(buf, "%ld\n", priv->conn->prof.maxcqueue); 1532 } 1533 1534 static ssize_t maxcq_write (struct device *dev, struct device_attribute *attr, 1535 const char *buf, size_t count) 1536 { 1537 struct netiucv_priv *priv = dev_get_drvdata(dev); 1538 1539 IUCV_DBF_TEXT(trace, 4, __func__); 1540 priv->conn->prof.maxcqueue = 0; 1541 return count; 1542 } 1543 1544 static DEVICE_ATTR(max_chained_skbs, 0644, maxcq_show, maxcq_write); 1545 1546 static ssize_t sdoio_show (struct device *dev, struct device_attribute *attr, 1547 char *buf) 1548 { 1549 struct netiucv_priv *priv = dev_get_drvdata(dev); 1550 1551 IUCV_DBF_TEXT(trace, 5, __func__); 1552 return sprintf(buf, "%ld\n", priv->conn->prof.doios_single); 1553 } 1554 1555 static ssize_t sdoio_write (struct device *dev, struct device_attribute *attr, 1556 const char *buf, size_t count) 1557 { 1558 struct netiucv_priv *priv = dev_get_drvdata(dev); 1559 1560 IUCV_DBF_TEXT(trace, 4, __func__); 1561 priv->conn->prof.doios_single = 0; 1562 return count; 1563 } 1564 1565 static DEVICE_ATTR(tx_single_write_ops, 0644, sdoio_show, sdoio_write); 1566 1567 static ssize_t mdoio_show (struct device *dev, struct device_attribute *attr, 1568 char *buf) 1569 { 1570 struct netiucv_priv *priv = dev_get_drvdata(dev); 1571 1572 IUCV_DBF_TEXT(trace, 5, __func__); 1573 return sprintf(buf, "%ld\n", priv->conn->prof.doios_multi); 1574 } 1575 1576 static ssize_t mdoio_write (struct device *dev, struct device_attribute *attr, 1577 const char *buf, size_t count) 1578 { 1579 struct netiucv_priv *priv = dev_get_drvdata(dev); 1580 1581 IUCV_DBF_TEXT(trace, 5, __func__); 1582 priv->conn->prof.doios_multi = 0; 1583 return count; 1584 } 1585 1586 static DEVICE_ATTR(tx_multi_write_ops, 0644, mdoio_show, mdoio_write); 1587 1588 static ssize_t txlen_show (struct device *dev, struct device_attribute *attr, 1589 char *buf) 1590 { 1591 struct netiucv_priv *priv = dev_get_drvdata(dev); 1592 1593 IUCV_DBF_TEXT(trace, 5, __func__); 1594 return sprintf(buf, "%ld\n", priv->conn->prof.txlen); 1595 } 1596 1597 static ssize_t txlen_write (struct device *dev, struct device_attribute *attr, 1598 const char *buf, size_t count) 1599 { 1600 struct netiucv_priv *priv = dev_get_drvdata(dev); 1601 1602 IUCV_DBF_TEXT(trace, 4, __func__); 1603 priv->conn->prof.txlen = 0; 1604 return count; 1605 } 1606 1607 static DEVICE_ATTR(netto_bytes, 0644, txlen_show, txlen_write); 1608 1609 static ssize_t txtime_show (struct device *dev, struct device_attribute *attr, 1610 char *buf) 1611 { 1612 struct netiucv_priv *priv = dev_get_drvdata(dev); 1613 1614 IUCV_DBF_TEXT(trace, 5, __func__); 1615 return sprintf(buf, "%ld\n", priv->conn->prof.tx_time); 1616 } 1617 1618 static ssize_t txtime_write (struct device *dev, struct device_attribute *attr, 1619 const char *buf, size_t count) 1620 { 1621 struct netiucv_priv *priv = dev_get_drvdata(dev); 1622 1623 IUCV_DBF_TEXT(trace, 4, __func__); 1624 priv->conn->prof.tx_time = 0; 1625 return count; 1626 } 1627 1628 static DEVICE_ATTR(max_tx_io_time, 0644, txtime_show, txtime_write); 1629 1630 static ssize_t txpend_show (struct device *dev, struct device_attribute *attr, 1631 char *buf) 1632 { 1633 struct netiucv_priv *priv = dev_get_drvdata(dev); 1634 1635 IUCV_DBF_TEXT(trace, 5, __func__); 1636 return sprintf(buf, "%ld\n", priv->conn->prof.tx_pending); 1637 } 1638 1639 static ssize_t txpend_write (struct device *dev, struct device_attribute *attr, 1640 const char *buf, size_t count) 1641 { 1642 struct netiucv_priv *priv = dev_get_drvdata(dev); 1643 1644 IUCV_DBF_TEXT(trace, 4, __func__); 1645 priv->conn->prof.tx_pending = 0; 1646 return count; 1647 } 1648 1649 static DEVICE_ATTR(tx_pending, 0644, txpend_show, txpend_write); 1650 1651 static ssize_t txmpnd_show (struct device *dev, struct device_attribute *attr, 1652 char *buf) 1653 { 1654 struct netiucv_priv *priv = dev_get_drvdata(dev); 1655 1656 IUCV_DBF_TEXT(trace, 5, __func__); 1657 return sprintf(buf, "%ld\n", priv->conn->prof.tx_max_pending); 1658 } 1659 1660 static ssize_t txmpnd_write (struct device *dev, struct device_attribute *attr, 1661 const char *buf, size_t count) 1662 { 1663 struct netiucv_priv *priv = dev_get_drvdata(dev); 1664 1665 IUCV_DBF_TEXT(trace, 4, __func__); 1666 priv->conn->prof.tx_max_pending = 0; 1667 return count; 1668 } 1669 1670 static DEVICE_ATTR(tx_max_pending, 0644, txmpnd_show, txmpnd_write); 1671 1672 static struct attribute *netiucv_attrs[] = { 1673 &dev_attr_buffer.attr, 1674 &dev_attr_user.attr, 1675 NULL, 1676 }; 1677 1678 static struct attribute_group netiucv_attr_group = { 1679 .attrs = netiucv_attrs, 1680 }; 1681 1682 static struct attribute *netiucv_stat_attrs[] = { 1683 &dev_attr_device_fsm_state.attr, 1684 &dev_attr_connection_fsm_state.attr, 1685 &dev_attr_max_tx_buffer_used.attr, 1686 &dev_attr_max_chained_skbs.attr, 1687 &dev_attr_tx_single_write_ops.attr, 1688 &dev_attr_tx_multi_write_ops.attr, 1689 &dev_attr_netto_bytes.attr, 1690 &dev_attr_max_tx_io_time.attr, 1691 &dev_attr_tx_pending.attr, 1692 &dev_attr_tx_max_pending.attr, 1693 NULL, 1694 }; 1695 1696 static struct attribute_group netiucv_stat_attr_group = { 1697 .name = "stats", 1698 .attrs = netiucv_stat_attrs, 1699 }; 1700 1701 static const struct attribute_group *netiucv_attr_groups[] = { 1702 &netiucv_stat_attr_group, 1703 &netiucv_attr_group, 1704 NULL, 1705 }; 1706 1707 static int netiucv_register_device(struct net_device *ndev) 1708 { 1709 struct netiucv_priv *priv = netdev_priv(ndev); 1710 struct device *dev = kzalloc(sizeof(struct device), GFP_KERNEL); 1711 int ret; 1712 1713 IUCV_DBF_TEXT(trace, 3, __func__); 1714 1715 if (dev) { 1716 dev_set_name(dev, "net%s", ndev->name); 1717 dev->bus = &iucv_bus; 1718 dev->parent = iucv_root; 1719 dev->groups = netiucv_attr_groups; 1720 /* 1721 * The release function could be called after the 1722 * module has been unloaded. It's _only_ task is to 1723 * free the struct. Therefore, we specify kfree() 1724 * directly here. (Probably a little bit obfuscating 1725 * but legitime ...). 1726 */ 1727 dev->release = (void (*)(struct device *))kfree; 1728 dev->driver = &netiucv_driver; 1729 } else 1730 return -ENOMEM; 1731 1732 ret = device_register(dev); 1733 if (ret) { 1734 put_device(dev); 1735 return ret; 1736 } 1737 priv->dev = dev; 1738 dev_set_drvdata(dev, priv); 1739 return 0; 1740 } 1741 1742 static void netiucv_unregister_device(struct device *dev) 1743 { 1744 IUCV_DBF_TEXT(trace, 3, __func__); 1745 device_unregister(dev); 1746 } 1747 1748 /* 1749 * Allocate and initialize a new connection structure. 1750 * Add it to the list of netiucv connections; 1751 */ 1752 static struct iucv_connection *netiucv_new_connection(struct net_device *dev, 1753 char *username, 1754 char *userdata) 1755 { 1756 struct iucv_connection *conn; 1757 1758 conn = kzalloc(sizeof(*conn), GFP_KERNEL); 1759 if (!conn) 1760 goto out; 1761 skb_queue_head_init(&conn->collect_queue); 1762 skb_queue_head_init(&conn->commit_queue); 1763 spin_lock_init(&conn->collect_lock); 1764 conn->max_buffsize = NETIUCV_BUFSIZE_DEFAULT; 1765 conn->netdev = dev; 1766 1767 conn->rx_buff = alloc_skb(conn->max_buffsize, GFP_KERNEL | GFP_DMA); 1768 if (!conn->rx_buff) 1769 goto out_conn; 1770 conn->tx_buff = alloc_skb(conn->max_buffsize, GFP_KERNEL | GFP_DMA); 1771 if (!conn->tx_buff) 1772 goto out_rx; 1773 conn->fsm = init_fsm("netiucvconn", conn_state_names, 1774 conn_event_names, NR_CONN_STATES, 1775 NR_CONN_EVENTS, conn_fsm, CONN_FSM_LEN, 1776 GFP_KERNEL); 1777 if (!conn->fsm) 1778 goto out_tx; 1779 1780 fsm_settimer(conn->fsm, &conn->timer); 1781 fsm_newstate(conn->fsm, CONN_STATE_INVALID); 1782 1783 if (userdata) 1784 memcpy(conn->userdata, userdata, 17); 1785 if (username) { 1786 memcpy(conn->userid, username, 9); 1787 fsm_newstate(conn->fsm, CONN_STATE_STOPPED); 1788 } 1789 1790 write_lock_bh(&iucv_connection_rwlock); 1791 list_add_tail(&conn->list, &iucv_connection_list); 1792 write_unlock_bh(&iucv_connection_rwlock); 1793 return conn; 1794 1795 out_tx: 1796 kfree_skb(conn->tx_buff); 1797 out_rx: 1798 kfree_skb(conn->rx_buff); 1799 out_conn: 1800 kfree(conn); 1801 out: 1802 return NULL; 1803 } 1804 1805 /* 1806 * Release a connection structure and remove it from the 1807 * list of netiucv connections. 1808 */ 1809 static void netiucv_remove_connection(struct iucv_connection *conn) 1810 { 1811 1812 IUCV_DBF_TEXT(trace, 3, __func__); 1813 write_lock_bh(&iucv_connection_rwlock); 1814 list_del_init(&conn->list); 1815 write_unlock_bh(&iucv_connection_rwlock); 1816 fsm_deltimer(&conn->timer); 1817 netiucv_purge_skb_queue(&conn->collect_queue); 1818 if (conn->path) { 1819 iucv_path_sever(conn->path, conn->userdata); 1820 kfree(conn->path); 1821 conn->path = NULL; 1822 } 1823 netiucv_purge_skb_queue(&conn->commit_queue); 1824 kfree_fsm(conn->fsm); 1825 kfree_skb(conn->rx_buff); 1826 kfree_skb(conn->tx_buff); 1827 } 1828 1829 /* 1830 * Release everything of a net device. 1831 */ 1832 static void netiucv_free_netdevice(struct net_device *dev) 1833 { 1834 struct netiucv_priv *privptr = netdev_priv(dev); 1835 1836 IUCV_DBF_TEXT(trace, 3, __func__); 1837 1838 if (!dev) 1839 return; 1840 1841 if (privptr) { 1842 if (privptr->conn) 1843 netiucv_remove_connection(privptr->conn); 1844 if (privptr->fsm) 1845 kfree_fsm(privptr->fsm); 1846 privptr->conn = NULL; privptr->fsm = NULL; 1847 /* privptr gets freed by free_netdev() */ 1848 } 1849 } 1850 1851 /* 1852 * Initialize a net device. (Called from kernel in alloc_netdev()) 1853 */ 1854 static const struct net_device_ops netiucv_netdev_ops = { 1855 .ndo_open = netiucv_open, 1856 .ndo_stop = netiucv_close, 1857 .ndo_get_stats = netiucv_stats, 1858 .ndo_start_xmit = netiucv_tx, 1859 }; 1860 1861 static void netiucv_setup_netdevice(struct net_device *dev) 1862 { 1863 dev->mtu = NETIUCV_MTU_DEFAULT; 1864 dev->min_mtu = 576; 1865 dev->max_mtu = NETIUCV_MTU_MAX; 1866 dev->needs_free_netdev = true; 1867 dev->priv_destructor = netiucv_free_netdevice; 1868 dev->hard_header_len = NETIUCV_HDRLEN; 1869 dev->addr_len = 0; 1870 dev->type = ARPHRD_SLIP; 1871 dev->tx_queue_len = NETIUCV_QUEUELEN_DEFAULT; 1872 dev->flags = IFF_POINTOPOINT | IFF_NOARP; 1873 dev->netdev_ops = &netiucv_netdev_ops; 1874 } 1875 1876 /* 1877 * Allocate and initialize everything of a net device. 1878 */ 1879 static struct net_device *netiucv_init_netdevice(char *username, char *userdata) 1880 { 1881 struct netiucv_priv *privptr; 1882 struct net_device *dev; 1883 1884 dev = alloc_netdev(sizeof(struct netiucv_priv), "iucv%d", 1885 NET_NAME_UNKNOWN, netiucv_setup_netdevice); 1886 if (!dev) 1887 return NULL; 1888 rtnl_lock(); 1889 if (dev_alloc_name(dev, dev->name) < 0) 1890 goto out_netdev; 1891 1892 privptr = netdev_priv(dev); 1893 privptr->fsm = init_fsm("netiucvdev", dev_state_names, 1894 dev_event_names, NR_DEV_STATES, NR_DEV_EVENTS, 1895 dev_fsm, DEV_FSM_LEN, GFP_KERNEL); 1896 if (!privptr->fsm) 1897 goto out_netdev; 1898 1899 privptr->conn = netiucv_new_connection(dev, username, userdata); 1900 if (!privptr->conn) { 1901 IUCV_DBF_TEXT(setup, 2, "NULL from netiucv_new_connection\n"); 1902 goto out_fsm; 1903 } 1904 fsm_newstate(privptr->fsm, DEV_STATE_STOPPED); 1905 return dev; 1906 1907 out_fsm: 1908 kfree_fsm(privptr->fsm); 1909 out_netdev: 1910 rtnl_unlock(); 1911 free_netdev(dev); 1912 return NULL; 1913 } 1914 1915 static ssize_t connection_store(struct device_driver *drv, const char *buf, 1916 size_t count) 1917 { 1918 char username[9]; 1919 char userdata[17]; 1920 int rc; 1921 struct net_device *dev; 1922 struct netiucv_priv *priv; 1923 struct iucv_connection *cp; 1924 1925 IUCV_DBF_TEXT(trace, 3, __func__); 1926 rc = netiucv_check_user(buf, count, username, userdata); 1927 if (rc) 1928 return rc; 1929 1930 read_lock_bh(&iucv_connection_rwlock); 1931 list_for_each_entry(cp, &iucv_connection_list, list) { 1932 if (!strncmp(username, cp->userid, 9) && 1933 !strncmp(userdata, cp->userdata, 17)) { 1934 read_unlock_bh(&iucv_connection_rwlock); 1935 IUCV_DBF_TEXT_(setup, 2, "conn_write: Connection to %s " 1936 "already exists\n", netiucv_printuser(cp)); 1937 return -EEXIST; 1938 } 1939 } 1940 read_unlock_bh(&iucv_connection_rwlock); 1941 1942 dev = netiucv_init_netdevice(username, userdata); 1943 if (!dev) { 1944 IUCV_DBF_TEXT(setup, 2, "NULL from netiucv_init_netdevice\n"); 1945 return -ENODEV; 1946 } 1947 1948 rc = netiucv_register_device(dev); 1949 if (rc) { 1950 rtnl_unlock(); 1951 IUCV_DBF_TEXT_(setup, 2, 1952 "ret %d from netiucv_register_device\n", rc); 1953 goto out_free_ndev; 1954 } 1955 1956 /* sysfs magic */ 1957 priv = netdev_priv(dev); 1958 SET_NETDEV_DEV(dev, priv->dev); 1959 1960 rc = register_netdevice(dev); 1961 rtnl_unlock(); 1962 if (rc) 1963 goto out_unreg; 1964 1965 dev_info(priv->dev, "The IUCV interface to %s has been established " 1966 "successfully\n", 1967 netiucv_printuser(priv->conn)); 1968 1969 return count; 1970 1971 out_unreg: 1972 netiucv_unregister_device(priv->dev); 1973 out_free_ndev: 1974 netiucv_free_netdevice(dev); 1975 return rc; 1976 } 1977 static DRIVER_ATTR_WO(connection); 1978 1979 static ssize_t remove_store(struct device_driver *drv, const char *buf, 1980 size_t count) 1981 { 1982 struct iucv_connection *cp; 1983 struct net_device *ndev; 1984 struct netiucv_priv *priv; 1985 struct device *dev; 1986 char name[IFNAMSIZ]; 1987 const char *p; 1988 int i; 1989 1990 IUCV_DBF_TEXT(trace, 3, __func__); 1991 1992 if (count >= IFNAMSIZ) 1993 count = IFNAMSIZ - 1; 1994 1995 for (i = 0, p = buf; i < count && *p; i++, p++) { 1996 if (*p == '\n' || *p == ' ') 1997 /* trailing lf, grr */ 1998 break; 1999 name[i] = *p; 2000 } 2001 name[i] = '\0'; 2002 2003 read_lock_bh(&iucv_connection_rwlock); 2004 list_for_each_entry(cp, &iucv_connection_list, list) { 2005 ndev = cp->netdev; 2006 priv = netdev_priv(ndev); 2007 dev = priv->dev; 2008 if (strncmp(name, ndev->name, count)) 2009 continue; 2010 read_unlock_bh(&iucv_connection_rwlock); 2011 if (ndev->flags & (IFF_UP | IFF_RUNNING)) { 2012 dev_warn(dev, "The IUCV device is connected" 2013 " to %s and cannot be removed\n", 2014 priv->conn->userid); 2015 IUCV_DBF_TEXT(data, 2, "remove_write: still active\n"); 2016 return -EPERM; 2017 } 2018 unregister_netdev(ndev); 2019 netiucv_unregister_device(dev); 2020 return count; 2021 } 2022 read_unlock_bh(&iucv_connection_rwlock); 2023 IUCV_DBF_TEXT(data, 2, "remove_write: unknown device\n"); 2024 return -EINVAL; 2025 } 2026 static DRIVER_ATTR_WO(remove); 2027 2028 static struct attribute * netiucv_drv_attrs[] = { 2029 &driver_attr_connection.attr, 2030 &driver_attr_remove.attr, 2031 NULL, 2032 }; 2033 2034 static struct attribute_group netiucv_drv_attr_group = { 2035 .attrs = netiucv_drv_attrs, 2036 }; 2037 2038 static const struct attribute_group *netiucv_drv_attr_groups[] = { 2039 &netiucv_drv_attr_group, 2040 NULL, 2041 }; 2042 2043 static void netiucv_banner(void) 2044 { 2045 pr_info("driver initialized\n"); 2046 } 2047 2048 static void __exit netiucv_exit(void) 2049 { 2050 struct iucv_connection *cp; 2051 struct net_device *ndev; 2052 struct netiucv_priv *priv; 2053 struct device *dev; 2054 2055 IUCV_DBF_TEXT(trace, 3, __func__); 2056 while (!list_empty(&iucv_connection_list)) { 2057 cp = list_entry(iucv_connection_list.next, 2058 struct iucv_connection, list); 2059 ndev = cp->netdev; 2060 priv = netdev_priv(ndev); 2061 dev = priv->dev; 2062 2063 unregister_netdev(ndev); 2064 netiucv_unregister_device(dev); 2065 } 2066 2067 driver_unregister(&netiucv_driver); 2068 iucv_unregister(&netiucv_handler, 1); 2069 iucv_unregister_dbf_views(); 2070 2071 pr_info("driver unloaded\n"); 2072 return; 2073 } 2074 2075 static int __init netiucv_init(void) 2076 { 2077 int rc; 2078 2079 rc = iucv_register_dbf_views(); 2080 if (rc) 2081 goto out; 2082 rc = iucv_register(&netiucv_handler, 1); 2083 if (rc) 2084 goto out_dbf; 2085 IUCV_DBF_TEXT(trace, 3, __func__); 2086 netiucv_driver.groups = netiucv_drv_attr_groups; 2087 rc = driver_register(&netiucv_driver); 2088 if (rc) { 2089 IUCV_DBF_TEXT_(setup, 2, "ret %d from driver_register\n", rc); 2090 goto out_iucv; 2091 } 2092 2093 netiucv_banner(); 2094 return rc; 2095 2096 out_iucv: 2097 iucv_unregister(&netiucv_handler, 1); 2098 out_dbf: 2099 iucv_unregister_dbf_views(); 2100 out: 2101 return rc; 2102 } 2103 2104 module_init(netiucv_init); 2105 module_exit(netiucv_exit); 2106 MODULE_LICENSE("GPL"); 2107