if_var.h (257271) | if_var.h (257351) |
---|---|
1/*- 2 * Copyright (c) 1982, 1986, 1989, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 13 unchanged lines hidden (view full) --- 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 * 29 * From: @(#)if.h 8.1 (Berkeley) 6/10/93 | 1/*- 2 * Copyright (c) 1982, 1986, 1989, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 13 unchanged lines hidden (view full) --- 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 * 29 * From: @(#)if.h 8.1 (Berkeley) 6/10/93 |
30 * $FreeBSD: head/sys/net/if_var.h 257271 2013-10-28 20:32:05Z glebius $ | 30 * $FreeBSD: head/sys/net/if_var.h 257351 2013-10-29 17:48:08Z andre $ |
31 */ 32 33#ifndef _NET_IF_VAR_H_ 34#define _NET_IF_VAR_H_ 35 36/* 37 * Structures defining a network interface, providing a packet 38 * transport mechanism (ala level 0 of the PUP protocols). --- 50 unchanged lines hidden (view full) --- 89TAILQ_HEAD(ifgrouphead, ifg_group); 90 91#ifdef _KERNEL 92VNET_DECLARE(struct pfil_head, link_pfil_hook); /* packet filter hooks */ 93#define V_link_pfil_hook VNET(link_pfil_hook) 94#endif /* _KERNEL */ 95 96/* | 31 */ 32 33#ifndef _NET_IF_VAR_H_ 34#define _NET_IF_VAR_H_ 35 36/* 37 * Structures defining a network interface, providing a packet 38 * transport mechanism (ala level 0 of the PUP protocols). --- 50 unchanged lines hidden (view full) --- 89TAILQ_HEAD(ifgrouphead, ifg_group); 90 91#ifdef _KERNEL 92VNET_DECLARE(struct pfil_head, link_pfil_hook); /* packet filter hooks */ 93#define V_link_pfil_hook VNET(link_pfil_hook) 94#endif /* _KERNEL */ 95 96/* |
97 * Structure defining a queue for a network interface. 98 */ 99struct ifqueue { 100 struct mbuf *ifq_head; 101 struct mbuf *ifq_tail; 102 int ifq_len; 103 int ifq_maxlen; 104 int ifq_drops; 105 struct mtx ifq_mtx; 106}; 107 108/* | |
109 * Structure defining a network interface. 110 * 111 * (Would like to call this struct ``if'', but C isn't PL/1.) 112 */ 113 114struct ifnet { 115 void *if_softc; /* pointer to driver state */ 116 void *if_l2com; /* pointer to protocol bits */ --- 86 unchanged lines hidden (view full) --- 203 * structures without changing the kernel binary interface, and must 204 * be used with care where binary compatibility is required. 205 */ 206 char if_cspare[3]; 207 int if_ispare[4]; 208 void *if_pspare[8]; /* 1 netmap, 7 TDB */ 209}; 210 | 97 * Structure defining a network interface. 98 * 99 * (Would like to call this struct ``if'', but C isn't PL/1.) 100 */ 101 102struct ifnet { 103 void *if_softc; /* pointer to driver state */ 104 void *if_l2com; /* pointer to protocol bits */ --- 86 unchanged lines hidden (view full) --- 191 * structures without changing the kernel binary interface, and must 192 * be used with care where binary compatibility is required. 193 */ 194 char if_cspare[3]; 195 int if_ispare[4]; 196 void *if_pspare[8]; /* 1 netmap, 7 TDB */ 197}; 198 |
199#include <net/ifq.h> /* XXXAO: temporary unconditional include */ 200 |
|
211/* 212 * XXX These aliases are terribly dangerous because they could apply 213 * to anything. 214 */ 215#define if_mtu if_data.ifi_mtu 216#define if_type if_data.ifi_type 217#define if_physical if_data.ifi_physical 218#define if_addrlen if_data.ifi_addrlen --- 38 unchanged lines hidden (view full) --- 257 * kernel modules in order to divorce them from the internals of address list 258 * locking. 259 */ 260void if_addr_rlock(struct ifnet *ifp); /* if_addrhead */ 261void if_addr_runlock(struct ifnet *ifp); /* if_addrhead */ 262void if_maddr_rlock(struct ifnet *ifp); /* if_multiaddrs */ 263void if_maddr_runlock(struct ifnet *ifp); /* if_multiaddrs */ 264 | 201/* 202 * XXX These aliases are terribly dangerous because they could apply 203 * to anything. 204 */ 205#define if_mtu if_data.ifi_mtu 206#define if_type if_data.ifi_type 207#define if_physical if_data.ifi_physical 208#define if_addrlen if_data.ifi_addrlen --- 38 unchanged lines hidden (view full) --- 247 * kernel modules in order to divorce them from the internals of address list 248 * locking. 249 */ 250void if_addr_rlock(struct ifnet *ifp); /* if_addrhead */ 251void if_addr_runlock(struct ifnet *ifp); /* if_addrhead */ 252void if_maddr_rlock(struct ifnet *ifp); /* if_multiaddrs */ 253void if_maddr_runlock(struct ifnet *ifp); /* if_multiaddrs */ 254 |
265/* 266 * Output queues (ifp->if_snd) and slow device input queues (*ifp->if_slowq) 267 * are queues of messages stored on ifqueue structures 268 * (defined above). Entries are added to and deleted from these structures 269 * by these macros. 270 */ 271#define IF_LOCK(ifq) mtx_lock(&(ifq)->ifq_mtx) 272#define IF_UNLOCK(ifq) mtx_unlock(&(ifq)->ifq_mtx) 273#define IF_LOCK_ASSERT(ifq) mtx_assert(&(ifq)->ifq_mtx, MA_OWNED) 274#define _IF_QFULL(ifq) ((ifq)->ifq_len >= (ifq)->ifq_maxlen) 275#define _IF_DROP(ifq) ((ifq)->ifq_drops++) 276#define _IF_QLEN(ifq) ((ifq)->ifq_len) 277 278#define _IF_ENQUEUE(ifq, m) do { \ 279 (m)->m_nextpkt = NULL; \ 280 if ((ifq)->ifq_tail == NULL) \ 281 (ifq)->ifq_head = m; \ 282 else \ 283 (ifq)->ifq_tail->m_nextpkt = m; \ 284 (ifq)->ifq_tail = m; \ 285 (ifq)->ifq_len++; \ 286} while (0) 287 288#define IF_ENQUEUE(ifq, m) do { \ 289 IF_LOCK(ifq); \ 290 _IF_ENQUEUE(ifq, m); \ 291 IF_UNLOCK(ifq); \ 292} while (0) 293 294#define _IF_PREPEND(ifq, m) do { \ 295 (m)->m_nextpkt = (ifq)->ifq_head; \ 296 if ((ifq)->ifq_tail == NULL) \ 297 (ifq)->ifq_tail = (m); \ 298 (ifq)->ifq_head = (m); \ 299 (ifq)->ifq_len++; \ 300} while (0) 301 302#define IF_PREPEND(ifq, m) do { \ 303 IF_LOCK(ifq); \ 304 _IF_PREPEND(ifq, m); \ 305 IF_UNLOCK(ifq); \ 306} while (0) 307 308#define _IF_DEQUEUE(ifq, m) do { \ 309 (m) = (ifq)->ifq_head; \ 310 if (m) { \ 311 if (((ifq)->ifq_head = (m)->m_nextpkt) == NULL) \ 312 (ifq)->ifq_tail = NULL; \ 313 (m)->m_nextpkt = NULL; \ 314 (ifq)->ifq_len--; \ 315 } \ 316} while (0) 317 318#define IF_DEQUEUE(ifq, m) do { \ 319 IF_LOCK(ifq); \ 320 _IF_DEQUEUE(ifq, m); \ 321 IF_UNLOCK(ifq); \ 322} while (0) 323 324#define _IF_DEQUEUE_ALL(ifq, m) do { \ 325 (m) = (ifq)->ifq_head; \ 326 (ifq)->ifq_head = (ifq)->ifq_tail = NULL; \ 327 (ifq)->ifq_len = 0; \ 328} while (0) 329 330#define IF_DEQUEUE_ALL(ifq, m) do { \ 331 IF_LOCK(ifq); \ 332 _IF_DEQUEUE_ALL(ifq, m); \ 333 IF_UNLOCK(ifq); \ 334} while (0) 335 336#define _IF_POLL(ifq, m) ((m) = (ifq)->ifq_head) 337#define IF_POLL(ifq, m) _IF_POLL(ifq, m) 338 339#define _IF_DRAIN(ifq) do { \ 340 struct mbuf *m; \ 341 for (;;) { \ 342 _IF_DEQUEUE(ifq, m); \ 343 if (m == NULL) \ 344 break; \ 345 m_freem(m); \ 346 } \ 347} while (0) 348 349#define IF_DRAIN(ifq) do { \ 350 IF_LOCK(ifq); \ 351 _IF_DRAIN(ifq); \ 352 IF_UNLOCK(ifq); \ 353} while(0) 354 | |
355#ifdef _KERNEL 356#ifdef _SYS_EVENTHANDLER_H_ 357/* interface link layer address change event */ 358typedef void (*iflladdr_event_handler_t)(void *, struct ifnet *); 359EVENTHANDLER_DECLARE(iflladdr_event, iflladdr_event_handler_t); 360/* interface address change event */ 361typedef void (*ifaddr_event_handler_t)(void *, struct ifnet *); 362EVENTHANDLER_DECLARE(ifaddr_event, ifaddr_event_handler_t); --- 53 unchanged lines hidden (view full) --- 416#define IF_AFDATA_TRYLOCK(ifp) rw_try_wlock(&(ifp)->if_afdata_lock) 417#define IF_AFDATA_DESTROY(ifp) rw_destroy(&(ifp)->if_afdata_lock) 418 419#define IF_AFDATA_LOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_LOCKED) 420#define IF_AFDATA_RLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_RLOCKED) 421#define IF_AFDATA_WLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_WLOCKED) 422#define IF_AFDATA_UNLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_UNLOCKED) 423 | 255#ifdef _KERNEL 256#ifdef _SYS_EVENTHANDLER_H_ 257/* interface link layer address change event */ 258typedef void (*iflladdr_event_handler_t)(void *, struct ifnet *); 259EVENTHANDLER_DECLARE(iflladdr_event, iflladdr_event_handler_t); 260/* interface address change event */ 261typedef void (*ifaddr_event_handler_t)(void *, struct ifnet *); 262EVENTHANDLER_DECLARE(ifaddr_event, ifaddr_event_handler_t); --- 53 unchanged lines hidden (view full) --- 316#define IF_AFDATA_TRYLOCK(ifp) rw_try_wlock(&(ifp)->if_afdata_lock) 317#define IF_AFDATA_DESTROY(ifp) rw_destroy(&(ifp)->if_afdata_lock) 318 319#define IF_AFDATA_LOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_LOCKED) 320#define IF_AFDATA_RLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_RLOCKED) 321#define IF_AFDATA_WLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_WLOCKED) 322#define IF_AFDATA_UNLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_UNLOCKED) 323 |
424int if_handoff(struct ifqueue *ifq, struct mbuf *m, struct ifnet *ifp, 425 int adjust); 426#define IF_HANDOFF(ifq, m, ifp) \ 427 if_handoff((struct ifqueue *)ifq, m, ifp, 0) 428#define IF_HANDOFF_ADJ(ifq, m, ifp, adj) \ 429 if_handoff((struct ifqueue *)ifq, m, ifp, adj) 430 431void if_start(struct ifnet *); 432 433#define IFQ_ENQUEUE(ifq, m, err) \ 434do { \ 435 IF_LOCK(ifq); \ 436 if (ALTQ_IS_ENABLED(ifq)) \ 437 ALTQ_ENQUEUE(ifq, m, NULL, err); \ 438 else { \ 439 if (_IF_QFULL(ifq)) { \ 440 m_freem(m); \ 441 (err) = ENOBUFS; \ 442 } else { \ 443 _IF_ENQUEUE(ifq, m); \ 444 (err) = 0; \ 445 } \ 446 } \ 447 if (err) \ 448 (ifq)->ifq_drops++; \ 449 IF_UNLOCK(ifq); \ 450} while (0) 451 452#define IFQ_DEQUEUE_NOLOCK(ifq, m) \ 453do { \ 454 if (TBR_IS_ENABLED(ifq)) \ 455 (m) = tbr_dequeue_ptr(ifq, ALTDQ_REMOVE); \ 456 else if (ALTQ_IS_ENABLED(ifq)) \ 457 ALTQ_DEQUEUE(ifq, m); \ 458 else \ 459 _IF_DEQUEUE(ifq, m); \ 460} while (0) 461 462#define IFQ_DEQUEUE(ifq, m) \ 463do { \ 464 IF_LOCK(ifq); \ 465 IFQ_DEQUEUE_NOLOCK(ifq, m); \ 466 IF_UNLOCK(ifq); \ 467} while (0) 468 469#define IFQ_POLL_NOLOCK(ifq, m) \ 470do { \ 471 if (TBR_IS_ENABLED(ifq)) \ 472 (m) = tbr_dequeue_ptr(ifq, ALTDQ_POLL); \ 473 else if (ALTQ_IS_ENABLED(ifq)) \ 474 ALTQ_POLL(ifq, m); \ 475 else \ 476 _IF_POLL(ifq, m); \ 477} while (0) 478 479#define IFQ_POLL(ifq, m) \ 480do { \ 481 IF_LOCK(ifq); \ 482 IFQ_POLL_NOLOCK(ifq, m); \ 483 IF_UNLOCK(ifq); \ 484} while (0) 485 486#define IFQ_PURGE_NOLOCK(ifq) \ 487do { \ 488 if (ALTQ_IS_ENABLED(ifq)) { \ 489 ALTQ_PURGE(ifq); \ 490 } else \ 491 _IF_DRAIN(ifq); \ 492} while (0) 493 494#define IFQ_PURGE(ifq) \ 495do { \ 496 IF_LOCK(ifq); \ 497 IFQ_PURGE_NOLOCK(ifq); \ 498 IF_UNLOCK(ifq); \ 499} while (0) 500 501#define IFQ_SET_READY(ifq) \ 502 do { ((ifq)->altq_flags |= ALTQF_READY); } while (0) 503 504#define IFQ_LOCK(ifq) IF_LOCK(ifq) 505#define IFQ_UNLOCK(ifq) IF_UNLOCK(ifq) 506#define IFQ_LOCK_ASSERT(ifq) IF_LOCK_ASSERT(ifq) 507#define IFQ_IS_EMPTY(ifq) ((ifq)->ifq_len == 0) 508#define IFQ_INC_LEN(ifq) ((ifq)->ifq_len++) 509#define IFQ_DEC_LEN(ifq) (--(ifq)->ifq_len) 510#define IFQ_INC_DROPS(ifq) ((ifq)->ifq_drops++) 511#define IFQ_SET_MAXLEN(ifq, len) ((ifq)->ifq_maxlen = (len)) 512 513/* 514 * The IFF_DRV_OACTIVE test should really occur in the device driver, not in 515 * the handoff logic, as that flag is locked by the device driver. 516 */ 517#define IFQ_HANDOFF_ADJ(ifp, m, adj, err) \ 518do { \ 519 int len; \ 520 short mflags; \ 521 \ 522 len = (m)->m_pkthdr.len; \ 523 mflags = (m)->m_flags; \ 524 IFQ_ENQUEUE(&(ifp)->if_snd, m, err); \ 525 if ((err) == 0) { \ 526 (ifp)->if_obytes += len + (adj); \ 527 if (mflags & M_MCAST) \ 528 (ifp)->if_omcasts++; \ 529 if (((ifp)->if_drv_flags & IFF_DRV_OACTIVE) == 0) \ 530 if_start(ifp); \ 531 } \ 532} while (0) 533 534#define IFQ_HANDOFF(ifp, m, err) \ 535 IFQ_HANDOFF_ADJ(ifp, m, 0, err) 536 537#define IFQ_DRV_DEQUEUE(ifq, m) \ 538do { \ 539 (m) = (ifq)->ifq_drv_head; \ 540 if (m) { \ 541 if (((ifq)->ifq_drv_head = (m)->m_nextpkt) == NULL) \ 542 (ifq)->ifq_drv_tail = NULL; \ 543 (m)->m_nextpkt = NULL; \ 544 (ifq)->ifq_drv_len--; \ 545 } else { \ 546 IFQ_LOCK(ifq); \ 547 IFQ_DEQUEUE_NOLOCK(ifq, m); \ 548 while ((ifq)->ifq_drv_len < (ifq)->ifq_drv_maxlen) { \ 549 struct mbuf *m0; \ 550 IFQ_DEQUEUE_NOLOCK(ifq, m0); \ 551 if (m0 == NULL) \ 552 break; \ 553 m0->m_nextpkt = NULL; \ 554 if ((ifq)->ifq_drv_tail == NULL) \ 555 (ifq)->ifq_drv_head = m0; \ 556 else \ 557 (ifq)->ifq_drv_tail->m_nextpkt = m0; \ 558 (ifq)->ifq_drv_tail = m0; \ 559 (ifq)->ifq_drv_len++; \ 560 } \ 561 IFQ_UNLOCK(ifq); \ 562 } \ 563} while (0) 564 565#define IFQ_DRV_PREPEND(ifq, m) \ 566do { \ 567 (m)->m_nextpkt = (ifq)->ifq_drv_head; \ 568 if ((ifq)->ifq_drv_tail == NULL) \ 569 (ifq)->ifq_drv_tail = (m); \ 570 (ifq)->ifq_drv_head = (m); \ 571 (ifq)->ifq_drv_len++; \ 572} while (0) 573 574#define IFQ_DRV_IS_EMPTY(ifq) \ 575 (((ifq)->ifq_drv_len == 0) && ((ifq)->ifq_len == 0)) 576 577#define IFQ_DRV_PURGE(ifq) \ 578do { \ 579 struct mbuf *m, *n = (ifq)->ifq_drv_head; \ 580 while((m = n) != NULL) { \ 581 n = m->m_nextpkt; \ 582 m_freem(m); \ 583 } \ 584 (ifq)->ifq_drv_head = (ifq)->ifq_drv_tail = NULL; \ 585 (ifq)->ifq_drv_len = 0; \ 586 IFQ_PURGE(ifq); \ 587} while (0) 588 589#ifdef _KERNEL | |
590static __inline void 591if_initbaudrate(struct ifnet *ifp, uintmax_t baud) 592{ 593 594 ifp->if_baudrate_pf = 0; 595 while (baud > (u_long)(~0UL)) { 596 baud /= 10; 597 ifp->if_baudrate_pf++; 598 } 599 ifp->if_baudrate = baud; 600} 601 | 324static __inline void 325if_initbaudrate(struct ifnet *ifp, uintmax_t baud) 326{ 327 328 ifp->if_baudrate_pf = 0; 329 while (baud > (u_long)(~0UL)) { 330 baud /= 10; 331 ifp->if_baudrate_pf++; 332 } 333 ifp->if_baudrate = baud; 334} 335 |
602static __inline int 603drbr_enqueue(struct ifnet *ifp, struct buf_ring *br, struct mbuf *m) 604{ 605 int error = 0; 606 607#ifdef ALTQ 608 if (ALTQ_IS_ENABLED(&ifp->if_snd)) { 609 IFQ_ENQUEUE(&ifp->if_snd, m, error); 610 return (error); 611 } 612#endif 613 error = buf_ring_enqueue(br, m); 614 if (error) 615 m_freem(m); 616 617 return (error); 618} 619 620static __inline void 621drbr_putback(struct ifnet *ifp, struct buf_ring *br, struct mbuf *new) 622{ 623 /* 624 * The top of the list needs to be swapped 625 * for this one. 626 */ 627#ifdef ALTQ 628 if (ifp != NULL && ALTQ_IS_ENABLED(&ifp->if_snd)) { 629 /* 630 * Peek in altq case dequeued it 631 * so put it back. 632 */ 633 IFQ_DRV_PREPEND(&ifp->if_snd, new); 634 return; 635 } 636#endif 637 buf_ring_putback_sc(br, new); 638} 639 640static __inline struct mbuf * 641drbr_peek(struct ifnet *ifp, struct buf_ring *br) 642{ 643#ifdef ALTQ 644 struct mbuf *m; 645 if (ifp != NULL && ALTQ_IS_ENABLED(&ifp->if_snd)) { 646 /* 647 * Pull it off like a dequeue 648 * since drbr_advance() does nothing 649 * for altq and drbr_putback() will 650 * use the old prepend function. 651 */ 652 IFQ_DEQUEUE(&ifp->if_snd, m); 653 return (m); 654 } 655#endif 656 return(buf_ring_peek(br)); 657} 658 659static __inline void 660drbr_flush(struct ifnet *ifp, struct buf_ring *br) 661{ 662 struct mbuf *m; 663 664#ifdef ALTQ 665 if (ifp != NULL && ALTQ_IS_ENABLED(&ifp->if_snd)) 666 IFQ_PURGE(&ifp->if_snd); 667#endif 668 while ((m = buf_ring_dequeue_sc(br)) != NULL) 669 m_freem(m); 670} 671 672static __inline void 673drbr_free(struct buf_ring *br, struct malloc_type *type) 674{ 675 676 drbr_flush(NULL, br); 677 buf_ring_free(br, type); 678} 679 680static __inline struct mbuf * 681drbr_dequeue(struct ifnet *ifp, struct buf_ring *br) 682{ 683#ifdef ALTQ 684 struct mbuf *m; 685 686 if (ifp != NULL && ALTQ_IS_ENABLED(&ifp->if_snd)) { 687 IFQ_DEQUEUE(&ifp->if_snd, m); 688 return (m); 689 } 690#endif 691 return (buf_ring_dequeue_sc(br)); 692} 693 694static __inline void 695drbr_advance(struct ifnet *ifp, struct buf_ring *br) 696{ 697#ifdef ALTQ 698 /* Nothing to do here since peek dequeues in altq case */ 699 if (ifp != NULL && ALTQ_IS_ENABLED(&ifp->if_snd)) 700 return; 701#endif 702 return (buf_ring_advance_sc(br)); 703} 704 705 706static __inline struct mbuf * 707drbr_dequeue_cond(struct ifnet *ifp, struct buf_ring *br, 708 int (*func) (struct mbuf *, void *), void *arg) 709{ 710 struct mbuf *m; 711#ifdef ALTQ 712 if (ALTQ_IS_ENABLED(&ifp->if_snd)) { 713 IFQ_LOCK(&ifp->if_snd); 714 IFQ_POLL_NOLOCK(&ifp->if_snd, m); 715 if (m != NULL && func(m, arg) == 0) { 716 IFQ_UNLOCK(&ifp->if_snd); 717 return (NULL); 718 } 719 IFQ_DEQUEUE_NOLOCK(&ifp->if_snd, m); 720 IFQ_UNLOCK(&ifp->if_snd); 721 return (m); 722 } 723#endif 724 m = buf_ring_peek(br); 725 if (m == NULL || func(m, arg) == 0) 726 return (NULL); 727 728 return (buf_ring_dequeue_sc(br)); 729} 730 731static __inline int 732drbr_empty(struct ifnet *ifp, struct buf_ring *br) 733{ 734#ifdef ALTQ 735 if (ALTQ_IS_ENABLED(&ifp->if_snd)) 736 return (IFQ_IS_EMPTY(&ifp->if_snd)); 737#endif 738 return (buf_ring_empty(br)); 739} 740 741static __inline int 742drbr_needs_enqueue(struct ifnet *ifp, struct buf_ring *br) 743{ 744#ifdef ALTQ 745 if (ALTQ_IS_ENABLED(&ifp->if_snd)) 746 return (1); 747#endif 748 return (!buf_ring_empty(br)); 749} 750 751static __inline int 752drbr_inuse(struct ifnet *ifp, struct buf_ring *br) 753{ 754#ifdef ALTQ 755 if (ALTQ_IS_ENABLED(&ifp->if_snd)) 756 return (ifp->if_snd.ifq_len); 757#endif 758 return (buf_ring_count(br)); 759} 760#endif | |
761/* 762 * 72 was chosen below because it is the size of a TCP/IP 763 * header (40) + the minimum mss (32). 764 */ 765#define IF_MINMTU 72 766#define IF_MAXMTU 65535 767 768#define TOEDEV(ifp) ((ifp)->if_llsoftc) --- 119 unchanged lines hidden (view full) --- 888VNET_DECLARE(int, useloopback); 889 890#define V_ifnet VNET(ifnet) 891#define V_ifg_head VNET(ifg_head) 892#define V_if_index VNET(if_index) 893#define V_loif VNET(loif) 894#define V_useloopback VNET(useloopback) 895 | 336/* 337 * 72 was chosen below because it is the size of a TCP/IP 338 * header (40) + the minimum mss (32). 339 */ 340#define IF_MINMTU 72 341#define IF_MAXMTU 65535 342 343#define TOEDEV(ifp) ((ifp)->if_llsoftc) --- 119 unchanged lines hidden (view full) --- 463VNET_DECLARE(int, useloopback); 464 465#define V_ifnet VNET(ifnet) 466#define V_ifg_head VNET(ifg_head) 467#define V_if_index VNET(if_index) 468#define V_loif VNET(loif) 469#define V_useloopback VNET(useloopback) 470 |
896extern int ifqmaxlen; 897 | |
898int if_addgroup(struct ifnet *, const char *); 899int if_delgroup(struct ifnet *, const char *); 900int if_addmulti(struct ifnet *, struct sockaddr *, struct ifmultiaddr **); 901int if_allmulti(struct ifnet *, int); 902struct ifnet* if_alloc(u_char); 903void if_attach(struct ifnet *); 904void if_dead(struct ifnet *); 905int if_delmulti(struct ifnet *, struct sockaddr *); --- 4 unchanged lines hidden (view full) --- 910void if_delallmulti(struct ifnet *); 911void if_down(struct ifnet *); 912struct ifmultiaddr * 913 if_findmulti(struct ifnet *, struct sockaddr *); 914void if_free(struct ifnet *); 915void if_initname(struct ifnet *, const char *, int); 916void if_link_state_change(struct ifnet *, int); 917int if_printf(struct ifnet *, const char *, ...) __printflike(2, 3); | 471int if_addgroup(struct ifnet *, const char *); 472int if_delgroup(struct ifnet *, const char *); 473int if_addmulti(struct ifnet *, struct sockaddr *, struct ifmultiaddr **); 474int if_allmulti(struct ifnet *, int); 475struct ifnet* if_alloc(u_char); 476void if_attach(struct ifnet *); 477void if_dead(struct ifnet *); 478int if_delmulti(struct ifnet *, struct sockaddr *); --- 4 unchanged lines hidden (view full) --- 483void if_delallmulti(struct ifnet *); 484void if_down(struct ifnet *); 485struct ifmultiaddr * 486 if_findmulti(struct ifnet *, struct sockaddr *); 487void if_free(struct ifnet *); 488void if_initname(struct ifnet *, const char *, int); 489void if_link_state_change(struct ifnet *, int); 490int if_printf(struct ifnet *, const char *, ...) __printflike(2, 3); |
918void if_qflush(struct ifnet *); | |
919void if_ref(struct ifnet *); 920void if_rele(struct ifnet *); 921int if_setlladdr(struct ifnet *, const u_char *, int); 922void if_up(struct ifnet *); 923int ifioctl(struct socket *, u_long, caddr_t, struct thread *); 924int ifpromisc(struct ifnet *, int); 925struct ifnet *ifunit(const char *); 926struct ifnet *ifunit_ref(const char *); 927 | 491void if_ref(struct ifnet *); 492void if_rele(struct ifnet *); 493int if_setlladdr(struct ifnet *, const u_char *, int); 494void if_up(struct ifnet *); 495int ifioctl(struct socket *, u_long, caddr_t, struct thread *); 496int ifpromisc(struct ifnet *, int); 497struct ifnet *ifunit(const char *); 498struct ifnet *ifunit_ref(const char *); 499 |
928void ifq_init(struct ifaltq *, struct ifnet *ifp); 929void ifq_delete(struct ifaltq *); 930 | |
931int ifa_add_loopback_route(struct ifaddr *, struct sockaddr *); 932int ifa_del_loopback_route(struct ifaddr *, struct sockaddr *); 933 934struct ifaddr *ifa_ifwithaddr(struct sockaddr *); 935int ifa_ifwithaddr_check(struct sockaddr *); 936struct ifaddr *ifa_ifwithbroadaddr(struct sockaddr *); 937struct ifaddr *ifa_ifwithdstaddr(struct sockaddr *); 938struct ifaddr *ifa_ifwithnet(struct sockaddr *, int); --- 7 unchanged lines hidden (view full) --- 946typedef void *if_com_alloc_t(u_char type, struct ifnet *ifp); 947typedef void if_com_free_t(void *com, u_char type); 948void if_register_com_alloc(u_char type, if_com_alloc_t *a, if_com_free_t *f); 949void if_deregister_com_alloc(u_char type); 950 951#define IF_LLADDR(ifp) \ 952 LLADDR((struct sockaddr_dl *)((ifp)->if_addr->ifa_addr)) 953 | 500int ifa_add_loopback_route(struct ifaddr *, struct sockaddr *); 501int ifa_del_loopback_route(struct ifaddr *, struct sockaddr *); 502 503struct ifaddr *ifa_ifwithaddr(struct sockaddr *); 504int ifa_ifwithaddr_check(struct sockaddr *); 505struct ifaddr *ifa_ifwithbroadaddr(struct sockaddr *); 506struct ifaddr *ifa_ifwithdstaddr(struct sockaddr *); 507struct ifaddr *ifa_ifwithnet(struct sockaddr *, int); --- 7 unchanged lines hidden (view full) --- 515typedef void *if_com_alloc_t(u_char type, struct ifnet *ifp); 516typedef void if_com_free_t(void *com, u_char type); 517void if_register_com_alloc(u_char type, if_com_alloc_t *a, if_com_free_t *f); 518void if_deregister_com_alloc(u_char type); 519 520#define IF_LLADDR(ifp) \ 521 LLADDR((struct sockaddr_dl *)((ifp)->if_addr->ifa_addr)) 522 |
954#ifdef DEVICE_POLLING 955enum poll_cmd { POLL_ONLY, POLL_AND_CHECK_STATUS }; 956 957typedef int poll_handler_t(struct ifnet *ifp, enum poll_cmd cmd, int count); 958int ether_poll_register(poll_handler_t *h, struct ifnet *ifp); 959int ether_poll_deregister(struct ifnet *ifp); 960#endif /* DEVICE_POLLING */ 961 | |
962#endif /* _KERNEL */ 963 964#endif /* !_NET_IF_VAR_H_ */ | 523#endif /* _KERNEL */ 524 525#endif /* !_NET_IF_VAR_H_ */ |