1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright(c) 2010-2014 Intel Corporation. 4 */ 5 6 /* 7 * This code is inspired from the book "Linux Device Drivers" by 8 * Alessandro Rubini and Jonathan Corbet, published by O'Reilly & Associates 9 */ 10 11 #include <linux/device.h> 12 #include <linux/module.h> 13 #include <linux/version.h> 14 #include <linux/netdevice.h> 15 #include <linux/etherdevice.h> /* eth_type_trans */ 16 #include <linux/skbuff.h> 17 #include <linux/kthread.h> 18 #include <linux/delay.h> 19 20 #include <exec-env/rte_kni_common.h> 21 #include <kni_fifo.h> 22 23 #include "compat.h" 24 #include "kni_dev.h" 25 26 #define WD_TIMEOUT 5 /*jiffies */ 27 28 #define KNI_WAIT_RESPONSE_TIMEOUT 300 /* 3 seconds */ 29 30 /* typedef for rx function */ 31 typedef void (*kni_net_rx_t)(struct kni_dev *kni); 32 33 static void kni_net_rx_normal(struct kni_dev *kni); 34 35 /* kni rx function pointer, with default to normal rx */ 36 static kni_net_rx_t kni_net_rx_func = kni_net_rx_normal; 37 38 /* physical address to kernel virtual address */ 39 static void * 40 pa2kva(void *pa) 41 { 42 return phys_to_virt((unsigned long)pa); 43 } 44 45 /* physical address to virtual address */ 46 static void * 47 pa2va(void *pa, struct rte_kni_mbuf *m) 48 { 49 void *va; 50 51 va = (void *)((unsigned long)pa + 52 (unsigned long)m->buf_addr - 53 (unsigned long)m->buf_physaddr); 54 return va; 55 } 56 57 /* mbuf data kernel virtual address from mbuf kernel virtual address */ 58 static void * 59 kva2data_kva(struct rte_kni_mbuf *m) 60 { 61 return phys_to_virt(m->buf_physaddr + m->data_off); 62 } 63 64 /* 65 * It can be called to process the request. 66 */ 67 static int 68 kni_net_process_request(struct kni_dev *kni, struct rte_kni_request *req) 69 { 70 int ret = -1; 71 void *resp_va; 72 uint32_t num; 73 int ret_val; 74 75 if (!kni || !req) { 76 pr_err("No kni instance or request\n"); 77 return -EINVAL; 78 } 79 80 mutex_lock(&kni->sync_lock); 81 82 /* Construct data */ 83 memcpy(kni->sync_kva, req, sizeof(struct rte_kni_request)); 84 num = kni_fifo_put(kni->req_q, &kni->sync_va, 1); 85 if (num < 1) { 86 pr_err("Cannot send to req_q\n"); 87 ret = -EBUSY; 88 goto fail; 89 } 90 91 ret_val = wait_event_interruptible_timeout(kni->wq, 92 kni_fifo_count(kni->resp_q), 3 * HZ); 93 if (signal_pending(current) || ret_val <= 0) { 94 ret = -ETIME; 95 goto fail; 96 } 97 num = kni_fifo_get(kni->resp_q, (void **)&resp_va, 1); 98 if (num != 1 || resp_va != kni->sync_va) { 99 /* This should never happen */ 100 pr_err("No data in resp_q\n"); 101 ret = -ENODATA; 102 goto fail; 103 } 104 105 memcpy(req, kni->sync_kva, sizeof(struct rte_kni_request)); 106 ret = 0; 107 108 fail: 109 mutex_unlock(&kni->sync_lock); 110 return ret; 111 } 112 113 /* 114 * Open and close 115 */ 116 static int 117 kni_net_open(struct net_device *dev) 118 { 119 int ret; 120 struct rte_kni_request req; 121 struct kni_dev *kni = netdev_priv(dev); 122 123 netif_start_queue(dev); 124 if (dflt_carrier == 1) 125 netif_carrier_on(dev); 126 else 127 netif_carrier_off(dev); 128 129 memset(&req, 0, sizeof(req)); 130 req.req_id = RTE_KNI_REQ_CFG_NETWORK_IF; 131 132 /* Setting if_up to non-zero means up */ 133 req.if_up = 1; 134 ret = kni_net_process_request(kni, &req); 135 136 return (ret == 0) ? req.result : ret; 137 } 138 139 static int 140 kni_net_release(struct net_device *dev) 141 { 142 int ret; 143 struct rte_kni_request req; 144 struct kni_dev *kni = netdev_priv(dev); 145 146 netif_stop_queue(dev); /* can't transmit any more */ 147 netif_carrier_off(dev); 148 149 memset(&req, 0, sizeof(req)); 150 req.req_id = RTE_KNI_REQ_CFG_NETWORK_IF; 151 152 /* Setting if_up to 0 means down */ 153 req.if_up = 0; 154 ret = kni_net_process_request(kni, &req); 155 156 return (ret == 0) ? req.result : ret; 157 } 158 159 static void 160 kni_fifo_trans_pa2va(struct kni_dev *kni, 161 struct rte_kni_fifo *src_pa, struct rte_kni_fifo *dst_va) 162 { 163 uint32_t ret, i, num_dst, num_rx; 164 struct rte_kni_mbuf *kva, *prev_kva; 165 int nb_segs; 166 int kva_nb_segs; 167 168 do { 169 num_dst = kni_fifo_free_count(dst_va); 170 if (num_dst == 0) 171 return; 172 173 num_rx = min_t(uint32_t, num_dst, MBUF_BURST_SZ); 174 175 num_rx = kni_fifo_get(src_pa, kni->pa, num_rx); 176 if (num_rx == 0) 177 return; 178 179 for (i = 0; i < num_rx; i++) { 180 kva = pa2kva(kni->pa[i]); 181 kni->va[i] = pa2va(kni->pa[i], kva); 182 183 kva_nb_segs = kva->nb_segs; 184 for (nb_segs = 0; nb_segs < kva_nb_segs; nb_segs++) { 185 if (!kva->next) 186 break; 187 188 prev_kva = kva; 189 kva = pa2kva(kva->next); 190 /* Convert physical address to virtual address */ 191 prev_kva->next = pa2va(prev_kva->next, kva); 192 } 193 } 194 195 ret = kni_fifo_put(dst_va, kni->va, num_rx); 196 if (ret != num_rx) { 197 /* Failing should not happen */ 198 pr_err("Fail to enqueue entries into dst_va\n"); 199 return; 200 } 201 } while (1); 202 } 203 204 /* Try to release mbufs when kni release */ 205 void kni_net_release_fifo_phy(struct kni_dev *kni) 206 { 207 /* release rx_q first, because it can't release in userspace */ 208 kni_fifo_trans_pa2va(kni, kni->rx_q, kni->free_q); 209 /* release alloc_q for speeding up kni release in userspace */ 210 kni_fifo_trans_pa2va(kni, kni->alloc_q, kni->free_q); 211 } 212 213 /* 214 * Configuration changes (passed on by ifconfig) 215 */ 216 static int 217 kni_net_config(struct net_device *dev, struct ifmap *map) 218 { 219 if (dev->flags & IFF_UP) /* can't act on a running interface */ 220 return -EBUSY; 221 222 /* ignore other fields */ 223 return 0; 224 } 225 226 /* 227 * Transmit a packet (called by the kernel) 228 */ 229 static int 230 kni_net_tx(struct sk_buff *skb, struct net_device *dev) 231 { 232 int len = 0; 233 uint32_t ret; 234 struct kni_dev *kni = netdev_priv(dev); 235 struct rte_kni_mbuf *pkt_kva = NULL; 236 void *pkt_pa = NULL; 237 void *pkt_va = NULL; 238 239 /* save the timestamp */ 240 #ifdef HAVE_TRANS_START_HELPER 241 netif_trans_update(dev); 242 #else 243 dev->trans_start = jiffies; 244 #endif 245 246 /* Check if the length of skb is less than mbuf size */ 247 if (skb->len > kni->mbuf_size) 248 goto drop; 249 250 /** 251 * Check if it has at least one free entry in tx_q and 252 * one entry in alloc_q. 253 */ 254 if (kni_fifo_free_count(kni->tx_q) == 0 || 255 kni_fifo_count(kni->alloc_q) == 0) { 256 /** 257 * If no free entry in tx_q or no entry in alloc_q, 258 * drops skb and goes out. 259 */ 260 goto drop; 261 } 262 263 /* dequeue a mbuf from alloc_q */ 264 ret = kni_fifo_get(kni->alloc_q, &pkt_pa, 1); 265 if (likely(ret == 1)) { 266 void *data_kva; 267 268 pkt_kva = pa2kva(pkt_pa); 269 data_kva = kva2data_kva(pkt_kva); 270 pkt_va = pa2va(pkt_pa, pkt_kva); 271 272 len = skb->len; 273 memcpy(data_kva, skb->data, len); 274 if (unlikely(len < ETH_ZLEN)) { 275 memset(data_kva + len, 0, ETH_ZLEN - len); 276 len = ETH_ZLEN; 277 } 278 pkt_kva->pkt_len = len; 279 pkt_kva->data_len = len; 280 281 /* enqueue mbuf into tx_q */ 282 ret = kni_fifo_put(kni->tx_q, &pkt_va, 1); 283 if (unlikely(ret != 1)) { 284 /* Failing should not happen */ 285 pr_err("Fail to enqueue mbuf into tx_q\n"); 286 goto drop; 287 } 288 } else { 289 /* Failing should not happen */ 290 pr_err("Fail to dequeue mbuf from alloc_q\n"); 291 goto drop; 292 } 293 294 /* Free skb and update statistics */ 295 dev_kfree_skb(skb); 296 kni->stats.tx_bytes += len; 297 kni->stats.tx_packets++; 298 299 return NETDEV_TX_OK; 300 301 drop: 302 /* Free skb and update statistics */ 303 dev_kfree_skb(skb); 304 kni->stats.tx_dropped++; 305 306 return NETDEV_TX_OK; 307 } 308 309 /* 310 * RX: normal working mode 311 */ 312 static void 313 kni_net_rx_normal(struct kni_dev *kni) 314 { 315 uint32_t ret; 316 uint32_t len; 317 uint32_t i, num_rx, num_fq; 318 struct rte_kni_mbuf *kva, *prev_kva; 319 void *data_kva; 320 struct sk_buff *skb; 321 struct net_device *dev = kni->net_dev; 322 323 /* Get the number of free entries in free_q */ 324 num_fq = kni_fifo_free_count(kni->free_q); 325 if (num_fq == 0) { 326 /* No room on the free_q, bail out */ 327 return; 328 } 329 330 /* Calculate the number of entries to dequeue from rx_q */ 331 num_rx = min_t(uint32_t, num_fq, MBUF_BURST_SZ); 332 333 /* Burst dequeue from rx_q */ 334 num_rx = kni_fifo_get(kni->rx_q, kni->pa, num_rx); 335 if (num_rx == 0) 336 return; 337 338 /* Transfer received packets to netif */ 339 for (i = 0; i < num_rx; i++) { 340 kva = pa2kva(kni->pa[i]); 341 len = kva->pkt_len; 342 data_kva = kva2data_kva(kva); 343 kni->va[i] = pa2va(kni->pa[i], kva); 344 345 skb = dev_alloc_skb(len + 2); 346 if (!skb) { 347 /* Update statistics */ 348 kni->stats.rx_dropped++; 349 continue; 350 } 351 352 /* Align IP on 16B boundary */ 353 skb_reserve(skb, 2); 354 355 if (kva->nb_segs == 1) { 356 memcpy(skb_put(skb, len), data_kva, len); 357 } else { 358 int nb_segs; 359 int kva_nb_segs = kva->nb_segs; 360 361 for (nb_segs = 0; nb_segs < kva_nb_segs; nb_segs++) { 362 memcpy(skb_put(skb, kva->data_len), 363 data_kva, kva->data_len); 364 365 if (!kva->next) 366 break; 367 368 prev_kva = kva; 369 kva = pa2kva(kva->next); 370 data_kva = kva2data_kva(kva); 371 /* Convert physical address to virtual address */ 372 prev_kva->next = pa2va(prev_kva->next, kva); 373 } 374 } 375 376 skb->dev = dev; 377 skb->protocol = eth_type_trans(skb, dev); 378 skb->ip_summed = CHECKSUM_UNNECESSARY; 379 380 /* Call netif interface */ 381 netif_rx_ni(skb); 382 383 /* Update statistics */ 384 kni->stats.rx_bytes += len; 385 kni->stats.rx_packets++; 386 } 387 388 /* Burst enqueue mbufs into free_q */ 389 ret = kni_fifo_put(kni->free_q, kni->va, num_rx); 390 if (ret != num_rx) 391 /* Failing should not happen */ 392 pr_err("Fail to enqueue entries into free_q\n"); 393 } 394 395 /* 396 * RX: loopback with enqueue/dequeue fifos. 397 */ 398 static void 399 kni_net_rx_lo_fifo(struct kni_dev *kni) 400 { 401 uint32_t ret; 402 uint32_t len; 403 uint32_t i, num, num_rq, num_tq, num_aq, num_fq; 404 struct rte_kni_mbuf *kva, *next_kva; 405 void *data_kva; 406 struct rte_kni_mbuf *alloc_kva; 407 void *alloc_data_kva; 408 409 /* Get the number of entries in rx_q */ 410 num_rq = kni_fifo_count(kni->rx_q); 411 412 /* Get the number of free entries in tx_q */ 413 num_tq = kni_fifo_free_count(kni->tx_q); 414 415 /* Get the number of entries in alloc_q */ 416 num_aq = kni_fifo_count(kni->alloc_q); 417 418 /* Get the number of free entries in free_q */ 419 num_fq = kni_fifo_free_count(kni->free_q); 420 421 /* Calculate the number of entries to be dequeued from rx_q */ 422 num = min(num_rq, num_tq); 423 num = min(num, num_aq); 424 num = min(num, num_fq); 425 num = min_t(uint32_t, num, MBUF_BURST_SZ); 426 427 /* Return if no entry to dequeue from rx_q */ 428 if (num == 0) 429 return; 430 431 /* Burst dequeue from rx_q */ 432 ret = kni_fifo_get(kni->rx_q, kni->pa, num); 433 if (ret == 0) 434 return; /* Failing should not happen */ 435 436 /* Dequeue entries from alloc_q */ 437 ret = kni_fifo_get(kni->alloc_q, kni->alloc_pa, num); 438 if (ret) { 439 num = ret; 440 /* Copy mbufs */ 441 for (i = 0; i < num; i++) { 442 kva = pa2kva(kni->pa[i]); 443 len = kva->data_len; 444 data_kva = kva2data_kva(kva); 445 kni->va[i] = pa2va(kni->pa[i], kva); 446 447 while (kva->next) { 448 next_kva = pa2kva(kva->next); 449 /* Convert physical address to virtual address */ 450 kva->next = pa2va(kva->next, next_kva); 451 kva = next_kva; 452 } 453 454 alloc_kva = pa2kva(kni->alloc_pa[i]); 455 alloc_data_kva = kva2data_kva(alloc_kva); 456 kni->alloc_va[i] = pa2va(kni->alloc_pa[i], alloc_kva); 457 458 memcpy(alloc_data_kva, data_kva, len); 459 alloc_kva->pkt_len = len; 460 alloc_kva->data_len = len; 461 462 kni->stats.tx_bytes += len; 463 kni->stats.rx_bytes += len; 464 } 465 466 /* Burst enqueue mbufs into tx_q */ 467 ret = kni_fifo_put(kni->tx_q, kni->alloc_va, num); 468 if (ret != num) 469 /* Failing should not happen */ 470 pr_err("Fail to enqueue mbufs into tx_q\n"); 471 } 472 473 /* Burst enqueue mbufs into free_q */ 474 ret = kni_fifo_put(kni->free_q, kni->va, num); 475 if (ret != num) 476 /* Failing should not happen */ 477 pr_err("Fail to enqueue mbufs into free_q\n"); 478 479 /** 480 * Update statistic, and enqueue/dequeue failure is impossible, 481 * as all queues are checked at first. 482 */ 483 kni->stats.tx_packets += num; 484 kni->stats.rx_packets += num; 485 } 486 487 /* 488 * RX: loopback with enqueue/dequeue fifos and sk buffer copies. 489 */ 490 static void 491 kni_net_rx_lo_fifo_skb(struct kni_dev *kni) 492 { 493 uint32_t ret; 494 uint32_t len; 495 uint32_t i, num_rq, num_fq, num; 496 struct rte_kni_mbuf *kva, *prev_kva; 497 void *data_kva; 498 struct sk_buff *skb; 499 struct net_device *dev = kni->net_dev; 500 501 /* Get the number of entries in rx_q */ 502 num_rq = kni_fifo_count(kni->rx_q); 503 504 /* Get the number of free entries in free_q */ 505 num_fq = kni_fifo_free_count(kni->free_q); 506 507 /* Calculate the number of entries to dequeue from rx_q */ 508 num = min(num_rq, num_fq); 509 num = min_t(uint32_t, num, MBUF_BURST_SZ); 510 511 /* Return if no entry to dequeue from rx_q */ 512 if (num == 0) 513 return; 514 515 /* Burst dequeue mbufs from rx_q */ 516 ret = kni_fifo_get(kni->rx_q, kni->pa, num); 517 if (ret == 0) 518 return; 519 520 /* Copy mbufs to sk buffer and then call tx interface */ 521 for (i = 0; i < num; i++) { 522 kva = pa2kva(kni->pa[i]); 523 len = kva->pkt_len; 524 data_kva = kva2data_kva(kva); 525 kni->va[i] = pa2va(kni->pa[i], kva); 526 527 skb = dev_alloc_skb(len + 2); 528 if (skb) { 529 /* Align IP on 16B boundary */ 530 skb_reserve(skb, 2); 531 memcpy(skb_put(skb, len), data_kva, len); 532 skb->dev = dev; 533 skb->ip_summed = CHECKSUM_UNNECESSARY; 534 dev_kfree_skb(skb); 535 } 536 537 /* Simulate real usage, allocate/copy skb twice */ 538 skb = dev_alloc_skb(len + 2); 539 if (skb == NULL) { 540 kni->stats.rx_dropped++; 541 continue; 542 } 543 544 /* Align IP on 16B boundary */ 545 skb_reserve(skb, 2); 546 547 if (kva->nb_segs == 1) { 548 memcpy(skb_put(skb, len), data_kva, len); 549 } else { 550 int nb_segs; 551 int kva_nb_segs = kva->nb_segs; 552 553 for (nb_segs = 0; nb_segs < kva_nb_segs; nb_segs++) { 554 memcpy(skb_put(skb, kva->data_len), 555 data_kva, kva->data_len); 556 557 if (!kva->next) 558 break; 559 560 prev_kva = kva; 561 kva = pa2kva(kva->next); 562 data_kva = kva2data_kva(kva); 563 /* Convert physical address to virtual address */ 564 prev_kva->next = pa2va(prev_kva->next, kva); 565 } 566 } 567 568 skb->dev = dev; 569 skb->ip_summed = CHECKSUM_UNNECESSARY; 570 571 kni->stats.rx_bytes += len; 572 kni->stats.rx_packets++; 573 574 /* call tx interface */ 575 kni_net_tx(skb, dev); 576 } 577 578 /* enqueue all the mbufs from rx_q into free_q */ 579 ret = kni_fifo_put(kni->free_q, kni->va, num); 580 if (ret != num) 581 /* Failing should not happen */ 582 pr_err("Fail to enqueue mbufs into free_q\n"); 583 } 584 585 /* rx interface */ 586 void 587 kni_net_rx(struct kni_dev *kni) 588 { 589 /** 590 * It doesn't need to check if it is NULL pointer, 591 * as it has a default value 592 */ 593 (*kni_net_rx_func)(kni); 594 } 595 596 /* 597 * Deal with a transmit timeout. 598 */ 599 static void 600 kni_net_tx_timeout(struct net_device *dev) 601 { 602 struct kni_dev *kni = netdev_priv(dev); 603 604 pr_debug("Transmit timeout at %ld, latency %ld\n", jiffies, 605 jiffies - dev_trans_start(dev)); 606 607 kni->stats.tx_errors++; 608 netif_wake_queue(dev); 609 } 610 611 /* 612 * Ioctl commands 613 */ 614 static int 615 kni_net_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) 616 { 617 pr_debug("kni_net_ioctl group:%d cmd:%d\n", 618 ((struct kni_dev *)netdev_priv(dev))->group_id, cmd); 619 620 return -EOPNOTSUPP; 621 } 622 623 static void 624 kni_net_set_rx_mode(struct net_device *dev) 625 { 626 } 627 628 static int 629 kni_net_change_mtu(struct net_device *dev, int new_mtu) 630 { 631 int ret; 632 struct rte_kni_request req; 633 struct kni_dev *kni = netdev_priv(dev); 634 635 pr_debug("kni_net_change_mtu new mtu %d to be set\n", new_mtu); 636 637 memset(&req, 0, sizeof(req)); 638 req.req_id = RTE_KNI_REQ_CHANGE_MTU; 639 req.new_mtu = new_mtu; 640 ret = kni_net_process_request(kni, &req); 641 if (ret == 0 && req.result == 0) 642 dev->mtu = new_mtu; 643 644 return (ret == 0) ? req.result : ret; 645 } 646 647 static void 648 kni_net_set_promiscusity(struct net_device *netdev, int flags) 649 { 650 struct rte_kni_request req; 651 struct kni_dev *kni = netdev_priv(netdev); 652 653 memset(&req, 0, sizeof(req)); 654 req.req_id = RTE_KNI_REQ_CHANGE_PROMISC; 655 656 if (netdev->flags & IFF_PROMISC) 657 req.promiscusity = 1; 658 else 659 req.promiscusity = 0; 660 kni_net_process_request(kni, &req); 661 } 662 663 /* 664 * Checks if the user space application provided the resp message 665 */ 666 void 667 kni_net_poll_resp(struct kni_dev *kni) 668 { 669 if (kni_fifo_count(kni->resp_q)) 670 wake_up_interruptible(&kni->wq); 671 } 672 673 /* 674 * Return statistics to the caller 675 */ 676 static struct net_device_stats * 677 kni_net_stats(struct net_device *dev) 678 { 679 struct kni_dev *kni = netdev_priv(dev); 680 681 return &kni->stats; 682 } 683 684 /* 685 * Fill the eth header 686 */ 687 static int 688 kni_net_header(struct sk_buff *skb, struct net_device *dev, 689 unsigned short type, const void *daddr, 690 const void *saddr, uint32_t len) 691 { 692 struct ethhdr *eth = (struct ethhdr *) skb_push(skb, ETH_HLEN); 693 694 memcpy(eth->h_source, saddr ? saddr : dev->dev_addr, dev->addr_len); 695 memcpy(eth->h_dest, daddr ? daddr : dev->dev_addr, dev->addr_len); 696 eth->h_proto = htons(type); 697 698 return dev->hard_header_len; 699 } 700 701 /* 702 * Re-fill the eth header 703 */ 704 #ifdef HAVE_REBUILD_HEADER 705 static int 706 kni_net_rebuild_header(struct sk_buff *skb) 707 { 708 struct net_device *dev = skb->dev; 709 struct ethhdr *eth = (struct ethhdr *) skb->data; 710 711 memcpy(eth->h_source, dev->dev_addr, dev->addr_len); 712 memcpy(eth->h_dest, dev->dev_addr, dev->addr_len); 713 714 return 0; 715 } 716 #endif /* < 4.1.0 */ 717 718 /** 719 * kni_net_set_mac - Change the Ethernet Address of the KNI NIC 720 * @netdev: network interface device structure 721 * @p: pointer to an address structure 722 * 723 * Returns 0 on success, negative on failure 724 **/ 725 static int 726 kni_net_set_mac(struct net_device *netdev, void *p) 727 { 728 int ret; 729 struct rte_kni_request req; 730 struct kni_dev *kni; 731 struct sockaddr *addr = p; 732 733 memset(&req, 0, sizeof(req)); 734 req.req_id = RTE_KNI_REQ_CHANGE_MAC_ADDR; 735 736 if (!is_valid_ether_addr((unsigned char *)(addr->sa_data))) 737 return -EADDRNOTAVAIL; 738 739 memcpy(req.mac_addr, addr->sa_data, netdev->addr_len); 740 memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len); 741 742 kni = netdev_priv(netdev); 743 ret = kni_net_process_request(kni, &req); 744 745 return (ret == 0 ? req.result : ret); 746 } 747 748 #ifdef HAVE_CHANGE_CARRIER_CB 749 static int 750 kni_net_change_carrier(struct net_device *dev, bool new_carrier) 751 { 752 if (new_carrier) 753 netif_carrier_on(dev); 754 else 755 netif_carrier_off(dev); 756 return 0; 757 } 758 #endif 759 760 static const struct header_ops kni_net_header_ops = { 761 .create = kni_net_header, 762 #ifdef HAVE_REBUILD_HEADER 763 .rebuild = kni_net_rebuild_header, 764 #endif /* < 4.1.0 */ 765 .cache = NULL, /* disable caching */ 766 }; 767 768 static const struct net_device_ops kni_net_netdev_ops = { 769 .ndo_open = kni_net_open, 770 .ndo_stop = kni_net_release, 771 .ndo_set_config = kni_net_config, 772 .ndo_change_rx_flags = kni_net_set_promiscusity, 773 .ndo_start_xmit = kni_net_tx, 774 .ndo_change_mtu = kni_net_change_mtu, 775 .ndo_do_ioctl = kni_net_ioctl, 776 .ndo_set_rx_mode = kni_net_set_rx_mode, 777 .ndo_get_stats = kni_net_stats, 778 .ndo_tx_timeout = kni_net_tx_timeout, 779 .ndo_set_mac_address = kni_net_set_mac, 780 #ifdef HAVE_CHANGE_CARRIER_CB 781 .ndo_change_carrier = kni_net_change_carrier, 782 #endif 783 }; 784 785 void 786 kni_net_init(struct net_device *dev) 787 { 788 struct kni_dev *kni = netdev_priv(dev); 789 790 init_waitqueue_head(&kni->wq); 791 mutex_init(&kni->sync_lock); 792 793 ether_setup(dev); /* assign some of the fields */ 794 dev->netdev_ops = &kni_net_netdev_ops; 795 dev->header_ops = &kni_net_header_ops; 796 dev->watchdog_timeo = WD_TIMEOUT; 797 } 798 799 void 800 kni_net_config_lo_mode(char *lo_str) 801 { 802 if (!lo_str) { 803 pr_debug("loopback disabled"); 804 return; 805 } 806 807 if (!strcmp(lo_str, "lo_mode_none")) 808 pr_debug("loopback disabled"); 809 else if (!strcmp(lo_str, "lo_mode_fifo")) { 810 pr_debug("loopback mode=lo_mode_fifo enabled"); 811 kni_net_rx_func = kni_net_rx_lo_fifo; 812 } else if (!strcmp(lo_str, "lo_mode_fifo_skb")) { 813 pr_debug("loopback mode=lo_mode_fifo_skb enabled"); 814 kni_net_rx_func = kni_net_rx_lo_fifo_skb; 815 } else { 816 pr_debug("Unknown loopback parameter, disabled"); 817 } 818 } 819